2019-10-21  Tim Horton  <timothy_horton@apple.com>

        Clean up some includes to improve WebKit2 build speed
        https://bugs.webkit.org/show_bug.cgi?id=203071

        Reviewed by Wenson Hsieh.

        No new tests, just shuffling code around.

        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::WindowProxy):
        (WebCore::WindowProxy::~WindowProxy):
        (WebCore::WindowProxy::detachFromFrame):
        (WebCore::WindowProxy::destroyJSWindowProxy):
        (WebCore::WindowProxy::createJSWindowProxy):
        (WebCore::WindowProxy::jsWindowProxiesAsVector const):
        (WebCore::WindowProxy::clearJSWindowProxiesNotMatchingDOMWindow):
        (WebCore::WindowProxy::setDOMWindow):
        (WebCore::WindowProxy::attachDebugger):
        (WebCore::WindowProxy::jsWindowProxies const):
        (WebCore::WindowProxy::releaseJSWindowProxies):
        (WebCore::WindowProxy::setJSWindowProxies):
        * bindings/js/WindowProxy.h:
        (WebCore::WindowProxy::existingJSWindowProxy const):
        (WebCore::WindowProxy::jsWindowProxies const): Deleted.
        (WebCore::WindowProxy::releaseJSWindowProxies): Deleted.
        (WebCore::WindowProxy::setJSWindowProxies): Deleted.
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::~IOSurface):

2019-10-21  Joonghun Park  <jh718.park@samsung.com>

        [GTK] Unreviewed. Fix build warning: unused parameter ‘Foo’ [-Wunused-parameter] since r251320.

        * dom/Element.cpp:
        (WebCore::shouldIgnoreMouseEvent):

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

        Unreviewed, drop debug logging that was inadvertently committed with r251327.

        * history/BackForwardCache.cpp:

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

        [LFC][IFC] Make InlineTextItem reusable when 'segment break' behavior changes
        https://bugs.webkit.org/show_bug.cgi?id=203184
        <rdar://problem/56438945>

        Reviewed by Antti Koivisto.

        InlineTextItem::isWhitespace should dynamically check for 'preserve new line' behavior. This way we don't have to rebuild the inline item list
        when the related style property value changes.

        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::isWhitespaceCharacter):
        (WebCore::Layout::moveToNextNonWhitespacePosition):
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        (WebCore::Layout::InlineTextItem::createWhitespaceItem):
        (WebCore::Layout::InlineTextItem::createNonWhitespaceItem):
        (WebCore::Layout::InlineTextItem::createSegmentBreakItem):
        (WebCore::Layout::InlineTextItem::createEmptyItem):
        (WebCore::Layout::InlineTextItem::InlineTextItem):
        (WebCore::Layout::InlineTextItem::split const):
        (WebCore::Layout::InlineTextItem::isWhitespace const):
        (WebCore::Layout::isSoftLineBreak): Deleted.
        * layout/inlineformatting/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::isSegmentBreak const):
        (WebCore::Layout::InlineTextItem::isWhitespace const): Deleted.

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

        [LFC][IFC] Move the collapsed bit from InlineItems to runs
        https://bugs.webkit.org/show_bug.cgi?id=203183

        Reviewed by Antti Koivisto.
        <rdar://problem/56437181>

        Let's not store the collapsed bit on the InlineTextItem. All we need to know is whether the InlineTextItem content is collapsible or not.
        Also when only the white-space property changes (going from preserve whitespace to not and vice versa) we don't actually need to rebuild the
        InlinItem list since they don't carry any layout dependent information.
        This patch also fixes leading/trailing content preservation. 

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::canBeExtended const):
        (WebCore::Layout::shouldPreserveTrailingContent):
        (WebCore::Layout::shouldPreserveLeadingContent):
        (WebCore::Layout::Line::appendTextContent):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::isCollapsed const):
        (WebCore::Layout::Line::Run::setIsCollapsed):
        * layout/inlineformatting/InlineLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        (WebCore::Layout::InlineTextItem::InlineTextItem):
        (WebCore::Layout::InlineTextItem::split const):
        * layout/inlineformatting/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::isCollapsible const):
        (WebCore::Layout::InlineTextItem::isCollapsed const): Deleted.
        * layout/inlineformatting/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::isTrimmableContent): Deleted.
        * layout/inlineformatting/text/TextUtil.h:

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

        FileReader should not prevent entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=203106

        Reviewed by Geoffrey Garen.

        FileReader should not prevent entering the back/forward cache. To support this,
        its implementation now uses a SuspendableTaskQueue to dispatch events.

        Test: fast/files/file-reader-back-forward-cache.html

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::isAllowedToRunScript const):
        * dom/ActiveDOMObject.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::stop):
        (WebCore::FileReader::hasPendingActivity const):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::abort):
        (WebCore::FileReader::didStartLoading):
        (WebCore::FileReader::didReceiveData):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::didFail):
        (WebCore::FileReader::fireEvent):
        * fileapi/FileReader.h:

2019-10-19  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fix non-unified builds after r250857
        https://bugs.webkit.org/show_bug.cgi?id=203145

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * Modules/async-clipboard/ClipboardItem.cpp: Add missing inclusion of the Clipboard.h header.
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp: Add missing inclusion of the
        ClipboardItem.h header.
        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.cpp: Add missing inclusions of
        the Clipboard.h, ClipboardItem.h, and JSDOMPromiseDeferred.h headers.
        * dom/AbstractEventLoop.h: Add missing inclusion of the wtf/RefCounted.h header.
        * dom/WindowEventLoop.h: Add missing inclusion of the DocumentIdentifier.h header.
        * dom/IdleCallbackController.h: Add missing forward-declaration for the Document class.
        * dom/RadioButtonGroups.h: Add needed inclusion of of the wtf/text/AtomStringHash.h header,
        needed because AtomString is used as key for a HashMap; remove the (now unneeded) of the
        wtf/Forward.h header.
        * page/WheelEventTestMonitor.cpp: Add missing inclusion of the wtf/OptionSet.h header.
        * rendering/style/ShadowData.cpp: Add missing inclusion of the wtf/text/TextStream.h header.

2019-10-19  Ryosuke Niwa  <rniwa@webkit.org>

        Integrate media query evaluation into HTML5 event loop
        https://bugs.webkit.org/show_bug.cgi?id=203134
        <rdar://problem/56396316>

        Reviewed by Antti Koivisto.

        Moved the code to call media query listeners to HTML5 event loop's step to update the rendering:
        https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering

        Tests: fast/media/mq-inverted-colors-live-update-for-listener.html
               fast/media/mq-prefers-reduced-motion-live-update-for-listener.html

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::evaluateAll): Renamed from styleResolverChanged.
        * css/MediaQueryMatcher.h:
        * dom/Document.cpp:
        (WebCore::Document::updateElementsAffectedByMediaQueries): Split from evaluateMediaQueryList.
        This function is still called right after each layout update so that picture element may start
        requesting newly selected image resources without having to wait for a rendering update.
        But this function will no longer execute arbitrary scripts.
        (WebCore::Document::evaluateMediaQueriesAndReportChanges): Split from evaluateMediaQueryList.
        Evaluates media query listeners.
        * dom/Document.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia): Force the evaluation of media queries for now
        but this code should really be scheduling a rendering update instead so added a FIXME.
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Evaluate media queries. We should consider invoking the full
        algorithm to update the rendering here. e.g. intersection observer may add more contents.
        * page/Page.cpp:
        (WebCore::Page::updateRendering): Call evaluateMediaQueriesAndReportChanges.

2019-10-18  Tim Horton  <timothy_horton@apple.com>

        macCatalyst: Cursor should send mouse events, not touch events
        https://bugs.webkit.org/show_bug.cgi?id=203175
        <rdar://problem/56321134>

        Reviewed by Simon Fraser.

        * dom/Element.cpp:
        (WebCore::shouldIgnoreMouseEvent):
        (WebCore::Element::dispatchMouseEvent):
        * page/PointerCaptureController.cpp:
        (WebCore::PointerCaptureController::reset):
        Share more code between platforms that support touch events and platforms that don't;
        we want to be able to dispatch pointer events that originate from mouse events
        in macCatalyst despite touch events being enabled (by virtue of being iOS WebKit),
        so un-ifdef that code.

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

        Make it possible to query scrollbar pseudo-style without having a scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=203174

        Reviewed by Tim Horton.

        A future patch needs the ability to query scrollbar pseudo-style without having
        a scrollbar, and it was ugly to pass a live RenderScrollbar into CSS style resolution
        functions. Instead, pass in a pure-data object that has information about the scrollbar.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/SelectorChecker.h:
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::scrollbarMatchesEnabledPseudoClass):
        (WebCore::scrollbarMatchesDisabledPseudoClass):
        (WebCore::scrollbarMatchesHoverPseudoClass):
        (WebCore::scrollbarMatchesActivePseudoClass):
        (WebCore::scrollbarMatchesHorizontalPseudoClass):
        (WebCore::scrollbarMatchesVerticalPseudoClass):
        (WebCore::scrollbarMatchesDecrementPseudoClass):
        (WebCore::scrollbarMatchesIncrementPseudoClass):
        (WebCore::scrollbarMatchesStartPseudoClass):
        (WebCore::scrollbarMatchesEndPseudoClass):
        (WebCore::scrollbarMatchesDoubleButtonPseudoClass):
        (WebCore::scrollbarMatchesSingleButtonPseudoClass):
        (WebCore::scrollbarMatchesNoButtonPseudoClass):
        (WebCore::scrollbarMatchesCornerPresentPseudoClass):
        * css/StyleResolver.h:
        (WebCore::PseudoStyleRequest::PseudoStyleRequest):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):

2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [SVG2]: Remove the SVGExternalResourcesRequired interface
        https://bugs.webkit.org/show_bug.cgi?id=191293

        Reviewed by Simon Fraser.

        The spec page is: https://www.w3.org/TR/SVG/changes.html.

        r251290 made externalResourcesRequired have no effect on firing the load
        event. All the control was moved to SVGURIReference. This patch will remove
        this interface entirely to conform with SVG2 specs and other browsers.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        (WebCore::SVGAElement::parseAttribute):
        (WebCore::SVGAElement::svgAttributeChanged):
        * svg/SVGAElement.h:
        * svg/SVGAElement.idl:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::isSupportedAttribute):
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.idl:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::parseAttribute):
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGCircleElement.h:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::parseAttribute):
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        * svg/SVGClipPathElement.h:
        * svg/SVGClipPathElement.idl:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::parseAttribute):
        * svg/SVGCursorElement.h:
        * svg/SVGCursorElement.idl:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDefsElement.h:
        * svg/SVGDefsElement.idl:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::parseAttribute):
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGEllipseElement.h:
        * svg/SVGEllipseElement.idl:
        * svg/SVGExternalResourcesRequired.cpp: Removed.
        * svg/SVGExternalResourcesRequired.h: Removed.
        * svg/SVGExternalResourcesRequired.idl: Removed.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::parseAttribute):
        (WebCore::SVGFilterElement::svgAttributeChanged):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::parseAttribute):
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        (WebCore::SVGGElement::parseAttribute): Deleted.
        (WebCore::SVGGElement::svgAttributeChanged): Deleted.
        * svg/SVGGElement.h:
        * svg/SVGGElement.idl:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::parseAttribute):
        * svg/SVGGradientElement.h:
        * svg/SVGGradientElement.idl:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::parseAttribute):
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGImageElement.h:
        * svg/SVGImageElement.idl:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::parseAttribute):
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGLineElement.h:
        * svg/SVGLineElement.idl:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::parseAttribute):
        (WebCore::SVGMPathElement::svgAttributeChanged):
        * svg/SVGMPathElement.h:
        * svg/SVGMPathElement.idl:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::parseAttribute):
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        * svg/SVGMarkerElement.h:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::parseAttribute):
        (WebCore::SVGMaskElement::svgAttributeChanged):
        * svg/SVGMaskElement.h:
        * svg/SVGMaskElement.idl:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseAttribute):
        (WebCore::SVGPatternElement::svgAttributeChanged):
        * svg/SVGPatternElement.h:
        * svg/SVGPatternElement.idl:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::parseAttribute):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.idl:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::parseAttribute):
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGRectElement.h:
        * svg/SVGRectElement.idl:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::parseAttribute):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSwitchElement.h:
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        (WebCore::SVGSymbolElement::parseAttribute):
        (WebCore::SVGSymbolElement::svgAttributeChanged): Deleted.
        * svg/SVGSymbolElement.h:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::parseAttribute):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextContentElement.idl:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::parseAttribute):
        (WebCore::SVGUseElement::svgAttributeChanged):
        * svg/SVGUseElement.h:
        * svg/SVGUseElement.idl:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::parseAttribute):
        (WebCore::SVGViewElement::svgAttributeChanged):
        * svg/SVGViewElement.h:
        * svg/SVGViewElement.idl:

2019-10-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Refactor Pasteboard::read() to take an optional item index
        https://bugs.webkit.org/show_bug.cgi?id=203161

        Reviewed by Tim Horton.

        Adds an optional `itemIndex` argument to Pasteboard::read(PasteboardPlainText&) and
        Pasteboard::read(PasteboardWebContentReader&, WebContentReadingPolicy). See below for more details.

        Tests:  CopyHTML.ItemTypesWhenCopyingWebContent
                PasteWebArchive.WebArchiveTypeIdentifier

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::dataSelectionForPasteboard):

        Recognize "com.apple.webarchive" alongside "Apple Web Archive pasteboard type" when writing and reading from the
        platform pasteboard on macOS. We add support for this here because the existing private type cannot be written
        to an NSPasteboardItem, since it does not conform to a valid UTI format. Luckily, there already exists a UTI
        that represents a web archive, so we can use it instead.

        We need to write and read web archive data from NSPasteboardItem in order to support the case where there are
        multiple items in the pasteboard that contain different web archive data.

        * platform/Pasteboard.h:
        * platform/StaticPasteboard.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::read):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):

        Read the string from `itemIndex` if specified; otherwise, fall back to index 0. This could actually be fixed in
        the future to scan all pasteboard items for a suitable string instead of falling back on the first item, but for
        now, we maintain the existing behavior.

        (WebCore::Pasteboard::readRespectingUTIFidelities):

        If an `itemIndex` is specified, ignore all other item indices when looking for suitable content.

        * platform/libwpe/PasteboardLibWPE.cpp:
        (WebCore::Pasteboard::read):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsCompatibleContent const):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):
        (WebCore::readStringAtPreferredItemIndex):
        (WebCore::readBufferAtPreferredItemIndex):

        Add helper methods to read strings and buffers from the pasteboard, at an optional `itemIndex` if specified.

        (WebCore::Pasteboard::read):

        Adopt the helper functions when reading plain text and web content, and respect the given `itemIndex`. To do
        this, we need to read both legacy and modern types from the pasteboard, instead of just legacy types. This is
        because NSPasteboardItem on macOS only accepts and provides data in the form of modern pasteboard types.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::readString const):

        Fix these methods to accept platform pasteboard types instead of MIME types, to match the behavior of existing
        readBuffer and readString methods in PlatformPasteboardIOS.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::read):

2019-10-18  Devin Rousso  <drousso@apple.com>

        [ASAN] Fix WebGPU tests after r250258
        https://bugs.webkit.org/show_bug.cgi?id=203133
        <rdar://problem/56379008>

        Reviewed by Joseph Pecoraro.

        * platform/graphics/gpu/GPUObjectBase.h:
        (WebCore::GPUObjectBase::~GPUObjectBase): Added.
        Add a default virtual destructor since this class class is the one that is `RefCounted` and
        the `WebGPUPipeline` subclass is virtual.

        * Modules/webgpu/WebGPUPipeline.h:
        (WebCore::WebGPUPipeline::scriptExecutionContext const): Deleted.
        * Modules/webgpu/WebGPUPipeline.cpp:
        (WebCore::WebGPUPipeline::WebGPUPipeline):
        (WebCore::WebGPUPipeline::contextDestroyed): Added.
        Make `WebGPUPipeline` a subclass of `ContextDestructionObserver` so that the raw pointer to
        the associated `ScriptExecutionContext` is properly cleared and isn't UAFd.

        * Modules/webgpu/WebGPUComputePipeline.h:
        * Modules/webgpu/WebGPUComputePipeline.cpp:
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        (WebCore::WebGPUComputePipeline::cloneShaderModules):
        (WebCore::WebGPUComputePipeline::recompile):
        * Modules/webgpu/WebGPURenderPipeline.h:
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        (WebCore::WebGPURenderPipeline::cloneShaderModules):
        (WebCore::WebGPURenderPipeline::recompile):
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline):
        (WebCore::WebGPUDevice::createComputePipeline):
        Rework how Web Inspector preserves related shader modules so that there isn't as much wasted
        space in the class layout, as we can use the `RefPtr` itself instead of an `Optional`.

        * Modules/webgpu/WebGPUBuffer.idl:
        Now that `GPUObjectBase` has a virtual destructor, it has a vtable, which means that this
        object also does and therefore cannot be marked with `ImplementationLacksVTable`.

        * inspector/InspectorShaderProgram.cpp:
        (WebCore::shaderForType):
        (WebCore::InspectorShaderProgram::requestShaderSource):
        (WebCore::InspectorShaderProgram::updateShader):
        (WebCore::InspectorShaderProgram::buildObjectForShaderProgram):

2019-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Refactor AbstractEventLoop out of WindowEventLoop
        https://bugs.webkit.org/show_bug.cgi?id=203136
        <rdar://problem/56396749>

        Reviewed by Antti Koivisto.

        Extract AbstractEventLoop out of WindowEventLoop as a preparation for adding WorkerEventLoop.

        Also replaced m_activeTaskCount with a boolean m_isScheduledToRun since it doesn't need to count.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/AbstractEventLoop.cpp: Added.
        * dom/AbstractEventLoop.h: Added.
        (WebCore::AbstractEventLoop): Added.
        * dom/WindowEventLoop.cpp:
        (WebCore::WindowEventLoop::WindowEventLoop): Deleted. Use the default constructor in the header instead.
        (WebCore::WindowEventLoop::queueTask):
        (WebCore::WindowEventLoop::suspend):
        (WebCore::WindowEventLoop::resume):
        (WebCore::WindowEventLoop::scheduleToRunIfNeeded): Extracted out of queueTask.
        (WebCore::WindowEventLoop::run):
        * dom/WindowEventLoop.h:

2019-10-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: allow WebKit engineers to edit UserAgent shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=203159

        Reviewed by Brian Burg.

        Test: inspector/dom/setAllowEditingUserAgentShadowTrees.html

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::assertEditableNode):
        (WebCore::InspectorDOMAgent::setInspectedNode):
        (WebCore::InspectorDOMAgent::setAllowEditingUserAgentShadowTrees): Added.

2019-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Document::m_closeAfterStyleRecalc is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=203143

        Reviewed by Antti Koivisto.

        Removed the code to defer implicit close until the style recalc is done
        since we call FrameLoader::checkCompleted asynchronously via a timer these days.

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::implicitClose):
        * dom/Document.h:

2019-10-17  Dean Jackson  <dino@apple.com>

        texImage2D for a half-float texture only accepts null
        https://bugs.webkit.org/show_bug.cgi?id=169999
        <rdar://problem/31713571>

        Reviewed by Simon Fraser.

        After we initially implemented this, the extension was
        modified such that texImage2D could upload to half-float
        from a Uint16 array.

        Test: fast/canvas/webgl/oes-texture-half-float-uint16.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateArrayBufferType): Accept
        Uint16.

2019-10-18  Daniel Bates  <dabates@apple.com>

        REGRESSION (r241747): [iOS] Adjust default SVG focus ring width to match width for HTML documents
        https://bugs.webkit.org/show_bug.cgi?id=203011

        Reviewed by Wenson Hsieh.

        Update default user agent stylesheet for SVG documents (i.e. .svg resources) to use the same 3px
        outline width for focused elements as we do for HTML documents.

        This makes the test imported/blink/svg/custom/focus-ring-2.svg pass on iOS.

        * css/svg.css:

2019-10-18  Jer Noble  <jer.noble@apple.com>

        Add experimental HDR MediaCapabilities support.
        https://bugs.webkit.org/show_bug.cgi?id=203113

        Reviewed by Eric Carlson.

        Tests: media/mediacapabilities/mock-decodingInfo-hdr.html
               platform/mac/media/mediacapabilities/hevc-decodingInfo-hdr.html

        Add support for MediaCapabilities.decodeInfo() HDR support detection.

        Add new enum IDL types to MediaCapabilities and remove old unused ones. Add
        mock implementation for HDR detection. Add Cocoa platform implementation.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/mediacapabilities/ColorGamut.idl: 
        * Modules/mediacapabilities/HdrMetadataType.idl: 
        * Modules/mediacapabilities/ScreenLuminance.h: 
        * Modules/mediacapabilities/TransferFunction.idl: 
        * Modules/mediacapabilities/VideoConfiguration.idl:
        * Scripts/GenerateSettings.rb:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        (WK_ucfirst):
        * bindings/scripts/CodeGeneratorJS.pm:
        (ToMethodName):
        * page/Settings.yaml:
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/mediacapabilities/ColorGamut.h: 
        * platform/mediacapabilities/HdrMetadataType.h: 
        * platform/mediacapabilities/TransferFunction.h: 
        * platform/mediacapabilities/VideoConfiguration.h:
        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
        (WebCore::canDecodeMedia):
        (WebCore::canEncodeMedia):

2019-10-18  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement AuthenticatorCancel
        https://bugs.webkit.org/show_bug.cgi?id=191523
        <rdar://problem/55920204>

        Reviewed by Brent Fulgham.

        Covered by new tests in existing test files.

        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        * Modules/webauthn/AuthenticatorCoordinator.h:
        * Modules/webauthn/AuthenticatorCoordinatorClient.cpp: Removed.
        * Modules/webauthn/AuthenticatorCoordinatorClient.h:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::tryCreate):
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredentialData.h:
        * Modules/webauthn/fido/DeviceRequestConverter.h:
        * Modules/webauthn/fido/FidoHidMessage.cpp:
        (fido::FidoHidMessage::FidoHidMessage):
        * Modules/webauthn/fido/FidoHidPacket.cpp:
        (fido::FidoHidInitPacket::getSerializedData const):
        (fido::FidoHidContinuationPacket::getSerializedData const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockWebAuthenticationConfiguration.h:
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::decode):
        * testing/MockWebAuthenticationConfiguration.idl:
        Adds a new option to test AuthenticatorCancel.

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

        Add TextStream dumping for BasicShape types
        https://bugs.webkit.org/show_bug.cgi?id=203150

        Reviewed by Zalan Bujtas.

        Add dumping for the classes, and make the BasicShape enum an enum class.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCircle::dump const):
        (WebCore::BasicShapeEllipse::dump const):
        (WebCore::BasicShapePolygon::dump const):
        (WebCore::BasicShapePath::dump const):
        (WebCore::BasicShapeInset::dump const):
        (WebCore::operator<<):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate):

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

        ElementRuleCollector function signature cleanups
        https://bugs.webkit.org/show_bug.cgi?id=203153
        <rdar://problem/56412684>

        Unreviewed followup.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::transferMatchedRules):

        Try to appease MSVC.

2019-10-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Load event must be fired only for the SVG structurally external elements and the outermost SVG element
        https://bugs.webkit.org/show_bug.cgi?id=203044

        Reviewed by Simon Fraser.

        The SVG1.1 spec for SVGLoad event is:
            https://www.w3.org/TR/SVG11/interact.html

        The SVG2 spec for the load event is:
            https://www.w3.org/TR/SVG/changes.html#interact
            https://www.w3.org/TR/SVG/interact.html

        SVG2 removes the SVGExternalResourcesRequired interface. It also simplifies
        the rules for firing the load event and made them consistent with the HTML
        specs. The plan is to remove SVGExternalResourcesRequired in a following
        patch. This patch makes SVGExternalResourcesRequired have no effect on the
        load event firing rules. It moves all the functionalities to SVGURIReference
        as a step towards removing the SVGExternalResourcesRequired interface.

        Test: svg/custom/image-load-event.html

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        Do not use the SVGLoad term. It has been removed from the specs.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::errorOccurred const):
        (WebCore::ScriptElement::setErrorOccurred):
        Add a method to track the occurrence  of loading error. errorOccurred()
        || haveFiredLoadEvent() means no pending loading activity.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::dispatchLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements): Deleted.
        * svg/SVGDocumentExtensions.h:
        Do not use the SVGLoad term. 

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendLoadEventIfPossible):
        (WebCore::SVGElement::loadEventTimerFired):
        (WebCore::SVGElement::loadEventTimer):
        (WebCore::SVGElement::finishParsingChildren):
        (WebCore::SVGElement::sendSVGLoadEventIfPossible): Deleted.
        (WebCore::SVGElement::sendSVGLoadEventIfPossibleAsynchronously): Deleted.
        (WebCore::SVGElement::svgLoadEventTimerFired): Deleted.
        (WebCore::SVGElement::svgLoadEventTimer): Deleted.
        * svg/SVGElement.h:
        finishParsingChildren() won't fire 'load' event anymore. The 'load' event 
        will be fired explicitly for the outermost SVG element from Document::implicitClose().

        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::svgAttributeChanged):
        (WebCore::SVGExternalResourcesRequired::dispatchLoadEvent): Deleted.
        (WebCore::SVGExternalResourcesRequired::insertedIntoDocument): Deleted.
        (WebCore::SVGExternalResourcesRequired::finishParsingChildren): Deleted.
        (WebCore::SVGExternalResourcesRequired::haveLoadedRequiredResources const): Deleted.
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::setHaveFiredLoadEvent): Deleted.
        (WebCore::SVGExternalResourcesRequired::isParserInserted const): Deleted.
        (WebCore::SVGExternalResourcesRequired::haveFiredLoadEvent const): Deleted.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::haveLoadedRequiredResources):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        The value of externalResourcesRequired() no longer controls firing the
        'load' event.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::insertedIntoAncestor):
        (WebCore::SVGScriptElement::dispatchErrorEvent):
        (WebCore::SVGScriptElement::finishParsingChildren): Deleted.
        * svg/SVGScriptElement.h:
        dispatchErrorEvent() is now a virtual function. Let SVGScriptElement
        overrides it so it can track when the loader finishes its activity.

        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGStyleElement.h:

        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::contextElement const):
        (WebCore::SVGURIReference::parseAttribute):
        (WebCore::SVGURIReference::haveLoadedRequiredResources const):
        (WebCore::SVGURIReference::dispatchLoadEvent):
        * svg/SVGURIReference.h:
        (WebCore::SVGURIReference::haveFiredLoadEvent const):
        (WebCore::SVGURIReference::setHaveFiredLoadEvent):
        (WebCore::SVGURIReference::errorOccurred const):
        (WebCore::SVGURIReference::setErrorOccurred):
        SVGURIReference will decide whether the 'load' event can be fired or not.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::insertedIntoAncestor):
        (WebCore::SVGUseElement::notifyFinished):
        (WebCore::SVGUseElement::finishParsingChildren): Deleted.
        (WebCore::SVGUseElement::isValid const): Deleted.
        (WebCore::SVGUseElement::haveLoadedRequiredResources): Deleted.
        (WebCore::SVGUseElement::setHaveFiredLoadEvent): Deleted.
        (WebCore::SVGUseElement::haveFiredLoadEvent const): Deleted.
        (WebCore::SVGUseElement::svgLoadEventTimer): Deleted.
        * svg/SVGUseElement.h:
        SVGUseElement needs to track firing the load event or error occurrence 
        the same way SVGImageElement and SVGScriptElement do.

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

        ElementRuleCollector function signature cleanups
        https://bugs.webkit.org/show_bug.cgi?id=203153

        Reviewed by Zalan Bujtas.

        Many functions in ElementRuleCollector take repetitive arguments that can be removed:

        - Make includeEmptyRules argument a class member
        - Remove RuleRange argument, update the ranges in rule transfer step.

        * css/ElementRuleCollector.cpp:
        (WebCore::MatchRequest::MatchRequest):
        (WebCore::ElementRuleCollector::addMatchedRule):
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::transferMatchedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchesAnyAuthorRules):
        (WebCore::ElementRuleCollector::collectMatchingAuthorRules):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::ElementRuleCollector::matchSlottedPseudoElementRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRulesForScope):
        (WebCore::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::collectSlottedPseudoElementRulesForSlot):
        (WebCore::ElementRuleCollector::matchUserRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::matchAllRules):
        (WebCore::ElementRuleCollector::hasAnyMatchingRules):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::setIncludeEmptyRules):
        (WebCore::ElementRuleCollector::transferMatchedRules):

        Range update happens now here based on the supplied argument.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pseudoStyleForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
x
2019-10-18  Antti Koivisto  <antti@apple.com>

        [CSS Shadow Parts] :part rules should be able to override style attribute
        https://bugs.webkit.org/show_bug.cgi?id=202919

        Reviewed by Zalan Bujtas.

        Element inline style was simply appended to the matching declaration list and not sorted with the rest of the author style.
        This used to work because before CSS Shadow Parts feature inline style would always win.

        Fixing this involves refactoring the rule collection code to remove this assumption.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::addMatchedRule):

        Both initialize and update ranges here.

        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::addElementStyleProperties):

        Both initialize and update ranges here.

        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):

        Split out transfering to a separate function.

        (WebCore::ElementRuleCollector::transferMatchedRules):

        Add a parameter to limit transfer to rules from a scope.

        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchesAnyAuthorRules):

        Replace hasMatchedRules() with a more specific function. This can use collectMatchingAuthorRules and avoids unnecessary sorting step.

        (WebCore::ElementRuleCollector::collectMatchingAuthorRules):

        Split out collecting the rules from matchAuthorRules. Like other collect functions, this doesn't do any sorting.

        (WebCore::ElementRuleCollector::matchAllRules):

        Add element inline style before transfering rules from the containing host scope.

        (WebCore::ElementRuleCollector::addElementInlineStyleProperties):

        Factor adding inline style into a function.

]        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::hasMatchedRules const): Deleted.
        * css/StyleProperties.h:
        (WebCore::StylePropertiesBase::deref const):
        (WebCore::StylePropertiesBase::deref): Deleted.

        Make const to allow RefPtr<const StyleProperties>

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::addImportantMatches):

        Sort !important properties taking into account that the host scope has lower priority.

        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateIfNeeded):

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

        [LFC][TFC] Include horizontal spacing when checking for the extra horizontal space
        https://bugs.webkit.org/show_bug.cgi?id=203154
        <rdar://problem/56408032>

        Reviewed by Antti Koivisto.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):

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

        [LFC][TFC] Fix table's total horizontal spacing computation
        https://bugs.webkit.org/show_bug.cgi?id=203151
        <rdar://problem/56406930>

        Reviewed by Antti Koivisto.

        The horizontal spacing value sets the gaps between
        1. first column and the left edge of the table's content box
        2. between 2 columns
        3. last column and the right edge of the table's content box
        In case of 'n' columns, the number of gaps is 'n + 1'.

        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::totalHorizontalSpacing const):

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

        [LFC][TFC] Cache table's width constraint values.
        https://bugs.webkit.org/show_bug.cgi?id=203135
        <rdar://problem/56396352>

        Reviewed by Antti Koivisto.

        This patch ensures that when computedIntrinsicWidthConstraints is called from both the preferred width and the actual layout codepaths during a layout frame, we don't
        end up building up the grid twice.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::widthConstraints):
        (WebCore::Layout::TableGrid::widthConstraints const): Deleted.
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::hasComputedWidthConstraints const):

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

        [LFC][BFC] TableFormattingContext::computedIntrinsicWidthConstraints should not expect a valid containing block's width
        https://bugs.webkit.org/show_bug.cgi?id=203131
        <rdar://problem/56394676>

        Reviewed by Antti Koivisto.

        When TableFormattingContext::computedIntrinsicWidthConstraints is called by the preferred width computation (<div style="float: left"><table>)
        the containing block's width is not yet set (it gets computed based on the preferred width) so computedIntrinsicWidthConstraints should not be relying
        on it. Let's move that logic out to TableFormattingContext::layoutInFlowContent() where it belongs. 

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::computedTableWidth): Deleted.
        (WebCore::Layout::TableFormattingContext::distributeExtraHorizontalSpace): Deleted.
        * layout/tableformatting/TableFormattingContext.h:

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

        [LFC][BFC] Fix block level formatting root inflow box height computation
        https://bugs.webkit.org/show_bug.cgi?id=203085
        <rdar://problem/56372306>

        Reviewed by Antti Koivisto.

        Section 10.6.7 (https://www.w3.org/TR/CSS22/visudet.html#root-height) defines the height computation for block level formatting context roots.
        We already use it for floats, out-of-flow and block level boxes when overflow computes to not "visible".
        This patch makes generic in-flow non-replaced BFC roots (e.g. principal block container box for <table>) compute their heights according to 10.6.7.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):

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

        [Clipboard API] Support navigator.clipboard.read()
        https://bugs.webkit.org/show_bug.cgi?id=203021

        Reviewed by Ryosuke Niwa.

        Add support for navigator.clipboard.read(), which returns a promise that resolves to a list of ClipboardItems.
        See below for more details.

        Tests: editing/async-clipboard/clipboard-change-data-while-reading.html
               editing/async-clipboard/clipboard-read-basic.html

        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::read):

        Implement read(). This makes two calls to the platform pasteboard: the first to get the current change count,
        and if the change count is different from the changeCount used for the last read() call (or there are no
        existing clipboard items being tracked), then we request pasteboard item information for all items on the
        pasteboard, and use this information to create new clipboard items. Otherwise, if the changeCount is still valid
        for the current list of clipboard items, simply return these clipboard items.

        If the changeCount ends up being different in between the initial changeCount request and when the pasteboard
        item information is received, we immediately bail with a NotAllowedError. The new layout test
        clipboard-change-data-while-reading.html exercises this scenario.

        (WebCore::Clipboard::getType):
        (WebCore::Clipboard::frame const):
        * Modules/async-clipboard/Clipboard.h:
        * Modules/async-clipboard/ClipboardItem.cpp:
        (WebCore::ClipboardItem::blobFromString):
        (WebCore::ClipboardItem::ClipboardItem):
        (WebCore::ClipboardItem::create):
        (WebCore::ClipboardItem::navigator):

        Refactor this so that each clipboard item itself has a WeakPtr to its Navigator. This avoids having to follow
        the weak pointer to the Clipboard to get to the Clipboard's navigator during garbage collection when computing
        reachability from opaque roots, since this may happen on a background (GC) thread.

        (WebCore::ClipboardItem::clipboard):
        * Modules/async-clipboard/ClipboardItem.h:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::getType):
        (WebCore::blobFromString): Deleted.

        Move this to ClipboardItem, and make it a static method.

        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.cpp:
        (WebCore::ClipboardItemPasteboardDataSource::ClipboardItemPasteboardDataSource):
        (WebCore::ClipboardItemPasteboardDataSource::getType):
        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.h:

        Move a couple of member variables (index and changeCount) out of ClipboardItem. Instead of having each
        ClipboardItem keep track of this information, have the Clipboard that owns the ClipboardItem keep this
        information. This means that reading data from ClipboardItem will (in a future patch) work by having the item
        ask its Clipboard object to read data on its behalf.

        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::allPasteboardItemInfo const):
        (WebCore::Pasteboard::pasteboardItemInfo const):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::readBuffer):
        (WebCore::Pasteboard::readURL):

        Add some null checks to handle the case where there is no pasteboard strategy.

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

        Don't put pages that have not reached the non-visually empty layout milestone in the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=203108
        <rdar://problem/56375671>

        Reviewed by Geoff Garen.

        We don't want to go back to a visually empty page on back/forward navigation.

        * history/BackForwardCache.cpp:
        (WebCore::canCacheFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::visuallyEmptyKey):
        * page/DiagnosticLoggingKeys.h:

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

        Only include "deep color" in layer tree dumps if a tests requests it
        https://bugs.webkit.org/show_bug.cgi?id=203125

        Reviewed by Tim Horton.
        
        Layer tree dumping tests can fail when run on different devices because the "deep color"
        property on layers is device-dependent. Stop dumping this by default, and have one test
        that sets the bit. iphone-7 is the only device we test that has deep color support.

        Tests: compositing/contents-format/deep-color-backing-store.html
               compositing/contents-format/ipad/deep-color-backing-store.html
               compositing/contents-format/iphone-7/deep-color-backing-store.html

        * page/Frame.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):
        * testing/Internals.cpp:
        (WebCore::toLayerTreeFlags):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-10-17  Dean Jackson  <dino@apple.com>

        ctx.font = "" asserts in CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=203127
        <rdar://problem/56391016>

        Reviewed by Devin Rousso.

        The HTML specification says:
        "values that cannot be parsed as CSS font values are ignored", so
        return early if we get an empty string, otherwise the CSS parser
        will assert. This was the only case I could find where we sidestepped
        most of the parsing infrastructure and injected a raw string.

        Test: http/wpt/2dcontext/text-styles/2d.text.font.parse.invalid.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):

2019-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Integrate resize event with HTML5 event loop
        https://bugs.webkit.org/show_bug.cgi?id=202964

        Reviewed by Geoffrey Garen.

        Dispatch resize events in "run the resize steps" during the "update the rendering":
        https://html.spec.whatwg.org/multipage/webappapis.html#update-the-rendering

        Exisitng code in WebCore which was dispatching or scheduling dispatching of resize events now simply sets
        a flag on document and schedules a rendering update. In Page::updateRendering, we fire resize events on
        any documents with this flag set.

        Test: fast/events/resize-subframe-in-rendering-update.html

        * dom/Document.cpp:
        (WebCore::Document::setNeedsDOMWindowResizeEvent): Added.
        (WebCore::Document::setNeedsVisualViewportResize): Added.
        (WebCore::Document::runResizeSteps): Added. https://drafts.csswg.org/cssom-view/#run-the-resize-steps
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::resizeTo const):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded): Now sets m_needsDOMWindowResizeEvent on Document instead of
        enqueuing a resize event.
        * page/Page.cpp:
        (WebCore::Page::updateRendering): Call runResizeSteps on each document.
        (WebCore::Page::collectDocuments): Added.
        * page/Page.h:
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::enqueueResizeEvent):

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

        Unreviewed, rolling out r251255.

        This is causing the existing back/forward tests to be flaky

        Reverted changeset:

        "Don't put pages that have not reached the non-visually empty
        layout milestone in the back/forward cache"
        https://bugs.webkit.org/show_bug.cgi?id=203108
        https://trac.webkit.org/changeset/251255

2019-10-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr in more places and remove some unnecessary external linkage.
        https://bugs.webkit.org/show_bug.cgi?id=203115

        Reviewed by Yusuke Suzuki.

        No new tests because this patch adds no new functionality.

        * html/track/TextTrackCueGeneric.cpp:
        * html/track/VTTCue.cpp:
        * page/EventHandler.cpp:
        (WebCore::SyntheticTouchPoint::SyntheticTouchPoint):
        * page/FrameTree.h:
        * page/scrolling/ScrollingMomentumCalculator.cpp:
        (WebCore::projectedInertialScrollDistance):
        * platform/graphics/FontTaggedSettings.h:
        * platform/graphics/Region.cpp:
        * platform/graphics/filters/FELighting.cpp:
        * rendering/TableLayout.h:
        * rendering/svg/SVGRenderingContext.h:

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

        [ Mojave+ ] Layout Test compositing/fixed-with-main-thread-scrolling.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=198757

        Reviewed by Tim Horton.
        
        WheelEventTestMonitor depends on "deferral reasons" getting added and removed, such that there is always
        at least one reason active until scrolling quiesces.

        WheelEventTestMonitor made the incorrect assumption that every call into ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent()
        would result in a scroll change making it to the main thread, so it would defer "ScrollingThreadSyncNeeded" there,
        and rely on AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll() to remove that deferral reason.
        That assumption is wrong, because wheel events may coalesce, or have no impact on scroll position if already scrolled
        to the max/min extent (e.g. when rubber banding).
        
        Fix by adding a new "HandlingWheelEvent" deferral reason for the duration that the scrolling thread is processing an wheel event,
        and then having ScrollingThreadSyncNeeded just represent the phase where any resulting scroll is being sent to the UI process.
        These phases should always overlap.
        
        This required moving isMonitoringWheelEvents() from the root scrolling node to the ScrollingTree.

        * page/WheelEventTestMonitor.cpp:
        (WebCore::operator<<):
        * page/WheelEventTestMonitor.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isMonitoringWheelEvents const):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::deferWheelEventTestCompletionForReason const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::removeWheelEventTestCompletionDeferralForReason const):

2019-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Make requestIdleCallback suspendable
        https://bugs.webkit.org/show_bug.cgi?id=203023

        Reviewed by Chris Dumez.

        Make requestIdleCallback suspendable by making WindowEventLoop itself suspendable.
        Because WindowEventLoop can be shared across documents, we don't want to make it an ActiveDOMObject.

        Instead, we would make CachedFrameBase::restore and CachedFrame manually invoke suspend & resume.

        Test: requestidlecallback/requestidlecallback-in-page-cache.html

        * dom/Document.h:
        (WebCore::Document::eventLoopIfExists): Added. This should probably go away once most of the event loop
        is implemented since we're almost always going to have this object then.
        * dom/WindowEventLoop.cpp:
        (WebCore::WindowEventLoop::queueTask): Because m_tasks may contain tasks of suspended documents,
        we check m_activeTaskCount, which is only positive when there is a task for non-suspended documents,
        to decide whether we schedule a callback or not.
        (WebCore::WindowEventLoop::suspend): Added. No-op for now.
        (WebCore::WindowEventLoop::resume): Added. Schedule a callback if there is a task associated with
        this document.
        (WebCore::WindowEventLoop::run): Skip a task for a suspended document, and add it back to m_tasks along
        with other tasks that got scheduled by running the current working set of tasks.
        * dom/WindowEventLoop.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):

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

        Don't put pages that have not reached the non-visually empty layout milestone in the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=203108

        Reviewed by Geoffrey Garen.

        We don't want to go back to a visually empty page on back/forward navigation.

        * history/BackForwardCache.cpp:
        (WebCore::canCacheFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::visuallyEmptyKey):
        * page/DiagnosticLoggingKeys.h:

2019-10-17  Dirk Schulze  <krit@webkit.org>

        transform-box: content-box, stroke-box missing
        https://bugs.webkit.org/show_bug.cgi?id=201892

        Reviewed by Simon Fraser.

        Added the keywords content-box and stroke-box to the
        transform-box CSS property.
        Those keywords were added to the spec after the implementation
        in WebKit.

        Test: transforms/transform-box.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TransformBox const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        (WebCore::transformBoxToCSSBoxType):
        (WebCore::RenderLayer::currentTransform const):
        * rendering/style/RenderStyleConstants.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform const):

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

        SincResampler does not need to create a new AudioBus for each consumeSource call
        https://bugs.webkit.org/show_bug.cgi?id=202983

        Reviewed by Eric Carlson.

        Allocate an internal AudioBus once and for all.
        No observable change of behavior.

        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::consumeSource):
        * platform/audio/SincResampler.h:

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

        Deprecate ActiveDOMObject::canSuspendForDocumentSuspension()
        https://bugs.webkit.org/show_bug.cgi?id=203086

        Reviewed by Geoffrey Garen.

        Rename ActiveDOMObject::canSuspendForDocumentSuspension() to shouldPreventEnteringBackForwardCache_DEPRECATED()
        to make it clear that no new overrides should be added and that it is no longer OK to prevent the page from
        entering the back/forward cache. Also provide a default implementation that returns false so that well-behaved
        classes no longer need to override this.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::ApplePaySession::canSuspendForDocumentSuspension const): Deleted.
        * Modules/applepay/ApplePaySession.h:
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::canSuspendForDocumentSuspension const): Deleted.
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::canSuspendForDocumentSuspension const): Deleted.
        * Modules/cache/DOMCacheStorage.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::MediaKeySession::canSuspendForDocumentSuspension const): Deleted.
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::WebKitMediaKeySession::canSuspendForDocumentSuspension const): Deleted.
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::FileSystemDirectoryReader::canSuspendForDocumentSuspension const): Deleted.
        * Modules/entriesapi/FileSystemDirectoryReader.h:
        * Modules/entriesapi/FileSystemEntry.cpp:
        (WebCore::FileSystemEntry::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::FileSystemEntry::canSuspendForDocumentSuspension const): Deleted.
        * Modules/entriesapi/FileSystemEntry.h:
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::FetchRequest::canSuspendForDocumentSuspension const): Deleted.
        * Modules/fetch/FetchRequest.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::FetchResponse::canSuspendForDocumentSuspension const): Deleted.
        * Modules/fetch/FetchResponse.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::page const):
        (WebCore::Geolocation::canSuspendForDocumentSuspension const): Deleted.
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::canSuspendForDocumentSuspension const): Deleted.
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::canSuspendForDocumentSuspension const): Deleted.
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::canSuspendForDocumentSuspension const): Deleted.
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::canSuspendForDocumentSuspension const): Deleted.
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::canSuspendForDocumentSuspension const): Deleted.
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::MediaRecorder::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::MediaStream::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::MediaStreamTrack::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::RTCDTMFSender::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::RTCPeerConnection::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::UserMediaRequest::canSuspendForDocumentSuspension const): Deleted.
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::Notification::canSuspendForDocumentSuspension const): Deleted.
        * Modules/notifications/Notification.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::PaymentRequest::canSuspendForDocumentSuspension const): Deleted.
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::PaymentResponse::canSuspendForDocumentSuspension const): Deleted.
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/pictureinpicture/PictureInPictureWindow.cpp:
        (WebCore::PictureInPictureWindow::canSuspendForDocumentSuspension const): Deleted.
        * Modules/pictureinpicture/PictureInPictureWindow.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::AudioContext::canSuspendForDocumentSuspension const): Deleted.
        * Modules/webaudio/AudioContext.h:
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::DatabaseContext::canSuspendForDocumentSuspension const): Deleted.
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webgpu/GPUCanvasContext.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::canSuspendForDocumentSuspension const): Deleted.
        * Modules/websockets/WebSocket.h:
        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::VRDisplay::canSuspendForDocumentSuspension const): Deleted.
        * Modules/webvr/VRDisplay.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::WebAnimation::canSuspendForDocumentSuspension const): Deleted.
        * animation/WebAnimation.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::canSuspendForDocumentSuspension const): Deleted.
        * css/FontFaceSet.h:
        * dom/ActiveDOMObject.h:
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueueBase<T>::canSuspendForDocumentSuspension const): Deleted.
        * dom/GenericEventQueue.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::canSuspendForDocumentSuspension const): Deleted.
        * dom/MessagePort.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForDocumentSuspension):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::FileReader::canSuspendForDocumentSuspension const): Deleted.
        * fileapi/FileReader.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::canSuspendForDocumentSuspension const): Deleted.
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canSuspendForDocumentSuspension const): Deleted.
        * html/HTMLMediaElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::canSuspendForDocumentSuspension const): Deleted.
        * html/HTMLSourceElement.h:
        * html/ImageBitmap.cpp:
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::canSuspendForDocumentSuspension const): Deleted.
        * html/PublicURLManager.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::canSuspendForDocumentSuspension const): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::canSuspendForDocumentSuspension const): Deleted.
        * html/track/TrackListBase.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::canSuspendForDocumentSuspension const): Deleted.
        * page/EventSource.h:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::canSuspendForDocumentSuspension const): Deleted.
        * page/IntersectionObserver.h:
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::canSuspendForDocumentSuspension const): Deleted.
        * page/ResizeObserver.h:
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimerBase::canSuspendForDocumentSuspension const): Deleted.
        * page/SuspendableTimer.h:
        * platform/SuspendableTaskQueue.cpp:
        (WebCore::SuspendableTaskQueue::canSuspendForDocumentSuspension const): Deleted.
        * platform/SuspendableTaskQueue.h:
        * testing/Internals.cpp:
        * workers/Worker.cpp:
        (WebCore::Worker::canSuspendForDocumentSuspension const): Deleted.
        * workers/Worker.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::canSuspendForDocumentSuspension const): Deleted.
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::canSuspendForDocumentSuspension const): Deleted.
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::canSuspendForDocumentSuspension const): Deleted.
        * workers/service/ServiceWorkerRegistration.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::shouldPreventEnteringBackForwardCache_DEPRECATED const):
        (WebCore::XMLHttpRequest::canSuspendForDocumentSuspension const): Deleted.
        * xml/XMLHttpRequest.h:

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

        [LFC][TFC] Table formatting context accesses geometry information from parent BFC
        https://bugs.webkit.org/show_bug.cgi?id=203082
        <rdar://problem/56370827>

        Reviewed by Antti Koivisto.

        Tables are wrapped in a 2 level formatting context structure. A <table> element initiates a block formatting context for its principal table box
        where the caption and the table content live. It also initiates a table wrapper box which establishes the table formatting context.
        In many cases the TFC needs access to the parent (generated) BFC.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::geometryForBox const):
        * layout/FormattingContext.h:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedTableWidth):

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

        [LFC][Painting] Add support for image/background image painting
        https://bugs.webkit.org/show_bug.cgi?id=203054
        <rdar://problem/56347733>

        Reviewed by Antti Koivisto.

        In addition to image rendering, this patch also addresses various run/decoration painting issues.

        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::paintBoxDecoration):
        (WebCore::Display::paintInlineContent):
        (WebCore::Display::absoluteDisplayBox):
        (WebCore::Display::paintBoxDecorationAndChildren):
        (WebCore::Display::Painter::paint):
        * layout/displaytree/DisplayRun.h:
        (WebCore::Display::Run::setImage):
        (WebCore::Display::Run::image const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendReplacedInlineBox):
        * layout/layouttree/LayoutReplaced.h:
        (WebCore::Layout::Replaced::setCachedImage):
        (WebCore::Layout::Replaced::cachedImage const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):

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

        [LFC][IFC] Add Display::Run/LineBox mapping
        https://bugs.webkit.org/show_bug.cgi?id=203051
        <rdar://problem/56342487>

        Reviewed by Antti Koivisto.

        Mapping enables us to paint baseline aligned runs on the current line. This is temporary until after we figure out the final run/line structure.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::paintInlineContent):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::setDisplayBoxesForLine):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addLineBox):
        (WebCore::Layout::InlineFormattingState::lineBoxForRun const):
        (WebCore::Layout::InlineFormattingState::addInlineRun):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::Line::alignContentVertically):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::displayRun const):
        (WebCore::Layout::Line::Run::logicalRect const):
        (WebCore::Layout::Line::Run::adjustLogicalTop):
        (WebCore::Layout::Line::Run::moveVertically):
        (WebCore::Layout::Line::Run::moveHorizontally):
        (WebCore::Layout::Line::Run::expand):
        * layout/inlineformatting/InlineLineBox.h:
        * layout/inlineformatting/InlineLineLayout.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

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

        [Web Animations] Enable the Web Animations JavaScript API by default
        https://bugs.webkit.org/show_bug.cgi?id=203075

        Reviewed by Antti Koivisto.

        * page/RuntimeEnabledFeatures.h:

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

        Unreviewed, fix watchOS and tvOS builds after r251224

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::shouldTreatAtLeastOneTypeAsFile):

        Move the `shouldTreatAtLeastOneTypeAsFile` helper function out of the `PASTEBOARD_SUPPORTS_ITEM_PROVIDERS`
        section, and into generic iOS-family code so that it can be used in `pasteboardMayContainFilePaths`.

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

        MultiChannelResampler does not need to recreate a ChannelProvider for every process call
        https://bugs.webkit.org/show_bug.cgi?id=202982

        Reviewed by Eric Carlson.

        We no longer allocate a new ChannelProvider for every process call.
        No observable change of behavior.

        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::ChannelProvider::ChannelProvider):
        (WebCore::MultiChannelResampler::ChannelProvider::setProvider):
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        (WebCore::MultiChannelResampler::process):
        * platform/audio/MultiChannelResampler.h:

2019-10-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: rework frontend agent construction to allow commands/events to be controlled by the related target's type
        https://bugs.webkit.org/show_bug.cgi?id=200384
        <rdar://problem/53850352>

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::backendCommandsURL): Deleted.
        (WebCore::InspectorFrontendClient::debuggableType): Deleted.
        * inspector/InspectorFrontendClientLocal.h:
        * page/PageDebuggable.h:
        (WebCore::PageDebuggable::type const):
        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::debuggableType const): Added.
        Split the `Web` debuggable type into `Page` (WebCore::Page) and `WebPage` (WebKit::WebPageProxy).

2019-10-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] [iOS] Refactor logic for suppressing URL data when the pasteboard may contain files
        https://bugs.webkit.org/show_bug.cgi?id=203065

        Reviewed by Tim Horton.

        Platform-specific pasteboard refactoring before tackling webkit.org/b/203021. See below for details. No new
        tests, as there is no change in behavior.

        * platform/Pasteboard.h:
        (WebCore::Pasteboard::changeCount const):

        Add a stub for Pasteboard::changeCount() on non-Cocoa platforms.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):

        Move this helper function farther up the file, so it can be used in more places.

        (WebCore::webSafeTypes):

        Add a separate helper to compute the list of web-safe MIME types (for instance, "text/plain") given a list of
        platform types, and a function to determine whether to avoid exposing a given URL to the DOM.

        (WebCore::shouldTreatAtLeastOneTypeAsFile):

        Split this out into a separate helper function, so that it can be invoked when determining whether a given
        NSItemProvider is suspected to contain file paths. In the case where we're getting the full list of types that
        are safe for the DOM to read, we want to pass in the entire pasteboard object and iterate through all of the
        available types in search for something that could feasibly accompany a file URL.

        In the case of computing the web-safe types per item, we only have an item provider, in which case we only
        iterate through the types in that NSItemProvider. See call sites below for examples.

        (WebCore::PlatformPasteboard::informationForItemAtIndex):

        Invoke the new `webSafeTypes` helper method.

        (WebCore::pasteboardMayContainFilePaths):
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        Invoke the new `webSafeTypes` helper method.

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

        [FTW] Correct radial gradient handling of various radius orderings
        https://bugs.webkit.org/show_bug.cgi?id=202815

        Reviewed by Per Arne Vollan.

        Revise the 'generateGradient' implementation to recognize that the
        radius arguments might not be in increasing order. Direct2D's
        implementation does expect this, so we need to swap order and
        revise the gradient range to match.

        Drive-by fix: Stop building unused image decoders if building with
        the Apple stack.

        * PlatformFTW.cmake: Stop building unused image decoders.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):

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

        Rename PageCache to BackForwardCache
        https://bugs.webkit.org/show_bug.cgi?id=203048

        Reviewed by Alex Christensen.

        Rename PageCache to BackForwardCache for clarity and consistency with the UIProcess's WebBackForwardCache.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::suspend):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::canSuspendForDocumentSuspension const):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::suspend):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::suspend):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::canSuspendForDocumentSuspension const):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::clearJSWindowProxiesNotMatchingDOMWindow):
        * bindings/js/WindowProxy.h:
        * dom/ActiveDOMObject.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::needsStyleRecalc const):
        (WebCore::Document::invalidateMatchedPropertiesCacheAndForceStyleRecalc):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::attachToCachedFrame):
        (WebCore::Document::detachFromCachedFrame):
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):
        (WebCore::Document::setFocusedElement):
        (WebCore::Document::takeDOMWindowFrom):
        (WebCore::Document::setBackForwardCacheState):
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        (WebCore::Document::topDocument const):
        * dom/Document.h:
        (WebCore::Document::backForwardCacheState const):
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::willEnterFullscreen):
        (WebCore::FullscreenManager::didEnterFullscreen):
        (WebCore::FullscreenManager::willExitFullscreen):
        (WebCore::FullscreenManager::didExitFullscreen):
        * dom/FullscreenManager.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * history/BackForwardCache.cpp: Renamed from Source/WebCore/history/PageCache.cpp.
        (WebCore::logBackForwardCacheFailureDiagnosticMessage):
        (WebCore::canCacheFrame):
        (WebCore::canCachePage):
        (WebCore::BackForwardCache::singleton):
        (WebCore::BackForwardCache::BackForwardCache):
        (WebCore::BackForwardCache::dump const):
        (WebCore::BackForwardCache::canCache const):
        (WebCore::BackForwardCache::pruneToSizeNow):
        (WebCore::BackForwardCache::setMaxSize):
        (WebCore::BackForwardCache::frameCount const):
        (WebCore::BackForwardCache::markPagesForDeviceOrPageScaleChanged):
        (WebCore::BackForwardCache::markPagesForContentsSizeChanged):
        (WebCore::BackForwardCache::markPagesForCaptionPreferencesChanged):
        (WebCore::setBackForwardCacheState):
        (WebCore::BackForwardCache::addIfCacheable):
        (WebCore::BackForwardCache::take):
        (WebCore::BackForwardCache::removeAllItemsForPage):
        (WebCore::BackForwardCache::get):
        (WebCore::BackForwardCache::remove):
        (WebCore::BackForwardCache::prune):
        * history/BackForwardCache.h: Renamed from Source/WebCore/history/PageCache.h.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::destroy):
        * history/CachedFramePlatformData.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setCachedPage):
        (WebCore::HistoryItem::setURL):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::isInBackForwardCache const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::suspend):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::autoplayPermitted const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::addSubresourceLoader):
        * loader/DocumentLoader.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::stopForBackForwardCache):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::frameDetached):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::shouldPerformFragmentNavigation):
        (WebCore::FrameLoader::dispatchUnloadEvents):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveScrollPositionAndViewStateToItem):
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):
        (WebCore::HistoryController::updateForReload):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::canCacheInBackForwardCache):
        * loader/appcache/ApplicationCacheHost.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::suspendForBackForwardCache):
        (WebCore::DOMWindow::resumeFromBackForwardCache):
        (WebCore::DOMWindow::decrementScrollEventListenersCount):
        * page/DOMWindow.h:
        * page/DOMWindowExtension.cpp:
        (WebCore::DOMWindowExtension::suspendForBackForwardCache):
        (WebCore::DOMWindowExtension::resumeFromBackForwardCache):
        * page/DOMWindowExtension.h:
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::backForwardCacheKey):
        (WebCore::DiagnosticLoggingKeys::backForwardCacheFailureKey):
        * page/DiagnosticLoggingKeys.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didReceiveData):
        (WebCore::EventSource::didFinishLoading):
        (WebCore::EventSource::didFail):
        (WebCore::EventSource::abortConnectionAttempt):
        (WebCore::EventSource::suspend):
        (WebCore::EventSource::resume):
        (WebCore::EventSource::dispatchMessageEvent):
        * page/EventSource.h:
        * page/Frame.cpp:
        (WebCore::Frame::setView):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::willDetachPage):
        * page/FrameView.cpp:
        (WebCore::FrameView::didRestoreFromBackForwardCache):
        (WebCore::FrameView::setContentsSize):
        * page/FrameView.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        (WebCore::FrameViewLayoutContext::scheduleLayout):
        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        (WebCore::releaseMemory):
        * page/MemoryRelease.h:
        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::setViewScaleFactor):
        (WebCore::Page::setDeviceScaleFactor):
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged):
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::memoryUsageStatistics):
        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::usesBackForwardCacheChanged):
        * page/SettingsBase.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::setNeedsStyleRecalc):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::updateAnimations):
        (WebCore::CSSAnimationControllerPrivate::addElementChangeToDispatch):
        (WebCore::CSSAnimationController::cancelAnimations):
        (WebCore::CSSAnimationController::updateAnimations):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::sendTransitionEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::willRemoveScrollingLayerWithBacking):
        (WebCore::RenderLayerCompositor::didAddScrollingLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderObject.h:
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::collectNonEmptyLeafRenderBlockFlowsForCurrentPage):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * testing/Internals.cpp:
        (WebCore::Internals::clearBackForwardCache):
        (WebCore::Internals::backForwardCacheSize const):
        (WebCore::Internals::preventDocumentForEnteringBackForwardCache):
        * testing/Internals.h:
        * testing/Internals.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::suspend):

2019-10-16  John Wilander  <wilander@apple.com>

        Resource Load Statistics (experimental): Block all third-party cookies on websites without prior user interaction
        https://bugs.webkit.org/show_bug.cgi?id=203017
        <rdar://problem/56262708>

        Reviewed by Alex Christensen.

        NetworkStorageSession::shouldBlockCookies() now checks if the first-party website has
        received user interaction and if not, blocks all third-party cookies, regardless of the
        status of those third-party domains (prevalent or not).

        Bundled cleanup task: Remove the two month old feature flag for NSURLSession switching.

        Tests: http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites-without-user-interaction.html

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setIsITPSessionSwitchingEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::isITPSessionSwitchingEnabled const): Deleted.
        * page/Settings.yaml:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::hasHadUserInteractionAsFirstParty const):
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::setDomainsWithUserInteractionAsFirstParty):
        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::setIsThirdPartyCookieBlockingOnSitesWithoutUserInteractionEnabled):

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

        [LFC][IFC] Add style and text content to Display::Run
        https://bugs.webkit.org/show_bug.cgi?id=203045
        <rdar://problem/56340105>

        Reviewed by Antti Koivisto.

        Painting Display::Runs requires style and text content. Currently there's no mapping structure to connect Display::Runs to Display::Boxes to access style and content.

        * layout/displaytree/DisplayRun.h:
        (WebCore::Display::Run::TextContext::content const):
        (WebCore::Display::Run::style const):
        (WebCore::Display::Run::Run):
        (WebCore::Display::Run::TextContext::TextContext):
        (WebCore::Display::Run::TextContext::expand):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::expand):

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

        Add dumping for BorderData and StyleBackgroundData
        https://bugs.webkit.org/show_bug.cgi?id=203038

        Reviewed by Zalan Bujtas.

        As part of adding dumping for all RenderStyle data, add dumping support for 
        BorderData and StyleBackgroundData.
        
        For large classes it's beneficial to avoid dumping default values; those classes
        get a dump() function that can take an argument to say whether values which are default
        should be printed.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/LengthSize.h:
        (WebCore::LengthSize::isZero const):
        * rendering/style/BorderData.cpp: Added.
        (WebCore::operator<<):
        (WebCore::BorderData::dump const):
        * rendering/style/BorderData.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::dump const):
        (WebCore::operator<<):
        * rendering/style/StyleBackgroundData.h:

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

        [WK2] Handle back/forward cache entry expiration in the UIProcess instead of the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=203034
        <rdar://problem/56332453>

        Reviewed by Antti Koivisto.

        Use Seconds type for backForwardCacheExpirationInterval setting instead of
        double, for clarity.

        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::hasExpired const):
        * page/Settings.yaml:

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

        [LFC][IFC] Fix various vertical alignment issues.
        https://bugs.webkit.org/show_bug.cgi?id=203041

        Reviewed by Antti Koivisto.

        This patch fixes both regular inline box and inline-block baseline aligment. It also addresses a few related vertical positioning issues. 

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::alignContentVertically):
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendInlineContainerEnd):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        * layout/inlineformatting/InlineLine.h:
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::resetDescent):
        (WebCore::Layout::LineBox::setLogicalHeightIfGreater):
        (WebCore::Layout::LineBox::setBaselineOffsetIfGreater):
        (WebCore::Layout::LineBox::setAscentIfGreater):
        (WebCore::Layout::LineBox::setDescentIfGreater):
        (WebCore::Layout::LineBox::resetBaseline):
        (WebCore::
        Layout::LineBox::setBaseline): Deleted.
        (WebCore::Layout::LineBox::baseline): Deleted.
        (WebCore::Layout::LineBox::setBaselineOffset): Deleted.
        (WebCore::Layout::LineBox::Baseline::setAscentIfGreater): Deleted.
        (WebCore::Layout::LineBox::Baseline::setDescentIfGreater): Deleted.

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

        Drop unused WKPageSetResourceCachingDisabled() SPI
        https://bugs.webkit.org/show_bug.cgi?id=203035

        Reviewed by Alex Christensen.

        * history/PageCache.cpp:
        (WebCore::canCachePage):
        (WebCore::PageCache::take):
        (WebCore::PageCache::get):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerShouldUsePersistentCache const):
        * inspector/agents/page/PageNetworkAgent.cpp:
        (WebCore::PageNetworkAgent::setResourceCachingDisabled):
        * inspector/agents/worker/WorkerNetworkAgent.cpp:
        (WebCore::WorkerNetworkAgent::setResourceCachingDisabled):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy const):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachePolicy const):
        * page/Page.h:
        (WebCore::Page::isResourceCachingDisabledByWebInspector const):
        (WebCore::Page::setResourceCachingDisabledByWebInspector):
        (WebCore::Page::isResourceCachingDisabled const): Deleted.
        (WebCore::Page::setResourceCachingDisabled): Deleted.
        (WebCore::Page::setResourceCachingDisabledOverride): Deleted.
        * workers/WorkerDebuggerProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::setResourceCachingDisabledByWebInspector):
        (WebCore::WorkerMessagingProxy::setResourceCachingDisabled): Deleted.
        * workers/WorkerMessagingProxy.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::setResourceCachingDisabledByWebInspector):
        (WebCore::ServiceWorkerThreadProxy::setResourceCachingDisabled): Deleted.
        * workers/service/context/ServiceWorkerThreadProxy.h:

2019-10-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        DumpRenderTree should clear WTFLogChannelState::OnWithAccumulation state set by testRunner.accummulateLogsForChannel
        https://bugs.webkit.org/show_bug.cgi?id=203024

        Reviewed by Alex Christensen.

        * platform/LogInitialization.h:
        * platform/Logging.cpp:
        (WebCore::clearAllLogChannelsToAccumulate): Added.
        * platform/Logging.h:
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::clearAllLogChannelsToAccumulate): Added.
        * testing/js/WebCoreTestSupport.h:

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

        WebAudioSourceProviderAVFObjC::provideInput should set its WebAudioBufferList parameters correctly
        https://bugs.webkit.org/show_bug.cgi?id=202930
        <rdar://problem/56006776>

        Reviewed by Eric Carlson.

        There is a time where the bus channel number and audio source channel numbers may be different.
        In case the bus channel number is less than the audio source channel number, initialization of
        the WebAudioBufferList might not be fully done.
        In that case, output silence and return early.
        Reduce the number of frames to process based on the number of frames the output audio bus plans to process.

        Partially covered by new API test (this a race so we cannot reproduce the crash easily).

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::process):
        Make sure to process the number of frames the output bus expect.
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):

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

        [LFC][TFC] TableFormattingContext::distributeExtraHorizontalSpace should not ignore fixed width columns
        https://bugs.webkit.org/show_bug.cgi?id=203010

        Reviewed by Antti Koivisto.

        Fixed width columns (e.g. <col width=100px>) don't participate in the extra horizontal space distribution.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedTableWidth):
        (WebCore::Layout::TableFormattingContext::distributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::distributeAvailableWidth): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::hasFixedWidth const):
        (WebCore::Layout::TableGrid::widthConstraints const):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::totalHorizontalSpacing const):
        (WebCore::Layout::TableGrid::columnsContext const):

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

        [GTK][WPE] ASSERTION FAILED: blob in SQLiteStatement.cpp(163) : int WebCore::SQLiteStatement::bindBlob()
        https://bugs.webkit.org/show_bug.cgi?id=202976

        Reviewed by Adrian Perez de Castro.

        This is because IconDatabases passes a nullptr blob to store emtpty icons. sqlite3_bind_blob() allows nullptr as
        blob, so we shouldn't assert.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob): Update the assert to only fail when blob is nullptr and size > 0.

2019-10-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for Windows ports
        https://bugs.webkit.org/show_bug.cgi?id=203016
        <rdar://problem/56317774>

        * page/DOMTimer.h: Added WEBCORE_EXPORT to ~DOMTimer().

2019-10-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        image/apng not recognized in source tag
        https://bugs.webkit.org/show_bug.cgi?id=202785

        Reviewed by Dean Jackson.

        Add image/apng as supported mime type for images on Mac/iOS and
        on all the other platforms that enable apng support.

        This fixes the test imported/w3c/web-platform-tests/apng/supported-in-source-type.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::supportedImageMIMETypes):

2019-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        adoptRef DOMTimer in install instead of its constructor
        https://bugs.webkit.org/show_bug.cgi?id=203016

        Reviewed by Simon Fraser.

        Moved the code to add DOMTimer to ScriptExecutionContext's map to DOMTimer::install
        instead of its constructor so that we can adoptRef there instead for clarity & simplicity.

        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::addTimeout):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::fired):

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

        ScrollingTreeScrollingNodeDelegateMac::stretchAmount() should not have side effects
        https://bugs.webkit.org/show_bug.cgi?id=203009

        Reviewed by Dean Jackson.

        Calling ScrollingTreeScrollingNodeDelegateMac::stretchAmount() had the side effect of calling
        setMainFrameIsRubberBanding() on the scrolling tree.
        
        Remove this badness and replace it by modifying updateMainFramePinState() (which is called every time
        the scroll position changes) to also compute if we're rubber-banding.
        
        Also make a bunch of methods on ScrollControllerClient const, which makes it clear that
        they don't have side effects.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinAndRubberbandState):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::updateMainFramePinState): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isAlreadyPinnedInDirectionOfGesture const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::pinnedInDirection const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollHorizontally const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollVertically const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::shouldRubberBandInDirection const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::isAlreadyPinnedInDirectionOfGesture): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsHorizontalStretching): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::allowsVerticalStretching): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::pinnedInDirection): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollHorizontally): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::canScrollVertically): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::shouldRubberBandInDirection): Deleted.
        * platform/cocoa/ScrollController.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::shouldForwardWheelEventsToParent const):
        (WebCore::ScrollAnimatorMac::pinnedInDirection const):
        (WebCore::ScrollAnimatorMac::isAlreadyPinnedInDirectionOfGesture const):
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching const):
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching const):
        (WebCore::ScrollAnimatorMac::stretchAmount const):
        (WebCore::ScrollAnimatorMac::canScrollHorizontally const):
        (WebCore::ScrollAnimatorMac::canScrollVertically const):
        (WebCore::ScrollAnimatorMac::shouldRubberBandInDirection const):
        (WebCore::ScrollAnimatorMac::shouldForwardWheelEventsToParent): Deleted.
        (WebCore::ScrollAnimatorMac::pinnedInDirection): Deleted.
        (WebCore::ScrollAnimatorMac::isAlreadyPinnedInDirectionOfGesture): Deleted.
        (WebCore::ScrollAnimatorMac::allowsVerticalStretching): Deleted.
        (WebCore::ScrollAnimatorMac::allowsHorizontalStretching): Deleted.
        (WebCore::ScrollAnimatorMac::stretchAmount): Deleted.
        (WebCore::ScrollAnimatorMac::canScrollHorizontally): Deleted.
        (WebCore::ScrollAnimatorMac::canScrollVertically): Deleted.
        (WebCore::ScrollAnimatorMac::shouldRubberBandInDirection): Deleted.
        * platform/mock/ScrollAnimatorMock.h:

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

        WheelEventTestMonitor doesn't need to be threadsafe
        https://bugs.webkit.org/show_bug.cgi?id=203012

        Reviewed by Dean Jackson.

        WheelEventTestMonitor is only called on the main thread, so doesn't need a lock to protect
        m_deferCompletionReasons, and add main thread assertions.

        * page/WheelEventTestMonitor.cpp:
        (WebCore::WheelEventTestMonitor::clearAllTestDeferrals):
        (WebCore::WheelEventTestMonitor::setTestCallbackAndStartNotificationTimer):
        (WebCore::WheelEventTestMonitor::deferForReason):
        (WebCore::WheelEventTestMonitor::removeDeferralForReason):
        (WebCore::WheelEventTestMonitor::triggerTestTimerFired):
        * page/WheelEventTestMonitor.h:

2019-10-15  Andres Gonzalez  <andresg_22@apple.com>

        AX: Make AXIsolatedTree compile again
        https://bugs.webkit.org/show_bug.cgi?id=202702
        <rdar://problem/56084968>

        Reviewed by Joanmarie Diggs.

        Re-submitting r251045 with a fix for internal builds.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::createIsolatedAccessibilityTreeHierarchy):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::treePageCache):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        (WebCore::AXIsolatedTree::initializePageTreeForID): Deleted.
        (WebCore::AXIsolatedTree::setInitialRequestInProgress): Deleted.
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
        (WebCore::AXIsolatedTreeNode::setTreeIdentifier):
        (WebCore::AXIsolatedTreeNode::rectAttributeValue const):
        * accessibility/isolatedtree/AXIsolatedTreeNode.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper childrenVectorArray]):

2019-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Crash in WebCore::DOMWindow::incrementScrollEventListenersCount
        https://bugs.webkit.org/show_bug.cgi?id=202878

        Unreviewed. Addressed Darin's post-commit review comment.

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

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

        [macOS] Simplify main thread initialization
        https://bugs.webkit.org/show_bug.cgi?id=203001

        Reviewed by Geoff Garen.

        * bridge/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * platform/cocoa/SharedBufferCocoa.mm:
        (+[WebCoreSharedBufferData initialize]):

2019-10-15  Peng Liu  <peng.liu6@apple.com>

        [Picture-in-Picture Web API] Implement HTMLVideoElement.requestPictureInPicture() / Document.exitPictureInPicture()
        https://bugs.webkit.org/show_bug.cgi?id=201024

        Reviewed by Eric Carlson.

        Implement the support to enter and exit PiP mode with the Picture-in-Picture API.
        Majority work of this patch was done by Carlos Eduardo Ramalho <cadubentzen@gmail.com>.

        Also, fix a build error of Modules/webaudio/OfflineAudioContext.cpp because of this patch (due to unified build).

        Tests: imported/w3c/web-platform-tests/picture-in-picture/css-selector.html
               imported/w3c/web-platform-tests/picture-in-picture/disable-picture-in-picture.html
               imported/w3c/web-platform-tests/picture-in-picture/enter-picture-in-picture.html
               imported/w3c/web-platform-tests/picture-in-picture/exit-picture-in-picture.html
               imported/w3c/web-platform-tests/picture-in-picture/idlharness.window.html
               imported/w3c/web-platform-tests/picture-in-picture/leave-picture-in-picture.html
               imported/w3c/web-platform-tests/picture-in-picture/mediastream.html
               imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-element.html
               imported/w3c/web-platform-tests/picture-in-picture/picture-in-picture-window.html
               imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture-twice.html
               imported/w3c/web-platform-tests/picture-in-picture/request-picture-in-picture.html
               imported/w3c/web-platform-tests/picture-in-picture/shadow-dom.html

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/pictureinpicture/DocumentPictureInPicture.cpp: Added.
        (WebCore::DocumentPictureInPicture::exitPictureInPicture):
        (WebCore::DocumentPictureInPicture::from):
        * Modules/pictureinpicture/DocumentPictureInPicture.h: Added.
        (WebCore::DocumentPictureInPicture::pictureInPictureEnabled):
        (WebCore::DocumentPictureInPicture::supplementName):
        * Modules/pictureinpicture/DocumentPictureInPicture.idl: Added.
        * Modules/pictureinpicture/EnterPictureInPictureEvent.cpp: Added.
        (WebCore::EnterPictureInPictureEvent::create):
        (WebCore::EnterPictureInPictureEvent::EnterPictureInPictureEvent):
        * Modules/pictureinpicture/EnterPictureInPictureEvent.h: Added.
        * Modules/pictureinpicture/EnterPictureInPictureEvent.idl: Added.
        * Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp: Added.
        (WebCore::HTMLVideoElementPictureInPicture::HTMLVideoElementPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::~HTMLVideoElementPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::from):
        (WebCore::HTMLVideoElementPictureInPicture::requestPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::autoPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::setAutoPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::disablePictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::setDisablePictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::exitPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::didEnterPictureInPicture):
        (WebCore::HTMLVideoElementPictureInPicture::didExitPictureInPicture):
        * Modules/pictureinpicture/HTMLVideoElementPictureInPicture.h: Added.
        (WebCore::HTMLVideoElementPictureInPicture::supplementName):
        * Modules/pictureinpicture/HTMLVideoElementPictureInPicture.idl: Added.
        * Modules/pictureinpicture/PictureInPictureWindow.cpp: Added.
        (WebCore::PictureInPictureWindow::create):
        (WebCore::PictureInPictureWindow::PictureInPictureWindow):
        (WebCore::PictureInPictureWindow::activeDOMObjectName const):
        (WebCore::PictureInPictureWindow::canSuspendForDocumentSuspension const):
        (WebCore::PictureInPictureWindow::eventTargetInterface const):
        (WebCore::PictureInPictureWindow::scriptExecutionContext const):
        * Modules/pictureinpicture/PictureInPictureWindow.h: Added.
        * Modules/pictureinpicture/PictureInPictureWindow.idl: Added.
        * Modules/webaudio/OfflineAudioContext.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::pictureInPictureElement const):
        (WebCore::Document::setPictureInPictureElement):
        * dom/Document.h:
        * dom/DocumentOrShadowRoot.idl:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::pictureInPictureElement const):
        * dom/ShadowRoot.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::fullscreenModeChanged):
        (WebCore::HTMLVideoElement::setPictureInPictureObserver):
        * html/HTMLVideoElement.h:
        * page/Settings.yaml:
        * platform/PictureInPictureObserver.h: Added.
        (WebCore::PictureInPictureObserver::~PictureInPictureObserver):
        * testing/InternalSettings.h:

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

        Add TextStream dumping for ThemeTypes enums
        https://bugs.webkit.org/show_bug.cgi?id=202972

        Reviewed by Dean Jackson.

        Make ControlPart, SelectionPart, ThemeFont and ThemeColor dumpable.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ThemeTypes.cpp: Added.
        (WebCore::operator<<):
        * platform/ThemeTypes.h:

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

        Add dumping for Animation and AnimationList
        https://bugs.webkit.org/show_bug.cgi?id=202973

        Reviewed by Dean Jackson.

        Make Animation, AnimationList and related enums dumpable.

        * platform/animation/Animation.cpp:
        (WebCore::operator<<):
        * platform/animation/Animation.h:
        * platform/animation/AnimationList.cpp:
        (WebCore::operator<<):
        * platform/animation/AnimationList.h:

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

        Don't mutate a NinePieceImage to create a mask default image
        https://bugs.webkit.org/show_bug.cgi?id=202967

        Reviewed by Dean Jackson.

        For every StyleRareNonInheritedData, the maskBoxImage undergoes copy-on-write
        via maskBoxImage.setMaskDefaults(). Fix by giving NinePieceImage a constructor
        argument that cna make the mask flavor of image.

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertBorderMask):
        (WebCore::StyleBuilderConverter::convertReflection):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::defaultMaskData):
        (WebCore::NinePieceImage::NinePieceImage):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::setMaskDefaults): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/style/StyleReflection.h:
        (WebCore::StyleReflection::StyleReflection):

2019-10-15  youenn fablet  <youenn@apple.com>

        Move headers to keep from a HTTPHeaderNameSet to an OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=202977

        Reviewed by Anders Carlsson.

        Covered by existing tests.
        New representation is smaller and more efficient to process.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::httpHeadersToKeepFromCleaning):
        (WebCore::cleanHTTPRequestHeadersForAccessControl):
        * loader/CrossOriginAccessControl.h:
        (WebCore::cleanHTTPRequestHeadersForAccessControl): Deleted.
        * loader/ResourceLoaderOptions.h:

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

        [LFC][TFC] Use <col> to adjust the preferred column width.
        https://bugs.webkit.org/show_bug.cgi?id=202997
        <rdar://problem/56300345>

        Reviewed by Antti Koivisto.

        The <col> elment can set the preferred width on the table column. Let's take these values into account while computing the preferred width for columns.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::computedColumnWidth const):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::columnBox const):

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

        [LFC][TFC] Add support for colgroup/col
        https://bugs.webkit.org/show_bug.cgi?id=202991
        <rdar://problem/56294715>

        Reviewed by Antti Koivisto.

        This patch sets up the column context when <colgroup> is present. This is in preparation for using <col>'s width to adjust the preferred width on table columns.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::Column):
        (WebCore::Layout::TableGrid::ColumnsContext::addColumn):
        * layout/tableformatting/TableGrid.h:

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

        Unreviewed, rolling out r251138.

        Broke API tests

        Reverted changeset:

        "Pass CORS-enabled schemes through WebProcess instead of
        having them NetworkProcess-global"
        https://bugs.webkit.org/show_bug.cgi?id=202891
        https://trac.webkit.org/changeset/251138

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

        Stop using inheritance for WebBackForwardCacheEntry
        https://bugs.webkit.org/show_bug.cgi?id=202989

        Reviewed by Alex Christensen.

        * history/BackForwardItemIdentifier.h:
        (WebCore::BackForwardItemIdentifier::operator bool const):

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

        Pass CORS-enabled schemes through WebProcess instead of having them NetworkProcess-global
        https://bugs.webkit.org/show_bug.cgi?id=202891

        Reviewed by Youenn Fablet.

        * platform/LegacySchemeRegistry.cpp:
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsCORSEnabled):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsCORSEnabled):
        (WebCore::LegacySchemeRegistry::allURLSchemesRegisteredAsCORSEnabled):
        * platform/LegacySchemeRegistry.h:

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

        [LFC] Adjust computed width value when box sizing is border-box
        https://bugs.webkit.org/show_bug.cgi?id=202966
        <rdar://problem/56277954>

        Reviewed by Antti Koivisto.

        box-sizing: border-box; means the width value sets the size of the border box (and not the content box).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedContentWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxWidth const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):

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

        [LFC][TFC] Add <col> element's width attribute value to Layout::Box rare data
        https://bugs.webkit.org/show_bug.cgi?id=202988
        <rdar://problem/56291048>

        Reviewed by Antti Koivisto.

        Sadly RenderStyle does not have this value.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::setColumnWidth):
        (WebCore::Layout::Box::columnWidth const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::outputLayoutBox):

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

        [LFC] Adjust computed height value when box sizing is border-box
        https://bugs.webkit.org/show_bug.cgi?id=202965
        <rdar://problem/56276771>

        Reviewed by Antti Koivisto.

        box-sizing: border-box; means the height value sets the size of the border box (and not the content box).  

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedContentHeight const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases const):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::displayBoxForLayoutBox):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::Style::Style): Deleted.
        * layout/displaytree/DisplayBox.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin const):

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

        [Clipboard API] Implement getType() for ClipboardItems created from bindings
        https://bugs.webkit.org/show_bug.cgi?id=202943

        Reviewed by Tim Horton.

        Adds basic support for ClipboardItem.getType(), in the case where the ClipboardItems are created by the page. To
        achieve this, we introduce ClipboardItemDataSource, which represents the data source backing a given clipboard
        item. This backing may either consist of a list of types and their corresponding DOMPromises (for ClipboardItems
        that come from the page), or may consist of a list of items that will ask the platformr pasteboard for their
        data (to be supported in a future patch).

        See below for more details.

        Test: editing/async-clipboard/clipboard-item-basic.html

        * Modules/async-clipboard/Clipboard.h:
        * Modules/async-clipboard/ClipboardItem.cpp:
        (WebCore::clipboardItemPresentationStyle):
        (WebCore::ClipboardItem::ClipboardItem):

        Pass in the parent Clipboard object for ClipboardItems that are backed by the platform pasteboard (which are
        returned by Clipboard.read()). (Note that this doesn't make any difference until this codepath is actually
        exercised when we add support for Clipboard.read()).

        (WebCore::ClipboardItem::create):
        (WebCore::ClipboardItem::types const):
        (WebCore::ClipboardItem::getType):

        Plumb types() and getType() to the clipboard item's datasource.

        (WebCore::ClipboardItem::navigator):

        Make navigator() return the parent Clipboard object's navigator.

        * Modules/async-clipboard/ClipboardItem.h:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp: Added.
        (WebCore::blobFromString):
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemBindingsDataSource):

        Store the given list of types and DOM promises.

        (WebCore::ClipboardItemBindingsDataSource::types const):
        (WebCore::ClipboardItemBindingsDataSource::getType):

        Implement getType() by finding the matching promised type in the item's array of types, and waiting for the
        promise to either resolve or reject. If the promise resolves to either a string or blob, we deliver the result
        back to the page by resolving the promise returned by getType(). Otherwise, we reject it.

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.h:
        * Modules/async-clipboard/ClipboardItemDataSource.h:
        (WebCore::ClipboardItemDataSource::ClipboardItemDataSource):
        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.cpp:

        Add a stub implementation of a clipboard item data source that is backed by data in the platform pasteboard. In
        a future patch, this will implement getType() by calling out to the platform pasteboard.

        (WebCore::ClipboardItemPasteboardDataSource::ClipboardItemPasteboardDataSource):
        (WebCore::ClipboardItemPasteboardDataSource::types const):
        (WebCore::ClipboardItemPasteboardDataSource::getType):
        * Modules/async-clipboard/ClipboardItemPasteboardDataSource.h:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:

        Unrelated build fixes, due to changes in unified source groupings.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/UTIUtilities.mm:

        More build fixes, due to changes in unified source groupings.

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

        [LFC][IFC] Add support for text-transform: uppercase/lowercase
        https://bugs.webkit.org/show_bug.cgi?id=202968
        <rdar://problem/56278141>

        Reviewed by Antti Koivisto.

        The text content on the layout box should be in its final state (This might change if we actually need the original content for some reason though).

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::applyTextTransform):
        (WebCore::Layout::TreeBuilder::createLayoutBox):

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

        Handle service worker loads through NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=202309

        Reviewed by Alex Christensen.

        Allow to serialize HTTP header names as enumeration.
        Updated SWServer ability to handle schemes by adding built-in support for HTTP and HTTPS as done in LegacySchemeRegistry.

        Covered by existing tests.

        * loader/ResourceLoaderOptions.h:
        * platform/network/create-http-header-name-table:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::canHandleScheme const):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):

2019-10-14  Tim Horton  <timothy_horton@apple.com>

        Unify sources for bindings more densely
        https://bugs.webkit.org/show_bug.cgi?id=202918

        Reviewed by Simon Fraser.

        No new tests, just a build time speedup.
        For me, this is a reliable 17% boost on the WebCore Build Time Benchmark.

        * Scripts/generate-unified-sources.sh:
        Use dense bundles for JS* and bindings/js/*.
        This seems acceptable for a few reasons:

        - most of the time building these files is spent parsing the exact
        same set of JSC headers, because the generated bindings code ends
        up including the same set of things

        - the incremental build cost of bundling more bindings sources together
        is small, because the JSC headers dominate the time

        - folks will frequently have to rebuild all of the bindings (on every
        pull, for example, because they indirectly include most JSC headers),
        but rarely end up rebuilding only a single one (in my experience)

        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::readableStreamCallFunction):
        (WebCore::ReadableStreamDefaultController::invoke):
        (WebCore::callFunction): Deleted.
        Deduplicate static functions that now get bundled together.

        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::currentTimeToMediaTime):
        * platform/graphics/ca/PlatformCALayer.h:
        In older macOS SDKs, CABase.h included ApplicationServices.h, which
        causes lots of trouble.

2019-10-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] White pages in AC mode: Cannot get default EGL display: EGL_BAD_PARAMETER
        https://bugs.webkit.org/show_bug.cgi?id=202362

        Reviewed by Carlos Alberto Lopez Perez.

        The problem is that PlatformDisplayLibWPE::initialize() is failing to initialize the EGL display for some
        reason. We need to understand why, but we should also handle the case of failing to initialize the EGL display
        and simply disable accelerated compositing mode to avoid white pages and crashes in websites using WebGL. This
        patch doesn't actually fix the bug, it just handles the EGL display initialization failure.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::~PlatformDisplay): Set s_sharedDisplayForCompositing to nullptr when the shared
        display for compositing is destroyed.
        * platform/graphics/libwpe/PlatformDisplayLibWPE.cpp:
        (WebCore::PlatformDisplayLibWPE::initialize): Return false when EGL display initialization fails.
        * platform/graphics/libwpe/PlatformDisplayLibWPE.h:

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

        [WK2] Have WebBackForwardCache class coordinate page caching in all WebProcesses
        https://bugs.webkit.org/show_bug.cgi?id=202929
        <rdar://problem/56250421>

        Reviewed by Alex Christensen.

        Drop FrameLoaderClient::didSaveToPageCache() function as it is no longer needed.
        Instead, we now call HistoryItem::notifyChanged() whenever HistoryItem::m_cachedPage
        changes. This communicates to the UIProcess whether or not a HistoryItem has an
        associated CachedPage.

        I also added more release logging to the PageCache and renamed its logging channel
        from PageCache to WebBackForwardCache to match the UIProcess's channel.

        * history/BackForwardItemIdentifier.h:
        (WebCore::BackForwardItemIdentifier::string const):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setCachedPage):
        (WebCore::HistoryItem::takeCachedPage):
        * history/HistoryItem.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        (WebCore::PageCache::take):
        (WebCore::PageCache::removeAllItemsForPage):
        (WebCore::PageCache::get):
        (WebCore::PageCache::remove):
        (WebCore::PageCache::prune):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        * loader/FrameLoaderClient.h:
        * platform/Logging.h:

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

        Outsets for referenced SVG filters are always zero
        https://bugs.webkit.org/show_bug.cgi?id=202826

        Reviewed by Simon Fraser.

        Sometimes the filter is applied only to a part of the image, so we need
        to enlarge the source rectangle such that the border of the result image
        looks like as if the filter were applied to the whole image.

        The filter outsets should only be calculated for the blur and the drop
        shadow filters. The problem is FilterOperations::outsets() was returning
        empty outsets always for the referenced filters.

        Since the referenced filters must be software filters, the fix is to rely
        on CSSFilter in calculating the filter outsets for software filters.

        By adding a virtual function called outset() to the FilterEffect class, 
        we can loop through the CSSFilter::m_effects asking every FilterEffect
        to return its outset(). This function is only overridden by FEDropShadow
        and FEGaussianBlur.

        This should work because RenderLayer builds the CSSFilter when the styleChanged()
        happens through its updateFilterPaintingStrategy(). This will guarantee 
        that m_filters->filter()->outsets() will return the correct outsets for
        the referenced and the non-referenced software filters.

        We should keep FilterOperations::outsets() because it has be used for
        the hardware non-referenced filters. In that case, RenderLayer does not
        build the the filter effects. Therefore m_filters can't be used because
        it is null in this case.

        For accuracy, hasOutsets() implementation is deleted. Having a blur or
        drop shadow filter effect is not enough to say hasOutsets() is true. We
        need to calculate the outsets first and then ask if it isZero() or not.

        Test: css3/filters/svg-blur-filter-clipped.html

        * platform/graphics/IntRectExtent.h:
        (WebCore::operator==):
        (WebCore::operator+=):
        (WebCore::IntRectExtent::expandRect const): Deleted.
        IntRectExtent is only used as a filter outsets. So add the definition of
        IntOutsets in IntRectExtent.h.

        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::outsets const):
        * platform/graphics/filters/FEDropShadow.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateOutsetSize):
        (WebCore::FEGaussianBlur::outsets const):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::outsets const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets const):
        (WebCore::outsetSizeForBlur): Deleted.
        (WebCore::FilterOperations::hasOutsets const): Deleted.
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::hasOutsets const):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeOverlapRegions):

        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::build):
        (WebCore::CSSFilter::computeSourceImageRectForDirtyRect):
        (WebCore::CSSFilter::outsets const):
        Calculate m_outsets once and cache its value for later uses.

        * rendering/CSSFilter.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::hasAncestorWithFilterOutsets const):
        (WebCore::transparencyClipBox):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::filterOutsets const):
        (WebCore::RenderStyle::hasFilterOutsets const): Deleted.

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

        [Clipboard API] Refactor custom pasteboard writing codepaths to handle multiple items
        https://bugs.webkit.org/show_bug.cgi?id=202916

        Reviewed by Tim Horton.

        Adjusts the `Pasteboard::write` codepath for writing PasteboardCustomData to the platform pasteboard, such that
        it accepts multiple PasteboardCustomDatas. No new tests, since there is no behavior change.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::commitToPasteboard):

        Pass in the PasteboardCustomData as a single-item vector.

        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::writeCustomData):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeCustomData):
        * platform/gtk/PlatformPasteboardGtk.cpp:
        (WebCore::PlatformPasteboard::write):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):

        Adjust this method to return the updated change count.

        * platform/libwpe/PasteboardLibWPE.cpp:
        (WebCore::Pasteboard::writeCustomData):
        * platform/libwpe/PlatformPasteboardLibWPE.cpp:
        (WebCore::PlatformPasteboard::write):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::write):

        Add logic to fall back to writing legacy pasteboard types in the case where there is only one item.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeCustomData):

2019-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Deploy smart pointers in RadioButtonGroups and RadioButtonGroup
        https://bugs.webkit.org/show_bug.cgi?id=202942

        Reviewed by Zalan Bujtas.

        Use Ref & WeakPtr instead of raw pointers in RadioButtonGroups and RadioButtonGroup.

        Also made RadioButtonGroups::m_nameToGroupMap a HashMap instead of a unique_ptr of HashMap
        since RadioButtonGroups is lazily created in TreeScope as of r250708.

        No new tests since there should be no observable behavioral change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers const):
        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup): Use WeakHashSet and WeakPtr instead of raw pointers.
        (WebCore::RadioButtonGroup::isEmpty const):
        (WebCore::RadioButtonGroup::checkedButton const):
        (WebCore::RadioButtonGroup::members const):
        (WebCore::RadioButtonGroup::setCheckedButton):
        (WebCore::RadioButtonGroup::updateCheckedState):
        (WebCore::RadioButtonGroup::requiredStateChanged):
        (WebCore::RadioButtonGroup::remove):
        (WebCore::RadioButtonGroup::setNeedsStyleRecalcForAllButtons):
        (WebCore::RadioButtonGroup::updateValidityForAllButtons):
        (WebCore::RadioButtonGroup::contains const):
        (WebCore::RadioButtonGroups::addButton):
        (WebCore::RadioButtonGroups::groupMembers const):
        (WebCore::RadioButtonGroups::updateCheckedState):
        (WebCore::RadioButtonGroups::requiredStateChanged):
        (WebCore::RadioButtonGroups::checkedButtonForGroup const):
        (WebCore::RadioButtonGroups::hasCheckedButton const):
        (WebCore::RadioButtonGroups::isInRequiredGroup const):
        (WebCore::RadioButtonGroups::removeButton):
        * dom/RadioButtonGroups.h:
        (WebCore::RadioButtonGroups):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::radioButtonGroup const):
        (WebCore::HTMLInputElement::checkedRadioButtonForGroup const):
        * html/HTMLInputElement.h:

2019-10-14  David Quesada  <david_quesada@apple.com>

        Remove WebCore::IOSApplication::isWebApp()
        https://bugs.webkit.org/show_bug.cgi?id=181259

        Reviewed by Alex Christensen.

        As of iOS 11, the Web.app process no longer uses WebKit directly, so IOSApplication::isWebApp()
        is never true. Since it's no longer needed, remove it.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isWebApp): Deleted.

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

        REGRESSION (r243682): Quick Look previews loaded from the memory cache render with the wrong content type
        https://bugs.webkit.org/show_bug.cgi?id=202935
        <rdar://problem/54318133>

        Reviewed by Tim Horton.

        When loading a Quick Look preview after deciding content policy, PreviewLoader would update
        DocumentLoader with the preview response (the response that contains the preview's
        Content-Type). It would not update the CachedResource representing the preview main
        resource, however, which caches the underlying ResourceResponse in m_response.

        When loading from the memory cache, it's the CachedResource's response that's used to
        synthesize DocumentLoader::responseReceived. When loading Quick Look previews *before*
        deciding content policy, this response would be the preview response, but as described
        above, when loading after deciding content policy it's the underlying response.

        This patch updates a Quick Look preview's CachedResource with the preview response along
        with updating DocumentLoader so that there is not a mismatch between the resource's content
        type and its underlying data.

        Added a new API test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::previewResponseReceived):
        * loader/DocumentLoader.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::didReceivePreviewResponse):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceivePreviewResponse):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::previewResponseReceived):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::previewResponseReceived):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::previewResponseReceived):
        * loader/cache/CachedResource.h:
        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader _loadPreviewIfNeeded]):

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

        A response body promise should be rejected in case of a failure happening after the HTTP response
        https://bugs.webkit.org/show_bug.cgi?id=202792

        Reviewed by Chris Dumez.

        Test: imported/w3c/web-platform-tests/service-workers/service-worker/fetch-error.https.html

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail):
        Propagate error to fetch body consumer if any.

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

        [Clipboard API] Support writing multiple PasteboardCustomData with SharedBuffers to the pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=202851

        Reviewed by Darin Adler.

        This patch refactors some logic around WebCore::PasteboardCustomData, in preparation for implementing the async
        clipboard API. There are two main goals of this refactoring:

        1. Enable writing multiple items (each backed by PasteboardCustomData) to the platform pasteboard.
        2. Enable writing platform data in the form of SharedBuffers to the platform pasteboard.

        See below for more details; no tests, as there is no change in behavior yet.

        * Headers.cmake:
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

        Move PasteboardCustomData out of Pasteboard.h and into its own file.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::commitToPasteboard):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):
        * platform/Pasteboard.cpp:
        (WebCore::PasteboardCustomData::createSharedBuffer const): Deleted.
        (WebCore::PasteboardCustomData::fromSharedBuffer): Deleted.

        Moved these method implementations to PasteboardCustomData.cpp.

        * platform/Pasteboard.h:

        Refactor PasteboardCustomData so that its member variables are now private, and encapsulated behind methods
        Additionally, make it so that the only way to set data on PasteboardCustomData is to use the writeString,
        writeData, and writeStringInCustomData methods, which ensure that the PasteboardCustomData is always in a
        consistent state.

        * platform/PasteboardCustomData.cpp: Added.
        (WebCore::copyPlatformData):
        (WebCore::PasteboardCustomData::Entry::Entry):
        (WebCore::PasteboardCustomData::Entry::operator=):

        Refactor the implementation of PasteboardCustomData, so that it contains a list of PasteboardCustomData entries
        instead of individual Vectors and HashMaps.

        (WebCore::PasteboardCustomData::PasteboardCustomData):
        (WebCore::PasteboardCustomData::createSharedBuffer const):
        (WebCore::PasteboardCustomData::fromSharedBuffer):
        (WebCore::PasteboardCustomData::writeString):
        (WebCore::PasteboardCustomData::writeData):
        (WebCore::PasteboardCustomData::writeStringInCustomData):
        (WebCore::PasteboardCustomData::addOrMoveEntryToEnd):

        Move logic from StaticPasteboard into PasteboardCustomData, and refactor these methods to handle
        Vector<PasteboardCustomData::Entry>.

        (WebCore::PasteboardCustomData::clear):
        (WebCore::PasteboardCustomData::operator=):
        (WebCore::PasteboardCustomData::orderedTypes const):
        (WebCore::PasteboardCustomData::hasData const):
        (WebCore::PasteboardCustomData::hasSameOriginCustomData const):
        (WebCore::PasteboardCustomData::sameOriginCustomStringData const):
        (WebCore::PasteboardCustomData::readBuffer const):
        (WebCore::PasteboardCustomData::readString const):
        (WebCore::PasteboardCustomData::readStringInCustomData const):
        (WebCore::PasteboardCustomData::forEachType const):
        (WebCore::PasteboardCustomData::forEachPlatformString const):
        (WebCore::PasteboardCustomData::forEachCustomString const):
        (WebCore::PasteboardCustomData::forEachPlatformStringOrBuffer const):

        Moved these method implementations from StaticPasteboard to PasteboardCustomData, and also introduced some new
        methods to help iterate through types and data.

        * platform/PasteboardCustomData.h: Added.
        (WebCore::PasteboardCustomData::origin const):
        (WebCore::PasteboardCustomData::setOrigin):
        (WebCore::PasteboardCustomData::data const):
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::decoder const):
        * platform/SharedBuffer.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::hasData):
        (WebCore::StaticPasteboard::typesSafeForBindings):
        (WebCore::StaticPasteboard::typesForLegacyUnsafeBindings):
        (WebCore::StaticPasteboard::readString):
        (WebCore::StaticPasteboard::readStringInCustomData):
        (WebCore::StaticPasteboard::writeString):
        (WebCore::StaticPasteboard::writeData):
        (WebCore::StaticPasteboard::writeStringInCustomData):
        (WebCore::StaticPasteboard::clear):
        (WebCore::StaticPasteboard::takeCustomData):
        (WebCore::StaticPasteboard::StaticPasteboard): Deleted.

        Refactor StaticPasteboard to now contain a PasteboardCustomData; additionally, adjust several methods in
        StaticPasteboard to simply call into PasteboardCustomData to write, read, or clear data.

        (WebCore::updateTypes): Deleted.
        * platform/StaticPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::readStringInCustomData):
        (WebCore::Pasteboard::readOrigin):
        (WebCore::PasteboardCustomData::cocoaType): Deleted.

        Moved the implementation of PasteboardCustomData::cocoaType from PasteboardCocoa.mm to
        PasteboardCustomDataCocoa.mm.

        * platform/cocoa/PasteboardCustomDataCocoa.mm: Added.
        (WebCore::PasteboardCustomData::cocoaType):
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::changeCount const):
        (WebCore::registerItemsToPasteboard):
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::write):

        Support writing multiple PasteboardCustomData objects to the platform pasteboard on iOS, by generating
        NSItemProviders for each one. This refactors the existing `registerItemToPasteboard` helper to handle multiple
        registration lists, renames it to `registerItemsToPasteboard` (plural), and then reimplements
        `registerItemToPasteboard` in terms of `registerItemsToPasteboard`.

        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::createItemProviderRegistrationList):

        Adjust these to use getters on PasteboardCustomData instead of accessing the member variables directly.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard init]):
        (-[WebItemProviderPasteboard stageRegistrationLists:]):
        (-[WebItemProviderPasteboard clearRegistrationLists]):
        (-[WebItemProviderPasteboard takeRegistrationLists]):

        Refactor registration list staging on WebItemProviderPasteboard to support multiple registration lists, each
        representing a single item provider.

        (-[WebItemProviderPasteboard stageRegistrationList:]): Deleted.
        (-[WebItemProviderPasteboard takeRegistrationList]): Deleted.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):
        * platform/mac/PasteboardWriter.mm:
        (WebCore::createPasteboardWriter):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):
        (WebCore::PlatformPasteboard::write):

        Support writing multiple PasteboardCustomData objects to the platform pasteboard on macOS, by creating and
        setting NSPasteboardItems for each custom data. This means that instead of using legacy macOS pasteboard types,
        we need to use the "modern" NSPasteboardTypes when writing each item. This is because NSPasteboardItem quietly
        fails when attempting to set data for a legacy pasteboard type.

        (WebCore::createPasteboardItem):

2019-10-14  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251081.

        Broke macOS and iOS builds

        Reverted changeset:

        "transform-box: content-box, stroke-box missing"
        https://bugs.webkit.org/show_bug.cgi?id=201892
        https://trac.webkit.org/changeset/251081

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

        Reset maxCanvasPixelMemory between tests
        https://bugs.webkit.org/show_bug.cgi?id=202941
        <rdar://problem/56260865>

        Reviewed by Wenson Hsieh.

        Reset the maximum canvas memory between tests.

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

2019-10-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] font-family:system-ui on Chinese systems don't get Chinese quote marks
        https://bugs.webkit.org/show_bug.cgi?id=202778

        Unreviewed.

        Addressing post-review comment.

        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::createSystemUIFont):

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

        REGRESSION: [iOS 13?] TestWebKitAPI.SharedBufferTest.tryCreateArrayBufferLargeSegments is failing
        https://bugs.webkit.org/show_bug.cgi?id=201902

        Reviewed by Ryosuke Niwa.

        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::WebCore::createAttestedCredentialDataFromU2fRegisterResponse):

2019-10-14  Russell Epstein  <russell_e@apple.com>

        Unreviewed, rolling out r251081.

        Broke macOS and iOS builds.

        Reverted changeset:

        "transform-box: content-box, stroke-box missing"
        https://bugs.webkit.org/show_bug.cgi?id=201892
        https://trac.webkit.org/changeset/251081

2019-10-14  Dirk Schulze  <krit@webkit.org>

        transform-box: content-box, stroke-box missing
        https://bugs.webkit.org/show_bug.cgi?id=201892

        Reviewed by Simon Fraser.

        Added the keywords content-box and stroke-box to the
        transform-box CSS property.
        Those keywords were added to the spec after the implementation
        in WebKit.

        Test: transforms/transform-box.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TransformBox const):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        (WebCore::transformBoxToCSSBoxType):
        (WebCore::RenderLayer::currentTransform const):
        * rendering/style/RenderStyleConstants.h:
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::animatedLocalTransform const):

2019-10-14  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r251045.

        Broke internal builds

        Reverted changeset:

        "AX: Make AXIsolatedTree compile again"
        https://bugs.webkit.org/show_bug.cgi?id=202702
        https://trac.webkit.org/changeset/251045

2019-10-14  youenn fablet  <youenn@apple.com>

        Reuse existing web processes for running service workers
        https://bugs.webkit.org/show_bug.cgi?id=202195

        Reviewed by Chris Dumez.

        Update implementation to be able to run service workers jointly with page.
        Add internals API to get the process ID.
        This allows writing tests to check whether a service worker is in the same process as its client or not.

        Test: http/wpt/service-workers/service-worker-different-process.https.html

        * testing/Internals.cpp:
        (WebCore::Internals::processIdentifier const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::processIdentifier const):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):
        Do not register dummy documents whose sole purpose is to do loading for service workers.
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::setConnection):
        Now that connections might be created more than once on a given process,
        Make sure that the replaced connection is stopped or there is no replaced connection.
        (WebCore::SWContextManager::stopAllServiceWorkers):
        Add routine to stop all service workers running in a given web process.
        * workers/service/context/SWContextManager.h:
        (WebCore::SWContextManager::Connection::isClosed const):
        (WebCore::SWContextManager::Connection::setAsClosed):

2019-10-13  Tim Horton  <timothy_horton@apple.com>

        Stop 'using namespace *Names' in files generated by make_names.pl
        https://bugs.webkit.org/show_bug.cgi?id=202907

        Reviewed by Geoffrey Garen.

        * dom/make_names.pl:
        (printFunctionTable):
        (printFactoryCppFile):
        (printWrapperFactoryCppFile):
        Stop 'using namespace SVGNames' and 'using namepace HTMLNames' in
        files generated by make_names.pl. Just use fully-qualified names.

        There is some overlap between the two namespaces, so this is a
        prerequsite for doing more aggressive unified source bundling in bindings.

2019-10-13  Tim Horton  <timothy_horton@apple.com>

        Don't include ApplicationServices in npapi.h
        https://bugs.webkit.org/show_bug.cgi?id=202911

        Reviewed by Sam Weinig.

        * plugins/npapi.h:
        Just include CoreGraphics.h, not ApplicationServices.h.
        ApplicationServices.h pulls in all sorts of crazy things like
        QuickDraw headers that have symbol conflicts with JSC (like Handle).

2019-10-13  Stephan Szabo  <stephan.szabo@sony.com>

        Wincairo build broken: EventLoop.h: No such file or directory
        https://bugs.webkit.org/show_bug.cgi?id=202893

        Reviewed by Fujii Hironori.

        Remove include of EventLoop.h.

        * platform/network/curl/SynchronousLoaderClientCurl.cpp:

2019-10-13  Konstantin Tokarev  <annulen@yandex.ru>

        Fix compilation of Crypto.cpp on macOS with !WEB_CRYPTO
        https://bugs.webkit.org/show_bug.cgi?id=202895

        Reviewed by Alexey Proskuryakov.

        Crypto.cpp does not use getCommonCryptoDigestAlgorithm(), defined in
        CommonCryptoUtilities.h, but requires CommonCrypto includes which are
        coming with it. However, when WEB_CRYPTO is disabled necessary
        transitive includes are missing.

        * page/Crypto.cpp:

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

        Convert ENinePieceImageRule into an enum class and rename
        https://bugs.webkit.org/show_bug.cgi?id=202889

        Reviewed by Alex Christensen.

        Enum classify ENinePieceImageRule.
        
        The bitfield in NinePieceImage isn't saving anything so don't use one there.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForRepeatRule):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapNinePieceImageRepeat):
        * css/StyleBuilderCustom.h:
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):
        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::NinePieceImage):
        (WebCore::NinePieceImage::computeMiddleTileScale):
        (WebCore::NinePieceImage::computeTileScales):
        (WebCore::NinePieceImage::Data::Data):
        (WebCore::NinePieceImage::Data::create):
        * rendering/style/NinePieceImage.h:
        (WebCore::NinePieceImage::horizontalRule const):
        (WebCore::NinePieceImage::setHorizontalRule):
        (WebCore::NinePieceImage::verticalRule const):
        (WebCore::NinePieceImage::setVerticalRule):

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

        Clarify the naming of the radius-related functions on BorderData
        https://bugs.webkit.org/show_bug.cgi?id=202888

        Reviewed by Alex Christensen.

        BorderData had some confusingly named data members and functions ("topLeft"'"). Renamed
        to include the term "radius".

        * platform/graphics/PathUtilities.cpp:
        (WebCore::PathUtilities::pathWithShrinkWrappedRectsForOutline):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::BorderData):
        (WebCore::BorderData::hasBorderRadius const):
        (WebCore::BorderData::operator== const):
        (WebCore::BorderData::topLeftRadius const):
        (WebCore::BorderData::topRightRadius const):
        (WebCore::BorderData::bottomLeftRadius const):
        (WebCore::BorderData::bottomRightRadius const):
        (WebCore::BorderData::topLeft const): Deleted.
        (WebCore::BorderData::topRight const): Deleted.
        (WebCore::BorderData::bottomLeft const): Deleted.
        (WebCore::BorderData::bottomRight const): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::borderTopLeftRadius const):
        (WebCore::RenderStyle::borderTopRightRadius const):
        (WebCore::RenderStyle::borderBottomLeftRadius const):
        (WebCore::RenderStyle::borderBottomRightRadius const):
        (WebCore::RenderStyle::resetBorderTopLeftRadius):
        (WebCore::RenderStyle::resetBorderTopRightRadius):
        (WebCore::RenderStyle::resetBorderBottomLeftRadius):
        (WebCore::RenderStyle::resetBorderBottomRightRadius):
        (WebCore::RenderStyle::setBorderTopLeftRadius):
        (WebCore::RenderStyle::setBorderTopRightRadius):
        (WebCore::RenderStyle::setBorderBottomLeftRadius):
        (WebCore::RenderStyle::setBorderBottomRightRadius):

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

        Convert LineBoxContain to use an OptionSet<>
        https://bugs.webkit.org/show_bug.cgi?id=202890

        Reviewed by Alex Christensen.

        Use OptionSet<LineBoxContain>.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createLineBoxContainValue):
        * css/CSSLineBoxContainValue.cpp:
        (WebCore::CSSLineBoxContainValue::CSSLineBoxContainValue):
        (WebCore::CSSLineBoxContainValue::customCSSText const):
        * css/CSSLineBoxContainValue.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertLineBoxContain):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeLineBoxContain):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::minLineHeightForReplacedRenderer const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox const):
        (WebCore::RootInlineBox::includeLeadingForBox const):
        (WebCore::RootInlineBox::includeFontForBox const):
        (WebCore::RootInlineBox::includeGlyphsForBox const):
        (WebCore::RootInlineBox::includeInitialLetterForBox const):
        (WebCore::RootInlineBox::includeMarginForBox const):
        (WebCore::RootInlineBox::fitsToGlyphs const):
        (WebCore::RootInlineBox::includesRootLineBoxFontOrLeading const):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        (WebCore::SimpleLineLayout::canUseForStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::lineBoxContain const):
        (WebCore::RenderStyle::setLineBoxContain):
        (WebCore::RenderStyle::initialLineBoxContain):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::styleForFirstLetter):

2019-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] Crash in WebCore::DOMWindow::incrementScrollEventListenersCount
        https://bugs.webkit.org/show_bug.cgi?id=202878

        Reviewed by Alex Christensen.

        Added the missing null check in tryAddEventListener and tryRemoveEventListener for scroll event.

        Test: fast/events/scroll-event-on-document-without-window.html

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

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

        Move CSSReflectionDirection into RenderStyleConstants as ReflectionDirection
        https://bugs.webkit.org/show_bug.cgi?id=202886

        Reviewed by Sam Weinig.

        Make CSSReflectionDirection an enum class ReflectionDirection, and fix the usage sites.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForReflection):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ReflectionDirection const):
        (WebCore::CSSPrimitiveValue::operator CSSReflectionDirection const): Deleted.
        * css/CSSReflectionDirection.h: Removed.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::reflectionOffset const):
        (WebCore::RenderBox::reflectedRect const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleReflection.h:
        (WebCore::StyleReflection::direction const):
        (WebCore::StyleReflection::setDirection):
        (WebCore::StyleReflection::StyleReflection):

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

        Fix the spelling of ThreeDDarkDhasowColor and unwrap the ThemeType enums
        https://bugs.webkit.org/show_bug.cgi?id=202887

        Reviewed by Wenson Hsieh.

        ThreeDDarkDhasowColor was misspelled, and one enum value per line please.

        * platform/ThemeTypes.h:

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

        Add [ActiveDOMObject] to IDLs of ActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=202869

        Reviewed by Ryosuke Niwa.

        Add [ActiveDOMObject] to IDLs of ActiveDOMObjects, this is necessary so that the wrapper
        stays alive as long as ActiveDOMObject::hasPendingActivity() returns true. We may have
        subtle lifetime bugs otherwise.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/entriesapi/FileSystemDirectoryReader.idl:
        * Modules/entriesapi/FileSystemEntry.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/paymentrequest/PaymentResponse.idl:
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VRDisplay.idl:
        * workers/service/ServiceWorkerContainer.idl:

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

        Implement TextStream-based dumping for all the RenderStyle and SVGRenderStyle enum classes
        https://bugs.webkit.org/show_bug.cgi?id=202877

        Reviewed by Dean Jackson.

        Make style-related enum classes dumpable with TextStream,  and make some SVG style-related
        classes dumpable.

        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::operator<<):
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/style/ShadowData.cpp:
        (WebCore::operator<<):
        * rendering/style/ShadowData.h:

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

        Unreviewed, rolling out r251040.

        Broke IDB tests in Debug

        Reverted changeset:

        "Add [ActiveDOMObject] to IDLs of ActiveDOMObjects"
        https://bugs.webkit.org/show_bug.cgi?id=202869
        https://trac.webkit.org/changeset/251040

2019-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Invoke callbacks registered by requestIdleCallback
        https://bugs.webkit.org/show_bug.cgi?id=202824

        Reviewed by Antti Koivisto.

        Invoke callbacks registered by requestIdleCallback unless it's canceled.

        To do this, this patch introduces WindowEventLoop class, which represents the HTML5 event loop:
        https://html.spec.whatwg.org/multipage/webappapis.html#window-event-loop

        Because each and only each agent cluster is meant to have its own window event loop, this class will be shared
        across multiple documents of the same registrable domain:
        https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-agent-cluster-formalism

        Tests: requestidlecallback/requestidlecallback-is-called.html
               requestidlecallback/requestidlecallback-is-not-called-when-canceled.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::eventLoop): Added.
        (WebCore::Document::requestIdleCallback): Associate IdleCallbackController with this document.
        * dom/Document.h:
        (WebCore::Document::idleCallbackController): Added. Used for release assertions.
        * dom/IdleCallbackController.cpp:
        (WebCore::IdleCallbackController::IdleCallbackController): Keeps a weak pointer to Document.
        (WebCore::IdleCallbackController::queueIdleCallback):
        (WebCore::IdleCallbackController::removeIdleCallback):
        (WebCore::IdleCallbackController::queueTaskToStartIdlePeriod): Added.
        (WebCore::IdleCallbackController::startIdlePeriod): Added. Implements the start an idle period algorithm:
        https://w3c.github.io/requestidlecallback/#start-an-idle-period-algorithm
        (WebCore::IdleCallbackController::queueTaskToInvokeIdleCallbacks): Added.
        (WebCore::IdleCallbackController::invokeIdleCallbacks): Added. The invoke idle callback timeout algorithm:
        https://w3c.github.io/requestidlecallback/#invoke-idle-callback-timeout-algorithm
        * dom/IdleCallbackController.h:
        * dom/IdleDeadline.h:
        * dom/WindowEventLoop.cpp: Added.
        (WebCore::WindowEventLoop::create): Added.
        (WebCore::WindowEventLoop::WindowEventLoop): Added.
        (WebCore::WindowEventLoop::queueTask): Added.
        (WebCore::WindowEventLoop::run): Added.
        * dom/WindowEventLoop.h: Added.
        * page/Page.cpp:
        (WebCore::Page::updateRendering): Added comments for the missing pieces.

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

        Back/Forward cache does not work after doing a favorite navigation
        https://bugs.webkit.org/show_bug.cgi?id=202762
        <rdar://problem/56126911>

        Reviewed by Antti Koivisto.

        When a subframe goes into the page cache, make sure we null out the opener
        link of any windows that were opened by this frame. This matches what would
        happened if this frame were closed.

        Covered by the following API tests:
        ProcessSwap.PageCacheAfterProcessSwapByClient
        ProcessSwap.OpenerLinkAfterAPIControlledProcessSwappingOfOpener

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::detachFromAllOpenedFrames):
        * loader/FrameLoader.h:

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

        AX: Make AXIsolatedTree compile again
        https://bugs.webkit.org/show_bug.cgi?id=202702
        <rdar://problem/56084968>

        Reviewed by Joanmarie Diggs.

        Fix compilation and runtime issues when building with ACCESSIBILITY_ISOLATED_TREE.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::treePageCache):
        (WebCore::AXIsolatedTree::nodeForID const):
            - Remove release assert here because the initial request that comes through happens on the main thread.
              We need to handle that case specific case.
        (WebCore::AXIsolatedTree::applyPendingChanges):
        (WebCore::AXIsolatedTree::initializePageTreeForID): Deleted.
        (WebCore::AXIsolatedTree::setInitialRequestInProgress): Deleted.
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/isolatedtree/AXIsolatedTreeNode.cpp:
        (WebCore::AXIsolatedTreeNode::rectAttributeValue const):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper childrenVectorArray]):

2019-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r251043.

        * dom/ShadowRoot.cpp:

2019-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        Add the support for ShadowRoot.delegateFocus
        https://bugs.webkit.org/show_bug.cgi?id=166484
        <rdar://problem/29816058>

        Reviewed by Antti Koivisto.

        Implement delegatesFocus as specified in https://github.com/whatwg/html/pull/4796

        When the shadow root of an element has delegates focus flag set, focusing on the shadow host would automatically
        "delegates" focus to the first focusable element in the shadow tree instead.

        The first focusable element is determined as the first element that is programatically focusable or mouse focusable
        in the flat tree (composed tree in WebKit's terminology) in the case of the element getting focused via DOM API,
        Element.prototype.focus, by via mouse down. In the case of sequential focus navigation (via tab key), it's the
        first keyboard focusable element in the tabIndex order.

        Tests: imported/w3c/web-platform-tests/shadow-dom/focus/click-focus-delegatesFocus-click-method.html
               imported/w3c/web-platform-tests/shadow-dom/focus/click-focus-delegatesFocus-tabindex-varies.html
               imported/w3c/web-platform-tests/shadow-dom/focus/click-focus-delegatesFocus-tabindex-zero.html
               imported/w3c/web-platform-tests/shadow-dom/focus/focus-method-delegatesFocus.html
               imported/w3c/web-platform-tests/shadow-dom/focus/focus-tabindex-order-shadow-negative-delegatesFocus.html
               imported/w3c/web-platform-tests/shadow-dom/focus/focus-tabindex-order-shadow-varying-delegatesFocus.html
               imported/w3c/web-platform-tests/shadow-dom/focus/focus-tabindex-order-shadow-zero-delegatesFocus.html

        * dom/Element.cpp:
        (WebCore::Element::isKeyboardFocusable const): A shadow host with the delegates focus flag is not considered as
        keyboard focusable. The rest is taken care of by the existing logic in FocusController.
        (WebCore::isProgramaticallyFocusable): Extracted from Element::focus.
        (WebCore::findFirstProgramaticallyFocusableElementInComposedTree): Added.
        (WebCore::Element::focus): Added the support for delegatesFocus.
        * dom/Element.h:
        (WebCore::ShadowRootInit::delegatesFocus): Added.
        * dom/Element.idl: Ditto.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot): Added delegatesFocus to the constructor.
        * dom/ShadowRoot.h:
        * page/EventHandler.cpp:
        (WebCore::findFirstMouseFocusableElementInComposedTree): Added.
        (WebCore::EventHandler::dispatchMouseEvent): Added the support for delegatesFocus. Uses the first mouse focusable
        element in the flat tree (composed tree) order.
        * page/FocusController.cpp:
        (WebCore::FocusController::findFirstFocusableElementInShadowRoot):
        * page/FocusController.h:

2019-10-11  Rob Buis  <rbuis@igalia.com>

        Cleanup RuntimeEnabledFeatures includes
        https://bugs.webkit.org/show_bug.cgi?id=202857

        Reviewed by Eric Carlson.

        These classes must have had made use of runtime flags before
        but are not using them anymore.

        * Modules/mediastream/MediaDevices.cpp:
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        * accessibility/AccessibilityObject.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        * css/MediaQueryEvaluator.cpp:
        * css/MediaQueryExpression.cpp:
        * css/parser/CSSParser.cpp:
        * dom/ContainerNode.cpp:
        * dom/EventTarget.cpp:
        * dom/Position.cpp:
        * dom/PseudoElement.cpp:
        * dom/TreeScope.cpp:
        * dom/ViewportArguments.cpp:
        * history/CachedFrame.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLStyleElement.cpp:
        * html/HTMLTrackElement.cpp:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * loader/ResourceLoadNotifier.cpp:
        * page/DOMWindow.cpp:
        * page/EventHandler.cpp:
        * page/PointerLockController.cpp:
        * page/csp/ContentSecurityPolicy.cpp:
        * page/scrolling/ScrollingCoordinator.cpp:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * rendering/RenderFlexibleBox.cpp:
        * rendering/style/RenderStyle.cpp:
        * rendering/updating/RenderTreeUpdater.cpp:

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

        Add [ActiveDOMObject] to IDLs of ActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=202869

        Reviewed by Ryosuke Niwa.

        Add [ActiveDOMObject] to IDLs of ActiveDOMObjects, this is necessary so that the wrapper
        stays alive as long as ActiveDOMObject::hasPendingActivity() returns true. We may have
        subtle lifetime bugs otherwise.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/entriesapi/FileSystemDirectoryReader.idl:
        * Modules/entriesapi/FileSystemEntry.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/paymentrequest/PaymentResponse.idl:
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VRDisplay.idl:
        * workers/service/ServiceWorkerContainer.idl:

2019-10-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Computed: show shorthand properties in addition to longhand ones
        https://bugs.webkit.org/show_bug.cgi?id=200554

        Reviewed by Matt Baker.

        Test: inspector/css/getComputedStyleForNode.html

        Include additional `CSS.CSSComputedStyleProperty` items for shorthand CSS properties when
        calling `CSS.getComputedStyleForNode`.

        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildArrayForComputedStyle const):
        (WebCore::InspectorStyle::collectProperties const): Added.
        (WebCore::InspectorStyle::styleWithProperties const):
        (WebCore::InspectorStyle::populateAllProperties const): Deleted.

2019-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Make WebInspector's remote debug EventLoop code into RunLoop
        https://bugs.webkit.org/show_bug.cgi?id=202716

        Reviewed by Joseph Pecoraro.

        Use RunLoop::cycle.

        * PlatformFTW.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWin.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePausedInternal):
        * platform/SourcesGLib.txt:
        * platform/glib/EventLoopGlib.cpp: Removed.
        * platform/playstation/EventLoopPlayStation.cpp: Removed.
        * platform/win/EventLoopWin.cpp: Removed.

2019-10-11  Dean Jackson  <dino@apple.com>

        REGRESSION (r244239) Layout Test fast/canvas/canvas-too-large-to-draw.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=202870

        Reviewed by Simon Fraser.

        Add an internal method to specify a fake limit of canvas pixel memory
        so our tests produce reproducible results.

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxActivePixelMemory):
        (WebCore::HTMLCanvasElement::setMaxPixelMemoryForTesting):
        * html/HTMLCanvasElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMaxCanvasPixelMemory):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        API Test TestWebKitAPI.WebKit.DefaultQuota is very flaky on High Sierra
        https://bugs.webkit.org/show_bug.cgi?id=202850

        Reviewed by Alex Christensen.

        Make sure the DOMCache / DOMCacheStorage objects stay alive while they have pending
        promises to be resolved.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::hasPendingActivity const):
        * Modules/cache/DOMCache.h:
        * Modules/cache/DOMCache.idl:
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::hasPendingActivity const):
        * Modules/cache/DOMCacheStorage.h:
        * Modules/cache/DOMCacheStorage.idl:

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

        Unreviewed, address post-landing feedback from Darin for r251019.

        Added a new comment for clarity.

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

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

        Only use CFNetwork SPI for metrics where needed
        https://bugs.webkit.org/show_bug.cgi?id=202825

        Reviewed by Joseph Pecoraro.

        * platform/network/NetworkLoadMetrics.h:

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

        Pages frequently fail to enter the back/forward cache due to frames with a quick redirect coming
        https://bugs.webkit.org/show_bug.cgi?id=202768
        <rdar://problem/56132022>

        Reviewed by Alex Christensen.

        When a quick redirect is scheduled with the navigation scheduler, we set the m_quickRedirectComing flag.
        This flag is supposed to get unset if the navigation gets cancelled and when the navigation actually
        happens. However, for a navigation to a javascript: URL, we would return early after executing the JS
        and fail to reset the m_quickRedirectComing flag. Later on, we would fail to enter the page cache because
        we would think that the iframe still has a quick redirect scheduled.

        Test: fast/history/page-cache-iframe-js-url.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        Reset the m_quickRedirectComing flag if we return early after executing
        the javascript URL.

        (WebCore::FrameLoader::stopForPageCache):
        Stop policy checks & cancel scheduled navigations after stopping loads. Stopping loads may
        run script which may in theory schedule new navigations. This is hardening.

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

        Position::upstream/downstream should not need to call ensureLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=202203

        Reviewed by Zalan Bujtas.

        This avoids forced switch to complex text layout path by Position constructor and will allow future cleanups.

        Currently simple line path strips end of line whitespace when white-space:pre-wrap is set.
        These are don't affect rendering but they are needed for editing positions.
        This patch makes simple line path match the complex path by generating runs for these whitespaces.

        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::ensureLineBoxesIfNeeded): Deleted.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded):

        Create a new run if isLineBreak bit is set.

        (WebCore::SimpleLineLayout::LineState::removeTrailingWhitespace):
        (WebCore::SimpleLineLayout::LineState::trailingWhitespaceWidth const):
        (WebCore::SimpleLineLayout::computeLineLeft):

        Also compute width of the hanging whitespace when aligning the line. This matches the code
        in updateLogicalWidthForLeft/Right/CenterAlignedBlock in the complex path.

        (WebCore::SimpleLineLayout::preWrap):

        breakSpaces implies preWrap is off.

        (WebCore::SimpleLineLayout::firstFragment):
        (WebCore::SimpleLineLayout::createLineRuns):

        Crete runs also for soft linebreaks in pre-wrap.
        Add whitespace runs to the end of the line in pre-wrap.

        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):

        Hang the whitespace run when wrapping.

        (WebCore::SimpleLineLayout::removeTrailingWhitespace): Deleted.

        Remainging logic moved to the callsite.

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

        Unreviewed, rolling out r250945.

        Broke 18 Debug API tests

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250945

2019-10-11  Bjorn Melinder  <bjornm@spotify.com>

        OfflineAudioContext does not validate allocation of destination buffer
        https://bugs.webkit.org/show_bug.cgi?id=177259

        Reviewed by Eric Carlson.

        Moved the allocation of the destination buffer to the static
        OfflineAudioContext::create method where we are able to handle a failed
        allocation properly and return an Exception. This change handles both
        negative lengths as well as too large lengths where the memory cannot
        be allocated.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        (WebCore::OfflineAudioContext::create):
        * Modules/webaudio/OfflineAudioContext.h:

2019-10-10  Konstantin Tokarev  <annulen@yandex.ru>

        Guard GCrypt-specific code with USE(GCRYPT) instead of PLATFORM macros
        https://bugs.webkit.org/show_bug.cgi?id=202829

        Reviewed by Jiewen Tan.

        * crypto/keys/CryptoKeyEC.h:
        * crypto/keys/CryptoKeyRSA.h:

2019-10-10  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: use more C++ keywords for defining agents
        https://bugs.webkit.org/show_bug.cgi?id=200959
        <rdar://problem/54735374>

        Reviewed by Joseph Pecoraro.

        Add override annotation to overrided virtual methods in inspector code. This
        change is automatically generated by the following command:
        clang-tidy -checks='-*,modernize-use-override' -header-filter='.*inspector.*' -fix -p WebKitBuild/Release/
            WebKitBuild/Release/DerivedSources/JavaScriptCore/unified-sources/UnifiedSource-84c9f43f-*.cpp
            WebKitBuild/Release/DerivedSources/WebCore/unified-sources/UnifiedSource-84c9f43f-*.cpp

        No new tests. No behavior changes.

        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/PageScriptDebugServer.h:
        * inspector/WebInjectedScriptManager.h:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerScriptDebugServer.h:
        * inspector/WorkerToPageFrontendChannel.h:
        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorCPUProfilerAgent.h:
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorLayerTreeAgent.h:
        * inspector/agents/InspectorMemoryAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorWorkerAgent.h:
        * inspector/agents/WebConsoleAgent.h:
        * inspector/agents/WebDebuggerAgent.h:
        * inspector/agents/WebHeapAgent.h:
        * inspector/agents/page/PageAuditAgent.h:
        * inspector/agents/page/PageConsoleAgent.h:
        * inspector/agents/page/PageDOMDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageHeapAgent.h:
        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/page/PageRuntimeAgent.h:
        * inspector/agents/worker/ServiceWorkerAgent.h:
        * inspector/agents/worker/WorkerAuditAgent.h:
        * inspector/agents/worker/WorkerConsoleAgent.h:
        * inspector/agents/worker/WorkerDOMDebuggerAgent.h:
        * inspector/agents/worker/WorkerDebuggerAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.h:
        * inspector/agents/worker/WorkerRuntimeAgent.h:

2019-10-10  Tim Horton  <timothy_horton@apple.com>

        Use HAVE(IOSURFACE_RGB10) instead of PLATFORM(IOS_FAMILY) where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=202823

        Reviewed by Wenson Hsieh.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::layerContentsFormat):
        * platform/ios/LegacyTileGridTile.mm:
        (WebCore::LegacyTileGridTile::LegacyTileGridTile):

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

        [Catalina] LayoutTest fast/canvas/webgl/texImage2D-mse-flip-{true,false}.html failing
        https://bugs.webkit.org/show_bug.cgi?id=202771
        <rdar://problem/49441298>

        Reviewed by Eric Carlson.

        Catalina no longer creates IOSurface-backed CVPixelBuffers by default for certain
        codecs; make the CVPixelBuffers generated by WebCoreDecompressionSession IOSurface-backed
        explicitly by passing in the correct attributes when creating the VTDecompressionSession.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):

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

        [Cocoa] font-family:system-ui on Chinese systems don't get Chinese quote marks
        https://bugs.webkit.org/show_bug.cgi?id=202778
        <rdar://problem/52594556>

        Reviewed by Simon Fraser.

        This was caught by fast/text/international/system-language/han-quotes.html,
        but we didn't have time to fix it until now.

        Test: fast/text/international/system-language/han-quotes.html

        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::createSystemUIFont):

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

        FontFaceSet's ready promise is not always resolved
        https://bugs.webkit.org/show_bug.cgi?id=202548

        Reviewed by Youenn Fablet.

        When we do layout on an element, FontRanges::glyphDataForCharacter() will cause the first
        available font to start loading, but will continue looking at subsequent fonts to see if
        there's a good one we can render while the load is happening. When looking for a fallback
        font, it calls FontRanges::Range::font() with a ExternalResourceDownloadPolicy set to
        Forbid. This is fine, except that a side effect of calling this function is that the
        CSSFontFace marks itself as Loading, which means document.fonts.ready is deferred. Then,
        the load finishes, and the subsequent CSSFontFace is never actually used, meaning it never
        exits the Loading state, which means document.fonts.ready never fires.

        The solution to this is to just only allow the font to enter the Loading state if it's not
        one of these "subsequent" fonts.

        Test: fast/text/fontfaceset-ready-not-fired.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::pump):

2019-10-10  youenn fablet  <youenn@apple.com>

        MockRealtimeVideoSource::setFrameRateWithPreset should not use preset after moving it
        https://bugs.webkit.org/show_bug.cgi?id=202800

        Reviewed by Alexey Proskuryakov.

        This does not affect behavior right now since clients typically get the intrinsic size through media samples.
        But this could create some inconsistencies.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::setFrameRateWithPreset):

2019-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: don't call willDispatchEvent/didDispatchEvent unless there is a listener for the event
        https://bugs.webkit.org/show_bug.cgi?id=202713

        Reviewed by Joseph Pecoraro.

        Fixes failing inspector/timeline/timeline-recording.html after r250672. This was because the
        `InspectorTimelineAgent` expected a corresponding `willDispatchEvent` before it was told
        about the `didDispatchEvent`, which wasn't happening since only `willDispatchEvent` would
        early-return if the `DOMWindow` didn't have any event listeners for the dispatched event. By
        making the `DOMWindow::dispatchEvent` itself early-return in that case, it now handles both
        `willDispatchEvent` and `didDispatchEvent`, ensuring that they are always called in pairs.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::innerInvokeEventListeners):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        `InspectorInstrumentation::willDispatchEventImpl` was always called with `hasEventListeners`
        as `true`, so there's no reason to keep that parameter around. Similarly, the change inside
        `DOMWindow::dispatchEvent` will make it so that the same is true for
        `InspectorInstrumentation::willDispatchEventOnWindowImpl` as well.

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

        Flaky Test: media/media-source/media-source-page-cache.html
        https://bugs.webkit.org/show_bug.cgi?id=202775

        Reviewed by Eric Carlson.

        SourceBufferList should never prevent entering the page cache, even if it has
        pending events in its queue. Its queue is a MainThreadGenericEventQueue, which
        is Page Cache-aware and will properly suspend the firing of events when needed.

        No new tests, covered by flaky test which should no longer be.

        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::canSuspendForDocumentSuspension const):

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

        Add a unit test for StorageQuotaManager
        https://bugs.webkit.org/show_bug.cgi?id=202755

        Reviewed by Youenn Fablet.

        Expose state of StorageQuotaManager for newly added unit test.

        * storage/StorageQuotaManager.h:
        (WebCore::StorageQuotaManager::state const):

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

        Support programmatic paste requests on macOS
        https://bugs.webkit.org/show_bug.cgi?id=202773
        <rdar://problem/48957166>

        Reviewed by Tim Horton.

        Adds support for programmatic paste requests on macOS. See below for more details.

        Tests: editing/pasteboard/dom-paste/dom-paste-confirmation.html
               editing/pasteboard/dom-paste/dom-paste-consecutive-confirmations.html
               editing/pasteboard/dom-paste/dom-paste-rejection.html
               editing/pasteboard/dom-paste/dom-paste-requires-user-gesture.html
               editing/pasteboard/dom-paste/dom-paste-same-origin.html

        * editing/EditorCommand.cpp:
        (WebCore::defaultValueForSupportedPaste):
        (WebCore::supportedPaste):
        (WebCore::allowPasteFromDOM):
        (WebCore::enabledPaste):

        Fixes an existing bug uncovered by the layout test editing/execCommand/clipboard-access.html, which tests the
        results of `document.queryCommandEnabled("copy")` and `document.queryCommandEnabled("paste")`. The problem here
        is that document.queryCommandEnabled("paste") returns true if DOM paste access requests are enabled, regardless
        of whether or not there is an active user gesture. This is inconsistent with the behavior of "copy" and "cut",
        which return false in the case where there is no user gesture (and the clipboard access policy is also equal to
        ClipboardAccessPolicy::RequiresUserGesture -- refer to `allowCopyCutFromDOM`).

        When pasting, we only DOM paste access requests to be triggered only in the case where there is a user gesture.
        This means that enabledPaste should additionally be gated on a user gesture check. For consistency with the
        implementation of `enabledCopy`, we introduce a `allowPasteFromDOM` helper that is similar to
        `allowCopyCutFromDOM`, and additionally check this constraint when the paste command's source is the DOM (as
        opposed to a menu or key binding).

        This adjustment also adds a missing canDHTMLPaste() check prior to consulting canPaste(). This ensures that when
        evaluating document.queryCommandEnabled("Paste"), we'll dispatch a "beforepaste" event, similar to how
        evaluating document.queryCommandEnabled("Copy") dispatches a "beforecopy" event.

        * platform/LocalizedStrings.h:

        Mark a function as WEBCORE_EXPORT.

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

        [GTK][WPE] Lots of media related tests crashing or flaky after r250918 - [ Mac WK2 ] Layout Test fast/mediastream/MediaStreamTrack-getSettings.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=202784

        Unreviewed, fix GTK and WPE test crashes.

        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeAudioSource::render): Reconfigure if necessary.
        (WebCore::WrappedMockRealtimeAudioSource::reconfigure): New, setup for rendering.
        (WebCore::WrappedMockRealtimeAudioSource::settingsDidChange): Call reconfigure.

2019-10-10  youenn fablet  <youenn@apple.com>

        Remove unified plan runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=202721

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::collectTransceivers):
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiverFromTrackOrKind):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebRTCVP8CodecEnabled):
        * testing/Internals.cpp:
        (WebCore::Internals::useMockRTCPeerConnectionFactory):

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

        DOMCacheStorage should not prevent pages from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202608

        Reviewed by Youenn Fablet.

        Make DOMCacheStorage fully suspendable by queueing all its asynchronous promise resolutions
        to a SuspendableTaskQueue. This makes sure that no promises are resolved while suspended
        in the page cache.

        Test: http/tests/navigation/page-cache-domcachestorage-pending-promise.html

        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::DOMCacheStorage):
        (WebCore::DOMCacheStorage::doSequentialMatch):
        (WebCore::DOMCacheStorage::match):
        (WebCore::DOMCacheStorage::has):
        (WebCore::DOMCacheStorage::open):
        (WebCore::DOMCacheStorage::doOpen):
        (WebCore::DOMCacheStorage::remove):
        (WebCore::DOMCacheStorage::doRemove):
        (WebCore::DOMCacheStorage::keys):
        (WebCore::DOMCacheStorage::canSuspendForDocumentSuspension const):
        * Modules/cache/DOMCacheStorage.h:

2019-10-10  youenn fablet  <youenn@apple.com>

        Add asserts to MediaStreamPrivate observer routines
        https://bugs.webkit.org/show_bug.cgi?id=202724

        Reviewed by Alex Christensen.

        These methods are only to be called in main thread.
        Add asserts to validate this.
        No change of behavior.

        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::addObserver):
        (WebCore::MediaStreamPrivate::removeObserver):
        (WebCore::MediaStreamPrivate::forEachObserver const):

2019-10-09  youenn fablet  <youenn@apple.com>

        A service worker process should not be created when enqueuing a service worker job
        https://bugs.webkit.org/show_bug.cgi?id=202578
        <rdar://problem/55979690>

        Reviewed by Chris Dumez.

        Ask for a service worker context connection when planning to install or run a service worker.
        This allows to not spin unnecessarily service worker processes for jobs that do not end up installing a service worker.

        Covered by existing tests.

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

2019-10-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the internal iOS build

        * page/PointerCaptureController.h: Add some missing forward declarations.

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

        Unreviewed, fix an asserition after r250937.

        Space increase tasks will be finished once it's started.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::finishSpaceIncreaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):

2019-10-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Refactor Pasteboard item reading functions to work on both iOS and macOS
        https://bugs.webkit.org/show_bug.cgi?id=202647

        Reviewed by Tim Horton.

        Moves some pasteboard helper functions out of iOS-specific code, and into platform-agnostic code. See below for
        more details. There is no change in behavior, as nothing exercises these new pasteboard functions on macOS yet.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::allPasteboardItemInfo const):
        (WebCore::Pasteboard::pasteboardItemInfo const):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::readBuffer):
        (WebCore::Pasteboard::readURL):

        Add some new helpers on Pasteboard to read Strings, data, and URLs from the platform pasteboard. These forward
        to the platform strategy which, in WebKit2, are currently implemented using sync IPC, but could be changed in
        the future to be fully asynchronous.

        * platform/Pasteboard.h:
        (WebCore::Pasteboard::name const):

        Expose a cross-platform name() getter on Pasteboard. On non-Cocoa platforms, this simply returns the empty
        string, but on macOS and iOS, this returns the platform pasteboard name, which is stored in m_pasteboardName.

        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::pathForContentType const):
        (WebCore::PasteboardItemInfo::contentTypeForHighestFidelityItem const):
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):

        Adds a couple of new members to PasteboardItemInfo (which represents metadata about a given item in the platform
        pasteboard). These are changeCount (which is self explanatory), and webSafeTypesByFidelity, which is a list of
        types in fidelity order which contains the list of pasteboard types that are safe to expose to bindings. These
        may include types such as "text/plain", "text/html", "text/uri-list", and "image/png".

        To distinguish this list from the existing contentTypesByFidelity list, I've also renamed contentTypesByFidelity
        to platformTypesByFidelity, to make it more obvious that this other list of types are platform-specific, and not
        generally safe to expose to the web.

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:

        Move several helpers out into platform-agnostic code.

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):
        * platform/cocoa/PlatformPasteboardCocoa.mm: Added.

        Add a new file to contain the implementation of PlatformPasteboard::allPasteboardItemInfo, which is the same
        across Cocoa platforms.

        (WebCore::PlatformPasteboard::allPasteboardItemInfo):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::readString const):
        (WebCore::PlatformPasteboard::readURL const):

        Additionally refactor all methods on PlatformPasteboard that take pasteboard item indices as signed integers
        (`int`) to receive `size_t` values instead.

        (WebCore::PlatformPasteboard::allPasteboardItemInfo): Deleted.
        * platform/libwpe/PasteboardLibWPE.cpp:
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::read):
        * platform/libwpe/PlatformPasteboardLibWPE.cpp:
        (WebCore::PlatformPasteboard::readString const):

        Add an implementation stub for WPE.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::modernPasteboardTypeForWebSafeMIMEType):
        (WebCore::webSafeMIMETypeForModernPasteboardType):

        Add helpers to convert between modern NSPasteboardTypes and web-safe types. While some logic exists today on
        macOS to convert between legacy pasteboard types and web-safe types, conversion between the modern pasteboard
        types and web-safe types are needed since NSPasteboardItem's types only support NSPasteboardTypes and
        dynamically declared types that match the format of a universal type identfier (for instance, "com.foo.bar").

        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::readString const):
        (WebCore::PlatformPasteboard::readURL const):
        (WebCore::PlatformPasteboard::count const):
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

        Implement all of these helpers by looking up the NSPasteboardItem at the given item index and querying it for
        data for non-legacy pasteboard types.

        (WebCore::PlatformPasteboard::itemAtIndex const):

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

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Use the new CompactPointerTuple capability to replace CompactPointerTuple<RenderObject*, uint8_t>
        with CompactPointerTuple<RenderObject*, OptionSet<ElementStyleFlag>> in Node.h.

        * dom/Node.h:
        (WebCore::Node::hasStyleFlag const):
        (WebCore::Node::setStyleFlag):
        (WebCore::Node::clearStyleFlags):
        Update code now that we support CompactPointerTuple<..., OptionSet<...>>.

2019-10-09  John Wilander  <wilander@apple.com>

        IsLoggedIn: Add as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=202707
        <rdar://problem/56095064>

        Reviewed by Brent Fulgham and Chris Dumez.

        IsLoggedIn was proposed to the WebAppSec WG at TPAC 2019.
        So far there is only an explainer posted to the mailing list:
        https://lists.w3.org/Archives/Public/public-webappsec/2019Sep/0004.html

        This patch adds the three experimental web APIs:
        - Promise<void> setLoggedIn()
        - Promise<void> setLoggedOut()
        - Promise<bool> isLoggedIn()

        It also tests that those APIs are only exposed in secure contexts.

        The functionality is implemented as a supplement to Navigator.

        Tests: http/tests/is-logged-in/available-in-secure-contexts.https.html
               http/tests/is-logged-in/unavailable-in-insecure-contexts.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/NavigatorIsLoggedIn.cpp: Added.
        (WebCore::NavigatorIsLoggedIn::from):
        (WebCore::NavigatorIsLoggedIn::supplementName):
        (WebCore::NavigatorIsLoggedIn::setLoggedIn):
        (WebCore::NavigatorIsLoggedIn::setLoggedOut):
        (WebCore::NavigatorIsLoggedIn::isLoggedIn):
        * page/NavigatorIsLoggedIn.h: Added.
        * page/NavigatorIsLoggedIn.idl: Added.
        * page/PointerCaptureController.cpp:
        * page/PointerCaptureController.h:
        * page/Settings.yaml:

2019-10-09  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r250930.

        Broke watchOS Builds

        Reverted changeset:

        "Add support for CompactPointerTuple<..., OptionSet<...>>"
        https://bugs.webkit.org/show_bug.cgi?id=201316
        https://trac.webkit.org/changeset/250930

2019-10-09  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Move the mock testing entrance to Internals
        https://bugs.webkit.org/show_bug.cgi?id=202560
        <rdar://problem/55973793>

        Reviewed by Chris Dumez.

        This patch moves TestRunner.setWebAuthenticationMockConfiguration to
        Internals.setMockWebAuthenticationConfiguration and removes the old
        entrance. The purpose of this patch is to allow API tests to use
        the same mock infrastructure that is used by layout tests.

        No new tests, covered by updates on existing tests.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::setMockWebAuthenticationConfiguration):
        * testing/Internals.cpp:
        (WebCore::Internals::setMockWebAuthenticationConfiguration):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockWebAuthenticationConfiguration.h: Added.
        (WebCore::MockWebAuthenticationConfiguration::LocalConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::LocalConfiguration::decode):
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::decode):
        (WebCore::MockWebAuthenticationConfiguration::NfcConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::NfcConfiguration::decode):
        (WebCore::MockWebAuthenticationConfiguration::encode const):
        (WebCore::MockWebAuthenticationConfiguration::decode):
        * testing/MockWebAuthenticationConfiguration.idl: Added.

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

        Rename WheelEventTestTrigger and improve naming in related code
        https://bugs.webkit.org/show_bug.cgi?id=202772

        Reviewed by Tim Horton.

        Change the "test trigger" terminology to "monitor wheel events"; after all, tests
        call monitorWheelEvents() and callAfterScrollingCompletes(), and this is not triggering
        a test.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustScrollbarsForLayout):
        (WebCore::FrameView::setScrollPosition):
        (WebCore::FrameView::didAddScrollbar):
        * page/Page.cpp:
        (WebCore::Page::ensureWheelEventTestMonitor):
        (WebCore::Page::ensureTestTrigger): Deleted.
        * page/Page.h:
        (WebCore::Page::wheelEventTestMonitor const):
        (WebCore::Page::clearWheelEventTestMonitor):
        (WebCore::Page::isMonitoringWheelEvents const):
        (WebCore::Page::testTrigger const): Deleted.
        (WebCore::Page::clearTrigger): Deleted.
        (WebCore::Page::expectsWheelEventTriggers const): Deleted.
        * page/WheelEventTestMonitor.cpp: Added.
        (WebCore::WheelEventTestMonitor::WheelEventTestMonitor):
        (WebCore::WheelEventTestMonitor::clearAllTestDeferrals):
        (WebCore::WheelEventTestMonitor::setTestCallbackAndStartNotificationTimer):
        (WebCore::WheelEventTestMonitor::deferForReason):
        (WebCore::WheelEventTestMonitor::removeDeferralForReason):
        (WebCore::WheelEventTestMonitor::triggerTestTimerFired):
        (WebCore::operator<<):
        * page/WheelEventTestMonitor.h: Renamed from Source/WebCore/page/WheelEventTestTrigger.h.
        * page/WheelEventTestTrigger.cpp: Removed.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::platformPrepareForWheelEvents):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::updateIsMonitoringWheelEventsForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::deferWheelEventTestCompletionForReason const):
        (WebCore::AsyncScrollingCoordinator::removeWheelEventTestCompletionDeferralForReason const):
        (WebCore::AsyncScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView): Deleted.
        (WebCore::AsyncScrollingCoordinator::deferTestsForReason const): Deleted.
        (WebCore::AsyncScrollingCoordinator::removeTestDeferralForReason const): Deleted.
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::updateIsMonitoringWheelEventsForFrameView):
        (WebCore::ScrollingCoordinator::updateExpectsWheelEventTestTriggerWithFrameView): Deleted.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateScrollingNode::setIsMonitoringWheelEvents):
        (WebCore::ScrollingStateScrollingNode::dumpProperties const):
        (WebCore::ScrollingStateScrollingNode::setExpectsWheelEventTestTrigger): Deleted.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::isMonitoringWheelEvents const):
        (WebCore::ScrollingStateScrollingNode::expectsWheelEventTestTrigger const): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::deferWheelEventTestCompletionForReason):
        (WebCore::ScrollingTree::removeWheelEventTestCompletionDeferralForReason):
        (WebCore::ScrollingTree::deferTestsForReason): Deleted.
        (WebCore::ScrollingTree::removeTestDeferralForReason): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::deferWheelEventTestCompletionForReason):
        (WebCore::ThreadedScrollingTree::removeWheelEventTestCompletionDeferralForReason):
        (WebCore::ThreadedScrollingTree::deferTestsForReason): Deleted.
        (WebCore::ThreadedScrollingTree::removeTestDeferralForReason): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::deferWheelEventTestCompletionForReason const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::removeWheelEventTestCompletionDeferralForReason const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::deferTestsForReason const): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::removeTestDeferralForReason const): Deleted.
        * platform/Logging.h:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::deferWheelEventTestCompletionForReason const):
        (WebCore::ScrollAnimator::removeWheelEventTestCompletionDeferralForReason const):
        (WebCore::ScrollAnimator::deferTestsForReason const): Deleted.
        (WebCore::ScrollAnimator::removeTestDeferralForReason const): Deleted.
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::setWheelEventTestMonitor):
        (WebCore::ScrollAnimator::ScrollAnimator::setWheelEventTestTrigger): Deleted.
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerClient::deferWheelEventTestCompletionForReason const):
        (WebCore::ScrollControllerClient::removeWheelEventTestCompletionDeferralForReason const):
        (WebCore::ScrollControllerClient::deferTestsForReason const): Deleted.
        (WebCore::ScrollControllerClient::removeTestDeferralForReason const): Deleted.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::startSnapRubberbandTimer):
        (WebCore::ScrollController::stopSnapRubberbandTimer):
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        (WebCore::ScrollController::startDeferringWheelEventTestCompletionDueToScrollSnapping):
        (WebCore::ScrollController::stopDeferringWheelEventTestCompletionDueToScrollSnapping):
        (WebCore::ScrollController::startScrollSnapTimer):
        (WebCore::ScrollController::stopScrollSnapTimer):
        (WebCore::ScrollController::startDeferringTestsDueToScrollSnapping): Deleted.
        (WebCore::ScrollController::stopDeferringTestsDueToScrollSnapping): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture const):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture const):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledSoon):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * rendering/RenderBox.cpp:
        (WebCore::setupWheelEventMonitor):
        (WebCore::RenderBox::setScrollLeft):
        (WebCore::RenderBox::setScrollTop):
        (WebCore::setupWheelEventTestTrigger): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        * rendering/RenderListBox.cpp:
        (WebCore::setupWheelEventTestMonitor):
        (WebCore::RenderListBox::setScrollTop):
        (WebCore::RenderListBox::createScrollbar):
        (WebCore::setupWheelEventTestTrigger): Deleted.
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::monitorWheelEvents):
        (WebCoreTestSupport::setTestCallbackAndStartNotificationTimer):
        (WebCoreTestSupport::clearWheelEventTestMonitor):
        (WebCoreTestSupport::clearWheelEventTestTrigger): Deleted.
        * testing/js/WebCoreTestSupport.h:

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

        IndexedDB: update size to actual disk usage only when estimated increase is bigger than space available
        https://bugs.webkit.org/show_bug.cgi?id=201957

        Reviewed by Youenn Fablet.

        For better performance.

        Covered by existing tests.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::QuotaUser::resetSpaceUsed): m_estimatedSpaceIncrease will be updated when task
        is finished, so no need to clear it when doing reset.
        (WebCore::IDBServer::IDBServer::QuotaUser::computeSpaceUsed):
        * Modules/indexeddb/server/IDBServer.h:

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp: instead of reading file size after each task, just add the 
        task size to known usage and get an estimated usage.
        (WebCore::IDBServer::UniqueIDBDatabase::startSpaceIncreaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::finishSpaceIncreaseTask):
        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::generateUniqueCallbackIdentifier):
        (WebCore::IDBServer::UniqueIDBDatabase::storeCallbackOrFireError):
        (WebCore::IDBServer::UniqueIDBDatabase::openBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didOpenBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformRenameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformCreateIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformRenameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAddAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::performErrorCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::performKeyDataCallback):
        (WebCore::IDBServer::UniqueIDBDatabase::forgetErrorCallback):
        (WebCore::IDBServer::generateUniqueCallbackIdentifier): Deleted.
        (WebCore::IDBServer::UniqueIDBDatabase::updateSpaceUsedIfNeeded): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

        * storage/StorageQuotaManager.cpp: use m_state to decide what action to take on next request. Previously when a 
        request asked for size bigger than space available, we would go to ask for more space directly. Now because IDB
        can be reporting estimated usage, we first ask IDB to compute its actual disk usage and ask for more space if 
        actual space available is smaller than requested size.
        (WebCore::StorageQuotaManager::askUserToInitialize):
        (WebCore::StorageQuotaManager::removeUser):
        (WebCore::StorageQuotaManager::requestSpace):
        (WebCore::StorageQuotaManager::askForMoreSpace):
        (WebCore::StorageQuotaManager::processPendingRequests):
        * storage/StorageQuotaManager.h:
        * storage/StorageQuotaUser.h:
        (WebCore::StorageQuotaUser::computeSpaceUsed):

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

        IndexedDB: include size of index records in size estimate of put/add task
        https://bugs.webkit.org/show_bug.cgi?id=202483

        Reviewed by Geoffrey Garen.

        SQLiteIDBBackingStore has two tables IndexRecords and Records. For add operation add(VALUE, KEY), we add a new 
        record to Records table. If we can extract index value from VALUE for some index, we would add a new record to
        IndexRecords table.

        We estimated the task szie of add task with (KEY_SIZE + VALUE_SIZE), but we didn't count the size that could be
        added to the IndexRecords table. This could lead to storage abuse.

        Test: storage/indexeddb/request-size-estimate.html

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

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

        Youtube.com is unable to enter the back/forward cache on macOS
        https://bugs.webkit.org/show_bug.cgi?id=202754
        <rdar://problem/56117666>

        Reviewed by Eric Carlson.

        As of r250542, the MainThreadGenericEventQueue used by both MediaSource and
        SourceBuffer to fire event is PageCache-aware. As a result, both these
        ActiveDOMObjects can now safety suspend without risking running script while
        in the page cache. I did have to update some logic in MediaSource::removeSourceBuffer()
        to make sure we do not unnecessarily construct new ActiveDOMObjects while
        suspending, as this is not allowed.

        Test: media/media-source/media-source-page-cache.html

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::canSuspendForDocumentSuspension const):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::canSuspendForDocumentSuspension const):
        * Modules/mediasource/SourceBuffer.h:

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

        Add support for CompactPointerTuple<..., OptionSet<...>>
        https://bugs.webkit.org/show_bug.cgi?id=201316

        Reviewed by Yusuke Suzuki.

        Use the new CompactPointerTuple capability to replace CompactPointerTuple<RenderObject*, uint8_t>
        with CompactPointerTuple<RenderObject*, OptionSet<ElementStyleFlag>> in Node.h.

        * dom/Node.h:
        (WebCore::Node::hasStyleFlag const):
        (WebCore::Node::setStyleFlag):
        (WebCore::Node::clearStyleFlags):
        Update code now that we support CompactPointerTuple<..., OptionSet<...>>.

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

        RunResolver::rangeForRendererWithOffsets should check for range end
        https://bugs.webkit.org/show_bug.cgi?id=202761
        <rdar://problem/55917924>

        Reviewed by Antti Koivisto.

        This patch ensures that when rangeForRenderer comes back with a collapsed run (empty range), rangeForRendererWithOffsets returns an empty range as well.

        Test: fast/text/simple-line-layout-range-check-end.html

        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::rangeForRendererWithOffsets const):

2019-10-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Fix video sometimes not appearing
        https://bugs.webkit.org/show_bug.cgi?id=201401

        Reviewed by Xabier Rodriguez-Calvar.

        The code in MediaPlayerPrivateGStreamer::changePipelineState() was
        supposed to call `ensureGLVideoSinkContext()` on upwards transitions
        to PAUSED but the code did not take into account non-step-by-step
        state transitions, which happens frequently with playbin3 in the MSE
        case.

        Before the patch, when playbin3 transitioned from READY to PLAYING
        without stopping for preroll this call would not be made and the
        texture IDs received at the sink would not correspond to the
        compositor GL context, leading to artifacts (often the player controls
        or a blank screen).

        Test: imported/w3c/web-platform-tests/media-source/mediasource-video-is-visible.html

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

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

        [ Mac WK2 ] Layout Test fast/mediastream/MediaStreamTrack-getSettings.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=196400
        <rdar://problem/49567579>

        Reviewed by Youenn Fablet.

        No new tests, this fixes a broken test.

        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::reconfigure): Reconfigure buffers as well.
        (WebCore::MockRealtimeAudioSourceMac::render): Call reconfigure if the buffer isn't
        configured correctly.
        (WebCore::MockRealtimeAudioSourceMac::settingsDidChange): Call reconfigure.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): Set sample rate to default.

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

        Unreviewed, address Darin's post-landing comments for r250912.

        The array should be const.

        * css/CSSDefaultStyleSheets.cpp:

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

        Clean up: Remove pre-macOS Sierra workaround for missing kVK_RightCommand
        https://bugs.webkit.org/show_bug.cgi?id=202597

        Reviewed by Anders Carlsson.

        kVK_RightCommand has been defined in HIToolbox/Events.h since macOS Sierra. We no longer
        need to maintain code to manually define it.

        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):

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

        [CSS Shadow Parts] Minor exportparts attribute parsing cleanups
        https://bugs.webkit.org/show_bug.cgi?id=202740

        Reviewed by Zalan Bujtas.

        * dom/ShadowRoot.cpp:
        (WebCore::parsePartMapping):
        (WebCore::parsePartMappingsList):

        Return the map as the return value.

        (WebCore::ShadowRoot::partMappings const):

2019-10-09  Andy Estes  <aestes@apple.com>

        [iOS] Remove redundant uses of USE(UIKIT_EDITING)
        https://bugs.webkit.org/show_bug.cgi?id=202717

        Reviewed by Anders Carlsson.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::qualifyingNodeAtViewportLocation):
        (WebCore::Frame::approximateNodeAtViewportLocationLegacy):

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

        [iOS] REGRESSION (r250398) Layout Test fast/history/page-cache-element-state-focused.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=202712
        <rdar://problem/56082428>

        Reviewed by Antti Koivisto.

        The test was failing depending on the order in which the tests were executed. The reason is that
        elements would either use the full UA stylesheet (html.css) or the simple one in CSSDefaultStyleSheets.cpp.
        Unfortunately, the outline-width was different on iOS between the simple stylesheet and the full one, causing
        the test output to look different depending on which stylesheet was used.

        Address the issue by making sure that the outline-width is 3px on IOS_FAMILY in the simple stylesheet, to
        be consistent with the value in the full stylesheet (html.css).

        * css/CSSDefaultStyleSheets.cpp:

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

        [LFC][Painting] Decouple content and decoration painting
        https://bugs.webkit.org/show_bug.cgi?id=202718
        <rdar://problem/56104661>

        Reviewed by Antti Koivisto.

        This patch adds support for individual run painting <div><span style="background-color: red">red</span>black</div>.
        This is pretty much all we can do with the current data structures (lack of context).

        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::paintBoxDecoration):
        (WebCore::Display::paintInlineContent):
        (WebCore::Display::Painter::paint):
        (WebCore::Display::paintBlockLevelBoxDecoration): Deleted.
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendInlineContainerEnd):

2019-10-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed build fix for Windows ports
        https://bugs.webkit.org/show_bug.cgi?id=202630
        <rdar://problem/56107907>

        dom/Document.cpp(3990): error C2653: 'MediaStreamTrack': is not a class or namespace name
        dom/Document.cpp(3990): error C3861: 'captureState': identifier not found

        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia): Restored #if ENABLE(MEDIA_STREAM).

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

        [CSS Shadow Parts] Mark as supported in features.json
        https://bugs.webkit.org/show_bug.cgi?id=202730

        Reviewed Ryosuke Niwa.

        * features.json:

2019-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Wayland: do not use EGL_PLATFORM_WAYLAND_KHR with eglGetPlatformDisplayEXT
        https://bugs.webkit.org/show_bug.cgi?id=202689

        Reviewed by Žan Doberšek.

        Use EGL_PLATFORM_WAYLAND_EXT instead. It shouldn't really matter because both are the same value.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::initialize):

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

        [CSS Shadow Parts] Allow exporting single part with multiple names using exportparts attribute
        https://bugs.webkit.org/show_bug.cgi?id=202719

        Reviewed by Ryosuke Niwa.

        Cases like exportparts="part:export1, part:export2" should work.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):

        Allow one part name to expand into multiple names for matching.

        * dom/ShadowRoot.cpp:
        (WebCore::parsePartMappingsList):

        Allow multiple names per mapping.

        (WebCore::ShadowRoot::partMappings const):
        * dom/ShadowRoot.h:

2019-10-09  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r246399): [GStreamer] Problems playing AAC streams
        https://bugs.webkit.org/show_bug.cgi?id=202204

        Reviewed by Xabier Rodriguez-Calvar.

        Push the EOS event in the WebKitWebSrc element when the internal
        queue is empty only for non-live resources. In the live case the
        queue might drain temporarily but that's OK because data would
        still be queued in downstream elements.

        No new tests, the EOS event was pushed too early because of this
        regression but there's no way to differentiate it from an expected
        event in a layout test.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcCreate):

2019-10-09  youenn fablet  <youenn@apple.com>

        MediaStreamTrack does not need to be a Document audio producer
        https://bugs.webkit.org/show_bug.cgi?id=202630

        Reviewed by Eric Carlson.

        Instead of having all tracks being MediaProducer, we can use the new methods introduced for iOS
        to mute/unmute capture tracks and get capture media state.
        This allows to not register tracks that are not capture tracks.
        Covered by existing tests.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::setMuted):
        (WebCore::MediaStreamTrack::applyConstraints):
        (WebCore::MediaStreamTrack::mediaState const):
        (WebCore::MediaStreamTrack::updateCaptureAccordingToMutedState):
        (WebCore::MediaStreamTrack::pageMutedStateDidChange): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):

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

        [CSS Shadow Parts] Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=202644

        Reviewed by Ryosuke Niwa.

        Flip the switch.

        * page/RuntimeEnabledFeatures.h:

2019-10-08  Jiewen Tan  <jiewen_tan@apple.com>

        Partially undo r250811
        https://bugs.webkit.org/show_bug.cgi?id=202715
        <rdar://problem/56084287>

        Reviewed by Chris Dumez.

        This patch changes the SerializedScriptValue to always wrap CryptoKey objects again.
        CryptoKey objects could belong to an array or another object. In those cases, IDBObjectStore
        cannot set the flag for the embedded Cryptokey objects. Neither can postMessage to unset
        the flag. Therefore, there is no way to separate the serialization process into two and
        this patch restores the old behaviour. However, the hardening part of r250811 is kept
        and therefore the crash should still be prevented.

        No new test, updated existing test

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::JSC::setIsWrappingRequiredForCryptoKey): Deleted.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):
        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::allows const):
        (WebCore::CryptoKey::isWrappingRequired const): Deleted.
        (WebCore::CryptoKey::setIsWrappingRequired): Deleted.
        (): Deleted.
        * dom/ScriptExecutionContext.h:

2019-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: modifications to shader modules can be shared between vertex/fragment shaders
        https://bugs.webkit.org/show_bug.cgi?id=202031

        Reviewed by Dean Jackson.

        Test: inspector/canvas/updateShader-webgpu-sharedVertexFragment.html

        * Modules/webgpu/WebGPUPipeline.h:
        * Modules/webgpu/WebGPUComputePipeline.cpp:
        (WebCore::WebGPUComputePipeline::cloneShaderModules): Added.
        (WebCore::WebGPUComputePipeline::recompile):
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::cloneShaderModules): Added.
        (WebCore::WebGPURenderPipeline::recompile):
        Recreate the vertex/fragment/compute shader module(s) when recompiling so that modifications
        to it via this pipeline don't affect other pipelines that also use the same shader module.

        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::updateShader):
        (WebCore::InspectorShaderProgram::buildObjectForShaderProgram): Added.
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateWebGLProgram):
        (WebCore::InspectorCanvasAgent::didCreateWebGPUPipeline):
        Include as part of the `Canvas.event.programCreated` payload a flag indicating whether the
        vertex shader module and fragment shader module are the same for `WebGPURenderPipeline`s.

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

        Copying white text from dark mode WebKit apps and pasting in a light mode app results in white (invisible) text.
        https://bugs.webkit.org/show_bug.cgi?id=202662
        rdar://problem/48677354

        Reviewed by Megan Gardner.

        Covered by new API tests.

        HTMLConverter needs to strip white text colors when the document is in dark mode, like it does for black in light mode.

        * editing/cocoa/HTMLConverter.mm:
        (normalizedColor): Handle dark mode and ignore white.
        (HTMLConverterCaches::colorPropertyValueForNode): Pass element to normalizedColor.

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

        [CSS Shadow Parts] Fix style invalidation with class selector and ::before and ::after
        https://bugs.webkit.org/show_bug.cgi?id=202694

        Reviewed by Ryosuke Niwa.

        Test: fast/css/shadow-parts/invalidation-class-before-after.html

        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateIfNeeded):
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

        Invalidate in the shadow tree if the computed match element is host.

        (WebCore::Style::Invalidator::invalidateInShadowTreeIfNeeded):

        Factor into a function.

        * style/StyleInvalidator.h:

2019-10-08  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fix non-unified builds after r250486
        https://bugs.webkit.org/show_bug.cgi?id=202636

        Reviewed by Youenn Fablet.

        No new tests needed.

        * Modules/fetch/FetchLoader.h: Add missing forward declaration of WebCore::SharedBuffer.
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp: Add missing inclusion of header
        wtf/text/StringConcatenateNumbers.h
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp: Ditto.
        * animation/DocumentTimeline.cpp: Add missing inclusion of the EventNames.h and
        JavaScriptCore/VM.h headers.
        * bindings/js/JSDOMWindowCustom.cpp: Add missing inclusion of the JSDOMConvertCallbacks.h
        header.
        * bindings/js/JSIDBRequestCustom.cpp: Add missing inclusion of the JSDOMConvertIndexedDB.h
        and JSDOMConvertSequences.h headers.
        * bindings/js/JSRemoteDOMWindowCustom.cpp: Add missing inclusion of the
        JSDOMExceptionHandling.h header.
        * bindings/js/ScriptController.cpp: Add missing inclusion of the
        JavaScriptCore/WeakGCMapInlines.h header to avoid missing symbols during linking.
        * bindings/js/ScriptModuleLoader.h: Add missing inclusion of the wtf/HashSet.h header
        and add a forward declaration for the JSC::JSModuleRecord type.
        * bindings/js/WindowProxy.cpp: Add missing inclusion of the JavaScriptCore/StrongInlines.h
        header to avoid missing symbols during linking.
        * css/FontFaceSet.cpp: Add missing inclusion of the DOMPromiseProxy.h header.
        * css/FontFaceSet.h: Add missing inclusion of the IDLTypes.h header.
        * dom/IdleDeadline.h: Add missing inclusion of the wtf/Ref.h header.
        * history/CachedPage.h: Add missing inclusion of the wtf/MonotonicTime.h header.
        * html/canvas/WebGLBuffer.h: Add missing inclusion of the wtf/RefPtr.h header.
        * html/canvas/WebGLFramebuffer.h: Add missing inclusion of the wtf/HashMap.h and
        wtf/Vector.h headers.
        * html/canvas/WebGLProgram.h: Add missing inclusion of the wtf/HashFunctions.h, wtf/Lock.h,
        and wtf/Vector.h headers; add the missing namespace to an usage of WTF::LockHolder.
        * html/canvas/WebGLShader.h: Add missing inclusion of the wtf/text/WTFString.h header.
        * inspector/InspectorController.cpp: Add missing inclusion of the SharedBuffer.h header.
        * inspector/agents/InspectorCanvasAgent.cpp: Add missing inclusion of the ImageBitmap.h
        header.
        * page/DOMWindowExtension.cpp: Add missing inclusion of the Document.h header.
        * page/scrolling/nicosia/ScrollingTreeFixedNode.cpp: Add missing inclusion of the
        ScrollingTreeFrameScrollingNode.h header.
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp: Add missing inclusion
        of the Logging.h header.
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp: Add missing
        inclusion of the ScrollingTree.h header.
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp: Add missing inclusion of the
        ScrollingTreeOverflowScrollProxyNode.h header.
        * platform/SuspendableTaskQueue.cpp: Add missing inclusion of the ScriptExecutionContext.h
        header.
        * workers/Worker.cpp: Add missing inclusion of the JavaScriptCore/ScriptCallStack.h header.

2019-10-08  youenn fablet  <youenn@apple.com>

        MediaStreamTrack should be a PlatformMediaSessionClient instead of MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=202631

        Reviewed by Eric Carlson.

        Make MediaStreamTrack a PlatformMediaSessionClient, which allows tracking tracks that are not owned by a stream.
        MediaStream is no longer a PlatformMediaSessionClient so we move some of MediaStream API implementation to MediaStreamTrack.

        Covered by updated test.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::startProducingData):
        (WebCore::MediaStream::stopProducingData):
        (WebCore::MediaStream::statusDidChange):
        (WebCore::MediaStream::mediaType const): Deleted.
        (WebCore::MediaStream::presentationType const): Deleted.
        (WebCore::MediaStream::characteristics const): Deleted.
        (WebCore::MediaStream::mayResumePlayback): Deleted.
        (WebCore::MediaStream::suspendPlayback): Deleted.
        (WebCore::MediaStream::sourceApplicationIdentifier const): Deleted.
        (WebCore::MediaStream::canProduceAudio const): Deleted.
        (WebCore::MediaStream::processingUserGestureForMedia const): Deleted.
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::mediaType const):
        (WebCore::MediaStreamTrack::presentationType const):
        (WebCore::MediaStreamTrack::characteristics const):
        (WebCore::MediaStreamTrack::mayResumePlayback):
        (WebCore::MediaStreamTrack::suspendPlayback):
        (WebCore::MediaStreamTrack::sourceApplicationIdentifier const):
        (WebCore::MediaStreamTrack::canProduceAudio const):
        (WebCore::MediaStreamTrack::processingUserGestureForMedia const):
        * Modules/mediastream/MediaStreamTrack.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::hasVideo const):
        (WebCore::MediaStreamPrivate::hasAudio const):
        (WebCore::MediaStreamPrivate::hasCaptureVideoSource const): Deleted.
        (WebCore::MediaStreamPrivate::hasCaptureAudioSource const): Deleted.
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:

2019-10-08  Brady Eidson  <beidson@apple.com>

        Service Worker Fetch events should time out.
        https://bugs.webkit.org/show_bug.cgi?id=202188

        Reviewed by Alex Christensen.

        Test: http/tests/workers/service/basic-timeout.https.html

        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::setHasTimedOutAnyFetchTasks):
        (WebCore::SWServerWorker::hasTimedOutAnyFetchTasks const):

2019-10-08  Alexey Shvayka  <shvaikalesh@gmail.com>

        Accept two values in the overflow shorthand
        https://bugs.webkit.org/show_bug.cgi?id=184691

        Reviewed by Simon Fraser.

        In https://github.com/w3c/csswg-drafts/issues/2484 it was resolved to accept one or two values in
        the overflow shorthand, instead of only one. If two values are specified, the first would be used
        for overflow-x and the second for overflow-y. This change was shipped in Firefox 61 and Chrome 68.
        This patch implements new syntax while preserving handling of -webkit-paged-x and -webkit-paged-y.

        Tests: fast/css/cssText-shorthand.html
               fast/css/getComputedStyle/getComputedStyle-overflow.html
               imported/w3c/web-platform-tests/css/css-overflow/overflow-shorthand-001.html
               imported/w3c/web-platform-tests/css/css-overflow/parsing/overflow-computed.html
               imported/w3c/web-platform-tests/css/css-overflow/parsing/overflow-valid.html
               imported/w3c/web-platform-tests/css/cssom/shorthand-values.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeOverflowShorthand):
        (WebCore::CSSPropertyParser::parseShorthand):
        * css/parser/CSSPropertyParser.h:

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

        Unreviewed, fix WebCore's features.json after r250824

        * features.json: Remove an erroneous "specification" key.

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

        Make sure ActiveDOMObject properly deals with detached documents
        https://bugs.webkit.org/show_bug.cgi?id=202596

        Reviewed by Geoffrey Garen.

        For detached document, the script execution context is their context document.
        The ActiveDOMObject constructor taking a Document& would make sure to get the
        document's contextDocument. However, if the ActiveDOMObject constructor taking
        a ScriptExecutionContext* is called, it would assume this is the right script
        execution context, which is unsafe. In this patch, all ActiveDOMObject
        constructors now check for detached documents and make sure to use their
        context document when necessary.

        * dom/ActiveDOMObject.cpp:
        (WebCore::suitableScriptExecutionContext):
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        * dom/Document.h:

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

        Clean up WheelEventTestTriggers logging
        https://bugs.webkit.org/show_bug.cgi?id=202764

        Reviewed by Tim Horton.

        Make DeferTestTriggerReason a bit set, and use OptionSet<> rather than StdSet. Make
        DeferTestTriggerReason and ScrollableAreaReasonMap loggable, and simplify the logging.

        * page/WheelEventTestTrigger.cpp:
        (WebCore::WheelEventTestTrigger::clearAllTestDeferrals):
        (WebCore::WheelEventTestTrigger::deferTestsForReason):
        (WebCore::WheelEventTestTrigger::removeTestDeferralForReason):
        (WebCore::WheelEventTestTrigger::triggerTestTimerFired):
        (WebCore::operator<<):
        (WebCore::dumpState): Deleted.
        * page/WheelEventTestTrigger.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::deferTestsForReason const):
        (WebCore::AsyncScrollingCoordinator::removeTestDeferralForReason const):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::deferTestsForReason const):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::removeTestDeferralForReason const):

2019-10-08  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed. Restabilize non-unified build.

        * Modules/fetch/FetchLoader.h:
        * animation/DocumentTimeline.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSIDBRequestCustom.cpp:
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        * bindings/js/ScriptModuleLoader.h:
        * bindings/js/WindowProxy.cpp:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:
        * css/typedom/StylePropertyMapReadOnly.cpp:
        * history/CachedPage.h:
        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLProgram.cpp:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLShader.h:
        * inspector/InspectorController.cpp:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * workers/Worker.cpp:
        * workers/service/ServiceWorkerContainer.cpp:
        * workers/service/ServiceWorkerGlobalScope.cpp:

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

        [LFC][Painting] Add very basic block and inline painting
        https://bugs.webkit.org/show_bug.cgi?id=202697
        <rdar://problem/56076562>

        Reviewed by Antti Koivisto.

        This is a very basic border/background painting with simple text. No phases/z-index/layers of any kind.

        * layout/displaytree/DisplayBox.h: This seems to be getting out of hand.
        (WebCore::Display::Box::moveBy):
        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::paintBlockLevelBoxDecoration):
        (WebCore::Display::paintInlineContent):
        (WebCore::Display::Painter::paint):
        * layout/floats/FloatingContext.h:
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineRuns const):
        (WebCore::Layout::InlineFormattingState::lineBoxes const):

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

        Unreviewed, try to fix the WinCairo build after r250824

        * dom/IdleDeadline.h:

        Add a missing include for <wtf/Ref.h>, such that the adoptRef function is defined.

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

        Unreviewed, try to fix the open source macOS build after r250824

        * bindings/js/JSDOMConvertRecord.h:

        Add a missing #include for JSDOMGlobalObject. This file utilizes methods on JSDOMGlobalObject, but only ensures
        that it has a forward declaration of JSDOMGlobalObject (by way of including JSDOMExceptionHandling.h through
        JSDOMConvertBase.h).

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

        Unreviewed, update DerivedSources xcfilelists after r250816

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

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

        [Clipboard API] Introduce bindings for the async Clipboard API
        https://bugs.webkit.org/show_bug.cgi?id=202622
        <rdar://problem/56038126>

        Reviewed by Ryosuke Niwa.

        Adds IDL for the async clipboard API (with the exception of delayed item generation interfaces, which
        I'll iterate on and introduce separately). See: https://w3c.github.io/clipboard-apis/#async-clipboard-api for
        more information.

        Tests: editing/async-clipboard/clipboard-interfaces.html
               editing/async-clipboard/clipboard-wrapper-stays-alive.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/async-clipboard/Clipboard.cpp:
        (WebCore::Clipboard::create):
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::navigator):
        (WebCore::Clipboard::eventTargetInterface const):
        (WebCore::Clipboard::scriptExecutionContext const):
        (WebCore::Clipboard::readText):
        (WebCore::Clipboard::writeText):
        (WebCore::Clipboard::read):
        (WebCore::Clipboard::write):

        Stub out these API calls for now by immediately rejecting the given promise.

        * Modules/async-clipboard/Clipboard.h:
        * Modules/async-clipboard/Clipboard.idl:
        * Modules/async-clipboard/ClipboardItem.cpp:
        (WebCore::ClipboardItem::ClipboardItem):
        (WebCore::ClipboardItem::create):
        (WebCore::ClipboardItem::types const):
        (WebCore::ClipboardItem::getType):

        Stub out these API calls for now by immediately rejecting the given promise.

        (WebCore::navigator):
        * Modules/async-clipboard/ClipboardItem.h:
        (WebCore::ClipboardItem::presentationStyle const):
        * Modules/async-clipboard/ClipboardItem.idl:
        * Modules/async-clipboard/NavigatorClipboard.cpp:
        (WebCore::NavigatorClipboard::NavigatorClipboard):
        (WebCore::NavigatorClipboard::clipboard):
        (WebCore::NavigatorClipboard::from):
        (WebCore::NavigatorClipboard::supplementName):
        * Modules/async-clipboard/NavigatorClipboard.h:
        * Modules/async-clipboard/NavigatorClipboard.idl:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/webgpu/WebGPUPipeline.h:

        More unified sources-related build fixes.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/DeviceOrientationOrMotionEvent.cpp:

        Unified sources-related build fix.

        * dom/EventTargetFactory.in:
        * features.json:

        Add Async Clipboard API as a feature in development on webkit.org.

        * page/Settings.yaml:

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

        Fetch: data: URL HEAD request should result in empty response body
        https://bugs.webkit.org/show_bug.cgi?id=175764

        Reviewed by Youenn Fablet.

        Do not build the response body for HEAD requests for data urls:
        https://fetch.spec.whatwg.org/#concept-main-fetch (Step 13)

        Tests: imported/web-platform-tests/fetch/api/basic/scheme-data.any.js
               imported/web-platform-tests/xhr/data-uri.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):

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

        [CSS Shadow Parts] Implement style invalidation
        https://bugs.webkit.org/show_bug.cgi?id=202632

        Reviewed by Ryosuke Niwa.

        Tests: fast/css/shadow-parts/invalidation-class-descendant-combinator-export.html
               fast/css/shadow-parts/invalidation-class-descendant-combinator.html
               fast/css/shadow-parts/invalidation-class-sibling-combinator-export.html
               fast/css/shadow-parts/invalidation-class-sibling-combinator.html

        * css/RuleFeature.cpp:
        (WebCore::isSiblingOrSubject):

        Don't treat crossing to host as moving to ancestor when computing elements impacted by a selector.
        StyleInvalidator expects these relations to be about the host element, shadow tree invalidation in handled separately.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

        Invalidate parts in shadow tree on 'exportparts' attribute mutation.

        (WebCore::Element::partAttributeChanged):

        Invalidate element on 'part' attribute mutation.

        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::Invalidator):
        (WebCore::Style::Invalidator::invalidateIfNeeded):

        Invalidate parts in shadow tree during class and attribute mutation invalidation.

        (WebCore::Style::Invalidator::invalidateShadowParts):
        * style/StyleInvalidator.h:
        (WebCore::Style::Invalidator::dirtiesAllStyle const):
        (WebCore::Style::Invalidator::hasShadowPseudoElementRulesInAuthorSheet const): Deleted.

        Remove an unncessary bool.

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

        Unreviewed. Remove unused WebKitSoupRequestGeneric after r250597

        * platform/Soup.cmake:
        * platform/SourcesSoup.txt:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupRequest const):
        * platform/network/soup/WebKitSoupRequestGeneric.cpp: Removed.
        * platform/network/soup/WebKitSoupRequestGeneric.h: Removed.
        * platform/network/soup/WebKitSoupRequestGenericClient.h: Removed.

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

        [CSS Shadow Parts] Internal shadow pseudo elements should work with ::part
        https://bugs.webkit.org/show_bug.cgi?id=202620

        Reviewed by Ryosuke Niwa.

        Selectors like ::part(foo)::placeholder should work.

        This involves hop out of a UA shadow tree and then from an author shadow tree.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRules):

        If we are matching a pseudo element in a UA shadow tree, see if part rules can match is the surrounding scope.

        (WebCore::ElementRuleCollector::matchPartPseudoElementRulesForScope):
        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):

        Sort rules with both internal pseudo element and ::part to the part bucket.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator):

        Allow multiple ShadowDescendant relations for ::part.

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

        Add IDL for requestIdleCallback
        https://bugs.webkit.org/show_bug.cgi?id=202653

        Reviewed by Geoffrey Garen.

        Added the basic scaffolding for implementing requestIdleCallback disabled by default:
        https://w3c.github.io/requestidlecallback/

        This patch just adds the support for calling requestIdleCallback which generates a monotonically increasing number.
        The callback is never called for now.

        Tests: requestidlecallback/requestidlecallback-enabled.html
               requestidlecallback/requestidlecallback-id.html
               requestidlecallback/requestidlecallback-not-enabled.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Document.cpp:
        (WebCore::Document::requestIdleCallback):
        (WebCore::Document::cancelIdleCallback):
        * dom/Document.h:
        * dom/IdleCallbackController.cpp: Added.
        (WebCore::IdleCallbackController::queueIdleCallback):
        (WebCore::IdleCallbackController::removeIdleCallback):
        * dom/IdleCallbackController.h: Added.
        * dom/IdleDeadline.cpp: Added.
        (WebCore::IdleDeadline::timeRemaining const):
        (WebCore::IdleDeadline::didTimeout const):
        * dom/IdleDeadline.h: Added.
        * dom/IdleDeadline.idl: Added.
        * dom/IdleRequestCallback.h: Added.
        * dom/IdleRequestCallback.idl: Added.
        * dom/IdleRequestOptions.h: Added.
        * dom/IdleRequestOptions.idl: Added.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestIdleCallback):
        (WebCore::DOMWindow::cancelIdleCallback):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/Settings.yaml:

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

        Only wrapping CryptoKeys for IDB during serialization
        https://bugs.webkit.org/show_bug.cgi?id=202500
        <rdar://problem/52445927>

        Reviewed by Chris Dumez.

        Wrapping CryptoKeys during IDB serialization is a legacy request from Netflix when WebKit was an
        early adopter. It is not necessary for other kinds of serialization. However, given existing keys
        stored in users' idb are wrapped, the wrapping/unwrapping mechanism cannot be easily discarded.
        Therefore, this patch restricts the wrapping/unwrapping mechanism to idb only.

        To do so, a isWrappingRequired flag is added to CryptoKey such that whenever idb sees a CryptoKey,
        it can set it. SerializedScriptValue will then only wrap a CryptoKey when this flag is set. Otherwise,
        a new tag UnwrappedCryptoKeyTag is used to store unwrapped CryptoKeys in order to keep the old CryptoKeyTag
        binaries intact. For deserialization, each type will be deserialized differently.

        Besides the above, this patch also hardens WorkerGlobalScope::wrapCryptoKey/unwrapCryptoKey for
        any potential racy issues. CryptoBooleanContainer is introduced to capture boolean in the lambda.
        workerGlobalScope is replaced with workerMessagingProxy. Now, every variables captured in the lambdas
        should be either a copy or a thread safe ref of the original object.

        Test: crypto/workers/subtle/aes-indexeddb.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::JSC::setIsWrappingRequiredForCryptoKey):
        (WebCore::IDBObjectStore::putOrAdd):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):
        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::isWrappingRequired const):
        (WebCore::CryptoKey::setIsWrappingRequired):
        * dom/ScriptExecutionContext.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::CryptoBooleanContainer::create):
        (WebCore::CryptoBooleanContainer::boolean const):
        (WebCore::CryptoBooleanContainer::setBoolean):
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLoaderProxy.h:
        (WebCore::WorkerLoaderProxy::isWorkerMessagingProxy const):
        * workers/WorkerMessagingProxy.h:
        (isType):

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

        Unreviewed, build fix for Windows
        https://bugs.webkit.org/show_bug.cgi?id=202569

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::constructJSWebAnimation):

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

        [JSC] Change signature of HostFunction to (JSGlobalObject*, CallFrame*)
        https://bugs.webkit.org/show_bug.cgi?id=202569

        Reviewed by Saam Barati.

        No behavior change.

        While signature is changed, we still use `state` name for CallFrame* variable since changing this involves massive channge in
        CodeGeneratorJS.pm. When replacing `ExecState*` to `JSGlobalObject*`, we just remove these `state` variable and use `globalObject`
        instead.

        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/PaymentMerchantSession.h:
        * Modules/fetch/FetchResponse.h:
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBKeyRange.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/server/IDBSerializationContext.h:
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::construct):
        * bindings/js/JSDOMConstructor.h:
        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::callThrowTypeError):
        * bindings/js/JSDOMConstructorNotConstructable.h:
        (WebCore::JSDOMConstructorNotConstructable::callThrowTypeError):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::makeThisTypeErrorForBuiltins):
        (WebCore::makeGetterTypeErrorForBuiltins):
        (WebCore::isReadableByteStreamAPIEnabled):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::next):
        * bindings/js/JSDOMNamedConstructor.h:
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunctionOpenDatabase):
        * bindings/js/JSExtendableMessageEventCustom.cpp:
        (WebCore::constructJSExtendableMessageEvent):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::constructJSWebAnimation):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setupModuleScriptHandlers):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptModuleLoader.h:
        * bindings/js/ScriptState.h:
        * bindings/js/StructuredClone.cpp:
        (WebCore::cloneArrayBufferImpl):
        (WebCore::cloneArrayBuffer):
        (WebCore::structuredCloneArrayBuffer):
        (WebCore::structuredCloneArrayBufferView):
        * bindings/js/StructuredClone.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateOperationTrampolineDefinition):
        (GenerateSerializerDefinition):
        (GenerateLegacyCallerDefinitions):
        (GenerateLegacyCallerDefinition):
        (GenerateIterableDefinition):
        (GenerateConstructorDefinitions):
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::jsMapLikePrototypeFunctionGet):
        (WebCore::jsMapLikePrototypeFunctionHas):
        (WebCore::jsMapLikePrototypeFunctionEntries):
        (WebCore::jsMapLikePrototypeFunctionKeys):
        (WebCore::jsMapLikePrototypeFunctionValues):
        (WebCore::jsMapLikePrototypeFunctionForEach):
        (WebCore::jsMapLikePrototypeFunctionAdd):
        (WebCore::jsMapLikePrototypeFunctionClear):
        (WebCore::jsMapLikePrototypeFunctionDelete):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::jsReadOnlyMapLikePrototypeFunctionGet):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionHas):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionEntries):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionKeys):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionValues):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionForEach):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunction):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessage):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactions):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsNotNeeded):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::jsTestCEReactionsStringifierPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterface):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecified):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArguments):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgument):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgument):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionItem):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttribute):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementById):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByName):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::jsTestEnabledBySettingPrototypeFunctionEnabledBySettingOperation):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::construct):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItem):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectInstanceFunctionRegularOperation):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation):
        (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStatic):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorld):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabled):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunction):
        (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResult):
        (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBoolean):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBoolean):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestIndexedSetterWithIdentifierPrototypeFunctionIndexedSetter):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3):
        (WebCore::jsTestInterfaceConstructorFunctionImplementsMethod4):
        (WebCore::jsTestInterfacePrototypeFunctionTakeNodes):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3):
        (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::jsTestIterablePrototypeFunctionEntries):
        (WebCore::jsTestIterablePrototypeFunctionKeys):
        (WebCore::jsTestIterablePrototypeFunctionValues):
        (WebCore::jsTestIterablePrototypeFunctionForEach):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunction):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionNamedSetter):
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionIndexedSetter):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::jsTestNamedDeleterWithIdentifierPrototypeFunctionNamedDeleter):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::jsTestNamedGetterWithIdentifierPrototypeFunctionGetterName):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedSetterWithIdentifierPrototypeFunctionNamedSetter):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionNamedSetter):
        (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionIndexedSetter):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionNamedSetter):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperation):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperation):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::construct):
        (WebCore::jsTestNodePrototypeFunctionTestWorkerPromise):
        (WebCore::jsTestNodePrototypeFunctionCalculateSecretResult):
        (WebCore::jsTestNodePrototypeFunctionGetSecretBoolean):
        (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBoolean):
        (WebCore::jsTestNodePrototypeFunctionEntries):
        (WebCore::jsTestNodePrototypeFunctionKeys):
        (WebCore::jsTestNodePrototypeFunctionValues):
        (WebCore::jsTestNodePrototypeFunctionForEach):
        (WebCore::jsTestNodePrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        (WebCore::callJSTestObj1):
        (WebCore::callJSTestObj2):
        (WebCore::callJSTestObj3):
        (WebCore::callJSTestObj):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation):
        (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStatic):
        (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabled):
        (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethod):
        (WebCore::jsTestObjPrototypeFunctionCalculateSecretResult):
        (WebCore::jsTestObjPrototypeFunctionGetSecretBoolean):
        (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBoolean):
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionByteMethod):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionOctetMethod):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionLongMethod):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjInstanceFunctionUnforgeableMethod):
        (WebCore::jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameter):
        (WebCore::jsTestObjPrototypeFunctionNullableStringMethod):
        (WebCore::jsTestObjConstructorFunctionNullableStringStaticMethod):
        (WebCore::jsTestObjPrototypeFunctionNullableStringSpecialMethod):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableUSVStringArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableByteStringArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgTreatingNullAsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithRecord):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningLong):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningObject):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionPrivateMethod):
        (WebCore::jsTestObjPrototypeFunctionPublicAndPrivateMethod):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecState):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpaces):
        (WebCore::jsTestObjPrototypeFunctionWithDocumentArgument):
        (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgument):
        (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgument):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringAndDefaultValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNull):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsNull):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsEmptyString):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaN):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaN):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLong):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZero):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLong):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZero):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequence):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmpty):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBoolean):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalse):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAny):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalObject):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapper):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNull):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolver):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecord):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromise):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter):
        (WebCore::jsTestObjConstructorFunctionClassMethod):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptional):
        (WebCore::jsTestObjConstructorFunctionClassMethod2):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClamp):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptional):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRange):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptional):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunction):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunction):
        (WebCore::jsTestObjPrototypeFunctionOperationWithOptionalUnionParameter):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence):
        (WebCore::jsTestObjPrototypeFunctionGetElementById):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocument):
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert3):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunction):
        (WebCore::jsTestObjPrototypeFunctionOrange):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethod):
        (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethod):
        (WebCore::jsTestObjPrototypeFunctionAny):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunction):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithException):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunction):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithException):
        (WebCore::jsTestObjPrototypeFunctionTestCustomPromiseFunction):
        (WebCore::jsTestObjConstructorFunctionTestStaticCustomPromiseFunction):
        (WebCore::jsTestObjPrototypeFunctionTestCustomReturnsOwnPromiseFunction):
        (WebCore::jsTestObjPrototypeFunctionTestReturnsOwnPromiseAndPromiseProxyFunction):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverload):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload):
        (WebCore::jsTestObjPrototypeFunctionAttachShadowRoot):
        (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameter):
        (WebCore::jsTestObjPrototypeFunctionBufferSourceParameter):
        (WebCore::jsTestObjPrototypeFunctionLegacyCallerNamed):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimization):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithException):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowFunction):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWorkerFunction):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowAndWorkerFunction):
        (WebCore::jsTestObjPrototypeFunctionToString):
        (WebCore::jsTestObjPrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors1):
        (WebCore::constructJSTestOverloadedConstructors2):
        (WebCore::constructJSTestOverloadedConstructors3):
        (WebCore::constructJSTestOverloadedConstructors4):
        (WebCore::constructJSTestOverloadedConstructors5):
        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::constructJSTestOverloadedConstructorsWithSequence1):
        (WebCore::constructJSTestOverloadedConstructorsWithSequence2):
        (WebCore::JSTestOverloadedConstructorsWithSequenceConstructor::construct):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItem):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventConstructor::construct):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::jsTestSerializationPrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::jsTestSerializationInheritPrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::jsTestSerializationInheritFinalPrototypeFunctionToJSON):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunction):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionReturning):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::jsTestStringifierPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::jsTestStringifierAnonymousOperationPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::jsTestStringifierNamedOperationPrototypeFunctionIdentifier):
        (WebCore::jsTestStringifierNamedOperationPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionIdentifier):
        (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::jsTestStringifierOperationNamedToStringPrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::jsTestStringifierReadOnlyAttributePrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::jsTestStringifierReadWriteAttributePrototypeFunctionToString):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        (WebCore::jsTestTypedefsPrototypeFunctionFunc):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadow):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceArg):
        (WebCore::jsTestTypedefsPrototypeFunctionSequenceOfNullablesArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArg):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfUnionsArg):
        (WebCore::jsTestTypedefsPrototypeFunctionUnionArg):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClamp):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedef):
        (WebCore::jsTestTypedefsPrototypeFunctionPointFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction):
        (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction2):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithException):
        * bridge/c/c_utility.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):
        * crypto/SubtleCrypto.h:
        * css/CSSFontFace.h:
        * dom/CustomElementReactionQueue.h:
        * dom/Document.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/ScriptExecutionContext.h:
        * html/HTMLFrameElementBase.h:
        * html/canvas/WebGLAny.h:
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/page/PageRuntimeAgent.h:
        * page/DOMWindow.h:
        * page/PageConsoleClient.h:
        * page/RemoteDOMWindow.h:
        * page/csp/ContentSecurityPolicy.h:
        * platform/ThreadGlobalData.h:
        * plugins/PluginViewBase.h:
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/Worker.h:
        * workers/WorkerConsoleClient.h:
        * workers/service/ExtendableMessageEvent.h:
        * worklets/WorkletConsoleClient.h:

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

        ASSERTION FAILED: m_transactionOperationsInProgressQueue.first() == &operation in IDBTransaction::operationCompletedOnClient
        https://bugs.webkit.org/show_bug.cgi?id=202552

        Reviewed by Alex Christensen.

        Dispatch task to database thread even if there is QuotaExceededError, to make sure request results are sent in 
        order.

        Modified existing test to cover this: storage/indexeddb/storage-limit.html. Test would hit this assertion 
        without fix.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::requestSpace):
        (WebCore::IDBServer::UniqueIDBDatabase::waitForRequestSpaceCompletion):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStoreAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::performRenameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::performCreateIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndexAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::performRenameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAddAfterQuotaCheck):
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

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

        Unreviewed, build fix after r250666. Fix 32- vs. 64-bit mismatch on
        32-bit builds.

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

2019-10-07  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix for r250786.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):

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

        Fix the Windows build

        * html/ImageBitmap.h:

2019-10-07  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed WinCairo build fix for r250758.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):

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

        focus pseudo class should match a shadow host whose shadow tree contains the focused element
        https://bugs.webkit.org/show_bug.cgi?id=202432

        Reviewed by Antti Koivisto.

        Note that focus pseudo class does not match a shadow host when its shadow tree contains a slot element
        with a focused element or its ancestor assigned since such a shadow host has the actual focused element
        in the same tree as the shadow host. (e.g. the focused element can be a direct child of the host).

        In order to preserve the behavior of focus ring, which should be only drawn on the currently focused
        element and not any shadow host which contains such an element, this patch introduces a new pseudo class,
        -webkit-direct-focus, which is only available in the user agent stylesheet. Putting :host(:focus) rule
        isn't sufficient because style rules inside shadow trees always has a lower precendence than rules
        outside the shadow tree (the tree of its shadow host).

        [1] Also see https://github.com/whatwg/html/pull/4731

        Tests: fast/shadow-dom/direct-focus-pseudo-does-not-match-in-author-stylesheet.html
               fast/shadow-dom/focus-pseudo-matches-on-shadow-host.html
               fast/shadow-dom/focus-pseudo-on-shadow-host-1.html
               fast/shadow-dom/focus-pseudo-on-shadow-host-2.html
               fast/shadow-dom/focus-pseudo-on-shadow-host-3.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const): Added the support for -webkit-direct-focus.
        * css/CSSSelector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule): Ditto.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):: Ditto.
        (WebCore::doesShadowTreeContainFocusedElement):: Ditto.
        (WebCore::SelectorChecker::matchesFocusPseudoClass): Implemented the new behavior.
        (WebCore::SelectorChecker::matchesDirectFocusPseudoClass): Added. Implements the old behavior for
        the focus ring via -webkit-direct-focus pseudo class.
        * css/SelectorChecker.h:
        * css/SelectorPseudoClassAndCompatibilityElementMap.in: Added -webkit-direct-focus.
        * css/html.css: Use -webkit-direct-focus pseudo class to preserve the existing behavior of focus ring.
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo): Ignore -webkit-direct-focus in author and user stylesheets.
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType): Added the support for -webkit-direct-focus.
        * dom/Element.cpp:
        (WebCore::Element::setFocus): Invoke setContainsFocusedElement on each shadow ancestor root of
        the newly focused element. Note that we can't use :focus-within pseudo class since that would also match
        the host of a shadow root which contains a slotted focused element, causing both the shadow host and
        the slotted element to match :focus pseudo class in the host's tree.
        * dom/ShadowRoot.h:

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

        Change Response's statusText's default
        https://bugs.webkit.org/show_bug.cgi?id=191879

        Reviewed by Youenn Fablet.

        Change Response's statusText's default to "".

        Tests: web-platform-tests/fetch/api/response/response-clone.html
               web-platform-tests/fetch/api/response/response-init-001.html

        * Modules/fetch/FetchResponse.h:
        * Modules/fetch/FetchResponse.idl:

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

        DOMCache should not prevent pages from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202590

        Reviewed by Youenn Fablet.

        Allow DOMCache to suspend in the back/forward cache unconditionally, by
        appending all promise resolutions to a SuspendableTaskQueue. This guarantees
        that any asynchronous promise resolution is delayed while in the page cache,
        until the page gets resumed.

        Test: http/tests/navigation/page-cache-domcache-pending-promise.html

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::DOMCache):
        (WebCore::DOMCache::match):
        (WebCore::DOMCache::matchAll):
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::putWithResponseData):
        (WebCore::DOMCache::put):
        (WebCore::DOMCache::remove):
        (WebCore::DOMCache::keys):
        (WebCore::DOMCache::canSuspendForDocumentSuspension const):
        * Modules/cache/DOMCache.h:

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

        PendingImageBitmap should not prevent entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202585

        Reviewed by Tim Horton.

        Add PageCache support to PendingImageBitmap by doing the promise resolution on a
        SuspendableTimer (which properly gets paused while in PageCache).

        Test: fast/history/page-cache-createImageBitmap.html

        * html/ImageBitmap.cpp:

2019-10-07  Dirk Schulze  <krit@webkit.org>

        clip-path: <geometry-box> mapping incorrect
        https://bugs.webkit.org/show_bug.cgi?id=202075

        Reviewed by Simon Fraser.

        For HTML elements:
        - stroke-box, view-box consistently compute to border-box
        - fill-box computes to content-box

        Tests: css3/masking/clip-path-border-radius-fill-box-001.html
               css3/masking/clip-path-border-radius-stroke-box-000.html
               css3/masking/clip-path-border-radius-view-box-000.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::computeRoundedRectForBoxShape):

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

        Fix the Windows build

        * html/ImageBitmap.h:

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

        [LFC] Add const version of LayoutState::displayBoxForLayoutBox
        https://bugs.webkit.org/show_bug.cgi?id=202623
        <rdar://problem/56025259>

        Reviewed by Antti Koivisto.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::displayBoxForLayoutBox):
        (WebCore::Layout::LayoutState::displayBoxForLayoutBox const):
        * layout/LayoutState.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutTree):

2019-10-07  youenn fablet  <youenn@apple.com>

        [iOS] Unmuting capture of a page is not working
        https://bugs.webkit.org/show_bug.cgi?id=202627

        Reviewed by Eric Carlson.

        Before the patch, we were muting the capture tracks but never unmuting them.
        The patch updates the code to make sure we unmute capture tracks based on the document state.
        In addition, the iOS code wass process-wide while capture might happen between two documents in the same process.
        The patch updates the capturestate computation and muting logic to be Document based.
        A follow-up refactoring will merge back iOS and MacOS code paths.
        Covered by API test.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::captureState):
        (WebCore::MediaStreamTrack::updateCaptureAccordingMutedState):
        (WebCore::MediaStreamTrack::muteCapture): Deleted.
        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):

2019-10-06  Ryosuke Niwa  <rniwa@webkit.org>

        attachShadow should support attaching a shadow root to a main element
        https://bugs.webkit.org/show_bug.cgi?id=197726

        Reviewed by Antti Koivisto.

        Added main element to the list of elements that support an author shadow root.

        Test: fast/shadow-dom/attach-shadow-to-elements.html

        * dom/Element.cpp:
        (WebCore::canAttachAuthorShadowRoot):

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

        [LFC][Painting] Introduce Display::Painter
        https://bugs.webkit.org/show_bug.cgi?id=202614
        <rdar://problem/56010347>

        Reviewed by Antti Koivisto.

        Display::Painter is responsible for rendering the nodes in the display tree. Testing purposes/WK1 only at this point.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::initializeLayoutState):
        (WebCore::Layout::LayoutContext::runLayout):
        (WebCore::Layout::LayoutContext::runLayoutAndVerify):
        (WebCore::Layout::LayoutContext::runLayoutAndPaint):
        (WebCore::Layout::LayoutContext::run): Deleted.
        * layout/LayoutContext.h:
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::LayoutState):
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::root const):
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
        * layout/displaytree/DisplayPainter.cpp: Added.
        (WebCore::Display::Painter::paint):
        * layout/displaytree/DisplayPainter.h: Added.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        Node::ref/deref should be const
        https://bugs.webkit.org/show_bug.cgi?id=202562

        Reviewed by Ryosuke Niwa.

        This enables RefPtr<const Element> and matches RefCounted.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchAuthorShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::matchHostPseudoClassRules):
        (WebCore::ElementRuleCollector::matchSlottedPseudoElementRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRules):
        (WebCore::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        (WebCore::ElementRuleCollector::collectSlottedPseudoElementRulesForSlot):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::matchAllRules):

        Use it to ref elements in ElementRuleCollector.

        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::element const):
        * dom/Node.h:
        (WebCore::Node::ref const):
        (WebCore::Node::deref const):
        (WebCore::Node::ref): Deleted.
        (WebCore::Node::deref): Deleted.

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

        [LFC] LayoutChildtIteratorAdapter -> LayoutChildIteratorAdapter
        https://bugs.webkit.org/show_bug.cgi?id=202612
        <rdar://problem/56007611>

        Reviewed by Anders Carlsson.

        * layout/layouttree/LayoutChildIterator.h:
        (WebCore::Layout::LayoutChildIterator<T>::LayoutChildIterator):
        (WebCore::Layout::LayoutChildIterator<T>::operator):
        (WebCore::Layout::LayoutChildIteratorAdapter<T>::LayoutChildIteratorAdapter):
        (WebCore::Layout::LayoutChildIteratorAdapter<T>::begin const):
        (WebCore::Layout::LayoutChildIteratorAdapter<T>::end const):
        (WebCore::Layout::LayoutChildIteratorAdapter<T>::first const):
        (WebCore::Layout::LayoutChildIteratorAdapter<T>::last const):
        (WebCore::Layout::childrenOfType):
        (WebCore::Layout::LayoutChildtIterator<T>::LayoutChildtIterator): Deleted.
        (WebCore::Layout::LayoutChildtIterator<T>::operator): Deleted.
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::LayoutChildtIteratorAdapter): Deleted.
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::begin const): Deleted.
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::end const): Deleted.
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::first const): Deleted.
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::last const): Deleted.

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

        [LFC] Remove redundant includes.
        https://bugs.webkit.org/show_bug.cgi?id=202610
        <rdar://problem/56003250>

        Reviewed by Tim Horton.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        * layout/FormattingContextQuirks.cpp:
        * layout/FormattingState.h:
        * layout/LayoutContext.h:
        * layout/LayoutState.h:
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        * layout/blockformatting/BlockFormattingState.h:
        * layout/blockformatting/BlockInvalidation.h:
        * layout/displaytree/DisplayRect.h:
        * layout/displaytree/DisplayRun.h:
        * layout/floats/FloatAvoider.cpp:
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatBox.h:
        * layout/floats/FloatingContext.cpp:
        * layout/floats/FloatingContext.h:
        * layout/floats/FloatingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        * layout/inlineformatting/InlineInvalidation.h:
        * layout/inlineformatting/InlineLine.h:
        * layout/inlineformatting/InlineLineBreaker.cpp:
        * layout/inlineformatting/InlineLineLayout.cpp:
        * layout/layouttree/LayoutBox.h:
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        * layout/tableformatting/TableGrid.h:
        * layout/tableformatting/TableInvalidation.h:

2019-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Change "InvalidStateError" to "NotSupportedError" for attachShadow()
        https://bugs.webkit.org/show_bug.cgi?id=197948

        Reviewed by Wenson Hsieh.

        Match the latest spec. See https://github.com/whatwg/dom/pull/761

        * dom/Element.cpp:
        (WebCore::Element::attachShadow): Throw NotSupportedError when there is already a shadow tree.

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

        Allow pages using EventSource to enter the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202370
        <rdar://problem/55853142>

        Reviewed by Geoffrey Garen.

        Allow pages using EventSource to enter the back/forward cache. If the EventSource is
        connecting at the time it enters PageCache, it will resume connecting after restoring
        from PageCache (by making m_connectTimer a SuspendableTimer, which is PageCache-aware).
        If the EventSource is was open upon navigating, it gets closed upon navigating (since
        all pending loads get cancelled on navigation). To help the page recover, we fire an
        error event and attempt to reconnect automatically when restoring the page from page
        cache. It is allowed by the specification to attempt reconnection in case of non-fatal
        network errors.

        Tests: http/tests/eventsource/eventsource-page-cache-connected.html
               http/tests/eventsource/eventsource-page-cache-connecting.html

        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::close):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::dispatchErrorEvent):
        (WebCore::EventSource::didReceiveData):
        (WebCore::EventSource::didFinishLoading):
        (WebCore::EventSource::didFail):
        (WebCore::EventSource::abortConnectionAttempt):
        (WebCore::EventSource::doExplicitLoadCancellation):
        (WebCore::EventSource::canSuspendForDocumentSuspension const):
        (WebCore::EventSource::suspend):
        (WebCore::EventSource::resume):
        (WebCore::EventSource::dispatchMessageEvent):
        * page/EventSource.h:

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

        ServiceWorkerContainer should never prevent a page from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202603

        Reviewed by Geoff Garen.

        Make it so that ServiceWorkerContainer can suspend, even if they have pending promises.
        We now queue all promise resolutions to a SuspendableTaskQueue to make sure that those
        promises do not get resolved while in the page cache.

        Test: http/tests/workers/service/page-cache-service-worker-pending-promise.https.html

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::canSuspendForDocumentSuspension const):
        * workers/service/ServiceWorkerContainer.h:

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

        Allow pages using IDBIndex to enter the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=202430
        <rdar://problem/55887918>

        Reviewed by Geoffrey Garen.

        There is no reason to prevent PageCaching when an IDBIndex object is alive.
        No events are fired by IDBIndex and its API returns IDBRequest objects, which
        are already PageCache-aware.

        I have seen Yahoo.com failing to enter the back/forward cache because of this.

        No new tests, updated existing test.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::canSuspendForDocumentSuspension const):

2019-10-04  Heiko Becker  <heirecka@exherbo.org>

        Fix build with icu 65.1
        https://bugs.webkit.org/show_bug.cgi?id=202600

        Reviewed by Konstantin Tokarev.

        * dom/Document.cpp:
        (WebCore::isValidNameNonASCII):
        (WebCore::Document::parseQualifiedName):

2019-10-04  James Darpinian  <jdarpinian@chromium.org>

        Allow using WebGL 2 when USE_ANGLE=1
        https://bugs.webkit.org/show_bug.cgi?id=202593

        Reviewed by Alex Christensen.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
            Disable irrelevant extension check.
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
            Use ES3 ANGLE context when WebGL 2 is requested.

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

        Stop sending list of display-isolated schemes to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=202557

        Reviewed by Youenn Fablet.

        They are only ever used in the WebProcess in SecurityOrigin::canDisplay.
        If someone adds code that uses them in the NetworkProcess, they will hit my new assertion.

        No change in behavior.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay const):
        * platform/RuntimeApplicationChecks.h:
        (WebCore::isInNetworkProcess):
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::isInNetworkProcess):

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

        Rename SchemeRegistry to LegacySchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=202586

        Reviewed by Tim Horton.

        SchemeRegistry is process-global.  We need to replace it with a non-process-global registry, but Rome wasn't built in a day.
        This rename allows me to call the replacement object that will have ownership and configuration "SchemeRegistry"
        and it also indicates that new development should use the owned object instead of the global object.

        * Headers.cmake:
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::isSecure):
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::processAppIdExtension):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::allowDatabaseAccess const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::hasServiceWorkerScheme const):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isValidCrossOriginRedirectionURL):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::matchRegistration):
        (WebCore::DocumentLoader::disallowWebArchive const):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::checkURLSchemeAsCORSEnabled):
        * loader/archive/mhtml/MHTMLArchive.cpp:
        (WebCore::MHTMLArchive::create):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::freshnessLifetime const):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/SecurityOrigin.cpp:
        (WebCore::shouldTreatAsUniqueOrigin):
        (WebCore::shouldTreatAsPotentiallyTrustworthy):
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isSecure):
        (WebCore::SecurityOrigin::canDisplay const):
        (WebCore::SecurityOrigin::domainForCachePartition const):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowObjectFromSource const):
        (WebCore::ContentSecurityPolicy::allowChildFrameFromSource const):
        (WebCore::ContentSecurityPolicy::allowResourceFromSource const):
        (WebCore::ContentSecurityPolicy::allowConnectToSource const):
        (WebCore::ContentSecurityPolicy::allowBaseURI const):
        * platform/LegacySchemeRegistry.cpp: Copied from Source/WebCore/platform/SchemeRegistry.cpp.
        (WebCore::allBuiltinSchemes):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::LegacySchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsNoAccess):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsSecure):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsEmptyDocument):
        (WebCore::LegacySchemeRegistry::shouldLoadURLSchemeAsEmptyDocument):
        (WebCore::LegacySchemeRegistry::setDomainRelaxationForbiddenForURLScheme):
        (WebCore::LegacySchemeRegistry::isDomainRelaxationForbiddenForURLScheme):
        (WebCore::LegacySchemeRegistry::canDisplayOnlyIfCanRequest):
        (WebCore::LegacySchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing):
        (WebCore::LegacySchemeRegistry::allowsDatabaseAccessInPrivateBrowsing):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsCORSEnabled):
        (WebCore::LegacySchemeRegistry::shouldTreatURLSchemeAsCORSEnabled):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::schemeShouldBypassContentSecurityPolicy):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsAlwaysRevalidated):
        (WebCore::LegacySchemeRegistry::shouldAlwaysRevalidateURLScheme):
        (WebCore::LegacySchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::LegacySchemeRegistry::shouldPartitionCacheForURLScheme):
        (WebCore::LegacySchemeRegistry::registerURLSchemeServiceWorkersCanHandle):
        (WebCore::LegacySchemeRegistry::canServiceWorkersHandleURLScheme):
        (WebCore::LegacySchemeRegistry::isServiceWorkerContainerCustomScheme):
        (WebCore::LegacySchemeRegistry::isUserExtensionScheme):
        (WebCore::LegacySchemeRegistry::isBuiltinScheme):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal): Deleted.
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsNoAccess): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsEmptyDocument): Deleted.
        (WebCore::SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument): Deleted.
        (WebCore::SchemeRegistry::setDomainRelaxationForbiddenForURLScheme): Deleted.
        (WebCore::SchemeRegistry::isDomainRelaxationForbiddenForURLScheme): Deleted.
        (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest): Deleted.
        (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsNotAllowingJavascriptURLs): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing): Deleted.
        (WebCore::SchemeRegistry::allowsDatabaseAccessInPrivateBrowsing): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsCORSEnabled): Deleted.
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsCORSEnabled): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy): Deleted.
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy): Deleted.
        (WebCore::SchemeRegistry::schemeShouldBypassContentSecurityPolicy): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsAlwaysRevalidated): Deleted.
        (WebCore::SchemeRegistry::shouldAlwaysRevalidateURLScheme): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned): Deleted.
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle): Deleted.
        (WebCore::SchemeRegistry::canServiceWorkersHandleURLScheme): Deleted.
        (WebCore::SchemeRegistry::isServiceWorkerContainerCustomScheme): Deleted.
        (WebCore::SchemeRegistry::isUserExtensionScheme): Deleted.
        (WebCore::SchemeRegistry::isBuiltinScheme): Deleted.
        * platform/LegacySchemeRegistry.h: Copied from Source/WebCore/platform/SchemeRegistry.h.
        * platform/SchemeRegistry.cpp: Removed.
        * platform/SchemeRegistry.h: Removed.
        * platform/ios/QuickLook.mm:
        * storage/Storage.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebCore::Internals::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):

2019-10-04  Antoine Quint  <graouts@apple.com>

        Crash in debug build with imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update-and-send-events-replacement.html
        https://bugs.webkit.org/show_bug.cgi?id=202583

        Reviewed by Dean Jackson.

        Ensure we remove the animation from the timeline it's currently associated with since it may have changed since its creation. This caused
        a crash because we have an assertion in AnimationTimeline::removeAnimation() to check that the animation belonged to the timeline it's called on.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::removeReplacedAnimations):

2019-10-04  Tim Horton  <timothy_horton@apple.com>

        Clean up some includes to make the build a bit faster: DOMPromise
        https://bugs.webkit.org/show_bug.cgi?id=202570

        Reviewed by Chris Dumez.

        No new tests, just reorganizing.

        Apply some profile-guided optimizations to our headers.

        Get JSDOMPromiseDeferred.h and DOMPromiseProxy.h out of WebCore headers.
        One remains (FetchBodyConsumer.h); I leave it as an exercise to the reader.
        In my testing, this is worth a reliable 5-6% on the WebCore Build Benchmark.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
        * Modules/encryptedmedia/MediaKeySystemAccess.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/encryptedmedia/NavigatorEME.cpp:
        * Modules/encryptedmedia/NavigatorEME.h:
        * Modules/fetch/DOMWindowFetch.cpp:
        * Modules/fetch/DOMWindowFetch.h:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchLoader.cpp:
        * Modules/fetch/FetchLoader.h:
        * Modules/fetch/WorkerGlobalScopeFetch.cpp:
        * Modules/fetch/WorkerGlobalScopeFetch.h:
        * Modules/mediacapabilities/MediaCapabilities.cpp:
        * Modules/mediacapabilities/MediaCapabilities.h:
        * Modules/mediastream/MediaDevices.cpp:
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCRtpReceiver.h:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp:
        * Modules/paymentrequest/PaymentRequest.cpp:
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/streams/ReadableStreamSource.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        * Modules/webauthn/AuthenticatorCoordinator.h:
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        * Modules/webgpu/WebGPU.cpp:
        * Modules/webgpu/WebGPU.h:
        * Modules/webgpu/WebGPUAdapter.cpp:
        * Modules/webgpu/WebGPUAdapter.h:
        * Modules/webgpu/WebGPUBuffer.cpp:
        * Modules/webgpu/WebGPUBuffer.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webvr/NavigatorWebVR.cpp:
        * Modules/webvr/NavigatorWebVR.h:
        * Modules/webvr/VRDisplay.cpp:
        * Modules/webvr/VRDisplay.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/KeyframeEffect.cpp:
        * animation/WebAnimation.cpp:
        * animation/WebAnimation.h:
        * bindings/js/CachedModuleScriptLoader.cpp:
        * bindings/js/CachedModuleScriptLoaderClient.h:
        * bindings/js/JSDOMPromiseDeferred.h:
        * bindings/js/JSHTMLTemplateElementCustom.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/JSWebAnimationCustom.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        * bindings/js/ScriptModuleLoader.cpp:
        * css/FontFace.cpp:
        * css/FontFace.h:
        * css/FontFaceSet.cpp:
        * css/FontFaceSet.h:
        * dom/CustomElementRegistry.cpp:
        * dom/DeviceOrientationOrMotionEvent.cpp:
        * dom/DeviceOrientationOrMotionEvent.h:
        * dom/MouseEvent.cpp:
        * dom/MouseEvent.h:
        * html/CustomPaintCanvas.h:
        * html/ImageBitmap.cpp:
        * html/ImageBitmap.h:
        * html/OffscreenCanvas.cpp:
        * html/OffscreenCanvas.h:
        * loader/ImageLoader.cpp:
        * loader/ImageLoader.h:
        * page/DOMWindow.cpp:
        * page/Navigator.h:
        * platform/graphics/CustomPaintImage.cpp:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.mm:
        * workers/service/ServiceWorkerContainer.cpp:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerJob.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        * workers/service/ServiceWorkerRegistration.h:
        * worklets/PaintWorkletGlobalScope.cpp:

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

        Layout Test imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception.html is a Flaky Failure
        https://bugs.webkit.org/show_bug.cgi?id=201481
        <rdar://problem/55046055>

        Reviewed by Alex Christensen.

        We should not schedule timer if we know the timer function will be no-op.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::removeRequest):
        (WebCore::IDBTransaction::scheduleOperation):
        (WebCore::IDBTransaction::trySchedulePendingOperationTimer):
        (WebCore::IDBTransaction::pendingOperationTimerFired):
        (WebCore::IDBTransaction::didStart):
        (WebCore::IDBTransaction::operationCompletedOnClient):
        (WebCore::IDBTransaction::deactivate):
        (WebCore::IDBTransaction::schedulePendingOperationTimer): Deleted.
        * Modules/indexeddb/IDBTransaction.h:

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

        Unreviewed follow-up fix for r250693 to address assertion hits in debug.

        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::didFirstLayout):
        (WebCore::FontFaceSet::completedLoading):
        Make sure the ready promise is not already resolved before resolving it.

        * platform/SuspendableTaskQueue.cpp:
        (WebCore::SuspendableTaskQueue::SuspendableTaskQueue):
        * platform/SuspendableTaskQueue.h:
        (WebCore::SuspendableTaskQueue::create):
        Add a new constructor that takes in a Document since the ActiveDOMObject's
        constructor taking a Document has some useful logic.

2019-10-04  Joonghun Park  <jh718.park@samsung.com>

        Negative radii in radial gradients should be rejected.
        https://bugs.webkit.org/show_bug.cgi?id=202412

        Per the spec, https://drafts.csswg.org/css-images-3/#radial-gradients
        "Negative values are invalid.",
        we reject negative radii values in radial-gradient.

        This patch rejects negative radii during radial-gradient parsing
        for both webkit prefixed and non-prefixed ones.

        Reviewed by Antti Koivisto.

        Tests: imported/blink/css-parser/webkit-gradient.html
               imported/w3c/web-platform-tests/compat/webkit-radial-gradient-radii.html
               imported/w3c/web-platform-tests/css/css-backgrounds/parsing/background-image-invalid.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedRadialGradient):
        (WebCore::CSSPropertyParserHelpers::consumeRadialGradient):

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

        Move WKProcessPool._registerURLSchemeServiceWorkersCanHandle to _WKWebsiteDataStoreConfiguration
        https://bugs.webkit.org/show_bug.cgi?id=202553

        Reviewed by Youenn Fablet.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::registeredSchemes const):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):

2019-10-04  youenn fablet  <youenn@apple.com>

        AbortSignal does not always emit the abort signal
        https://bugs.webkit.org/show_bug.cgi?id=201871
        <rdar://problem/55451712>

        Reviewed by Chris Dumez.

        Make sure a JSAbortSignal is not GCed until objects that can abort it are gone.
        This includes a followed signal and an AbortController.
        Current WebKit implementation only uses following of one signal at a time.

        Test: http/tests/fetch/abort-signal-gc.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAbortControllerCustom.cpp: Added.
        (WebCore::JSAbortController::visitAdditionalChildren):
        * bindings/js/JSAbortSignalCustom.cpp: Added.
        (WebCore::JSAbortSignalOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSTypedOMCSSStyleValueCustom.cpp:
        * dom/AbortController.idl:
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::follow):
        * dom/AbortSignal.h:
        * dom/AbortSignal.idl:

2019-10-04  youenn fablet  <youenn@apple.com>

        Allow to suspend RTCPeerConnection when not connected
        https://bugs.webkit.org/show_bug.cgi?id=202403

        Reviewed by Chris Dumez.

        Implement suspend/resume in RTCPeerConnection by sending suspend/resume to the libwebrtc media endpoint,
        which suspends/resumes its socket factory.

        We allow suspension when the connection is not connected.
        Pages with connected connections will not go in page cache yet.

        Tests: webrtc/datachannel/datachannel-page-cache-send.html
               webrtc/datachannel/datachannel-page-cache.html

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::suspend):
        (WebCore::PeerConnectionBackend::resume):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::canSuspendForDocumentSuspension const):
        (WebCore::RTCPeerConnection::suspend):
        (WebCore::RTCPeerConnection::resume):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::suspend):
        (WebCore::LibWebRTCMediaEndpoint::resume):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::suspend):
        (WebCore::LibWebRTCPeerConnectionBackend::resume):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

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

        Unreviewed, rolling out r250583.

        Broke multiple internal API tests

        Reverted changeset:

        "[JSC] Place VM* in TLS"
        https://bugs.webkit.org/show_bug.cgi?id=202391
        https://trac.webkit.org/changeset/250583

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

        Simplify sandbox enabling macros
        https://bugs.webkit.org/show_bug.cgi?id=202536

        Reviewed by Brent Fulgham.

        * Configurations/FeatureDefines.xcconfig:

2019-10-04  Chris Lord  <clord@igalia.com>

        ImageBitmap should be serializable
        https://bugs.webkit.org/show_bug.cgi?id=202394

        Reviewed by Žan Doberšek.

        Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-serializable.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readTransferredImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        (WebCore::CloneDeserializer::readTerminal):

2019-10-03  Antoine Quint  <graouts@apple.com>

        AppleTV named as XSS-payloads trigger when AirPlay is used
        https://bugs.webkit.org/show_bug.cgi?id=202534
        <rdar://55931262>

        Reviewed by Eric Carlson.

        Ensure we escape an AirPlay's device name before inserting its name into the DOM.

        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype._updateAirPlayPlacard):
        (PlacardSupport):
        (escapeHTML):

2019-10-04  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Preserve auto repeat() in getComputedStyle() for non-grids
        https://bugs.webkit.org/show_bug.cgi?id=202258

        Reviewed by Javier Fernandez.

        Tests: imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-nogrid.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-nogrid.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed.html

        Usually, the resolved value of grid-template-rows/columns is the used
        value, expanding the repeat() notation. But for elements with a non-grid
        display, the resolved value is just the computed value, with repeat(),
        since the used value doesn't exist.
        Before this patch, the repeat() was dropped, and line names after it
        appeared at the wrong position or were also dropped. There was also an
        assert failure in debug. This patch fixes the serialization for auto
        repeat(). Integer repeat() is still expanded at computed-value time, so
        it's not preserved in getComputedStyle().

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::OrderedNamedLinesCollector::OrderedNamedLinesCollector):
        (WebCore::OrderedNamedLinesCollectorInsideRepeat::OrderedNamedLinesCollectorInsideRepeat):
        (WebCore::OrderedNamedLinesCollectorInGridLayout::OrderedNamedLinesCollectorInGridLayout):
        (WebCore::OrderedNamedLinesCollector::collectLineNamesForIndex const):
        (WebCore::OrderedNamedLinesCollectorInsideRepeat::collectLineNamesForIndex const):
        (WebCore::OrderedNamedLinesCollectorInGridLayout::collectLineNamesForIndex const):
        (WebCore::populateGridTrackList):
        (WebCore::valueForGridTrackList):

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

        [CSS Shadow Parts] Support 'exportparts' attribute
        https://bugs.webkit.org/show_bug.cgi?id=202520

        Reviewed by Ryosuke Niwa.

        Support 'exportparts' attribute for exporting part mappings from subcomponents.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRules):

        Recurse to containing scopes to collect part rules if there are exported mappings.

        (WebCore::ElementRuleCollector::ruleMatches):
        * css/ElementRuleCollector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):

        Make ShadowDescendant fake combinator skip directly to the scope where the part rules are coming from.

        (WebCore::SelectorChecker::checkOne const):

        Resolve names via mappings if needed.

        * css/SelectorChecker.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):

        Invalidate mappings as needed.

        * dom/ShadowRoot.cpp:
        (WebCore::parsePartMappings):

        Parse the mappings microsyntax.

        (WebCore::ShadowRoot::partMappings const):
        (WebCore::ShadowRoot::invalidatePartMappings):
        * dom/ShadowRoot.h:
        * html/HTMLAttributeNames.in:

2019-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        A newly inserted element doesn't get assigned to a named slot if slot assignments had already happened
        https://bugs.webkit.org/show_bug.cgi?id=199733

        Reviewed by Antti Koivisto.

        The bug was caused by addSlotElementByName not invalidating slot assignments when a new slot element
        is inserted after corresponding elements with the slot content attribute had already been inserted.

        Fixed the bug by always invalidating the slot assignment when a new slot element is inserted.

        Tests: fast/shadow-dom/add-slotted-element-after-assignment-1.html
               fast/shadow-dom/add-slotted-element-after-assignment-2.html
               fast/shadow-dom/add-slotted-element-after-assignment-3.html

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):

2019-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Radio button groups are not scoped by shadow boundaries
        https://bugs.webkit.org/show_bug.cgi?id=199568

        Reviewed by Antti Koivisto.

        Fixed the bug that radio button groups are not scoped to each shadow tree by moving
        RadioButtonGroups from FormController, which is a per-document object, to TreeScope.

        Test: imported/w3c/web-platform-tests/shadow-dom/input-type-radio.html

        * dom/RadioButtonGroups.h:
        (WebCore::RadioButtonGroups): Made this bmalloc'ed now that it's allocated standalone.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::radioButtonGroups): Added.
        * dom/TreeScope.h:
        * html/FormController.h:
        (WebCore::FormController::radioButtonGroups): Deleted.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::~HTMLInputElement):
        (WebCore::HTMLInputElement::removedFromAncestor): Update the radio button group here.
        (WebCore::HTMLInputElement::didMoveToNewDocument): Removed the code to update radio
        button group here since it's done in removedFromAncestor now. Note that insertion case
        is alrady taken care of by HTMLInputElement::didFinishInsertingNode.
        (WebCore::HTMLInputElement::radioButtonGroups const): Ditto.

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

        [CSS Shadow Parts] Correct interaction with other pseudo elements
        https://bugs.webkit.org/show_bug.cgi?id=202526

        Reviewed by Ryosuke Niwa.

        Cases like foo::part(bar)::before should work.

        This patch doesn't cover ::placeholder which is implemented as PseudoElementWebKitCustom (like internal -webkit-* properties).

        * css/CSSSelector.h:
        (WebCore::isTreeStructuralPseudoClass):

        Add a helper.

        * css/parser/CSSSelectorParser.cpp:

        Allow non-structural pseudo classes after ::part().
        Allow other pseudo elements after ::part().

        (WebCore::CSSSelectorParser::consumePseudo):

        No need for DisallowPseudoElementsScope, we are just parsing identifiers.

2019-10-03  James Darpinian  <jdarpinian@chromium.org>

        Fix WebGL 1 conformance regressions when USE_ANGLE=1
        https://bugs.webkit.org/show_bug.cgi?id=202545

        Prevent ANGLE from automatically using ES3 when ES2 is requested.

        WEBGL_debug_shaders extension should not accept or return null.

        Enable ANGLE's new support for emulating RGB on RGBA IOSurfaces.

        Reviewed by Alex Christensen.

        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::getTranslatedShaderSource):
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes):
        * platform/graphics/angle/Extensions3DANGLE.cpp:
        (WebCore::Extensions3DANGLE::getTranslatedShaderSourceANGLE):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]):

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

    [iOS] WebContent process can be interrupted during suspension; loses "Now Playing" status
    https://bugs.webkit.org/show_bug.cgi?id=202537
    <rdar://problem/55952707>

    Reviewed by Eric Carlson.

    Always deactivate the AVAudioSession when the last playing PlatformAudioSession ends playback and the application is in the background.

    * platform/audio/PlatformMediaSessionManager.cpp:
    (WebCore::PlatformMediaSessionManager::removeSession):
    (WebCore::PlatformMediaSessionManager::processWillSuspend):
    (WebCore::PlatformMediaSessionManager::maybeDeactivateAudioSession):
    * platform/audio/PlatformMediaSessionManager.h:
    (WebCore::PlatformMediaSessionManager::isApplicationInBackground const):
    * platform/audio/ios/MediaSessionManagerIOS.h:
    * platform/audio/ios/MediaSessionManagerIOS.mm:
    (WebCore::MediaSessionManageriOS::sessionWillEndPlayback):

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

        Allow pages using FontFaceSet to enter the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202476

        Reviewed by Myles C. Maxfield.

        Allow pages using FontFaceSet to enter the back/forward cache by updating its
        implementation to queue all its tasks that run script to a SuspendableTaskQueue.
        The SuspendableTaskQueue makes sure to properly suspend while in PageCache and
        run the tasks when resuming from PageCache.

        Test: http/tests/navigation/page-cache-fontfaceset.html

        * PlatformWin.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::fontLoadEventOccurred):
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::FontFaceSet):
        (WebCore::FontFaceSet::canSuspendForDocumentSuspension const):
        (WebCore::FontFaceSet::didFirstLayout):
        (WebCore::FontFaceSet::completedLoading):
        (WebCore::FontFaceSet::faceFinished):
        * css/FontFaceSet.h:

        * platform/SuspendableTaskQueue.cpp: Added.
        (WebCore::SuspendableTaskQueue::SuspendableTaskQueue):
        (WebCore::SuspendableTaskQueue::close):
        (WebCore::SuspendableTaskQueue::cancelAllTasks):
        (WebCore::SuspendableTaskQueue::enqueueTask):
        (WebCore::SuspendableTaskQueue::runOneTask):
        (WebCore::SuspendableTaskQueue::activeDOMObjectName const):
        (WebCore::SuspendableTaskQueue::canSuspendForDocumentSuspension const):
        (WebCore::SuspendableTaskQueue::stop):
        (WebCore::SuspendableTaskQueue::suspend):
        (WebCore::SuspendableTaskQueue::resume):
        * platform/SuspendableTaskQueue.h: Added.
        (WebCore::SuspendableTaskQueue::create):
        (WebCore::SuspendableTaskQueue::isClosed const):
        (WebCore::SuspendableTaskQueue::hasPendingTasks const):
        Add a SuspendableTaskQueue class which is Page-Cache aware and can be used to queue
        generic tasks as WTF::Function<void<>> lambdas.

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

        Provisional / scheduled loads in subframes should not prevent a page from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202474

        Reviewed by Alex Christensen.

        Provisional / scheduled loads in subframes should not prevent a page from entering the back/forward cache.
        To address the issue, we now make sure to stop all loads before checking for PageCache eligibility.

        Test: fast/history/page-cache-quick-redirect-iframe.html

        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopForPageCache):
        * loader/FrameLoader.h:

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

        XMLHttpRequest sometimes prevents pages from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202434
        <rdar://problem/55890340>

        Reviewed by Geoffrey Garen.

        XMLHttpRequest::canSuspendForDocumentSuspension() was returning false if the document has not fired
        the window's load event, with a comment explaining that cancelling the XHR in the upon suspension
        may cause the load event to get fired and thus run script when forbidden. However, we should only
        return false if the XMLHttpRequest is actually loading (m_loader is not null). XHRs that are not
        loading should never prevent page caching.

        I saw failures to enter the back/forward cache on yandex.ru and taobao.com because of this.

        Test: http/tests/navigation/page-cache-failed-xhr.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::canSuspendForDocumentSuspension const):

2019-10-03  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Downgrade document.referrer for all third-party iframes
        https://bugs.webkit.org/show_bug.cgi?id=202506
        <rdar://problem/55786397>

        Reviewed by Brent Fulgham.

        This change downgrades document.referrer for all third-party iframes if ITP/Resource Load Statistics
        is enabled. The behavior matches the downgrade of all HTTP referrers for third-party resources
        which landed in https://trac.webkit.org/changeset/250413/webkit.

        Tests: http/tests/resourceLoadStatistics/downgrade-document-referrer-nested-third-party-iframe.html
               http/tests/resourceLoadStatistics/downgrade-document-referrer-third-party-iframe.html
               http/tests/resourceLoadStatistics/leave-empty-document-referrer-alone-third-party-iframe.html

        * dom/Document.cpp:
        (WebCore::Document::referrer):
        (WebCore::Document::referrer const): Deleted.
            Can no longer be const since it lazily downgrades and saves the referrer on read.
        * dom/Document.h:

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

        Web Inspector: remove `InspectorInstrumentationCookie`
        https://bugs.webkit.org/show_bug.cgi?id=202487

        Reviewed by Matt Baker.

        All it does is create a shallow-copy of the `InstrumentingAgents` (it copies a pointer to
        the `InstrumentingAgents` object, so any of the pointers to the `InspectorAgent` that are
        contained therein are shared between each instance) and save the tracking
        `InspectorTimelineAgent`'s id (monotonically increasing integer).

        All uses of `InspectorInstrumentationCookie` are local values, so there's no way that the
        `InspectorTimelineAgent` (or the id) could change in between an
        `InspectorInstrumentation::will*` and an `InspectorInstrumentation::did*`, as both the
        tracking state and id are controlled by the frontend and cannot "interrupt".

        Removing `InspectorInstrumentationCookie` _can_ cause issues is in situations where the
        `ScriptExecutionContext` (or `Page`) changes between the `InspectorInstrumentation::will*`
        and the `InspectorInstrumentation::did*`, but this can be avoided so long as a pointer to
        the "context" used for `InspectorInstrumentation::will*` is saved.

        Covered by existing tests: inspector/timeline/*

        * inspector/InspectorInstrumentationCookie.h: Removed.
        * inspector/InspectorInstrumentationCookie.cpp: Removed.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::clearRecordStack): Deleted.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSExecState.h:
        * bindings/js/JSExecStateInstrumentation.h:
        (WebCore::JSExecState::instrumentFunctionInternal):
        (WebCore::JSExecState::instrumentFunctionCall):
        (WebCore::JSExecState::instrumentFunctionConstruct):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluateModule):
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::innerInvokeEventListeners):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::deliver):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::notify):
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::deliver):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willCallFunction):
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        (WebCore::InspectorInstrumentation::didDispatchEvent):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindow):
        (WebCore::InspectorInstrumentation::willEvaluateScript):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        (WebCore::InspectorInstrumentation::willFireTimer):
        (WebCore::InspectorInstrumentation::didFireTimer):
        (WebCore::InspectorInstrumentation::willLayout):
        (WebCore::InspectorInstrumentation::didLayout):
        (WebCore::InspectorInstrumentation::willRecalculateStyle):
        (WebCore::InspectorInstrumentation::didRecalculateStyle):
        (WebCore::InspectorInstrumentation::willFireAnimationFrame):
        (WebCore::InspectorInstrumentation::didFireAnimationFrame):
        (WebCore::InspectorInstrumentation::willFireObserverCallback):
        (WebCore::InspectorInstrumentation::didFireObserverCallback):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):
        (WebCore::InspectorInstrumentation::didCallFunctionImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::didEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        (WebCore::InspectorInstrumentation::willLayoutImpl):
        (WebCore::InspectorInstrumentation::didLayoutImpl):
        (WebCore::InspectorInstrumentation::willRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireObserverCallbackImpl):
        (WebCore::InspectorInstrumentation::didFireObserverCallbackImpl):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent): Deleted.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        IndexedDB: add size estimate for key path when estimate task size
        https://bugs.webkit.org/show_bug.cgi?id=202480

        Reviewed by Geoffrey Garen.

        No observable behavior change.

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

2019-10-03  youenn fablet  <youenn@apple.com>

        Regression: iOS 13.1 MediaStreamTrack.enabled = false kills audio track
        https://bugs.webkit.org/show_bug.cgi?id=202405
        <rdar://problem/55922616>

        Reviewed by Eric Carlson.

        When the web page is setting enabled to false, media session might change from PlayRecord to None.
        This might trigger CoreAudio to no longer output audio samples, thus triggering our audio capture failure timer.
        This would end the track after 2 seconds.
        Given audio tracks can be reenabled by a web page, we should not change the Media Session setup based on that.
        This patch updates MediaStream::mediaType to return independently of the enabled state.

        Add internals API to write a cross platform test.

        Test: fast/mediastream/audio-track-enabled.html
        Manually tested as well.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::mediaType const):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::hasCaptureAudioSource const):
        * testing/Internals.cpp:
        (WebCore::Internals::supportsAudioSession const):
        (WebCore::Internals::audioSessionCategory const):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-10-03  youenn fablet  <youenn@apple.com>

        http/tests/security/navigate-when-restoring-cached-page.html should not use RTCPeerConnection to not enter in page cache
        https://bugs.webkit.org/show_bug.cgi?id=202521

        Reviewed by Chris Dumez.

        Introduce a dummy ActiveDOMObject which can never be suspended for document suspension.
        Allow a page to create this dummy ActiveDOMObject through internals.
        Covered by updated test.

        * dom/ActiveDOMObject.h:
        * testing/Internals.cpp:
        (WebCore::Internals::preventDocumentForEnteringPageCache):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-10-03  Tim Horton  <timothy_horton@apple.com>

        WebKit doesn't build with trunk clang
        https://bugs.webkit.org/show_bug.cgi?id=202511

        Reviewed by Anders Carlsson.

        * Modules/fetch/FetchLoader.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        * Modules/indexeddb/shared/InProcessIDBServer.h:
        * Modules/notifications/Notification.cpp:
        * Modules/notifications/Notification.h:
        * platform/graphics/ca/TileController.h:
        * workers/service/context/ServiceWorkerThreadProxy.h:
        Fix the build by exporting destructors and custom delete operators.
        I don't know why this changed, but trunk clang insists.
        There are also some new warnings; this only fixes the hard errors.

2019-10-03  Tim Horton  <timothy_horton@apple.com>

        Yet another build fix

        * css/typedom/TypedOMCSSImageValue.h:
        Forward declare Document.

2019-10-03  Jiewen Tan  <jiewen_tan@apple.com>

        Support googleLegacyAppidSupport extension
        https://bugs.webkit.org/show_bug.cgi?id=202427
        <rdar://problem/55887473>

        Reviewed by Brent Fulgham.

        This patch adds support for googleLegacyAppidSupport extension, when set:
        1) user agent should only use the U2F transport protocol,
        2) should only communicate with roaming authenticators, and
        3) should use a hard-coded appID of https://www.gstatic.com/securitykey/origins.json.
        To be noticed as the name implies, this extension is exclusively for RP ID = google.com.

        Implementation wise, all operations are captured in methods with name processGoogleLegacyAppIdSupportExtension.
        1) AuthenticatorCoordinator takes care of setting the value.
        2) U2fCommandConstructor takes care of hard coding the AppID.
        3) AuthenticatorManager takes care of removing AuthenticatorTransport::Internal from TransportSet, so startDiscovery
        will not poke platform authenticators.
        4) CtapAuthenticator takes care of downgrading to U2fAuthenticator.
        5) U2fAuthenticator takes care of setting the AppID in the response.

        Partially covered by new test cases in existing tests, and remaining will be covered by manual tests.

        * Modules/webauthn/AuthenticationExtensionsClientInputs.h:
        (WebCore::AuthenticationExtensionsClientInputs::encode const):
        (WebCore::AuthenticationExtensionsClientInputs::decode):
        * Modules/webauthn/AuthenticationExtensionsClientInputs.idl:
        * Modules/webauthn/AuthenticatorCoordinator.cpp:
        (WebCore::AuthenticatorCoordinatorInternal::processGoogleLegacyAppIdSupportExtension):
        (WebCore::AuthenticatorCoordinator::create const):
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::convertToU2fRegisterCommand):
        (fido::processGoogleLegacyAppIdSupportExtension):
        * Modules/webauthn/fido/U2fCommandConstructor.h:

2019-10-03  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: tests under LayoutTests/inspector/debugger are flaky
        https://bugs.webkit.org/show_bug.cgi?id=137131
        <rdar://problem/18461335>

        Reviewed by Devin Rousso.

        Fix debugger tests on GTK. All tests that pause on breakpoint didn't work because
        in layout tests InspectorFrontendClientLocal was using Timer to dispatch commands
        sent from the local front-end page to the inspected one. When paused inside a script
        triggered by the front-end nested timer event would be scheduled but never fired
        because in glib implementation of RunLoop::TimerBase uses event source which doesn't
        allow recursion (g_source_set_can_recurse is not called on the source), so dispatching
        Debugger.resume command didn't work when paused inside another inspector command (e.g.
        eval). RunLoop itself uses event source which does allow recursion. So instead of using
        a timer for asynchronous command dispatching with delay=0 we now schedule a task in
        RunLoop's queue.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::dispatch):
        (WebCore::InspectorBackendDispatchTask::reset):
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::scheduleOneShot): ensures that there is one inspector
        dispatch task in the queue.
        (WebCore::InspectorBackendDispatchTask::dispatchOneMessage): this is mostly the same behavior
        as was with timerFired, we should be able to dispatch all accumulated messages from the queue
        in one batch but for now I'd like to keep it one per iteration.

2019-10-03  Joonghun Park  <pjh0718@gmail.com>

        CSS ellipse() doesn't accept single <shape-radius>
        https://bugs.webkit.org/show_bug.cgi?id=181745

        CSS ellipse() should only accept 0 or 2 radii.
        The corresponding csswg discussion is
        https://github.com/w3c/csswg-drafts/issues/2175.

        Reviewed by Antti Koivisto.

        Tests: imported/w3c/web-platform-tests/css/css-masking/parsing/clip-path-computed.html
               imported/w3c/web-platform-tests/css/css-masking/parsing/clip-path-invalid.html
               imported/w3c/web-platform-tests/css/css-masking/parsing/clip-path-valid.html
               imported/w3c/web-platform-tests/css/css-masking/parsing/shape-outside-computed.html
               imported/w3c/web-platform-tests/css/css-masking/parsing/shape-outside-invalid.html
               imported/w3c/web-platform-tests/css/css-masking/parsing/shape-outside-valid.html

        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeEllipse::cssText const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapeEllipse):

2019-10-03  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Enable runtime checks and triggers for async non-main-frame scrolling
        https://bugs.webkit.org/show_bug.cgi?id=202509

        Reviewed by Carlos Garcia Campos.

        Add build guards that would enable runtime checks of the asynchronous
        frame scrolling setting in the ScrollingCoordinator and
        RenderLayerCompositor classes for the Nicosia-using ports.

        The check in ScrollingCoordinator avoids bailing on coordinating
        scrolling for non-main frames when the setting is enabled. The check in
        RenderLayerCompositor avoids imposing a requirement for a composition
        layer for any non-main frame when the setting is disabled.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame const):

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

        [CSS Shadow Parts] Support multiple arguments for ::part()
        https://bugs.webkit.org/show_bug.cgi?id=202482

        Reviewed by Ryosuke Niwa.

        Support ::part(foo bar).

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        (WebCore::CSSSelector::setArgumentList):
        (WebCore::CSSSelector::setLangArgumentList): Deleted.

        Give this a more generic name and use it for ::part() too.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::argumentList const):
        (WebCore::CSSSelector::langArgumentList const): Deleted.
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):

        Match only if all parts are found from the element 'part' attribute.

        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::setArgumentList):
        (WebCore::CSSParserSelector::setLangArgumentList): Deleted.
        * css/parser/CSSParserSelector.h:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

        Parse the list.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2019-10-02  Andy Estes  <aestes@apple.com>

        [iOS] When hit testing for a context menu interaction, do not consider whether the element is contenteditable
        https://bugs.webkit.org/show_bug.cgi?id=202498
        <rdar://problem/54723131>

        Reviewed by Tim Horton.

        When the user selects a context menu action, WebKit performs a hit test in order to find the
        acted-on element on the page. This is separate from the hit test performed to generate the
        context menu's targeted preview. Since an arbitrary amount of time can elapse between
        preview generation and action selection, this second hit-tests might return a different
        element.

        One case where we know a different element can be returned is in apps that dynamically
        enable and disable editing. If editing is disabled when the first hit test occurs but is
        enabled when the second one occurs, different elements will be returned due to
        Frame::qualifyingNodeAtViewportLocation preferring to return the root editable element when
        the approximate node is contenteditable.

        While the appropriate long-term fix is to only hit-test once and use that element for both
        preview generation and action selection, this patch implements a short-term fix to address
        the specific problem in rdar://problem/54723131 by disabling the contenteditable behavior
        described above for context menu interaction hit testing.

        The long-term fix is tracked by <https://webkit.org/b/202499>.

        * page/Frame.h:
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::qualifyingNodeAtViewportLocation):
        (WebCore::Frame::approximateNodeAtViewportLocationLegacy):
        (WebCore::ancestorRespondingToClickEventsNodeQualifier):
        (WebCore::Frame::nodeRespondingToClickEvents):
        (WebCore::Frame::nodeRespondingToDoubleClickEvent):
        (WebCore::Frame::nodeRespondingToInteraction):
        (WebCore::Frame::nodeRespondingToScrollWheelEvents):

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

        [CSS Shadow Parts] Basic ::part() pseudo element support
        https://bugs.webkit.org/show_bug.cgi?id=202456

        Reviewed by Ryosuke Niwa.

        Implement basic parsing and selector matching for ::part() pseudo element.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::parsePseudoElementType):
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchPartPseudoElementRules):
        * css/ElementRuleCollector.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/RuleSet.h:
        (WebCore::RuleSet::partPseudoElementRules const):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorPseudoElementTypeMap.in:
        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::parsePseudoElementSelector):

        Also added ::slotted to SelectorPseudoElementTypeMap.in to resolve a FIXME here.

        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isOnlyPseudoElementFunction):
        (WebCore::CSSSelectorParser::consumePseudo):

        Parse single values only, multipart ::part(foo bar) case is not yet handled.

        * dom/Element.cpp:
        (WebCore::Element::partNames const):

2019-10-02  Antoine Quint  <graouts@apple.com>

        Adopt copyToVector() in AnimationTimeline::animationsForElement()
        https://bugs.webkit.org/show_bug.cgi?id=202488

        Reviewed by Wenson Hsieh.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationsForElement const):

2019-10-02  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Let playbin handle redirects for us when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=195326

        A simplified mechanism has been added in GStreamer to handle corner cases.

        Reviewed by Xabier Rodriguez-Calvar.

        Not easily testable at our level

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

2019-10-02  Tim Horton  <timothy_horton@apple.com>

        Another build fix

        * css/typedom/TypedOMCSSImageValue.cpp:
        (WebCore::TypedOMCSSImageValue::TypedOMCSSImageValue):
        * css/typedom/TypedOMCSSImageValue.h:
        I feel like I am actively being thwarted.

2019-10-02  Tim Horton  <timothy_horton@apple.com>

        Another build fix

        * css/typedom/TypedOMCSSImageValue.h:

2019-10-02  Tim Horton  <timothy_horton@apple.com>

        Try to fix the Windows build

        * css/typedom/TypedOMCSSImageValue.cpp:
        (WebCore::TypedOMCSSImageValue::document const):
        * css/typedom/TypedOMCSSImageValue.h:
        Out-of-line this instead of including Document.h in TypedOMCSSImageValue,
        which was an earlier build fix from r250610.

        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/win/GlyphPageTreeNodeCGWin.cpp:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        Try to fix the build.

2019-10-02  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after r250595.

        macCatalyst appears to have triggered the the problem where the build
        can sometimes fail if the unified sources mechanism doesn't group
        together the right set of files.

        * css/typedom/TypedOMCSSImageValue.h:

2019-10-02  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement replaced animations
        https://bugs.webkit.org/show_bug.cgi?id=202190
        <rdar://55697719>

        Reviewed by Dean Jackson.

        Implementing section "5.5 Replacing Animations" (https://drafts.csswg.org/web-animations/#replacing-animations) of the Web Animations
        specification which allows for Web Animations to be destroyed when they are superseded by another animation and the developer doesn't
        explicitly opt into persisting them using the persist() method.

        An animation is marked as replaceable (to sum up) when it's finished and another animation for the same property takes precedence.
        As part of DocumentTimeline::internalUpdateAnimationsAndSendEvents(), we'll go through all replaceable animations, dispatch a "remove"
        DOM event, and remove them from our list of animations.

        We also make a couple of fixes in this patch that were uncovered while working on the WPT tests for replaced animations:
        
        - we would incorrectly parse single values for a property that allows lists (change in KeyframeEffect's processKeyframeLikeObject())
        - we didn't account for the position in the global animation list when sorted animations by composite order (AnimationTimeline::animationsForElement())

        Finally, to get more readable results, we implement a stub of commitStyles(). Its full implementation is tracked by http://wkb.ug/202193.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationTimingDidChange): Mark the position of the animation in the global animation list, to which it may only be added once.
        (WebCore::AnimationTimeline::animationsForElement const): Account for the animation's position in the global animation when sorting.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::bindingsReplaceState const): Flush pending styles when querying the ready state for a declarative animation.
        * animation/DeclarativeAnimation.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents): Run the "remove replaced animations" procedure as the second step in the "update animations
        and send events" procedure.
        (WebCore::DocumentTimeline::animationCanBeRemoved): Determine whether a given animation may be removed based on its finished state, replace state and whether
        it is fully superseded by another animation targeting the same property on the same target element.
        (WebCore::DocumentTimeline::removeReplacedAnimations): Remove any removable animation and dispatch a "remove" DOM event for each removed animation. 
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::processKeyframeLikeObject): Fix an issue found in a replaced animations WPT test that showed that we didn't record the value of an animation that allows lists.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::isReplaceable const):
        (WebCore::WebAnimation::persist): Mark the replace state as "persisted" and ensure the animation is set on the animation list for its target element in case it had already
        been removed based on its persisted state.
        (WebCore::WebAnimation::commitStyles): Stub for a new function.
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::replaceState const):
        (WebCore::WebAnimation::setReplaceState):
        (WebCore::WebAnimation::bindingsReplaceState const):
        (WebCore::WebAnimation::globalPosition const):
        (WebCore::WebAnimation::setGlobalPosition):
        * animation/WebAnimation.idl:
        * dom/EventNames.h: Add the new "remove" event so that the "onremove" DOM property is available on Animation objects. 

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

        Unreviewed build fix in Nicosia's ScrollingTreePositionedNode class.

        * page/scrolling/nicosia/ScrollingTreePositionedNode.cpp:
        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        Fix the name of the variable included in the log call.

2019-10-02  youenn fablet  <youenn@apple.com>

        Use strongly typed identifiers for webrtc sockets
        https://bugs.webkit.org/show_bug.cgi?id=202400

        Reviewed by Chris Dumez.

        No observable change of behavior.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCSocketIdentifier.h: Copied from Source/WebKit/NetworkProcess/webrtc/NetworkRTCSocket.h.

2019-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Stop using legacy custom protocol implementation
        https://bugs.webkit.org/show_bug.cgi?id=202407

        Reviewed by Žan Doberšek.

        Remove the code to setup custom protocols in soup session.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        * platform/network/soup/SoupNetworkSession.h:

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

        [Nicosia] Enable async scrolling at build-time for Nicosia-using ports
        https://bugs.webkit.org/show_bug.cgi?id=202397

        Reviewed by Carlos Garcia Campos.

        * PlatformPlayStation.cmake: Add missing build targets.
        * SourcesGTK.txt: Ditto.

2019-10-01  Tim Horton  <timothy_horton@apple.com>

        Clean up some includes to make the build a bit faster
        https://bugs.webkit.org/show_bug.cgi?id=202444

        Reviewed by Geoff Garen.

        No new tests, just reorganizing.

        Apply some profile-guided optimizations to our headers.

        * bindings/js/CallTracerTypes.h:
        * css/typedom/TypedOMCSSImageValue.h:
        * html/canvas/WebGLObject.h:
        * html/canvas/WebGLVertexArrayObjectBase.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWebGPUDevice):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDevice):
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDevice):
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipeline):
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::getUserToBaseCTM):
        * platform/graphics/cg/GraphicsContextCG.h:
        (WebCore::getUserToBaseCTM): Deleted.
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        InspectorInstrumentation.h is one of the most expensive headers in the entire project.
        While not included in many places (70), it is fairly straightforward to reduce
        its per-inclusion cost by rougly 80%.

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

        Progress towards a functioning CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202443

        Rubber-stamped by Tim Horton.

        * testing/Internals.mm:

2019-10-01  John Wilander  <wilander@apple.com>

        Storage Access API: document.hasStorageAccess() should return true when the cookie policy allows access
        https://bugs.webkit.org/show_bug.cgi?id=202435
        <rdar://problem/55718526>

        Reviewed by Brent Fulgham.

        WebKit's Storage Access API implementation has so far only looked at whether ITP is
        blocking cookie access or not. However, the default cookie policy is still in
        effect underneath ITP. document.hasStorageAccess() should return true if the
        third-party:
        a) is not classified by ITP, and
        b) has cookies which implies it can use cookies as third-party according to the
        default cookie policy.

        Tests: http/tests/storageAccess/has-storage-access-false-by-default-ephemeral.html
               http/tests/storageAccess/has-storage-access-true-if-third-party-has-cookies-ephemeral.html
               http/tests/storageAccess/has-storage-access-true-if-third-party-has-cookies.html

        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::hasCookies const):
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::hasCookies const):
            Not yet implemented. Always says false.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::hasCookies const):
            Not yet implemented. Always says false.

2019-10-01  Tim Horton  <timothy_horton@apple.com>

        Clean up some includes to make the build a bit faster
        https://bugs.webkit.org/show_bug.cgi?id=202437

        Reviewed by Jer Noble.

        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/RealtimeAnalyser.h:
        * platform/audio/HRTFPanner.h:
        FFTFrame includes Accelerate.h, which is quite expensive.

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

        [CSS Shadow Parts] Parse 'part' attribute
        https://bugs.webkit.org/show_bug.cgi?id=202409

        Reviewed by Ryosuke Niwa.

        Add parsing for Element 'part' attribute and the IDL interface.
        Also add a feature flag for CSS Shadow Parts.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::isNonEmptyTokenList):
        (WebCore::Element::classAttributeChanged):
        (WebCore::Element::partAttributeChanged):
        (WebCore::Element::partNames const):
        (WebCore::Element::part):
        (WebCore::classStringHasClassName): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::partList const):
        (WebCore::ElementRareData::setPartList):
        (WebCore::ElementRareData::partNames const):
        (WebCore::ElementRareData::setPartNames):
        * html/HTMLAttributeNames.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSShadowPartsEnabled):
        (WebCore::RuntimeEnabledFeatures::cssShadowPartsEnabled const):

2019-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Place VM* in TLS
        https://bugs.webkit.org/show_bug.cgi?id=202391

        Reviewed by Mark Lam.

        Use JSLockHolder instead. It automatically puts VM* in TLS.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::toJS):
        (WebCore::deserializeIDBValueToJSValue):

2019-10-01  youenn fablet  <youenn@apple.com>

        Queue events and promise resolution in RTCPeerConnection when suspended for page cache
        https://bugs.webkit.org/show_bug.cgi?id=202396

        Reviewed by Chris Dumez.

        This patch prepares RTCPeerConnection to be suspendable to enter page cache.
        For that purpose, we queue events and promise resolution/rejection tasks if the RTCPeerConnection m_shouldDelayTasks is set to true.
        This queueing is enabled when RTCPeerConnection is asked to suspend itself.
        The queued tasks are then executed at resume time.
        Renamed fireEvent to dispatchEventWhenFeasible.
        No change of behavior for now.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::createOfferSucceeded):
        (WebCore::PeerConnectionBackend::createOfferFailed):
        (WebCore::PeerConnectionBackend::createAnswerSucceeded):
        (WebCore::PeerConnectionBackend::createAnswerFailed):
        (WebCore::PeerConnectionBackend::setLocalDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setLocalDescriptionFailed):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionSucceeded):
        (WebCore::PeerConnectionBackend::setRemoteDescriptionFailed):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::doClose):
        (WebCore::RTCPeerConnection::suspend):
        (WebCore::RTCPeerConnection::resume):
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        (WebCore::RTCPeerConnection::scheduleNegotiationNeededEvent):
        (WebCore::RTCPeerConnection::doTask):
        (WebCore::RTCPeerConnection::fireEvent):
        * Modules/mediastream/RTCPeerConnection.h:

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

        [FTW] Correct additional canvas test failures
        https://bugs.webkit.org/show_bug.cgi?id=202388

        Reviewed by Fujii Hironori.

        This patch corrects a handful of errors in Direct2D's drawing code.

        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::clearRect): Use the transformed dimensions of
        rects to determine whether they intersect with the render target.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::copyRectFromData const):
        (WebCore::ImageBufferData::loadDataToBitmapIfNeeded): It is not
        necessary (or correct) to 'endDraw' when loading image data to the
        Bitmap target.
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::strokeBoundingRect const): Provide an implementation.

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

        Progress towards successful CMake build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=202426

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2019-10-01  Tim Horton  <timothy_horton@apple.com>

        Clean up some includes to make the build a bit faster
        https://bugs.webkit.org/show_bug.cgi?id=202417

        Reviewed by Jer Noble.

        No new tests, just reorganizing.

        Apply some profile-guided optimizations to our headers.

        * Modules/mediasource/SourceBuffer.cpp:
        * WebCorePrefix.h:
        Add HashMap, which ends up included in all source files.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::selectImageSource):
        (WebCore::HTMLImageElement::didAttachRenderers):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        (WebCore::HTMLImageElement::naturalWidth const):
        (WebCore::HTMLImageElement::naturalHeight const):
        (WebCore::HTMLImageElement::complete const):
        (WebCore::HTMLImageElement::decode):
        (WebCore::HTMLImageElement::didMoveToNewDocument):
        (WebCore::HTMLImageElement::cachedImage const):
        (WebCore::HTMLImageElement::setLoadManually):
        (WebCore::HTMLImageElement::hasPendingActivity const):
        (WebCore::HTMLImageElement::pendingDecodePromisesCountForTesting const):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::cachedImage const): Deleted.
        (WebCore::HTMLImageElement::setLoadManually): Deleted.
        (WebCore::HTMLImageElement::hasPendingActivity const): Deleted.
        (WebCore::HTMLImageElement::pendingDecodePromisesCountForTesting const): Deleted.
        HTMLImageLoader brings in JSDOMPromiseDeferred, which is known to be horribly expensive.
        Out-of-line m_imageLoader.

        * platform/graphics/GraphicsLayer.h:
        Swap Animation for TimingFunction, which is much smaller.

        * platform/graphics/MediaPlayer.h:
        InbandTextTrackPrivate brings in SerializedPlatformRepresentation.h,
        which is very expensive. MediaPlayer.h is included in many places.
        Break the link.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:

2019-10-01  youenn fablet  <youenn@apple.com>

        RTCDataChannel should not prevent entering page cache except if in open state
        https://bugs.webkit.org/show_bug.cgi?id=202395

        Reviewed by Chris Dumez.

        Only prevent entering page cache in open state.
        Enqueue message through the document event queue to handle suspension properly.

        We cannot yet write page cache tests as a data channel requires a peer connection which
        currently forbids entering page cache.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::didReceiveStringData):
        (WebCore::RTCDataChannel::didReceiveRawData):
        (WebCore::RTCDataChannel::didDetectError):
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        (WebCore::RTCDataChannel::scheduleDispatchEvent):
        (WebCore::RTCDataChannel::scheduledEventTimerFired): Deleted.
        * Modules/mediastream/RTCDataChannel.h:

2019-10-01  Rob Buis  <rbuis@igalia.com>

        [Mac] Layout Test imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location.any.html fails
        https://bugs.webkit.org/show_bug.cgi?id=202350

        Reviewed by Alex Christensen.

        In some cases didReceiveResponse will deliver redirects (normally willSendRequestInternal will be used for redirects).
        When this is done in manual redirect mode make sure the response type is opaque redirect.

        Test: imported/w3c/web-platform-tests/fetch/api/redirect/redirect-location.any.html

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

2019-10-01  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202386
        <rdar://problem/55863017>

        Reviewed by Eric Carlson.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Jer Noble was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        No new tests -- no new or changed functionality.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesLastModifiedTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::liveUpdateInterval const):

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

        Unreviewed attempt to fix Windows build after r250527.

        * dom/GenericEventQueue.cpp:
        (WebCore::TaskQueueConstructor::construct):
        (WebCore::TaskQueueConstructor<Timer>::construct):
        (WebCore::GenericEventQueueBase<T>::enqueueEvent):
        (WebCore::GenericEventQueueBase<T>::close):
        (WebCore::GenericEventQueueBase<T>::cancelAllEvents):
        (WebCore::GenericEventQueueBase<T>::setPaused):
        (WebCore::GenericEventQueueBase<T>::suspend):
        (WebCore::GenericEventQueueBase<T>::rescheduleAllEventsIfNeeded):
        * dom/GenericEventQueue.h:
        * platform/GenericTaskQueue.h:

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

        Fix internal build after r250549
        https://bugs.webkit.org/show_bug.cgi?id=202390

        There is an internal #define confirm on some systems, so rename DOMWindow::confirm to DOMWindow::confirmForBindings.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::confirmForBindings):
        (WebCore::DOMWindow::confirm): Deleted.
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

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

        Unreviewed attempt to fix Windows build after r250527.

        * platform/GenericTaskQueue.h:

2019-10-01  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Implement sync methods for position, bounds origin
        https://bugs.webkit.org/show_bug.cgi?id=202398

        Reviewed by Carlos Garcia Campos.

        Add the CoordinatedGraphicsLayer::syncPosition() and
        CoordinatedGraphicsLayer::syncBoundsOrigin() method overrides, both
        performing a synchronization of the given GraphicsLayer attribute.

        These methods are used by the scrolling code to reflect changes in these
        attributes without causing a layer flush (which is not necessary since
        the changes have already been applied in an equivalent way).

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeGeometry):
        (WebCore::CoordinatedGraphicsLayer::syncPosition):
        (WebCore::CoordinatedGraphicsLayer::syncBoundsOrigin):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2019-10-01  Joonghun Park  <jh718.park@samsung.com>

        Make table's clientWidth/Height include its border sizes.
        https://bugs.webkit.org/show_bug.cgi?id=200974

        WebKit doesn't have table wrapper box currently
        while Gecko has it,
        so this CL tries to mimic the behavior that
        clientWidth/Height refers to table wrapper box
        which doesn't have borders applied to itself
        and table grid box has the borders.

        This CL adds table's border sizes
        to clientWidth/Height
        at |LayoutBox::PixelSnappedClientWidth/Height|.

        As a result of this CL, table's clientWidth/Height
        and offsetWidth/Height are equal now, respectively.

        The corresponding csswg discussion is
        https://github.com/w3c/csswg-drafts/issues/4245.

        Reviewed by Antti Koivisto.

        Tests: fast/table/border-collapsing/bug236727.html
               imported/w3c/web-platform-tests/css/cssom-view/table-border-collapse-client-width-height.html
               imported/w3c/web-platform-tests/css/cssom-view/table-border-separate-client-width-height.html
               imported/w3c/web-platform-tests/css/cssom-view/table-with-border-client-width-height.html

        * dom/Element.cpp:
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):

2019-10-01  youenn fablet  <youenn@apple.com>

        Remove races condition when validating capture sandbox extension revocation
        https://bugs.webkit.org/show_bug.cgi?id=202133
        <rdar://problem/55660905>

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::endCapture):
        Synchronously update document media state when capture is ended.
        This allows to validate the fact that no document is capturing while we revoke sandbox extensions.

2019-10-01  youenn fablet  <youenn@apple.com>

        MediaDevices should be SecureContext
        https://bugs.webkit.org/show_bug.cgi?id=202267

        Reviewed by Eric Carlson.

        Manually tested since 127.0.0.1/localhost are secure contexts.

        * Modules/mediastream/MediaDevices.idl:
        * bindings/js/WebCoreBuiltinNames.h:

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

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=202384

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

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

        Make GenericEventQueue an ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=202373

        Reviewed by Eric Carlson.

        Make GenericEventQueue an ActiveDOMObject so that it is guaranteed to never fire any events while
        suspended without requiring the client to explicitly suspend/resume the event queue.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::enqueueMessage):
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::WebKitMediaKeySession):
        (WebCore::WebKitMediaKeySession::~WebKitMediaKeySession):
        (WebCore::WebKitMediaKeySession::addKeyTimerFired):
        (WebCore::WebKitMediaKeySession::sendMessage):
        (WebCore::WebKitMediaKeySession::sendError):
        (WebCore::WebKitMediaKeySession::hasPendingActivity const):
        (WebCore::WebKitMediaKeySession::stop):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::MediaSource):
        (WebCore::MediaSource::hasPendingActivity const):
        (WebCore::MediaSource::stop):
        (WebCore::MediaSource::canSuspendForDocumentSuspension const):
        (WebCore::MediaSource::scheduleEvent):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::hasPendingActivity const):
        (WebCore::SourceBuffer::stop):
        (WebCore::SourceBuffer::scheduleEvent):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        (WebCore::SourceBufferList::scheduleEvent):
        (WebCore::SourceBufferList::canSuspendForDocumentSuspension const):
        * Modules/mediasource/SourceBufferList.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::stop):
        * Modules/webaudio/AudioContext.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::DeclarativeAnimation):
        (WebCore::DeclarativeAnimation::tick):
        (WebCore::DeclarativeAnimation::needsTick const):
        (WebCore::DeclarativeAnimation::remove):
        (WebCore::DeclarativeAnimation::enqueueDOMEvent):
        (WebCore::DeclarativeAnimation::stop):
        (WebCore::DeclarativeAnimation::suspend):
        (WebCore::DeclarativeAnimation::resume):
        * animation/DeclarativeAnimation.h:
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueueBase<T>::GenericEventQueueBase):
        (WebCore::GenericEventQueueBase<T>::setPaused):
        (WebCore::GenericEventQueueBase<T>::canSuspendForDocumentSuspension const):
        (WebCore::GenericEventQueueBase<T>::suspend):
        (WebCore::GenericEventQueueBase<T>::resume):
        (WebCore::GenericEventQueueBase<T>::rescheduleAllEventsIfNeeded):
        (WebCore::GenericEventQueueBase<T>::stop):
        (WebCore::GenericEventQueueBase<T>::activeDOMObjectName const):
        (WebCore::GenericEventQueue::create):
        (WebCore::MainThreadGenericEventQueue::create):
        * dom/GenericEventQueue.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePort.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered):
        (WebCore::HTMLMediaElement::closeTaskQueues):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::hasPendingActivity const):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        * html/HTMLMediaElement.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::TrackListBase):
        (WebCore::TrackListBase::scheduleTrackEvent):
        (WebCore::TrackListBase::scheduleChangeEvent):
        (WebCore::TrackListBase::isChangeEventScheduled const):
        (WebCore::TrackListBase::canSuspendForDocumentSuspension const):
        * html/track/TrackListBase.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::terminate):
        (WebCore::Worker::stop):
        (WebCore::Worker::hasPendingActivity const):
        (WebCore::Worker::enqueueEvent):
        (WebCore::Worker::dispatchEvent):
        * workers/Worker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        (WebCore::ServiceWorkerContainer::startMessages):
        (WebCore::ServiceWorkerContainer::postMessage):
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerContainer.h:

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

        IDBTransaction / IDBObjectStore should not prevent a page from entering the back / forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202291
        <rdar://problem/55760106>

        Reviewed by Geoffrey Garen.

        IDBObjectStore does not fire any events and should therefore not cause any problem while in PageCache.
        IDBTransaction can only fire abort/complete/error events, all of which are being enqueued to the
        DocumentEventQueue. The DocumentEventQueue subclasses SuspendableTimer which will correctly suspend
        while the document is in page cache. IDBTransaction will therefore not cause events to fire (and JS
        to run) while in page cache.

        Test: storage/indexeddb/IDBTransaction-page-cache.html

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::canSuspendForDocumentSuspension const):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::canSuspendForDocumentSuspension const):

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

        Refine restrictions for X-Temp-Tablet HTTP header experiment
        https://bugs.webkit.org/show_bug.cgi?id=202367
        <rdar://problem/55849139>

        Reviewed by Geoffrey Garen.

        Refine restrictions for X-Temp-Tablet HTTP header experiment:
        1. Only send the header if the embedding application is MobileSafari.
        2. Only send the header if the first party is google.com
        3. Only send the header if the current date is before 2/1/2020
        4. Send the header even if using an ephemeral session

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::isXTempTabletHeaderExperimentOver):
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::isGoogleSearch):
        (WebCore::CachedResourceLoader::shouldSendXTempTabletHeader const):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:

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

        Pages with Web Workers cannot enter the back / forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202296
        <rdar://problem/55764073>

        Reviewed by Jer Noble.

        Allow pages that use Web Workers to enter the back / forward cache.
        This involves adding an EventQueue for all event firing on Woker
        objects and suspending this EventQueue while in the page cache.

        This was preventing some of the pages on weather.com to enter the
        back / forward cache.

        Test: fast/workers/worker-page-cache.html

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        * Modules/webaudio/AudioContext.h:
        * animation/DeclarativeAnimation.h:

        * dom/GenericEventQueue.cpp:
        (WebCore::TaskQueueConstructor::construct):
        (WebCore::TaskQueueConstructor<Timer>::construct):
        (WebCore::GenericEventQueueBase<T>::GenericEventQueueBase):
        (WebCore::GenericEventQueueBase<T>::enqueueEvent):
        (WebCore::GenericEventQueueBase<T>::dispatchOneEvent):
        (WebCore::GenericEventQueueBase<T>::close):
        (WebCore::GenericEventQueueBase<T>::cancelAllEvents):
        (WebCore::GenericEventQueueBase<T>::hasPendingEvents const):
        (WebCore::GenericEventQueueBase<T>::hasPendingEventsOfType const):
        (WebCore::GenericEventQueueBase<T>::suspend):
        (WebCore::GenericEventQueueBase<T>::resume):
        * dom/GenericEventQueue.h:
        (WebCore::GenericEventQueueBase::isSuspended const):
        (WebCore::MainThreadGenericEventQueue::MainThreadGenericEventQueue):
        (WebCore::GenericEventQueue::GenericEventQueue):
        Rename GenericEventQueue to MainThreadGenericEventQueue since its implementation relies
        on a global shared Timer to fire events. Introduce a new GenericEventQueue which can
        actually be used from any thread. This is useful for MessagePort, which is used both
        on the main thread and on worker threads.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::suspend):
        (WebCore::MessagePort::resume):
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePort.h:
        Use an GenericEventQueue in MessagePort for consistency with Worker.
        MessagePort is an ActiveDOMobject which returns true in canSuspend(),
        we therefore need to make sure it suspends event firing while
        suspended.

        * html/HTMLMediaElement.h:
        * html/track/TrackListBase.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::terminate):
        (WebCore::Worker::canSuspendForDocumentSuspension const):
        (WebCore::Worker::suspend):
        (WebCore::Worker::resume):
        (WebCore::Worker::stop):
        (WebCore::Worker::hasPendingActivity const):
        (WebCore::Worker::notifyFinished):
        (WebCore::Worker::enqueueEvent):
        (WebCore::Worker::dispatchEvent):
        * workers/Worker.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):

2019-09-27  Keith Rollin  <krollin@apple.com>

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Unreviewed, address post landing review comments for r248533 from
        Darin Adler.

        No new tests -- no new or changed functionality.

        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):
        (WebCore::subLocality): Deleted.
        (WebCore::setSubLocality): Deleted.
        (WebCore::subAdministrativeArea): Deleted.
        (WebCore::setSubAdministrativeArea): Deleted.

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

        RenderLineBreak should use LineLayoutTraversal
        https://bugs.webkit.org/show_bug.cgi?id=202316

        Reviewed by Zalan Bujtas.

        Replace more path specific code with LineLayoutTraversal.

        * Headers.cmake:
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::linesBoundingBox const):
        (WebCore::RenderLineBreak::absoluteRects const):
        (WebCore::RenderLineBreak::absoluteQuads const):
        (WebCore::simpleLineLayout): Deleted.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeTextBox):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeBoundingBox): Deleted.
        (WebCore::SimpleLineLayout::collectAbsoluteRects): Deleted.
        (WebCore::SimpleLineLayout::rendererForPosition): Deleted.
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/line/LineLayoutTraversal.cpp:
        (WebCore::LineLayoutTraversal::ElementBoxIterator::ElementBoxIterator):
        (WebCore::LineLayoutTraversal::ElementBoxIterator::atEnd const):
        (WebCore::LineLayoutTraversal::elementBoxFor):
        (WebCore::LineLayoutTraversal::TextBox::rect const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::logicalRect const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::hasHyphen const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::isLeftToRightDirection const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::dirOverride const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::text const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::isLineBreak const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::localStartOffset const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::localEndOffset const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::length const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::isLastOnLine const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::isLast const): Deleted.
        (WebCore::LineLayoutTraversal::TextBox::iterator const): Deleted.

        Move to header as templates.

        * rendering/line/LineLayoutTraversal.h:
        (WebCore::LineLayoutTraversal::ElementBoxIterator::ElementBoxIterator):
        (WebCore::LineLayoutTraversal::ElementBoxIterator::operator bool const):
        (WebCore::LineLayoutTraversal::ElementBoxIterator::operator* const):
        (WebCore::LineLayoutTraversal::ElementBoxIterator::operator-> const):

        Add a new iterator type for element boxes.
        It doesn't currently really iterate, is just allows testing for end.

        (WebCore::LineLayoutTraversal::Box<Iterator>::rect const):
        (WebCore::LineLayoutTraversal::Box<Iterator>::logicalRect const):
        (WebCore::LineLayoutTraversal::Box<Iterator>::isLeftToRightDirection const):
        (WebCore::LineLayoutTraversal::Box<Iterator>::dirOverride const):
        (WebCore::LineLayoutTraversal::Box<Iterator>::isLineBreak const):
        (WebCore::LineLayoutTraversal::Box<Iterator>::iterator const):

        Split properties that all inline boxes have out from TextBox.
        Make it a template class.

        (WebCore::LineLayoutTraversal::TextBox<Iterator>::hasHyphen const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::text const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::localStartOffset const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::localEndOffset const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::length const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::isLastOnLine const):
        (WebCore::LineLayoutTraversal::TextBox<Iterator>::isLast const):

        Make a template class.

        (WebCore::LineLayoutTraversal::hasTextBoxes): Deleted.

2019-09-30  Rob Buis  <rbuis@igalia.com>

        No-Cors check should take into account same-origin
        https://bugs.webkit.org/show_bug.cgi?id=202353

        Reviewed by Youenn Fablet.

        No-Cors check should take into account same-origin, in that case the
        check should bail out, since same-origin is already handled in
        the first step of [1].

        Test: imported/web-platform-tests/fetch/api/redirect/redirect-mode.any.html

        [1] https://fetch.spec.whatwg.org/#main-fetch Step 5

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):

2019-09-30  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Complete ScrollingTreeNicosia::createScrollingTreeNode()
        https://bugs.webkit.org/show_bug.cgi?id=202358

        Reviewed by Carlos Garcia Campos.

        * page/scrolling/nicosia/ScrollingTreeNicosia.cpp:
        (WebCore::ScrollingTreeNicosia::createScrollingTreeNode):
        Return appropriate objects for the remaining node types.

2019-09-30  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add missing conversion casts for LayerRepresentation objects
        https://bugs.webkit.org/show_bug.cgi?id=202357

        Reviewed by Carlos Garcia Campos.

        After r250491, we have to request explicit conversion of
        LayerRepresentation objects to Nicosia::PlatformLayer pointers.

        * page/scrolling/nicosia/ScrollingTreeFixedNode.cpp:
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::repositionScrollingLayers):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.cpp:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::repositionScrollingLayers):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::handleWheelEvent):
        * page/scrolling/nicosia/ScrollingTreePositionedNode.cpp:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp:
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):

2019-09-29  Zan Dobersek  <zdobersek@igalia.com>

        ScrollingTreeScrollingNode: use LayerRepresentation for scroll container, scrolled contents layers
        https://bugs.webkit.org/show_bug.cgi?id=202256
        <rdar://problem/55772092>

        Reviewed by Simon Fraser.

        Make the scroll container and scrolled contents layer holders
        platform-independent by using the LayerRepresentation as the underlying
        type for the two member variables in ScrollingTreeScrollingNode.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):

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

        [FTW] Correct compositing, shadow, and radial gradient implementations
        https://bugs.webkit.org/show_bug.cgi?id=202177

        Reviewed by Fujii Hironori.

        This patch corrects a number of implementation errors in basic Canvas
        drawing operations.

        Tested by canvas/philip/tests 

        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::State::setCompositeOperation): Initialize blend and
        composite modes to correct defaults.
        (WebCore::Direct2D::drawWithShadowHelper): Correct value used for blur
        standard deviation to more closely match other browser output.
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::createBitmapCopyFromContext): Added helper function.
        * platform/graphics/win/Direct2DUtilities.h:
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient): Properly handle the case of a non-zero
        initial gradient radius. Properly compute the final radius.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::readDataFromBitmapIfNeeded const): Update to use ID2D1DeviceContext
        from platformContext, rather than searching for it each time.
        (WebCore::ImageBufferData::compatibleBitmap): Ditto.
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::PlatformContextDirect2D): Grab the ID2D1DeviceContext for
        the RenderTarget at construction time.
        (WebCore::PlatformContextDirect2D::setRenderTarget): Ditto.
        (WebCore::PlatformContextDirect2D::endDraw): Perform compositing operations when needed.
        (WebCore::PlatformContextDirect2D::compositeIfNeeded): Added.
        (WebCore::PlatformContextDirect2D::setBlendAndCompositeMode): Update to properly set the
        blend and compositing mode (depending on global value set for the canvas.)
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextDirect2D::deviceContext):
        (WebCore::PlatformContextDirect2D::setRenderTarget): Deleted.
        (WebCore::PlatformContextDirect2D::setBlendMode): Deleted.
        (WebCore::PlatformContextDirect2D::setCompositeMode): Deleted.

2019-09-29  Zan Dobersek  <zdobersek@igalia.com>

        Tighten up LayerRepresentation operators
        https://bugs.webkit.org/show_bug.cgi?id=202344

        Reviewed by Simon Fraser.

        Make the operators on the LayerRepresentation class explicit.
        Additionally, the bool operator is added to the class, allowing objects
        of this class to be safely used in boolean contexts like null checks.
        Before, use in such contexts fell back to using the
        GraphicsLayer::PlatformLayerID operator which caused asserts when the
        internal representation was of different type.

        While the explicit operators prevent misuse, they do require additional
        conversion casts to retrieve the internal LayerRepresentation value.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::operator GraphicsLayer* const):
        (WebCore::LayerRepresentation::operator PlatformLayer* const):
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID const):
        (WebCore::LayerRepresentation::operator bool const):
        (WebCore::LayerRepresentation::toRepresentation const):
        Add a missing ASSERT_NOT_REACHED() invocation.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        * page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):

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

        [LFC][IFC] Remove InlineLayout abstraction layer
        https://bugs.webkit.org/show_bug.cgi?id=202352
        <rdar://problem/55811532>

        Reviewed by Antti Koivisto.

        Move InlineLayout functions to InlineFormattingContext. Now inline layout has
        1. InlineFormattingContext -high level layout and preferred width computation, collecting inline content, constructing display boxes
        2. LineLayout -responsible for placing inline content on the current line (partial inline content handling, line breaking etc)
        3. Line -represents an actual line, turns inline content into runs.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
        (WebCore::Layout::InlineFormattingContext::initialConstraintsForLine):
        (WebCore::Layout::InlineFormattingContext::setDisplayBoxesForLine):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layoutState const): Deleted.
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingContext const): Deleted.
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingRoot const): Deleted.
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingState): Deleted.
        (WebCore::Layout::InlineFormattingContext::InlineLayout::widthConstraint const): Deleted.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp: Removed.
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::inlineItems const):
        * layout/inlineformatting/InlineLineLayout.cpp: Added.
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::LineInput::LineInput):
        (WebCore::Layout::LineLayout::UncommittedContent::add):
        (WebCore::Layout::LineLayout::UncommittedContent::reset):
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::LineLayout::commitPendingContent):
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::LineLayout::layout):
        * layout/inlineformatting/InlineLineLayout.h: Added.
        (WebCore::Layout::LineLayout::formattingContext const):
        (WebCore::Layout::LineLayout::UncommittedContent::runs):
        (WebCore::Layout::LineLayout::UncommittedContent::isEmpty const):
        (WebCore::Layout::LineLayout::UncommittedContent::size const):
        (WebCore::Layout::LineLayout::UncommittedContent::width const):

2019-09-29  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add overflow, overflow proxy node implementations
        https://bugs.webkit.org/show_bug.cgi?id=202306

        Reviewed by Carlos Garcia Campos.

        Add the ScrollingTreeOverflowScrollProxyNode and
        ScrollingTreeOverflowScrollingNodeNicosia classes, implementing the
        missing overlfow node types. Both implementations are based on the
        corresponsing classes for Cocoa/Mac platforms and should ideally
        share most of the platform-agnostic logic.

        * SourcesWPE.txt:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.cpp: Added.
        (WebCore::ScrollingTreeOverflowScrollProxyNode::create):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::ScrollingTreeOverflowScrollProxyNode):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::applyLayerPositions):
        (WebCore::ScrollingTreeOverflowScrollProxyNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.h: Added.
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp: Added.
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::create):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::ScrollingTreeOverflowScrollingNodeNicosia):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::commitStateAfterChildren):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::adjustedScrollPosition const):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::repositionScrollingLayers):
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::handleWheelEvent):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.h: Added.

2019-09-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash when removing the target element while animating its attributes
        https://bugs.webkit.org/show_bug.cgi?id=202247

        Reviewed by Darin Adler.

        If SMIL is animating a CSS attribute, there is a chance the animation is
        ended while it is being started or progressed. For that reason, the member
        SVGAnimateElementBase::m_animator has to be made RefPtr and it has to be
        be protected in resetAnimatedType() and calculateAnimatedValue().

        While SMILTimeContainer::updateAnimations() is calling progress() for the
        scheduled animation elements, SMILTimeContainer::unschedule() might get
        called if processing an animation causes events to be dispatched. For that
        reason we need to copy the scheduled animations Vector before processing
        them so we avoid changing the Vector while looping through its items.

        Remove the guard SMILTimeContainer::m_preventScheduledAnimationsChanges
        which was added in r129670 for debugging purposes. In some situations, 
        the scheduled animations map could be modified out from under some of the
        functions of SMILTimeContainer.

        Test: svg/animations/animate-and-remove-target-element.html

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::resetAnimatedType):
        (WebCore::SVGAnimateElementBase::calculateAnimatedValue):
        * svg/SVGAnimateElementBase.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::createAnimator):
        * svg/SVGElement.h:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::schedule):
        (WebCore::SMILTimeContainer::unschedule):
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::sortByPriority):
        (WebCore::SMILTimeContainer::processAnimations):
        (WebCore::SMILTimeContainer::processScheduledAnimations):
        (WebCore::SMILTimeContainer::updateAnimations):
        (WebCore::SMILTimeContainer::~SMILTimeContainer): Deleted.
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::calculateNextProgressTime const):
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimator.h:
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGAttributeAnimator.h:
        * svg/properties/SVGMemberAccessor.h:
        (WebCore::SVGMemberAccessor::createAnimator const):
        * svg/properties/SVGPrimitivePropertyAnimator.h:
        (WebCore::SVGPrimitivePropertyAnimator::create):
        * svg/properties/SVGPropertyAnimatorFactory.h:
        (WebCore::SVGPropertyAnimatorFactory::createAnimator):
        * svg/properties/SVGPropertyOwnerRegistry.h:
        * svg/properties/SVGPropertyRegistry.h:
        * svg/properties/SVGValuePropertyAnimatorImpl.h:
        * svg/properties/SVGValuePropertyListAnimatorImpl.h:

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

        [LFC][IFC] Move horizontal alignment to Line
        https://bugs.webkit.org/show_bug.cgi?id=202351
        <rdar://problem/55810139>

        Reviewed by Antti Koivisto.

        Line should be able to finalize the run placement including horizontal alignment.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineInput::LineInput):
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::verticalAlignContent):
        (WebCore::Layout::Line::horizontalAlignContent):
        (WebCore::Layout::Line::appendInlineContainerStart):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        * layout/inlineformatting/InlineLine.h:

2019-09-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [IDL] Support record<DOMString, *Callback> in bindings
        https://bugs.webkit.org/show_bug.cgi?id=202326

        Reviewed by Sam Weinig.

        Currently, IDLRecord's converter assumes that the value type (template argument V) can be converted by passing
        in only an ExecState and the JSValue, since it calls `auto typedValue = Converter<V>::convert(state, subValue)`.
        However, IDLCallbackFunctions additionally require the JSDOMGlobalObject (see JSDOMConverterCallbacks.h). This
        results in a compilation error in generated code, when attempting to convert the record.

        To fix this, teach Converter<IDLRecord<K, V>> to accept three arguments (the ExecState, value, and global
        object) in the case where V requires the global object. Additionally, let the bindings generator know that
        JSValue to native object conversion requires the global object, by returning whether or not the value type of
        the IDL record requires the global object, in the case where the given type is a record.

        * bindings/js/JSDOMConvertRecord.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNativeDOMConvertNeedsGlobalObject):
        * bindings/scripts/test/JS/JSTestObj.cpp:

        Test this scenario by augmenting TestObj.idl with record<DOMString, VoidCallback>.

        (WebCore::jsTestObjStringVoidCallbackRecordAttrGetter):
        (WebCore::jsTestObjStringVoidCallbackRecordAttr):
        (WebCore::setJSTestObjStringVoidCallbackRecordAttrSetter):
        (WebCore::setJSTestObjStringVoidCallbackRecordAttr):
        * bindings/scripts/test/TestObj.idl:

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

        [LFC][IFC] Line::InitialConstraints's heightAndBaseline should be optional
        https://bugs.webkit.org/show_bug.cgi?id=202348

        Reviewed by Antti Koivisto.

        Vertical properties are undefined while computing the preferred width.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        * layout/inlineformatting/InlineLine.h:

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

        [Experiment][iOS] Add temporary HTTP header to distinguish iPads for requests to Google
        https://bugs.webkit.org/show_bug.cgi?id=202335
        <rdar://problem/55790994>

        Reviewed by Maciej Stachowiak.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/network/HTTPHeaderNames.in:

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

        [LFC][IFC] Line::Box should have a const public interface
        https://bugs.webkit.org/show_bug.cgi?id=202336
        <rdar://problem/55798628>

        Reviewed by Antti Koivisto.

        Clean up Line::Box interface.

        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::displayRun const):
        (WebCore::Layout::Line::Run::isVisuallyEmpty const):
        (WebCore::Layout::Line::Run::expand):
        (WebCore::Layout::Line::Run::displayRun): Deleted.

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

        Pages using WebGLRenderingContext fail to enter the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202318
        <rdar://problem/55783612>

        Reviewed by Tim Horton.

        Allow pages with a WebGLRenderingContext to enter the back/forward cache by updating the
        implementation to use SuspendableTimers to fire JS events. This guarantees that no events
        will be fired (and thus no JS will run) while in the page cache.

        This was preventing some of the pages on weather.com and facebook.com from entering the
        back/forward cache.

        Test: fast/canvas/webgl/canvas-webgl-page-cache.html

        * dom/DocumentEventQueue.cpp:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::canSuspendForDocumentSuspension const):
        (WebCore::WebGLRenderingContextBase::suspend):
        (WebCore::WebGLRenderingContextBase::resume):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedNotification):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent):
        * html/canvas/WebGLRenderingContextBase.h:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        * page/DOMTimer.h:
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimerBase::SuspendableTimerBase):
        (WebCore::SuspendableTimerBase::hasPendingActivity const):
        (WebCore::SuspendableTimerBase::stop):
        (WebCore::SuspendableTimerBase::suspend):
        (WebCore::SuspendableTimerBase::resume):
        (WebCore::SuspendableTimerBase::canSuspendForDocumentSuspension const):
        (WebCore::SuspendableTimerBase::didStop):
        (WebCore::SuspendableTimerBase::cancel):
        (WebCore::SuspendableTimerBase::startRepeating):
        (WebCore::SuspendableTimerBase::startOneShot):
        (WebCore::SuspendableTimerBase::repeatInterval const):
        (WebCore::SuspendableTimerBase::augmentFireInterval):
        (WebCore::SuspendableTimerBase::augmentRepeatInterval):
        (WebCore::SuspendableTimer::activeDOMObjectName const):
        * page/SuspendableTimer.h:

2019-09-27  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fixes for non-unified builds after r249714
        https://bugs.webkit.org/show_bug.cgi?id=202304

        Reviewed by Youenn Fablet.

        No new tests needed.

        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp: Add missing inclusion of Frame.h
        to make the compiler stop complaining about Frame being used without being defined.
        * inspector/InspectorShaderProgram.h: Add missing inclusion of wtf/Variant.h, where
        WTF::Monostate is defined; and prefixed the usage with its namespace.

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

        Support accessibility for <figure> element on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=202272
        <rdar://problem/54789907>

        Reviewed by Chris Fleizach.

        Test: accessibility/ios-simulator/figure-element.html

        Added a role description for the <figure> element.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::roleDescription const):

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

        [iPadOS] Can’t use RalphLauren.com on iPad because hover menus don’t stay up
        https://bugs.webkit.org/show_bug.cgi?id=202331
        <rdar://problem/55629493>

        Reviewed by Tim Horton.

        Unfortunately the top level menu items now are ARIA labelled as 'buttons' and that triggers the fast path on content observation.
        This patch introduces a quirk on ralphLauren.com to ignore the ARIA labels when checking whether the target node should always click through.

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

2019-09-27  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash under FontCache::lastResortFallbackFont
        https://bugs.webkit.org/show_bug.cgi?id=202325
        <rdar://problem/47856730>

        Reviewed by Brent Fulgham.

        As demonstrated by crash reports, there seems to be cases where we are not able to create a last resort fallback font  
        on Windows. If all attempts to create a fallback font fail, create a font from the default UI font.
 
        No new tests. I have not been able to reproduce this issue. 

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont):

2019-09-27  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, rolling out r250397.

        caused failure on iOS 13

        Reverted changeset:

        "REGRESSION: [ Catalina WK2 ] http/wpt/webauthn/public-key-
        credential-create-success-u2f.https.html is failing"
        https://bugs.webkit.org/show_bug.cgi?id=201620
        https://trac.webkit.org/changeset/250397

2019-09-27  Jer Noble  <jer.noble@apple.com>

        [iOS] Vimeo fails to AirPlay in desktop mode
        https://bugs.webkit.org/show_bug.cgi?id=202322

        Reviewed by Eric Carlson.

        Add a Quirk which opts Vimeo out of the preload=auto restriction, and allows their
        second video element containing a HLS stream to correctly start AirPlaying when the
        system route changes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishInitialization):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsPreloadAutoQuirk const):
        * page/Quirks.h:

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

        [LFC][IFC] Line::close should merge the text runs.
        https://bugs.webkit.org/show_bug.cgi?id=202319
        <rdar://problem/55785949>

        Reviewed by Antti Koivisto.

        Now Line::close returns the final Display::Run list.

        * layout/displaytree/DisplayRect.h:
        (WebCore::Display::Rect::expandHorizontally):
        (WebCore::Display::Rect::expandVertically):
        (WebCore::Display::Rect::expand):
        * layout/displaytree/DisplayRun.h:
        (WebCore::Display::Run::expandVertically):
        (WebCore::Display::Run::expandHorizontally):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::displayRun):

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

        Allow pages served over HTTPS with `Cache-Control: no-store` header to enter the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202314
        <rdar://problem/55783482>

        Reviewed by Alex Christensen.

        Allow pages served over HTTPS with `Cache-Control: no-store` header to enter the back/forward cache.
        This was preventing all pages on Facebook.com to enter the back/forward cache.

        No new tests, updated existing test.

        * history/PageCache.cpp:
        (WebCore::canCacheFrame):

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

        Flaky Test: inspector/canvas/updateShader.html
        https://bugs.webkit.org/show_bug.cgi?id=202186
        <rdar://problem/55716053>

        Reviewed by Joseph Pecoraro.

        If the `WebGLProgram` outlives it's `WebGLRenderingContext`, the `ScriptExecutionContext*`
        that was provided in the constructor won't be invalidated leading to the bad access crash.

        Rather than pass the `ScriptExecutionContext*` directly, have `WebGLProgram` inherit from
        `ContextDestructionObserver` so that it can propertly invalidate (and notify Web Inspector)
        when the related context is about to be destroyed.

        Test: inspector/canvas/updateShader.html

        * html/canvas/WebGLProgram.h:
        (WebCore::WebGLProgram::scriptExecutionContext const): Deleted.
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::contextDestroyed): Added.

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

        [LFC][IFC] Replace Line::Run's logicalRect/textContext with Display::Run
        https://bugs.webkit.org/show_bug.cgi?id=202313
        <rdar://problem/55782430>

        Reviewed by Antti Koivisto.

        Display::Run is a container for logical rect and text context. Let's replace Line::Run's logical rect/text context with Display::Run.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * layout/displaytree/DisplayRun.h:
        (WebCore::Display::Run::logicalRect const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::alignRuns const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addInlineRun):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::Run):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::displayRun const):
        (WebCore::Layout::Line::Run::logicalRect const):
        (WebCore::Layout::Line::Run::adjustLogicalTop):
        (WebCore::Layout::Line::Run::moveVertically):
        (WebCore::Layout::Line::Run::moveHorizontally):
        (WebCore::Layout::Line::Run::textContext const): Deleted.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

2019-09-27  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250415.

        Broke iOS debug testing with 50 crashes and 850 API failure

        Reverted changeset:

        "ScrollingTreeScrollingNode: use LayerRepresentation for
        scroll container, scrolled contents layers"
        https://bugs.webkit.org/show_bug.cgi?id=202256
        https://trac.webkit.org/changeset/250415

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

        Move service worker process termination delay disabling from process pool to website data store
        https://bugs.webkit.org/show_bug.cgi?id=202308

        Reviewed by Chris Dumez.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::disableServiceWorkerProcessTerminationDelay): Deleted.

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

        IDBRequest should not prevent a page from entering the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=202270
        <rdar://problem/55744717>

        Reviewed by Youenn Fablet.

        Update IDBRequest::canSuspendForDocumentSuspension() to return true instead of
        false. IDBRequest can only fire 2 events (error / success) and for both its
        merely enqueues the Event to the DocumentEventQueue. The DocumentEventQueue
        uses a SuspendableTimer (which will be suspended while the document is in the
        page cache) so there is no risk of firing the events (and thus running script)
        while in the page cache.

        Test: storage/indexeddb/IDBRequest-page-cache.html

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::canSuspendForDocumentSuspension const):

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

        [LFC][IFC] Remove redundant Line::TextContext member variables
        https://bugs.webkit.org/show_bug.cgi?id=202300
        <rdar://problem/55769916>

        Reviewed by Antti Koivisto.

        This is in preparation for using Display::Run in Line::Run instead of Display::Rect + TextContext.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::isWhitespace const):
        (WebCore::Layout::Line::Run::canBeExtended const):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        (WebCore::Layout::Line::trailingTrimmableWidth const):
        (WebCore::Layout::Line::appendTextContent):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::isVisuallyEmpty const):
        (WebCore::Layout::Line::Run::setVisuallyIsEmpty):
        (WebCore::Layout::Line::Run::setTextIsCollapsed): Deleted.

2019-09-27  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Implement frame scrolling functionality
        https://bugs.webkit.org/show_bug.cgi?id=202201

        Reviewed by Carlos Garcia Campos.

        Implement logic in the ScrollingTreeFrameScrollingNodeNicosia class,
        largely following the Mac port's implementation but skipping areas we
        don't support or can keep simple, like CSS scroll snap, frame pinning
        and more complex wheel event handling through the platform-specific
        delegate behavior.

        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::commitStateAfterChildren):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::adjustedScrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::currentScrollPositionChanged):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::repositionScrollingLayers):
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::repositionRelatedLayers):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:

2019-09-27  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] ScrollingCoordinatorNicosia should handle wheel events coming from the main thread
        https://bugs.webkit.org/show_bug.cgi?id=202275

        Reviewed by Carlos Garcia Campos.

        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::handleWheelEvent):
        Handle wheel events that get rerouted through the main thread,
        dispatching them back to the scrolling thread so that they end up
        performing the desired scroll if possible.

2019-09-27  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] support bounds origin
        https://bugs.webkit.org/show_bug.cgi?id=198998

        Reviewed by Carlos Garcia Campos.

        Add bounds-origin support to the CoordinatedGraphics stack. Currently we
        take the short-cut implementation of just combining the bounds origin
        and the position value and incorporating them into the layer transform
        we calculate in TextureMapperLayer.

        Additional boilerplate code is added, as required, to relay the
        WebCore::GraphicsLayer change of bounds origin to the rendering system.

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::flushState):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::setBoundsOrigin):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setBoundsOrigin):
        (WebCore::CoordinatedGraphicsLayer::computePositionRelativeToBase):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2019-09-26  Zan Dobersek  <zdobersek@igalia.com>

        ScrollingTreeScrollingNode: use LayerRepresentation for scroll container, scrolled contents layers
        https://bugs.webkit.org/show_bug.cgi?id=202256

        Reviewed by Simon Fraser.

        Make the scroll container and scrolled contents layer holders
        platform-independent by using the LayerRepresentation as the underlying
        type for the two member variables in ScrollingTreeScrollingNode.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):

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

        Pages frequently fails to enter the back/forward cache due to pending loads
        https://bugs.webkit.org/show_bug.cgi?id=202289
        <rdar://problem/55758506>

        Reviewed by Geoffrey Garen.

        Allow pages to enter the back / forward cache, even if they have pending loads.
        Note that these pending loads get cancelled. Also note that we won't enter page
        cache unless the 'load' event has been fired in the main frame, since a
        HistoryItem would not get created otherwise. This was causing frequent transient
        failures to enter the back / forward cache while browsing (e.g. on weather.com).

        Test: http/tests/navigation/page-cache-pending-load.html

        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        * loader/CrossOriginPreflightChecker.cpp:
        * loader/CrossOriginPreflightChecker.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::setMainDocumentError):
        (WebCore::DocumentLoader::stopLoading):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        * loader/DocumentThreadableLoader.h:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::deprecatedDidReceiveCachedResource):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mainFrameHasNotFinishedLoadingKey):
        * page/DiagnosticLoggingKeys.h:

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

        [LFC][IFC] Line::Run should have a reference to the associated InlineItem
        https://bugs.webkit.org/show_bug.cgi?id=202288
        <rdar://problem/55758112>

        Reviewed by Antti Koivisto.

        It makes it clearer where the type and the layout box come from.

        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Run::Run):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Run::layoutBox const):
        (WebCore::Layout::Line::Run::textContext const):
        (WebCore::Layout::Line::Run::isText const):
        (WebCore::Layout::Line::Run::isBox const):
        (WebCore::Layout::Line::Run::isLineBreak const):
        (WebCore::Layout::Line::Run::isContainerStart const):
        (WebCore::Layout::Line::Run::isContainerEnd const):
        (WebCore::Layout::Line::Run::type const): Deleted.

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

        [LFC][IFC] Remove redundant Line::Content
        https://bugs.webkit.org/show_bug.cgi?id=202284
        <rdar://problem/55757187>

        Reviewed by Antti Koivisto.

        Line::Content is really just a list or runs at this point.

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

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

        [LFC][IFC] Move Line::Content::m_lineBox to Line.
        https://bugs.webkit.org/show_bug.cgi?id=202280
        <rdar://problem/55755798>

        Reviewed by Antti Koivisto.

        This is in preparation for Line producing Display::Runs instead of Line::Runs.

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        (WebCore::Layout::Line::moveLogicalLeft):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::runs const):
        (WebCore::Layout::Line::availableWidth const):
        (WebCore::Layout::Line::lineBox const):
        (WebCore::Layout::Line::logicalTop const):
        (WebCore::Layout::Line::logicalBottom const):
        (WebCore::Layout::Line::logicalLeft const):
        (WebCore::Layout::Line::logicalHeight const):
        (WebCore::Layout::Line::contentLogicalWidth const):
        (WebCore::Layout::Line::contentLogicalRight const):
        (WebCore::Layout::Line::baselineOffset const):
        (WebCore::Layout::Line::Content::lineBox const): Deleted.
        (WebCore::Layout::Line::Content::lineBox): Deleted.
        (WebCore::Layout::Line::Content::setLineBox): Deleted.

2019-09-26  Jiewen Tan  <jiewen_tan@apple.com>

        REGRESSION: [ Catalina WK2 ] http/wpt/webauthn/public-key-credential-create-success-u2f.https.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=201620

        Unreviewed, roll back part of r249737 to confirm the cause.

        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::WebCore::createAttestedCredentialDataFromU2fRegisterResponse):

2019-09-26  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250385.

        Broke imported/w3c/web-platform-tests/svg/animations/syncbase-
        remove-add-while-running.html on all platforms. Which was
        caught by EWS

        Reverted changeset:

        "Non-callable "handleEvent" property is silently ignored"
        https://bugs.webkit.org/show_bug.cgi?id=200066
        https://trac.webkit.org/changeset/250385

2019-09-26  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420)
        https://bugs.webkit.org/show_bug.cgi?id=195420
        <rdar://problem/54213551> 

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/add-blocking-to-redirect-database.html
               http/tests/resourceLoadStatistics/blocking-in-web-worker-script-import-database.html
               http/tests/resourceLoadStatistics/cap-cache-max-age-for-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-decoration-same-site-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-fragment-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-and-fragment-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-without-link-decoration-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-sub-frame-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-sub-frame-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-redirect-collusion-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-redirect-to-prevalent-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-collusion-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-to-prevalent-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-very-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-database.html
               http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour-database.html
               http/tests/resourceLoadStatistics/cookie-deletion-database.html
               http/tests/resourceLoadStatistics/cookies-with-and-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/delete-script-accessible-cookies-database.html
               http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-database.html
               http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations-database.html
               http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect-database.html
               http/tests/resourceLoadStatistics/do-not-switch-session-on-navigation-to-prevalent-without-interaction-database.html
               http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/enable-debug-mode-database.html
               http/tests/resourceLoadStatistics/grandfathering-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resource-with-user-interaction-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resource-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resources-can-access-cookies-in-a-third-party-context-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/ping-to-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-handled-keydown-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-unhandled-keydown-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-with-user-interaction-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-with-user-interaction-timeout-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/prune-statistics-database.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/set-custom-prevalent-resource-in-debug-mode-database.html
               http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-redirects-database.html
               http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-requests-database.html
               http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction-database.html
               http/tests/resourceLoadStatistics/user-interaction-in-cross-origin-sub-frame-database.html
               http/tests/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time-database.html
               http/tests/resourceLoadStatistics/user-interaction-reported-after-website-data-removal-database.html

        * platform/sql/SQLiteDatabase.h:
        Added WEBCORE_EXPORT prefix to 2 functions needed in the ITP Database 
        to clear out the database.

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

        Use LineLayoutTraversal for RenderText functions
        https://bugs.webkit.org/show_bug.cgi?id=202266

        Reviewed by Zalan Bujtas.

        Replace a bunch of functions that have separate simple and complex line layout versions with
        shared functions that use LineLayoutTraversal.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects const):
        (WebCore::RenderText::firstRunLocation const):
        (WebCore::RenderText::linesBoundingBox const):

        This is substantially simpler than RenderTextLineBoxes::boundingBox because it uses physical rects for all computations
        instead of using logical rects and flipping to physical at the end.

        (WebCore::RenderText::caretMinOffset const):
        (WebCore::RenderText::caretMaxOffset const):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil const):
        (WebCore::containsOffset):
        (WebCore::RenderText::containsRenderedCharacterOffset const):
        (WebCore::RenderText::containsCaretOffset const):
        (WebCore::RenderText::hasRenderedText const):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::boundingBox const): Deleted.
        (WebCore::RenderTextLineBoxes::firstRunLocation const): Deleted.
        (WebCore::RenderTextLineBoxes::hasRenderedText const): Deleted.
        (WebCore::RenderTextLineBoxes::caretMinOffset const): Deleted.
        (WebCore::RenderTextLineBoxes::caretMaxOffset const): Deleted.
        (WebCore::RenderTextLineBoxes::containsOffset const): Deleted.
        (WebCore::RenderTextLineBoxes::countCharacterOffsetsUntil const): Deleted.
        (WebCore::RenderTextLineBoxes::absoluteRects const): Deleted.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::LineState::appendFragmentAndCreateRunIfNeeded):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::computeFirstRunLocation): Deleted.
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findCaretMinimumOffset): Deleted.
        (WebCore::SimpleLineLayout::findCaretMaximumOffset): Deleted.
        (WebCore::SimpleLineLayout::containsOffset): Deleted.
        (WebCore::SimpleLineLayout::isTextRendered): Deleted.
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::isLineBreak const):
        * rendering/line/LineLayoutTraversal.cpp:
        (WebCore::LineLayoutTraversal::TextBox::isLineBreak const):
        (WebCore::LineLayoutTraversal::firstTextBoxFor):
        (WebCore::LineLayoutTraversal::firstTextBoxInTextOrderFor):
        (WebCore::LineLayoutTraversal::textBoxesFor):
        (WebCore::LineLayoutTraversal::firstTextBoxInVisualOrderFor): Deleted.
        (WebCore::LineLayoutTraversal::textBoxRangeFor): Deleted.
        * rendering/line/LineLayoutTraversal.h:
        (WebCore::LineLayoutTraversal::hasTextBoxes):

2019-09-26  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250381.

        broke multiple webgpu/ tests on Mojave WK2

        Reverted changeset:

        "Flaky Test: inspector/canvas/updateShader.html"
        https://bugs.webkit.org/show_bug.cgi?id=202186
        https://trac.webkit.org/changeset/250381

2019-09-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        Non-callable "handleEvent" property is silently ignored
        https://bugs.webkit.org/show_bug.cgi?id=200066

        Reviewed by Darin Adler.

        Tests: imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception.html
               imported/w3c/web-platform-tests/IndexedDB/fire-success-event-exception.html
               imported/w3c/web-platform-tests/IndexedDB/fire-upgradeneeded-event-exception.html
               imported/w3c/web-platform-tests/dom/events/EventListener-handleEvent.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent): Report TypeError if "handleEvent" is not callable.

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

        [LFC][IFC] Decouple Display::Run and Display::Box initializations.
        https://bugs.webkit.org/show_bug.cgi?id=202255
        <rdar://problem/55731445>

        Reviewed by Antti Koivisto.

        This is in preparation for moving Display::Run initialization to Line class.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):

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

        Flaky Test: inspector/canvas/updateShader.html
        https://bugs.webkit.org/show_bug.cgi?id=202186
        <rdar://problem/55716053>

        Reviewed by Joseph Pecoraro.

        If the `WebGPUPipeline`/`WebGLProgram` outlives it's `WebGPUDevice`/`WebGLRenderingContext`,
        the `ScriptExecutionContext*` that was provided in the constructor won't be invalidated
        leading to the bad access crash.

        Rather than pass the `ScriptExecutionContext*` directly, have `WebGPUPipeline`/`WebGLProgram`
        extend from `ContextDestructionObserver` so that it can propertly invalidate (and notify Web
        Inspector) when the related context is about to be destroyed.

        Test: inspector/canvas/updateShader.html

        * Modules/webgpu/WebGPUPipeline.h:
        (WebCore::WebGPUPipeline::scriptExecutionContext const): Deleted.
        * Modules/webgpu/WebGPUPipeline.cpp:
        (WebCore::WebGPUPipeline::WebGPUPipeline):
        (WebCore::WebGPUPipeline::contextDestroyed): Added.

        * html/canvas/WebGLProgram.h:
        (WebCore::WebGLProgram::scriptExecutionContext const): Deleted.
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::contextDestroyed): Added.

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

        Add very basic PageCache support for RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=202244

        Reviewed by Geoffrey Garen.

        RTCPeerConnection::canSuspendForDocumentSuspension() returns true if
        RTCPeerConnection::hasPendingActivity() return false. Previously, hasPendingActivity()
        would return true unless the JS has called close() on the RTCPeerConnection
        object.

        On weather.com, an ad would construct an RTCPeerConnection just to do some feature
        checking and then let the variable go out of scope (without calling close()). Because
        of the previous implementation of RTCPeerConnection::hasPendingActivity(), this wrapper
        and its implementation object would stay alive forever AND prevent the page from
        entering PageCache on navigation.

        To improve this, the implementation of hadPendingActivity() has been updated so that
        it keeps returning false if close() has been called, but will also return false if
        there are no pending Promises to be resolved and no event listeners.

        Test: fast/mediastream/RTCPeerConnection-page-cache.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        WebCore::RTCPeerConnection::RTCPeerConnection:
        Stop taking a pending activity in the constructor, this would be NOT keep the wrapper
        alive since RTCPeerConnection::hasPendingActivity() was not checking
        ActiveDOMObject::hasPendingActivity().

        (WebCore::RTCPeerConnection::canSuspendForDocumentSuspension const):
        (WebCore::RTCPeerConnection::hasPendingActivity const):
        
        * Modules/mediastream/RTCPeerConnection.h:

        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DOMPromiseDeferredBase::whenSettled):

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

        Improve Service worker support for Page Caching
        https://bugs.webkit.org/show_bug.cgi?id=202221

        Reviewed by Geoffrey Garen.

        Allow pages using service workers to enter the back / forward cache.
        Update ServiceWorkerRegistration / ServiceWorker ActiveDOMObjects
        to properly suspend while in PageCache. Also, let documents controlled
        by a service worker to enter PageCache (we already unregistered it as
        a client of the service worker while suspended).

        Test: http/tests/workers/service/page-caching.html

        * dom/Document.cpp:
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::updateState):
        (WebCore::ServiceWorker::canSuspendForDocumentSuspension const):
        (WebCore::ServiceWorker::suspend):
        (WebCore::ServiceWorker::resume):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::fireUpdateFoundEvent):
        (WebCore::ServiceWorkerRegistration::canSuspendForDocumentSuspension const):
        (WebCore::ServiceWorkerRegistration::suspend):
        (WebCore::ServiceWorkerRegistration::resume):
        * workers/service/ServiceWorkerRegistration.h:

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

        [Cocoa] Regression(r212041) Safari adds a .dms extension automatically when downloading binaries with no extension
        https://bugs.webkit.org/show_bug.cgi?id=202147
        <rdar://problem/54886021>

        Reviewed by Alexey Proskuryakov.

        When getting a suggested filename without extension (either from Content-Disposition header or from the download
        attribute), we determine a suitable file extension based on the Content-Type header and append it. This is useful
        since a lot of operating systems (such as macOS) rely on the file extension to determine file type.

        The issue is that if the Content-Type is not provided or when it is provided but is "application/octet-stream",
        we would append a .dms extension, which was unexpected. This patch makes it so that we no longer try to append
        an extension when the resolved content type is "application/octet-stream".

        Tests: http/tests/download/anchor-download-attribute-content-disposition-no-extension-octet-stream.html
               http/tests/download/anchor-download-attribute-content-disposition-no-extension-text-plain.html
               http/tests/security/anchor-download-octet-stream-no-extension.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):

2019-09-25  Megan Gardner  <megan_gardner@apple.com>

        Update selections after scrolling for iframes and hide selections while iframes and overflow scrolls are scrolling.
        https://bugs.webkit.org/show_bug.cgi?id=202125

        Reviewed by Tim Horton.

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

        When we end scrolling, make sure that iframes get a final update to ensure that the 
        selection is in the correct position. Pipe that to WebKit/UIProcess via
        frame specific plath.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):

2019-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Page temporarily jumps to an excessively small viewport scale while loading usatoday.com
        https://bugs.webkit.org/show_bug.cgi?id=202224
        <rdar://problem/52906640>

        Reviewed by Tim Horton.

        On some pages (e.g. usatoday.com), the content width of the page temporarily becomes very large during page
        load. This causes a couple of viewport scaling behaviors (notably, the existing shrink-to-fit heuristic in
        ViewportConfiguration::initialScaleFromSize, as well as the new iPad-specific content-aware shrink-to-fit
        heuristic in WebPage::immediatelyShrinkToFitContent) to cause the page to shrink down excessively in an attempt
        to fit all the content to the viewport. This causes a very ugly flash as the page appears zoomed out initially
        during page load, before zooming back in.

        To fix this, we add some sanity checks to these viewport scaling heuristics. In ViewportConfiguration's
        initialScaleFromSize method, in the codepath where an initial scale is not specified, we always scale to fit the
        contents of the page; instead, detect the case where the content width is enormous (with a threshold arbitrarily
        chosen to be 1920) and fall back to the scaling to fit the viewport's width, if such a width has been explicitly
        set. This ensures that we avoid excessive shrinking in the case where content is extremely wide, but also that
        we do scale the viewport down to fit all the content in the case where the content isn't extremely wide (e.g. on
        daringfireball.com).

        See WebKit ChangeLog for more detail.

        Test: fast/viewport/ios/shrink-to-fit-large-content-width.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::initialScaleFromSize const):

2019-09-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] [DataActivation] Focus moves away after focusing input fields on www.att.com
        https://bugs.webkit.org/show_bug.cgi?id=202167
        <rdar://problem/55185021>

        Reviewed by Tim Horton.

        Adds a new site-specific quirk. See WebKit ChangeLog for more details.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldUseLegacySelectPopoverDismissalBehaviorInDataActivation const):
        * page/Quirks.h:
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isDataActivation):

2019-09-25  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed, rolling out r250324.

        Broke many mac wk2 layout tests

        Reverted changeset:

        "Enable LayoutTests using ResourceLoadStatistics SQLite
        backend (195420)"
        https://bugs.webkit.org/show_bug.cgi?id=195420
        https://trac.webkit.org/changeset/250324

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

        Rename LineLayoutInterface to LineLayoutTraversal
        https://bugs.webkit.org/show_bug.cgi?id=202202

        Reviewed by Zalan Bujtas.

        Use a bit more informative namespace name.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeTextBox):
        (WebCore::write):
        * rendering/line/LineLayoutTraversal.cpp: Renamed from Source/WebCore/rendering/line/LineLayoutInterfaceTextBoxes.cpp.
        (WebCore::LineLayoutTraversal::TextBox::rect const):
        (WebCore::LineLayoutTraversal::TextBox::logicalRect const):
        (WebCore::LineLayoutTraversal::TextBox::hasHyphen const):
        (WebCore::LineLayoutTraversal::TextBox::isLeftToRightDirection const):
        (WebCore::LineLayoutTraversal::TextBox::dirOverride const):
        (WebCore::LineLayoutTraversal::TextBox::text const):
        (WebCore::LineLayoutTraversal::TextBox::localStartOffset const):
        (WebCore::LineLayoutTraversal::TextBox::localEndOffset const):
        (WebCore::LineLayoutTraversal::TextBox::length const):
        (WebCore::LineLayoutTraversal::TextBox::isLastOnLine const):
        (WebCore::LineLayoutTraversal::TextBox::isLast const):
        (WebCore::LineLayoutTraversal::TextBox::iterator const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutTraversal::TextBoxIterator::traverseNextInVisualOrder):
        (WebCore::LineLayoutTraversal::TextBoxIterator::ComplexPath::nextInlineTextBoxInTextOrder const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::traverseNextInTextOrder):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator== const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::atEnd const):
        (WebCore::LineLayoutTraversal::firstTextBoxInVisualOrderFor):
        (WebCore::LineLayoutTraversal::firstTextBoxInTextOrderFor):
        (WebCore::LineLayoutTraversal::textBoxRangeFor):
        * rendering/line/LineLayoutTraversal.h: Renamed from Source/WebCore/rendering/line/LineLayoutInterfaceTextBoxes.h.
        (WebCore::LineLayoutTraversal::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator++):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator bool const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator!= const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator== const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator* const):
        (WebCore::LineLayoutTraversal::TextBoxIterator::operator-> const):
        (WebCore::LineLayoutTraversal::TextBoxRange::TextBoxRange):
        (WebCore::LineLayoutTraversal::TextBoxRange::begin const):
        (WebCore::LineLayoutTraversal::TextBoxRange::end const):
        (WebCore::LineLayoutTraversal::hasTextBoxes):

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

        [LFC][IFC] Use existing Line::Content::LineBox to track the current line geometry
        https://bugs.webkit.org/show_bug.cgi?id=202182

        Reviewed by Antti Koivisto.

        This patch removes the redundant Line::m_logicalTopLeft, m_contentLogicalWidth, m_lineLogicalHeight, m_baseline, m_baselineTop members
        and switches over to Line::m_content's LineBox. 

        * layout/displaytree/DisplayRect.h:
        (WebCore::Display::Rect::Rect):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::removeTrailingTrimmableContent):
        (WebCore::Layout::Line::moveLogicalLeft):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::m_skipVerticalAligment): Deleted.
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::lineBox):
        (WebCore::Layout::Line::contentLogicalRight const):
        (WebCore::Layout::Line::logicalTop const):
        (WebCore::Layout::Line::logicalBottom const):
        (WebCore::Layout::Line::logicalLeft const):
        (WebCore::Layout::Line::logicalHeight const):
        (WebCore::Layout::Line::contentLogicalWidth const):
        (WebCore::Layout::Line::baselineOffset const):
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::setLogicalTopLeft):
        (WebCore::Layout::LineBox::setLogicalHeight):
        (WebCore::Layout::LineBox::setLogicalWidth):
        (WebCore::Layout::LineBox::moveHorizontally):
        (WebCore::Layout::LineBox::expandHorizontally):
        (WebCore::Layout::LineBox::shrinkHorizontally):
        (WebCore::Layout::LineBox::expandVertically):
        (WebCore::Layout::LineBox::shrinkVertically):
        (WebCore::Layout::LineBox::LineBox):
        (WebCore::Layout::LineBox::setLogicalHeightIfGreater):
        (WebCore::Layout::LineBox::setBaseline):
        (WebCore::Layout::LineBox::baseline const):
        (WebCore::Layout::LineBox::baseline):
        (WebCore::Layout::LineBox::setBaselineOffset):
        (WebCore::Layout::LineBox::Baseline::setAscentIfGreater):
        (WebCore::Layout::LineBox::Baseline::setDescentIfGreater):

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

        Rename InlineBox::nextLeafChild to nextLeafOnLine
        https://bugs.webkit.org/show_bug.cgi?id=202197

        Reviewed by Zalan Bujtas.

        The name is confusing as it never returns a child of the inline box it is called on.
        Rename it and other similar functions that traverse within a line.

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset const):
        * editing/RenderedPosition.cpp:
        (WebCore::RenderedPosition::RenderedPosition):
        (WebCore::RenderedPosition::previousLeafOnLine const):
        (WebCore::RenderedPosition::nextLeafOnLine const):
        (WebCore::RenderedPosition::isEquivalent const):
        (WebCore::RenderedPosition::bidiLevelOnLeft const):
        (WebCore::RenderedPosition::bidiLevelOnRight const):
        (WebCore::RenderedPosition::leftBoundaryOfBidiRun):
        (WebCore::RenderedPosition::rightBoundaryOfBidiRun):
        (WebCore::RenderedPosition::atLeftBoundaryOfBidiRun const):
        (WebCore::RenderedPosition::atRightBoundaryOfBidiRun const):
        (WebCore::RenderedPosition::positionAtLeftBoundaryOfBiDiRun const):
        (WebCore::RenderedPosition::positionAtRightBoundaryOfBiDiRun const):
        (WebCore::RenderedPosition::prevLeafChild const): Deleted.
        (WebCore::RenderedPosition::nextLeafChild const): Deleted.
        * editing/RenderedPosition.h:
        (WebCore::RenderedPosition::RenderedPosition):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const):
        * editing/VisibleUnits.cpp:
        (WebCore::startPositionForLine):
        (WebCore::endPositionForLine):
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * layout/Verification.cpp:
        (WebCore::Layout::collectFlowBoxSubtree):
        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::updateRubyForJustifiedText):
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::ComplexLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::ComplexLineLayout::layoutRunsAndFloats):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::previousOnLineExists const):
        (WebCore::InlineBox::nextLeafOnLine const):
        (WebCore::InlineBox::previousLeafOnLine const):
        (WebCore::InlineBox::nextLeafOnLineIgnoringLineBreak const):
        (WebCore::InlineBox::previousLeafOnLineIgnoringLineBreak const):
        (WebCore::InlineBox::nextLeafChild const): Deleted.
        (WebCore::InlineBox::prevLeafChild const): Deleted.
        (WebCore::InlineBox::nextLeafChildIgnoringLineBreak const): Deleted.
        (WebCore::InlineBox::prevLeafChildIgnoringLineBreak const): Deleted.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::nextOnLine const):
        (WebCore::InlineBox::previousOnLine const):
        (WebCore::InlineBox::setNextOnLine):
        (WebCore::InlineBox::setPreviousOnLine):
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::prevOnLine const): Deleted.
        (WebCore::InlineBox::setPrevOnLine): Deleted.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::removeChild):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::firstLeafDescendant const):
        (WebCore::InlineFlowBox::lastLeafDescendant const):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder const):
        (WebCore::InlineFlowBox::checkConsistency const):
        (WebCore::InlineFlowBox::firstLeafChild const): Deleted.
        (WebCore::InlineFlowBox::lastLeafChild const): Deleted.
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::expansionBehavior const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsNonZeroBidiLevel const):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::rendererRemovedFromTree):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::lineDirectionPointFitsInBox):
        (WebCore::createVisiblePositionAfterAdjustingOffsetForBiDi):
        (WebCore::RenderTextLineBoxes::positionForPoint const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::isHyphenated const):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::selectionState):
        (WebCore::RootInlineBox::firstSelectedBox):
        (WebCore::RootInlineBox::lastSelectedBox):
        (WebCore::RootInlineBox::closestLeafChildForLogicalLeftPosition):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition):
        (WebCore::SVGRootInlineBox::nodeAtPoint):

2019-09-25  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add implementations for fixed, positioned, sticky ScrollingTreeNodes
        https://bugs.webkit.org/show_bug.cgi?id=202100

        Reviewed by Carlos Garcia Campos.

        Fill in the Nicosia implementations for the ScrollingTreeFixedNode,
        ScrollingTreePositionedNode and ScrollingTreeStickyNode classes.

        The implementations in majority repeat what the Cocoa implementations
        do, with the main difference being the Nicosia-specific layer state
        application. Sharing more of this logic should be investigated in the
        future.

        * PlatformPlayStation.cmake: Add ScrollingTreePositionedNode to build.
        * SourcesGTK.txt: Ditto.
        * SourcesWPE.txt: Ditto.
        * page/scrolling/nicosia/ScrollingTreeFixedNode.cpp:
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFixedNode::applyLayerPositions):
        (WebCore::ScrollingTreeFixedNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreeFixedNode.h:
        * page/scrolling/nicosia/ScrollingTreePositionedNode.cpp: Added.
        (WebCore::ScrollingTreePositionedNode::create):
        (WebCore::ScrollingTreePositionedNode::ScrollingTreePositionedNode):
        (WebCore::ScrollingTreePositionedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreePositionedNode::applyLayerPositions):
        (WebCore::ScrollingTreePositionedNode::dumpProperties const):
        * page/scrolling/nicosia/ScrollingTreePositionedNode.h: Added.
        (WebCore::ScrollingTreePositionedNode::relatedOverflowScrollingNodes const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.cpp:
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNode::applyLayerPositions):
        (WebCore::ScrollingTreeStickyNode::dumpProperties const):
        (WebCore::ScrollingTreeStickyNode::computeLayerPosition const):
        * page/scrolling/nicosia/ScrollingTreeStickyNode.h:

2019-09-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Removing an element should only cancel its declarative animations
        https://bugs.webkit.org/show_bug.cgi?id=202165

        Reviewed by Dean Jackson.

        When an element is removed, an Animation created using the JS API should not be canceled.
        Only declarative animations should be.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::elementWasRemoved):

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

        Remove SchemeRegistry's list of URL schemes allowing local storage in private browsing, which is unused
        https://bugs.webkit.org/show_bug.cgi?id=202181

        Reviewed by Geoffrey Garen.

        The last use of the WebView SPI to set it is being removed in rdar://problem/55685383
        but it already does not do anything.  Let's remove it.

        * platform/SchemeRegistry.cpp:
        (WebCore::schemesAllowingLocalStorageAccessInPrivateBrowsing): Deleted.
        (WebCore::SchemeRegistry::registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing): Deleted.
        (WebCore::SchemeRegistry::allowsLocalStorageAccessInPrivateBrowsing): Deleted.
        * platform/SchemeRegistry.h:

2019-09-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove a content change observation quirk on united.com
        https://bugs.webkit.org/show_bug.cgi?id=202175

        Reviewed by Tim Horton.

        Remove a site-specific quirk that is no longer necessary.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldIgnoreContentChange const): Deleted.
        * page/Quirks.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::shouldObserveVisibilityChangeForElement):

2019-09-24  Kate Cheney  <katherine_cheney@apple.com>

        Enable LayoutTests using ResourceLoadStatistics SQLite backend (195420)
        https://bugs.webkit.org/show_bug.cgi?id=195420
        <rdar://problem/54213551> 

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/add-blocking-to-redirect-database.html
               http/tests/resourceLoadStatistics/blocking-in-web-worker-script-import-database.html
               http/tests/resourceLoadStatistics/cap-cache-max-age-for-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-decoration-same-site-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-fragment-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-and-fragment-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-with-link-query-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/capped-lifetime-for-cookie-set-in-js-without-link-decoration-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-sub-frame-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-non-prevalent-based-on-subresource-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-sub-frame-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-redirect-collusion-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-redirect-to-prevalent-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-under-top-frame-origins-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-collusion-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-to-prevalent-database.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-unique-redirects-to-database.html
               http/tests/resourceLoadStatistics/classify-as-very-prevalent-based-on-mixed-statistics-database.html
               http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-database.html
               http/tests/resourceLoadStatistics/clear-in-memory-and-persistent-store-one-hour-database.html
               http/tests/resourceLoadStatistics/cookie-deletion-database.html
               http/tests/resourceLoadStatistics/cookies-with-and-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/delete-script-accessible-cookies-database.html
               http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect-database.html
               http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations-database.html
               http/tests/resourceLoadStatistics/do-not-remove-blocking-in-redirect-database.html
               http/tests/resourceLoadStatistics/do-not-switch-session-on-navigation-to-prevalent-without-interaction-database.html
               http/tests/resourceLoadStatistics/downgraded-referrer-for-navigation-with-link-query-from-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/enable-debug-mode-database.html
               http/tests/resourceLoadStatistics/grandfathering-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resource-with-user-interaction-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resource-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/non-prevalent-resources-can-access-cookies-in-a-third-party-context-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/non-sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/ping-to-prevalent-resource-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-handled-keydown-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-unhandled-keydown-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-with-user-interaction-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-with-user-interaction-timeout-database.html
               http/tests/resourceLoadStatistics/prevalent-resource-without-user-interaction-database.html
               http/tests/resourceLoadStatistics/prune-statistics-database.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-non-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-ip-to-localhost-to-ip-database.html
               http/tests/resourceLoadStatistics/sandboxed-nesting-iframe-with-sandboxed-iframe-redirect-localhost-to-ip-to-localhost-database.html
               http/tests/resourceLoadStatistics/set-custom-prevalent-resource-in-debug-mode-database.html
               http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-redirects-database.html
               http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-requests-database.html
               http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction-database.html
               http/tests/resourceLoadStatistics/user-interaction-in-cross-origin-sub-frame-database.html
               http/tests/resourceLoadStatistics/user-interaction-only-reported-once-within-short-period-of-time-database.html
               http/tests/resourceLoadStatistics/user-interaction-reported-after-website-data-removal-database.html

        * platform/sql/SQLiteDatabase.h:
        Added WEBCORE_EXPORT prefix to 2 functions needed in the ITP Database 
        to clear out the database.

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

        Stop sampling PageCache-related AggD data
        https://bugs.webkit.org/show_bug.cgi?id=202161

        Reviewed by Geoffrey Garen.

        Stop sampling PageCache-related AggD data to make it more actionable.

        * history/PageCache.cpp:
        (WebCore::logPageCacheFailureDiagnosticMessage):
        (WebCore::canCacheFrame):
        (WebCore::canCachePage):

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

        Stop refing UniqueIDBDatabaseTransaction in callbacks
        https://bugs.webkit.org/show_bug.cgi?id=202074

        Reviewed by Youenn Fablet.

        After quota check is introduced to IDB, callbacks that take the ref of UniqueIDBDatabaseTransaction will be 
        passed to StorageQuotaManager. This can make UniqueIDBDatabaseTransaction live longer than UniqueIDBDatabase.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::requestSpace):
        (WebCore::IDBServer::UniqueIDBDatabase::waitForRequestSpaceCompletion):
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabase::getCount):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabase::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):

2019-09-24  Keith Rollin  <krollin@apple.com>

        Coalesce or remove PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
        https://bugs.webkit.org/show_bug.cgi?id=202119
        <rdar://problem/55638792>

        Reviewed by Alex Christensen.

        After refactoring and other code evolution, some platform checks have
        ended up looking like PLATFORM(MAC) || PLATFORM(IOS_FAMILY) (or
        vice-versa). These can be converted into the equivalent
        PLATFORM(COCOA). Where the instance occurs in a Cocoa-only file, the
        check can be removed altogether (along with any "#else" branches).

        No new tests -- no new or changed functionality.

        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::subLocality):
        (WebCore::setSubLocality):
        (WebCore::subAdministrativeArea):
        (WebCore::setSubAdministrativeArea):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAppleLegacyCssValueKeyword):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::platform):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateBackgroundRecursively):
        * platform/Timer.cpp:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::displayP3ColorSpaceRef):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame const):

2019-09-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Unflake web-animations/timing-model/animations/updating-the-finished-state.html WPT test
        https://bugs.webkit.org/show_bug.cgi?id=181121

        Reviewed by Dean Jackson.

        When running the "update animations and send events" steps (https://drafts.csswg.org/web-animations/#update-animations-and-send-events)
        we assemble a list of animations to remove after updating their relevance based on the new timeline current time. However, we wouldn't
        account for the fact that we would *then* dispatch events which could update the timing properties of animations that had been marked
        for removal at this point.

        In this specific WPT test, there were two individual tests that would rewind animations within a "finish" event handler and we would
        not consider the fact that they had been rewound. We now check a second time before removing an animation that it should indeed be
        removed.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents):

2019-09-24  Kate Cheney  <katherine_cheney@apple.com>

        Mixed content blocking is bypassed for WebSockets in Workers (159726)
        https://bugs.webkit.org/show_bug.cgi?id=159726
        <rdar://problem/27326438>

        Reviewed by Brady Eidson.

        Tests: http/tests/websocket/tests/hybi/non-document-mixed-content-blocked-http-with-embedded-https-with-embedded-http.html
               http/tests/websocket/tests/hybi/non-document-mixed-content-blocked-http-with-embedded-https.html
               http/tests/websocket/tests/hybi/non-document-mixed-content-blocked-https-with-embedded-http-with-embedded-https.https.html
               http/tests/websocket/tests/hybi/non-document-mixed-content-blocked.https.html
        
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::checkForMixedContentInFrameTree):
        * loader/MixedContentChecker.h:
        Patch to block insecure WebSocket URL connection attempts by Workers
        on secure pages. If the URL is ws, and any embedding iframe has protocol
        https, and the context is a Worker, the connection should be blocked.

        I was unable to write a test case to hit the case where a document
        does not have a frame and tries to communicate via a worker to
        connect to a WebSocket because after removing the subframe from its
        parent, the subframe is unable to perform a postMessage to a worker
        even in the same script execution to tell the worker to connect
        to a WebSocket.

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

        [LFC][IFC] Line::Content should use LineBox
        https://bugs.webkit.org/show_bug.cgi?id=202128
        <rdar://problem/55649079>

        Reviewed by Antti Koivisto.

        Replace Line::Content's m_logicalRect, m_baseline and m_baselineOffset with LineBox.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLine.h:
        (WebCore::Layout::Line::Content::lineBox const):
        (WebCore::Layout::Line::Content::setLineBox):
        (WebCore::Layout::Line::baselineOffset const):
        (WebCore::Layout::Line::Content::isEmpty const): Deleted.
        (WebCore::Layout::Line::Content::logicalTop const): Deleted.
        (WebCore::Layout::Line::Content::logicalLeft const): Deleted.
        (WebCore::Layout::Line::Content::logicalRight const): Deleted.
        (WebCore::Layout::Line::Content::logicalBottom const): Deleted.
        (WebCore::Layout::Line::Content::logicalWidth const): Deleted.
        (WebCore::Layout::Line::Content::logicalHeight const): Deleted.
        (WebCore::Layout::Line::Content::baseline const): Deleted.
        (WebCore::Layout::Line::Content::baselineOffset const): Deleted.
        (WebCore::Layout::Line::Content::setLogicalRect): Deleted.
        (WebCore::Layout::Line::Content::setBaseline): Deleted.
        (WebCore::Layout::Line::Content::setBaselineOffset): Deleted.
        * layout/inlineformatting/InlineLineBox.h:
        (WebCore::Layout::LineBox::Baseline::height const):
        (WebCore::Layout::LineBox::LineBox):
        (WebCore::Layout::LineBox::baselineOffset const):
        (WebCore::Layout::LineBox::Baseline::Baseline):
        (WebCore::Layout::LineBox::Baseline::setAscent):
        (WebCore::Layout::LineBox::Baseline::setDescent):
        (WebCore::Layout::LineBox::Baseline::reset):
        (WebCore::Layout::LineBox::Baseline::ascent const):
        (WebCore::Layout::LineBox::Baseline::descent const):

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

        [LFC][IFC] Move line constraints computation to a dedicated function
        https://bugs.webkit.org/show_bug.cgi?id=202121
        <rdar://problem/55640742>

        Reviewed by Antti Koivisto.

        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::initialConstraintsForLine):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        * layout/inlineformatting/InlineLine.h:

2019-09-24  Youenn Fablet  <youenn@apple.com>

        AudioTrackPrivateMediaStreamCocoa does not need to manipulate the audio unit in play/pause methods
        https://bugs.webkit.org/show_bug.cgi?id=202097
        <rdar://problem/51548144>

        Reviewed by Eric Carlson.

        Instead of manipulating the audio unit in play/pause methods, it is more convenient to do so in audioSamplesAvailable.
        play/pause methods only update boolean values that audioSamplesAvailable will read.
        In particular, m_autoPlay and m_isPlaying are no longer modified in the audio thread.

        Behavior was racy so difficult to reproduce.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::playInternal):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::pause):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:

2019-09-23  Youenn Fablet  <youenn@apple.com>

        Support sync-xhr feature policy
        https://bugs.webkit.org/show_bug.cgi?id=202098

        Reviewed by Alex Christensen.

        Add support for sync-xhr feature policy parsing.
        Use this feature policy to control use of sync XHR in documents
        as per https://xhr.spec.whatwg.org/#the-send()-method step 12.

        Covered by updated test.

        * html/FeaturePolicy.cpp:
        (WebCore::FeaturePolicy::parse):
        (WebCore::FeaturePolicy::allows const):
        * html/FeaturePolicy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::isSyncXHRAllowedByFeaturePolicy):
        (WebCore::XMLHttpRequest::createRequest):

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

        Drop unnecessary SessionID.h header includes
        https://bugs.webkit.org/show_bug.cgi?id=202129

        Reviewed by Alex Christensen.

        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * bindings/js/SerializedScriptValue.h:
        * dom/DataTransfer.h:
        * editing/WebCorePasteboardFileReader.h:
        * fileapi/FileReaderLoader.h:
        * fileapi/ThreadableBlobRegistry.h:
        * html/FileListCreator.h:
        * loader/CookieJar.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/LoaderStrategy.h:
        * page/CacheStorageProvider.h:
        * page/Frame.h:
        * page/PageGroup.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/network/CacheValidation.h:
        * platform/network/FormData.h:
        * platform/network/NetworkStorageSession.cpp:
        * platform/network/StorageSessionProvider.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/server/RegistrationDatabase.h:
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.h:
        * worklets/WorkletGlobalScope.h:

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

        Fix WPT test html/browsers/offline/application-cache-api/api_swapcache_error.https.html
        https://bugs.webkit.org/show_bug.cgi?id=202056
        <rdar://problem/55523986>

        Reviewed by Youenn Fablet.

        The test makes sure we throw an exception when we are in an invalid state, which we should definitely do.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::setGroup):
        (WebCore::ApplicationCache::setManifestResource):
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::manifestResource const):
        (WebCore::ApplicationCache::group const):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::candidateApplicationCacheGroup const):
        (WebCore::ApplicationCacheHost::failedLoadingMainResource):
        (WebCore::ApplicationCacheHost::setCandidateApplicationCacheGroup):
        (WebCore::ApplicationCacheHost::swapCache):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::candidateApplicationCacheGroup const): Deleted.
        * loader/appcache/ApplicationCacheResource.h:

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

        PlugInClient::didStartFromOrigin() does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202127

        Reviewed by Geoffrey Garen.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        * page/PlugInClient.h:

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

        Web Inspector: Canvas: show WebGPU shader pipelines
        https://bugs.webkit.org/show_bug.cgi?id=201675
        <rdar://problem/55543450>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/requestShaderSource-webgpu.html
               inspector/canvas/shaderProgram-add-remove-webgpu.html
               inspector/canvas/updateShader-webgpu.html

        Create common base classes for `WebGPUPipeline` and `GPUPipeline` so that Web Inspector can
        instrument both render and compute shader pipelines.

        Refactor `InspectorShaderProgram` to support both `WebGLProgram` and `WebGPUPipeline` so
        that the same object can be used for all types of shader "program"s.

        Keep a copy of each shader module's source, and allow the shader module to be updated.

        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::WebGPUDevice):
        (WebCore::WebGPUDevice::~WebGPUDevice):
        (WebCore::WebGPUDevice::createShaderModule const):
        (WebCore::WebGPUDevice::createRenderPipeline): Added.
        (WebCore::WebGPUDevice::createComputePipeline): Added.
        (WebCore::WebGPUDevice::createRenderPipeline const): Deleted.
        (WebCore::WebGPUDevice::createComputePipeline const): Deleted.

        * Modules/webgpu/WebGPUPipeline.h: Added.
        (WebCore::WebGPUPipeline::isRenderPipeline const):
        (WebCore::WebGPUPipeline::isComputePipeline const):
        (WebCore::WebGPUPipeline::scriptExecutionContext const):
        * Modules/webgpu/WebGPUPipeline.cpp: Added.
        (WebCore::WebGPUPipeline::instancesMutex):
        (WebCore::WebGPUPipeline::WebGPUPipeline):
        (WebCore::WebGPUPipeline::~WebGPUPipeline):
        * platform/graphics/gpu/GPUPipeline.cpp: Added.
        * platform/graphics/gpu/GPUPipeline.h: Added.
        (WebCore::GPUPipeline::isRenderPipeline const):
        (WebCore::GPUPipeline::isComputePipeline const):

        * Modules/webgpu/WebGPUComputePipeline.idl:
        * Modules/webgpu/WebGPUComputePipeline.h:
        (WebCore::WebGPUComputePipeline::computePipeline const): Deleted.
        * Modules/webgpu/WebGPUComputePipeline.cpp:
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        (WebCore::WebGPUComputePipeline::recompile): Added.
        * platform/graphics/gpu/GPUComputePipeline.h:
        (WebCore::GPUComputePipeline::isComputePipeline): Added.
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        (WebCore::GPUComputePipeline::recompile): Added.

        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPURenderPipeline.h:
        (WebCore::WebGPURenderPipeline::renderPipeline const): Deleted.
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        (WebCore::WebGPURenderPipeline::recompile): Added.
        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::isRenderPipeline): Added.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        (WebCore::GPURenderPipeline::recompile): Added.

        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::source const): Added.
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::update): Added.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.h:
        * platform/graphics/gpu/GPUProgrammableStageDescriptor.h:
        (WebCore::GPUProgrammableStageDescriptor::GPUProgrammableStageDescriptor):

        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::create):
        (WebCore::InspectorShaderProgram::InspectorShaderProgram):
        (WebCore::InspectorShaderProgram::program const): Added.
        (WebCore::InspectorShaderProgram::pipeline const): Added.
        (WebCore::shaderForType): Added.
        (WebCore::InspectorShaderProgram::requestShaderSource): Added.
        (WebCore::InspectorShaderProgram::updateShader): Added.
        (WebCore::InspectorShaderProgram::context const): Deleted.
        (WebCore::InspectorShaderProgram::shaderForType): Deleted.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::discardAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::requestShaderSource):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateWebGLProgram): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGLProgram): Added.
        (WebCore::InspectorCanvasAgent::isWebGLProgramDisabled): Added.
        (WebCore::InspectorCanvasAgent::isWebGLProgramHighlighted): Added.
        (WebCore::InspectorCanvasAgent::didCreateWebGPUPipeline): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUPipeline): Added.
        (WebCore::InspectorCanvasAgent::programDestroyedTimerFired): Added.
        (WebCore::InspectorCanvasAgent::reset): Added.
        (WebCore::InspectorCanvasAgent::unbindProgram):
        (WebCore::InspectorCanvasAgent::findInspectorProgram):
        (WebCore::InspectorCanvasAgent::didCreateProgram): Deleted.
        (WebCore::InspectorCanvasAgent::willDeleteProgram): Deleted.
        (WebCore::InspectorCanvasAgent::isShaderProgramDisabled): Deleted.
        (WebCore::InspectorCanvasAgent::isShaderProgramHighlighted): Deleted.
        (WebCore::InspectorCanvasAgent::clearCanvasData): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGLProgram): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGLProgram): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramDisabled): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramHighlighted): Added.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipeline): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipeline): Added.
        (WebCore::InspectorInstrumentation::didCreateProgram): Deleted.
        (WebCore::InspectorInstrumentation::willDeleteProgram): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramHighlighted): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebGLProgramImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGLProgramImpl): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramDisabledImpl): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramHighlightedImpl): Added.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipelineImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipelineImpl): Added.
        (WebCore::InspectorInstrumentation::didCreateProgramImpl): Deleted.
        (WebCore::InspectorInstrumentation::willDeleteProgramImpl): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramDisabledImpl): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramHighlightedImpl): Deleted.

        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::~WebGLProgram):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::InspectorScopedShaderProgramHighlight::showHightlight):
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::deleteProgram):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        Rename WebGL program instrumentation points to be less ambiguous.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-09-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Drop animation when dragging images from Photos to WebKit2 Mail compose is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=201674
        <rdar://problem/51250952>

        Reviewed by Tim Horton.

        Adds new helper methods on DragController to support the new image placeholder drop codepath. See WebKit
        ChangeLog for more details.

        Tests:  WKAttachmentTestsIOS.TargetedPreviewsWhenDroppingImages
                WKAttachmentTestsIOS.TargetedPreviewIsClippedWhenDroppingTallImage

        * editing/WebContentReader.h:

        Fix the Windows build after including WebContentReader.h in DragController.cpp.

        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::isDroppedImagePlaceholder const):
        (WebCore::HTMLImageElement::setIsDroppedImagePlaceholder):

        Add a flag to HTMLImageElement, indicating whether it is a dropped image placeholder. If so, we have special
        logic to remove some temporary inline style properties from the image after it has finished loading (see
        finalizeDroppedImagePlaceholder).

        Note that this doesn't increase the size of HTMLImageElement.

        * page/DragController.cpp:
        (WebCore::DragController::dragEnded):

        Clean up any stale placeholders after the drag ends.

        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::removeAllDroppedImagePlaceholders):

        Add a private helper to clean up any dropped image placeholders after failing to update dropped image
        placeholders for any reason.

        (WebCore::DragController::tryToUpdateDroppedImagePlaceholders):

        Invoked when performing the drag operation, after image data has been loaded; this function attempts to update
        the list of image placeholder elements tracked by DragController that were previously inserted using
        insertDroppedImagePlaceholdersAtCaret, and updates the source attribute of each element (as well as any backed
        attachment element, if attachment elements are enabled). It achieves this by reading the dropped data as web
        content, and matching up the images in the resulting fragment against the placeholder images. If each image in
        the fragment can correspond to exactly one placeholder, we update the source of each placeholder image,
        migrate attachment elements over to the placeholder images if needed, and finally discard the fragment.

        A return value of false indicates that this process failed, in which case we clean up the placeholders and fall
        back to handling the drop normally.

        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret):

        Invoked when handling the drop, before any image data has been loaded; this function takes a list of sizes
        representing the preferred presentation sizes of each item provider that will be loaded as an image, and uses
        ReplaceSelectionCommand to insert a list of (initially blank) placeholder images at the drop caret, sized
        accordingly to each item provider's preferredPresentationSize.

        To make this compatible with Mail compose (and all other known internal clients that use the _editable SPI), we
        additionally enforce a max-width of 100% on each image and preserve the aspect ratio of the image by adjusting
        the height if needed.

        (WebCore::DragController::finalizeDroppedImagePlaceholder):
        * page/DragController.h:

        Have DragController keep track of the list of dropped image placeholders (in DOM order), as well as the dropped
        image placeholder range. This information is used once item provider data arrives and the drag operation is
        being performed, to update the source of each dropped image placeholder.

        (WebCore::DragController::droppedImagePlaceholders const):
        (WebCore::DragController::droppedImagePlaceholderRange const):
        * platform/network/mac/UTIUtilities.h:

        Mark an existing helper function as WEBCORE_EXPORT.

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

        Improve CSP inheritance semantics
        https://bugs.webkit.org/show_bug.cgi?id=201884
        <rdar://problem/50172407>

        Reviewed by Brent Fulgham.

        Update the CSP inheritance semantics to more closely match the logic in section Initialize a Document's CSP list
        of the CSP3 spec., <https://w3c.github.io/webappsec-csp/#initialize-document-csp>.

        Towards this, move more of the inheritance logic out of Document::initContentSecurityPolicy() and into
        DocumentWriter::begin() where details about the document being replaced live. This lets us remove the
        need to track the previous content security policy to pass it to Document::initContentSecurityPolicy().
        Moreover, DocumentWriter::begin() knows the owner document that will be replaced with the result of
        executing a JavaScript URL. This is needed in order to fix up inheritance of CSP for such documents.

        Tests: http/tests/security/contentSecurityPolicy/iframe-allowed-when-loaded-via-javascript-url.html
               http/tests/security/contentSecurityPolicy/iframe-blocked-when-loaded-via-javascript-url.html
               http/tests/security/contentSecurityPolicy/iframe-blocked-when-loaded-via-javascript-url2.html

        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): If we are inheriting the security origin from the owner
        document then inherit its CSP policy. We copy over both the CSP state from the owner as well as
        update 'self' to match the owner's origin so that CSP source expressions that include 'self' work
        correctly even from about:blank documents.
        (WebCore::Document::initContentSecurityPolicy): Move most of the logic from here into DocumentWriter::begin()
        to take advantage of the fact that DocumentWriter::begin() knows about the outgoing document (if there
        is one) as well as whether the outgoing document is being replaced with a new document that is the result
        of evaluating a JavaScript URL. We need do know both these things in order to inherit the correct CSP
        policy. This function only exists to copy some upgrade-insecure-requests state and to fix up plugin documents
        as we currently do.
        (WebCore::Document::shouldInheritContentSecurityPolicy const): Deleted.
        * dom/Document.h:
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::setContentSecurityPolicy): Modified to take its param by rvalue-reference
        to make it less error prone to use.
        * dom/SecurityContext.h: Expose setContentSecurityPolicy() so that we can invoke it from DocumentWriter::begin().
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin): For documents being replaced with the result of a JavaScript URL (i.e. ownerDocument
        is non-null) inherit the CSP from the owner document. Similarly, if we have an existing document in the frame
        and the protocol of the new document's URL is data: or blob: then inherit the CSP from the existing page. The latter
        is what we currently do just moved from Document::initContentSecurityPolicy() and re-written in terms of the
        existingDocument instead of previousContentSecurityPolicy. Also call setInsecureNavigationRequestsToUpgrade()
        both when we have a non-null ownerDocument as well as when we have a non-null existingDocument. The former fixes
        the block-all-mixed-content feature for documents loaded via JavaScript URLs and the latter is what we do now.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Remove parameter previousContentSecurityPolicy as the logic that
        made use of it moved to DocumentWriter::begin().
        * loader/FrameLoader.h:
        * page/csp/ContentSecurityPolicy.h:

2019-09-23  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix after r250173: tvOS build broken due to unused function.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const):

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

        Unreviewed WinCairo/FTW Build fix after r250192.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::createCurlRequest):

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

        [LFC][IFC] Merge inline box compute functions
        https://bugs.webkit.org/show_bug.cgi?id=202092
        <rdar://problem/55607748>

        Reviewed by Antti Koivisto.

        Make InlineFormattingContext::layoutInFlowContent() logic simpler.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalAndVerticalGeometry):
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2019-09-23  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r249855): Remove debug logging from WebCore::RenderImage::paintIntoRect()
        <https://webkit.org/b/202103>

        Reviewed by Zalan Bujtas.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect): Remove debug logging
        statements.

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

        [LFC][IFC] Pass in the Used*Values to inline layout functions.
        https://bugs.webkit.org/show_bug.cgi?id=202091
        <rdar://problem/55601987>

        Reviewed by Antti Koivisto.

        Only the top level layout functions should generate constraint values.

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::widthConstraint const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::InlineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):

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

        Refcount simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=202104

        Reviewed by Zalan Bujtas.

        Make SimpleLineLayout::Layout refcounted for safety and ease of use.

        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::outputLineLayoutForFlow):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):

        Iterator now refs the layout. Since the resolver is owned by the layout, it is guaranteed to stay alive too.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::layout const):
        (WebCore::SimpleLineLayout::RunResolver::Run::computeBaselinePosition const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::simpleRun const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::inQuirksMode const): Deleted.
        (WebCore::SimpleLineLayout::runResolver): Deleted.

        Always use the cached resolver owned by SimpleLineLayout::Layout.

        * rendering/line/LineLayoutInterfaceTextBoxes.cpp:
        (WebCore::LineLayoutInterface::firstTextBoxInVisualOrderFor):
        (WebCore::LineLayoutInterface::firstTextBoxInTextOrderFor):
        (WebCore::LineLayoutInterface::textBoxRangeFor):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxInVisualOrderFor): Deleted.
        (WebCore::LineLayoutInterface::Provider::firstTextBoxInTextOrderFor): Deleted.
        (WebCore::LineLayoutInterface::Provider::textBoxRangeFor): Deleted.

        There is no need for a separate Provider class anymore as the iterator keeps SimpleLineLayout::Layout
        and Resolver instances alive itself.

        * rendering/line/LineLayoutInterfaceTextBoxes.h:
        (WebCore::LineLayoutInterface::hasTextBoxes):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxFor): Deleted.

2019-09-23  Youenn Fablet  <youenn@apple.com>

        Simplify UserMediaPermissionRequestManager management of UserMediaRequest
        https://bugs.webkit.org/show_bug.cgi?id=201688

        Reviewed by Eric Carlson.

        Covered by existing tests and modified test.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::UserMediaRequest):
        * Modules/mediastream/UserMediaRequest.h:
        (WebCore::UserMediaRequest::identifier const):
        Add an identifier generated for each request.

2019-09-23  Charlie Turner  <cturner@igalia.com>

        [GStreamer] isAVC1CodecSupported is crashing several media source tests due to avc1.4d4001 codec type
        https://bugs.webkit.org/show_bug.cgi?id=201870

        Reviewed by Xabier Rodriguez-Calvar.

        The GStreamer codec-utils package expects all level_idc's to be
        multiples of 10 from the spec idc, i.e., 1.1 -> 11, 3.1 -> 31, 1
        -> 10, etc.

        In the WPT tests, there is some confusion of this *10 multiplier,
        and the level_idc is given in several places as simply "1". This
        causes the get_level codec helper to return NULL, which the
        registry scanner was not handling properly, and crashing on.

        Fix this by special casing "web level idc's" that violate the *10
        rule in isAVC1CodecSupported.

        There is prior art along these lines in Gecko:
        https://searchfox.org/mozilla-central/source/dom/media/VideoUtils.cpp#453
        I assume Chrome/IE/etc must do something similar. The fix does not
        belong in GStreamer since these are actually invalid inputs to the
        get_level function.

        Tested by imported/w3c/web-platform-tests/media-source

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::isAVC1CodecSupported const):
        Special case levels 1..5, even though these *should* be
        represented as 10 through 50 respectively, they are not in
        web-land. The two-byte local storage trick was contributed to me
        by Adrian Perez de Castro.

2019-09-23  Rob Buis  <rbuis@igalia.com>

        Sync operator dictionary
        https://bugs.webkit.org/show_bug.cgi?id=201974

        Reviewed by Frédéric Wang.

        Sync with operator dictionary list from
        https://mathml-refresh.github.io/mathml-core/#operator-dictionary

        Test: imported/w3c/web-platform-tests/mathml/presentation-markup/operators/operator-dictionary-001.html

        * mathml/MathMLOperatorDictionary.cpp:

2019-09-22  David Kilzer  <ddkilzer@apple.com>

        clang-tidy: Fix unnecessary copy/ref churn of for loop variables in WebCore
        <https://webkit.org/b/202090>

        Reviewed by Daniel Bates.

        Fix unwanted copying/ref churn of loop variables by making them
        const references.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::InitDataRegistry::extractKeyIDsCenc):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getMisspellingRange const):
        (WebCore::AccessibilityObject::performTextOperation):
        * html/HTMLSlotElement.cpp:
        (WebCore::flattenAssignedNodes):
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::checkAndStoreStyleSheet):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::updateSupportedTypeIdentifiers):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard allDroppedFileURLs]):
        * svg/SVGStringList.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::GetTransceivers const):
        Also call transceivers.reserve() to optimize allocations.

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

        Reduce use of SessionID::defaultSessionID() in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=202080

        Reviewed by Alex Christensen.

        Reduce use of SessionID::defaultSessionID() in WebKit. Falling back to the default session
        when you don't know which session to use is never a good idea and a potential privacy issue.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * dom/Document.cpp:
        (WebCore::Document::logger):
        * dom/Document.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::updateCachedResourceWithCurrentRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::revalidateResource):
        (WebCore::CachedResourceLoader::loadResource):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::clearDocumentLoader):
        * page/Frame.cpp:
        * page/Frame.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::isAlwaysOnLoggingAllowed const):

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

        ServiceWorkerContextData does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202087

        Reviewed by Alex Christensen.

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::RegistrationDatabase):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/RegistrationDatabase.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextData const):

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

        WebIDBConnectionToClient does not need to be RefCounted or a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=202089

        Reviewed by Alex Christensen.

        Drop some dead code.

        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

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

        [CURL] CurlRequest does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202086

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::CurlFormDataStream):
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):

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

        CookieRequestHeaderFieldProxy does not need a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=202084

        Reviewed by Alex Christensen.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::cookieRequestHeaderFieldProxy):
        * loader/CookieJar.h:
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::encode const):
        (WebCore::CookieRequestHeaderFieldProxy::decode):

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

        DocumentLoader::m_temporaryServiceWorkerClient does not need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=202083

        Reviewed by Alex Christensen.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
        (WebCore::DocumentLoader::unregisterTemporaryServiceWorkerClient):
        * loader/DocumentLoader.h:

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

        [FTW] Resolve crashes found while running canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=202062

        Reviewed by Don Olmstead.

        * platform/graphics/Pattern.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::FillSource::FillSource): Take GraphicsContext as argument, rather than
        a PlatformContextDirect2D since downstream operations require the former.        
        (WebCore::Direct2D::StrokeSource::StrokeSource): Ditto.
        (WebCore::Direct2D::clip): Use new 'pushClip' helper function.
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::strokeRect):
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        (WebCore::GraphicsContextImplDirect2D::fillRect): Update to pass GraphicsContext.
        (WebCore::GraphicsContextImplDirect2D::fillRectWithRoundedHole): Ditto.
        (WebCore::GraphicsContextImplDirect2D::fillPath): Ditto.
        (WebCore::GraphicsContextImplDirect2D::strokeRect): Ditto.
        (WebCore::GraphicsContextImplDirect2D::strokePath): Ditto.
        (WebCore::GraphicsContextImplDirect2D::drawGlyphs): Ditto.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::copyRectFromSourceToData): Correct return behavior.
        (WebCore::ImageBufferData::compatibleBitmap): Make a copy if the render target is
        backed by the ID2D1Bitmap we are trying to draw with.
        * platform/graphics/win/PatternDirect2D.cpp:
        (WebCore::Pattern::createPlatformPattern const): Remove 'PlatformContextDirect2D' contructor,
        since we always need a GraphicsContext for the Image class.
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::clipLayer const): Added.
        (WebCore::PlatformContextDirect2D::clearClips): Added.
        (WebCore::PlatformContextDirect2D::restore): Update to use m_stateStack, rather than
        the m_renderStates vector.
        (WebCore::PlatformContextDirect2D::save): Ditto.
        (WebCore::PlatformContextDirect2D::pushRenderClip): Ditto.
        (WebCore::PlatformContextDirect2D::setActiveLayer): Ditto.
        (WebCore::PlatformContextDirect2D::endDraw): Ditto.
        (WebCore::PlatformContextDirect2D::notifyPostDrawObserver): Ditto.
        (WebCore::PlatformContextDirect2D::pushClip): Ditto.
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextDirect2D::hasSavedState const):
        (WebCore::PlatformContextDirect2D::clipLayer const): Deleted.

2019-09-20  Antoine Quint  <graouts@apple.com>

        releasePointerCapture() not working for implicit capture; can't opt-in to pointerenter/leave for touches
        https://bugs.webkit.org/show_bug.cgi?id=199803
        <rdar://problem/53127223>

        Reviewed by Dean Jackson.

        In order to dispatch boundary events (pointerover/out/enter/leave) when the implicit pointer capture is released on iOS,
        we need to track the target of the pointer events that was dispatched last for a given pointer id. Then we compare that
        target with the current target when dispatching a new pointer event and determine whether we should dispatch boundary
        events using the exact same approach used to dispatch mouse boundary events in EventHandler::updateMouseEventTargetNode().

        Tests: pointerevents/ios/boundary-events-through-hierarchy-without-pointer-capture.html
               pointerevents/ios/boundary-events-without-pointer-capture.html

        * page/PointerCaptureController.cpp:
        (WebCore::hierarchyHasCapturingEventListeners):
        (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):
        (WebCore::PointerCaptureController::pointerEventWillBeDispatched):
        (WebCore::PointerCaptureController::ensureCapturingDataForPointerEvent):
        (WebCore::PointerCaptureController::cancelPointer):
        * page/PointerCaptureController.h:

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

        [LFC] LayoutContext::m_formattingContextRootListForLayout should be a WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=202068
        <rdar://problem/55579352>

        Reviewed by Alex Christensen.

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layout):
        (WebCore::Layout::LayoutContext::styleChanged):
        (WebCore::Layout::LayoutContext::markNeedsUpdate):
        * layout/LayoutContext.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-09-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Clean up handling of summary items and payment method updates
        https://bugs.webkit.org/show_bug.cgi?id=202018
        <rdar://problem/55470632>

        Reviewed by Tim Horton.

        Replaced the PaymentMethodUpdate struct with a class that knows how to convert from
        ApplePayPaymentMethodUpdate structs to PKPaymentRequestPaymentMethodUpdate instances.

        Moved some scattered-around free functions for converting payment summary items into
        PaymentSummaryItems{.h,Cocoa.mm}.

        * Modules/applepay/ApplePayPaymentMethodUpdate.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::finishConverting):
        (WebCore::convertAndValidateTotal):
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * Modules/applepay/PaymentHeaders.h:
        * Modules/applepay/PaymentMethodUpdate.h: Added.
        * Modules/applepay/PaymentSummaryItems.h: Added.
        * Modules/applepay/cocoa/PaymentMethodUpdateCocoa.mm: Added.
        (WebCore::PaymentMethodUpdate::PaymentMethodUpdate):
        (WebCore::PaymentMethodUpdate::totalAndLineItems const):
        (WebCore::PaymentMethodUpdate::platformUpdate const):
        * Modules/applepay/cocoa/PaymentSummaryItemsCocoa.mm: Added.
        (WebCore::toDecimalNumber):
        (WebCore::toPKPaymentSummaryItemType):
        (WebCore::toPKPaymentSummaryItem):
        (WebCore::platformSummaryItems):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::completePaymentMethodSelection):

2019-09-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Assertion fires when animating a discrete property with values range and multiple animators
        https://bugs.webkit.org/show_bug.cgi?id=201926

        Reviewed by Darin Adler.

        The first animator of a property is considered the result element. The
        other animators will be just contributers to the first animator. For the
        first animator and in SVGSMILElement::progress(), we call resetAnimatedType()
        which creates m_animator in SVGAnimateElementBase::animator(). But for 
        the other animators we do not call resetAnimatedType(). So their m_animator
        will stay null until they are used for the first time.

        If SVGAnimationElement::startedActiveInterval() calls calculateToAtEndOfDurationValue()
        for a discrete property this will have no effect and the call should be
        ignored. So SVGAnimateElementBase::calculateToAtEndOfDurationValue()
        should bail out early if isDiscreteAnimator() is true.

        The bug is isDiscreteAnimator() will return false if the m_animator is 
        null even if the animated property is discrete, e.g. SVGAnimatedString.
        The fix is to make isDiscreteAnimator() ensure m_animator is created.

        Unrelated change:
        Make most of the protected methods of SVGAnimateElementBase be private.

        Test: svg/animations/multiple-discrete-values-animate.svg

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::calculateFromAndByValues):
        (WebCore::SVGAnimateElementBase::calculateToAtEndOfDurationValue):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove dead code for a specific macOS and iOS SDK
        https://bugs.webkit.org/show_bug.cgi?id=202054
        <rdar://problem/55569619>

        Reviewed by Zalan Bujtas.

        ComplexTextController::collectComplexTextRunsForCharacters in
        ComplexTextControllerCoreText.mm has some code for compatibility with
        specifically macOS 10.14.0 and iOS 12.0 (see Bug 186571). We don't
        build for these targets any more (when we build for macOS 10.14, it's
        for a later minor revision), so this code can be removed.

        No new tests -- no new or changed functionality.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

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

        Remove unnecessary abstractions around WebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=201655

        Reviewed by Chris Dumez.

        * Modules/webdatabase/cocoa/DatabaseManagerCocoa.mm:
        (WebCore::DatabaseManager::platformInitialize):

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

        [resource-timing] Report performance entries with all HTTP status codes
        https://bugs.webkit.org/show_bug.cgi?id=202040

        Reviewed by Joseph Pecoraro.

        This follows a Chromium change at https://chromium-review.googlesource.com/c/chromium/src/+/1796544
        The spec change is being discussed at https://github.com/w3c/resource-timing/issues/165

        Test: imported/w3c/web-platform-tests/resource-timing/status-codes-create-entry.html

        I had to slightly modify the test to make sure the entry count was > 0 instead of == 1 to reduce flakyness because sometimes we load the 200 image twice.
        I'll submit a PR to WPT, too.

        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::shouldAddResourceTiming):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove check of setSourceAppPid selector that's no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=201971
        <rdar://problem/55505761>

        Reviewed by Andy Estes.

        Bug 172152 introduced a check of the NEFilterSource selector
        setSourceAppPid in order to support OS's that didn't support it. All
        supported Cocoa platforms now support it, so the check can be removed.

        No new tests -- no new or changed functionality.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=201967
        <rdar://problem/55504738>

        Reviewed by Andy Estes.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        After version checks have been removed, there are some cases where the
        preprocessor conditional looks like "#if PLATFORM(MAC) ||
        PLATFORM(IOS_FAMILY)". These can be collapsed into "#if
        PLATFORM(COCOA)". This additional cleanup will be performed in a
        subsequent patch.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Andy Estes was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        No new tests -- no new or changed functionality.

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):

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

        Document no longer needs to store a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=202024

        Reviewed by Geoffrey Garen.

        Document no longer needs to store a SessionID, now that we have a single
        session per WebProcess. It can simply get its sessionID from its Page.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * dom/DOMImplementation.cpp:
        (WebCore::createXMLDocument):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::m_undoManager):
        (WebCore::Document::create):
        (WebCore::Document::createNonRenderedPlaceholder):
        (WebCore::Document::cloneDocumentWithoutChildren const):
        (WebCore::Document::sessionID const):
        (WebCore::Document::privateBrowsingStateDidChange):
        (WebCore::Document::ensureTemplateDocument):
        (WebCore::Document::logger):
        (WebCore::Document::didLogMessage):
        * dom/Document.h:
        (WebCore::Document::create):
        * dom/XMLDocument.h:
        (WebCore::XMLDocument::create):
        (WebCore::XMLDocument::createXHTML):
        (WebCore::XMLDocument::XMLDocument):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * html/FTPDirectoryDocument.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAdClickAttribution const):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createSynthesizedDocument):
        (WebCore::HTMLDocument::HTMLDocument):
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren const):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * html/MediaDocument.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * html/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * html/TextDocument.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::cookieRequestHeaderFieldProxy):
        (WebCore::CookieJar::cookieRequestHeaderFieldValue const):
        * loader/CookieJar.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::SinkDocument):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::varyHeaderValuesMatch):
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * page/Page.cpp:
        (WebCore::Page::configureLoggingChannel):
        * platform/network/CacheValidation.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::collectVaryingRequestHeaders):
        (WebCore::verifyVaryingRequestHeaders):
        * platform/network/CacheValidation.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        (WebCore::SVGDocument::cloneDocumentWithoutChildren const):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::isAlwaysOnLoggingAllowed const):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        * worklets/WorkletGlobalScope.h:
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.cpp:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2019-09-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [SVG2]: Add auto behavior for rx and ry to the SVG <ellipse> and <rect> elements (Addressing review comments)
        https://bugs.webkit.org/show_bug.cgi?id=199843

        Reviewed by Darin Adler.

        Make RenderSVGEllipse calculate of the ellipse's rx and ry more efficiently.

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):

2019-09-20  Keith Rollin  <krollin@apple.com>

        Remove some support for < iOS 13
        https://bugs.webkit.org/show_bug.cgi?id=202032
        <rdar://problem/55548468>

        Reviewed by Alex Christensen.

        Remove some support for iOS versions less than 13.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 130000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101300" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101300" are always True.

        This removal is part of a series of patches effecting the removal of
        dead code for old versions of iOS. This particular pass involves
        changes in which Dan Bates was involved. These changes are isolated
        from other similar changes in order to facilitate the reviewing
        process.

        No new tests -- no new or changed functionality.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2019-09-20  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250114.

        Broke ~16 webgpu/ tests on Mojave wk2

        Reverted changeset:

        "Web Inspector: Canvas: show WebGPU shader pipelines"
        https://bugs.webkit.org/show_bug.cgi?id=201675
        https://trac.webkit.org/changeset/250114

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

        Implement Position::upstream and Position::downstream with line layout iterator
        https://bugs.webkit.org/show_bug.cgi?id=202043

        Reviewed by Zalan Bujtas.

        These can eventually work without switching to lineboxes.

        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):

        Factor the loops into TextBox::isLastOnLine function.

        * rendering/line/LineLayoutInterfaceTextBoxes.cpp:
        (WebCore::LineLayoutInterface::TextBox::isLastOnLine const):

        Looking into root boxes is a much more efficient way to figure this out.

        (WebCore::LineLayoutInterface::TextBox::isLast const):
        (WebCore::LineLayoutInterface::TextBoxIterator::ComplexPath::nextInlineTextBoxInTextOrder const):
        (WebCore::LineLayoutInterface::TextBoxIterator::traverseNextInTextOrder):
        * rendering/line/LineLayoutInterfaceTextBoxes.h:

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

        [LFC] Introduce LayoutContext class
        https://bugs.webkit.org/show_bug.cgi?id=202026
        <rdar://problem/55546622>

        Reviewed by Antti Koivisto.

        Move context related functionality from LayoutState to LayoutContext.
        To initiate a layout, create a LayoutContext, pass the current LayoutState object in and call layout().  

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::updateLayout): Deleted.
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree): Deleted.
        (WebCore::Layout::LayoutState::styleChanged): Deleted.
        (WebCore::Layout::LayoutState::markNeedsUpdate): Deleted.
        (WebCore::Layout::LayoutState::createFormattingContext): Deleted.
        (WebCore::Layout::LayoutState::run): Deleted.
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::hasFormattingState const):
        (WebCore::Layout::LayoutState::setQuirksMode):
        (WebCore::Layout::LayoutState::inNoQuirksMode const):
        (WebCore::Layout::LayoutState::updateAll): Deleted.
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        * layout/blockformatting/BlockInvalidation.cpp:
        (WebCore::Layout::computeUpdateType):
        (WebCore::Layout::computeUpdateTypeForAncestor):
        (WebCore::Layout::BlockInvalidation::invalidate):
        * layout/blockformatting/BlockInvalidation.h:
        * layout/displaytree/DisplayBox.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        * layout/inlineformatting/InlineInvalidation.cpp:
        (WebCore::Layout::InlineInvalidation::invalidate):
        * layout/inlineformatting/InlineInvalidation.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        * layout/tableformatting/TableInvalidation.cpp:
        (WebCore::Layout::TableInvalidation::invalidate):
        * layout/tableformatting/TableInvalidation.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-09-19  Joonghun Park  <pjh0718@gmail.com>

        Unreviewed. Fix Build error below since r248879.

        warning: unused variable ‘canvas’ [-Wunused-variable]

        No new tests, no new behavioral changes.

        * html/canvas/GPUBasedCanvasRenderingContext.cpp:
        (WebCore::GPUBasedCanvasRenderingContext::notifyCanvasContentChanged):

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

        Web Inspector: Canvas: show WebGPU shader pipelines
        https://bugs.webkit.org/show_bug.cgi?id=201675

        Reviewed by Joseph Pecoraro.

        Tests: inspector/canvas/requestShaderSource-webgpu.html
               inspector/canvas/shaderProgram-add-remove-webgpu.html
               inspector/canvas/updateShader-webgpu.html

        Create common base classes for `WebGPUPipeline` and `GPUPipeline` so that Web Inspector can
        instrument both render and compute shader pipelines.

        Refactor `InspectorShaderProgram` to support both `WebGLProgram` and `WebGPUPipeline` so
        that the same object can be used for all types of shader "program"s.

        Keep a copy of each shader module's source, and allow the shader module to be updated.

        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createShaderModule const):
        (WebCore::WebGPUDevice::createRenderPipeline): Added.
        (WebCore::WebGPUDevice::createComputePipeline): Added.
        (WebCore::WebGPUDevice::createRenderPipeline const): Deleted.
        (WebCore::WebGPUDevice::createComputePipeline const): Deleted.

        * Modules/webgpu/WebGPUPipeline.h: Added.
        (WebCore::WebGPUPipeline::isRenderPipeline const):
        (WebCore::WebGPUPipeline::isComputePipeline const):
        (WebCore::WebGPUPipeline::scriptExecutionContext const):
        * Modules/webgpu/WebGPUPipeline.cpp: Added.
        (WebCore::WebGPUPipeline::instancesMutex):
        (WebCore::WebGPUPipeline::WebGPUPipeline):
        (WebCore::WebGPUPipeline::~WebGPUPipeline):
        * platform/graphics/gpu/GPUPipeline.cpp: Added.
        * platform/graphics/gpu/GPUPipeline.h: Added.
        (WebCore::GPUPipeline::isRenderPipeline const):
        (WebCore::GPUPipeline::isComputePipeline const):

        * Modules/webgpu/WebGPUComputePipeline.idl:
        * Modules/webgpu/WebGPUComputePipeline.h:
        (WebCore::WebGPUComputePipeline::computePipeline const): Deleted.
        * Modules/webgpu/WebGPUComputePipeline.cpp:
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        (WebCore::WebGPUComputePipeline::recompile): Added.
        * platform/graphics/gpu/GPUComputePipeline.h:
        (WebCore::GPUComputePipeline::isComputePipeline): Added.
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        (WebCore::GPUComputePipeline::recompile): Added.

        * Modules/webgpu/WebGPURenderPipeline.idl:
        * Modules/webgpu/WebGPURenderPipeline.h:
        (WebCore::WebGPURenderPipeline::renderPipeline const): Deleted.
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        (WebCore::WebGPURenderPipeline::recompile): Added.
        * platform/graphics/gpu/GPURenderPipeline.h:
        (WebCore::GPURenderPipeline::isRenderPipeline): Added.
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):
        (WebCore::GPURenderPipeline::recompile): Added.

        * Modules/webgpu/WebGPUShaderModule.h:
        (WebCore::WebGPUShaderModule::source const): Added.
        * Modules/webgpu/WebGPUShaderModule.cpp:
        (WebCore::WebGPUShaderModule::update): Added.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.h:
        * platform/graphics/gpu/GPUProgrammableStageDescriptor.h:
        (WebCore::GPUProgrammableStageDescriptor::GPUProgrammableStageDescriptor):

        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::create):
        (WebCore::InspectorShaderProgram::InspectorShaderProgram):
        (WebCore::InspectorShaderProgram::program const): Added.
        (WebCore::InspectorShaderProgram::pipeline const): Added.
        (WebCore::shaderForType): Added.
        (WebCore::InspectorShaderProgram::requestShaderSource): Added.
        (WebCore::InspectorShaderProgram::updateShader): Added.
        (WebCore::InspectorShaderProgram::context const): Deleted.
        (WebCore::InspectorShaderProgram::shaderForType): Deleted.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::discardAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::requestShaderSource):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didCreateWebGLProgram): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGLProgram): Added.
        (WebCore::InspectorCanvasAgent::isWebGLProgramDisabled): Added.
        (WebCore::InspectorCanvasAgent::isWebGLProgramHighlighted): Added.
        (WebCore::InspectorCanvasAgent::didCreateWebGPUPipeline): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUPipeline): Added.
        (WebCore::InspectorCanvasAgent::programDestroyedTimerFired): Added.
        (WebCore::InspectorCanvasAgent::reset): Added.
        (WebCore::InspectorCanvasAgent::unbindProgram):
        (WebCore::InspectorCanvasAgent::findInspectorProgram):
        (WebCore::InspectorCanvasAgent::didCreateProgram): Deleted.
        (WebCore::InspectorCanvasAgent::willDeleteProgram): Deleted.
        (WebCore::InspectorCanvasAgent::isShaderProgramDisabled): Deleted.
        (WebCore::InspectorCanvasAgent::isShaderProgramHighlighted): Deleted.
        (WebCore::InspectorCanvasAgent::clearCanvasData): Deleted.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGLProgram): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGLProgram): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramDisabled): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramHighlighted): Added.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipeline): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipeline): Added.
        (WebCore::InspectorInstrumentation::didCreateProgram): Deleted.
        (WebCore::InspectorInstrumentation::willDeleteProgram): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramHighlighted): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebGLProgramImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGLProgramImpl): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramDisabledImpl): Added.
        (WebCore::InspectorInstrumentation::isWebGLProgramHighlightedImpl): Added.
        (WebCore::InspectorInstrumentation::didCreateWebGPUPipelineImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUPipelineImpl): Added.
        (WebCore::InspectorInstrumentation::didCreateProgramImpl): Deleted.
        (WebCore::InspectorInstrumentation::willDeleteProgramImpl): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramDisabledImpl): Deleted.
        (WebCore::InspectorInstrumentation::isShaderProgramHighlightedImpl): Deleted.

        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::~WebGLProgram):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::InspectorScopedShaderProgramHighlight::showHightlight):
        (WebCore::WebGLRenderingContextBase::createProgram):
        (WebCore::WebGLRenderingContextBase::deleteProgram):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        Rename WebGL program instrumentation points to be less ambiguous.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        WorkerGlobalScope does not need a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201991

        Reviewed by Alex Christensen.

        WorkerGlobalScope does not need a SessionID, now that we have a single session
        per WebProcess.

        * dom/Document.cpp:
        (WebCore::Document::resume):
        (WebCore::Document::privateBrowsingStateDidChange):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::matchRegistration):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::registerTemporaryServiceWorkerClient):
        (WebCore::DocumentLoader::unregisterTemporaryServiceWorkerClient):
        * testing/Internals.cpp:
        (WebCore::Internals::serviceWorkerClientIdentifier const):
        (WebCore::Internals::storeRegistrationsOnDisk):
        (WebCore::Internals::hasServiceWorkerRegistration):
        (WebCore::Internals::terminateServiceWorker):
        (WebCore::Internals::hasServiceWorkerConnection):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::mainThreadConnection):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::notifyRegistrationIsSettled):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::notifyFailedFetchingScript):
        (WebCore::ServiceWorkerContainer::ensureSWClientConnection):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::mayHaveServiceWorkerRegisteredForOrigin):
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/WorkerSWClientConnection.cpp:
        (WebCore::WorkerSWClientConnection::WorkerSWClientConnection):
        (WebCore::WorkerSWClientConnection::matchRegistration):
        (WebCore::WorkerSWClientConnection::getRegistrations):
        (WebCore::WorkerSWClientConnection::whenRegistrationReady):
        (WebCore::WorkerSWClientConnection::addServiceWorkerRegistrationInServer):
        (WebCore::WorkerSWClientConnection::removeServiceWorkerRegistrationInServer):
        (WebCore::WorkerSWClientConnection::didResolveRegistrationPromise):
        (WebCore::WorkerSWClientConnection::postMessageToServiceWorker):
        (WebCore::WorkerSWClientConnection::serverConnectionIdentifier const):
        (WebCore::WorkerSWClientConnection::syncTerminateWorker):
        (WebCore::WorkerSWClientConnection::registerServiceWorkerClient):
        (WebCore::WorkerSWClientConnection::finishFetchingScriptInServer):
        (WebCore::WorkerSWClientConnection::scheduleJob):
        * workers/service/WorkerSWClientConnection.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * worklets/WorkletGlobalScope.h:
        (WebCore::WorkletGlobalScope::sessionID const):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.cpp:

2019-09-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [SVG2]: Add auto behavior for rx and ry to the SVG <ellipse> and<rect> elements
        https://bugs.webkit.org/show_bug.cgi?id=199843

        Reviewed by Simon Fraser, Nikolas Zimmermann.

        The specification is: https://www.w3.org/TR/SVG2/geometry.html#RxProperty.

        Change the initial value of rx and ry to be "auto". Change the parser to
        parse LengthOrAuto for these properties. Handle the case if one of them
        is missing.

        Tests: svg/custom/ellipse-radius-auto-dynamic.svg
               svg/custom/ellipse-radius-auto-initial.svg
               svg/custom/ellipse-radius-length-initial.svg
               svg/custom/rect-radius-auto-dynamic.svg
               svg/custom/rect-radius-auto-initial.svg
               svg/custom/rect-radius-length-initial.svg

        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeRxOrRy):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialRadius):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleLayoutData::StyleLayoutData):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):

2019-09-19  Peng Liu  <peng.liu6@apple.com>

        HTMLVideoElement with a broken poster image will take square dimension
        https://bugs.webkit.org/show_bug.cgi?id=174122
        <rdar://problem/33121806>

        Reviewed by Daniel Bates.

        For a video element, if only the width attribute is given and the height attribute is missing,
        an invalid poster image will make its aspect ratio to be 1, which is the historical WebKit behavior
        if we're painting alt text and/or a broken image. This fix prevents that behavior to impact video elements.

        We add a virtual function shouldDisplayBrokenImageIcon() to RenderImage and it will return true
        only when the image source is given but cannot be downloaded. RenderMedia overrides this virtual function
        and always return false because it never shows the broken image icon. RenderVideo inherits
        that behavior from RenderMedia.

        Then, in RenderImage::computeIntrinsicRatioInformation(), we only set the aspect ratio to 1
        when we need to show the broken image icon. It is the historical WebKit behavior that we want to keep
        for image element, but we also want to avoid its impact (this bug) on video elements.

        We also replace the imageResource().errorOccurred() with shouldDisplayBrokenImageIcon() in
        TreeBuilder::createLayoutBox() for the same reason.

        The logic to display the broken image icon in RenderImage::renderReplaced() is also cleaned up.

        Test: media/video-poster-not-found.html

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::shouldDisplayBrokenImageIcon const):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::computeIntrinsicRatioInformation const):
        * rendering/RenderImage.h:
        * rendering/RenderMedia.h:

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

        Turn static DocumentRuleSets::s_isInvalidatingStyleWithRuleSets assertion bit into a member
        https://bugs.webkit.org/show_bug.cgi?id=201985
        <rdar://problem/54851871>

        Reviewed by Zalan Bujtas.

        This assert bit was catching cases that are not dangerous. Turn it into a member to narrow the scope.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::~DocumentRuleSets):
        (WebCore::DocumentRuleSets::collectFeatures const):
        (): Deleted.
        * css/DocumentRuleSets.h:
        (WebCore::DocumentRuleSets::isInvalidatingStyleWithRuleSets):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):

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

        [LFC] Remove redundant Layout::Box::ElementTypes
        https://bugs.webkit.org/show_bug.cgi?id=201963

        Reviewed by Antti Koivisto.

        These types can be solved through RenderStyle.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isPaddingApplicable const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isTableHeader const):
        (WebCore::Layout::Box::isTableBody const):
        (WebCore::Layout::Box::isTableFooter const):
        (WebCore::Layout::Box::isTableRow const):
        (WebCore::Layout::Box::isTableColumnGroup const):
        (WebCore::Layout::Box::isTableColumn const):
        (WebCore::Layout::Box::isTableCell const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        [LFC][IFC] InlineFormattingContext::InlineLayout should not need to call LayoutState::establishedFormattingState
        https://bugs.webkit.org/show_bug.cgi?id=201972
        <rdar://problem/55505869>

        Reviewed by Antti Koivisto.

        InlineLayout has access to InlineFormattingContext, so it should just query it instead of calling LayoutState::establishedFormattingState.

        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingContext const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingState):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::InlineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const): Deleted.
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const): Deleted.

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

        [LFC] FloatingContext should take the root container.
        https://bugs.webkit.org/show_bug.cgi?id=201968
        <rdar://problem/55505090>

        Reviewed by Antti Koivisto.

        Now FormattingContext::root() does not need to be public anymore.

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::root const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::mapPointFromFormattingContextRootToFloatingStateRoot const):
        * layout/floats/FloatingContext.h:
        (WebCore::Layout::FloatingContext::root const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):

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

        [FTW] Correct ImageBufferData and clear operations
        https://bugs.webkit.org/show_bug.cgi?id=201862

        Reviewed by Fujii Hironori.

        This patch corrects several problems in the canvas implementation:
        1. The implementation of ImageBufferDataDirect2D did not properly handle the case of a
           'getData' request for less than the size of the full bitmap.
        2. The implementation of 'Clear' was not correct when the size of the region to be
           cleared is less than the size of the render target.
        3. 'endDraw' fails if any clip regions are active at the end of the operation. The
           stack needs to be unwound when endDraw is called.

        This patch corrects all three problems.

        Tested by canvas LayoutTests.

        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::clearRect): Correct partial render target case.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData const): Correct partial buffer case.
        (WebCore::ImageBufferData::putData): Ditto.
        (WebCore::ImageBufferData::readDataFromBitmapIfNeeded): Added.
        (WebCore::copyRectFromSourceToDest): Added.
        (WebCore::ImageBufferData::copyRectFromSourceToData): Added.
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::endDraw): Correct failures caused by
        dangling clip regions when 'endDraw' is called.
        (WebCore::PlatformContextDirect2D::flush): Don't call post-draw observer;
        this is already handled in the draw operations, and endDraw.
        (WebCore::PlatformContextDirect2D::restore): Recognize that the clip
        and transparency stack might be empty when restore is called.

2019-09-18  Andy Estes  <aestes@apple.com>

        Unreviewed, fixed a crash in ssl/applepay/ApplePayCancelEvent.https.html

        After r250060 (which landed very shortly after the patch that introduced ApplePayCancelEvent),
        all Events must be IsoHeap-ed. ApplePayCancelEvent was not IsoHeap-ed, and so this caused
        assertion failures in ssl/applepay/ApplePayCancelEvent.https.html.
        
        Added the WTF_MAKE_ISO_ALLOCATED macros to ApplePayCancelEvent without a review to stop the
        test from failing in EWS.

        * Modules/applepay/ApplePayCancelEvent.cpp:
        * Modules/applepay/ApplePayCancelEvent.h:

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

        WebSocketStream does not need a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201960

        Reviewed by Geoffrey Garen.

        WebSocketStream does not need a SessionID, now that we have a single session per WebProcess.

        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):

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

        LibWebRTCProvider does not need sessionIDs anymore
        https://bugs.webkit.org/show_bug.cgi?id=201959

        Reviewed by Geoffrey Garen.

        LibWebRTCProvider does not need sessionIDs anymore, now that we have a single session per WebProcess.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::registerMDNSName):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

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

        [LFC] FormattingContext::Geometry/MarginCollapse/Quirk classes should not need to access non-const Display::Box
        https://bugs.webkit.org/show_bug.cgi?id=201944
        <rdar://problem/55493279>

        Reviewed by Antti Koivisto.

        This patch improves const correctness so that the Geometry/MarginCollapse/Quirk objects could not access non-const Display::Boxes (to mutate the display tree).
        (The MarginCollapse::Update* functions are about updating the margin values on previously processed boxes so strictly speaking they are not margin collapsing related, but they somewhat belong to the MarginCollapse class -since they deal with margins.)

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::formattingState const):
        (WebCore::Layout::FormattingContext::formattingState):
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::displayBox):
        (WebCore::Layout::FormattingState::displayBox const): Deleted.
        * layout/FormattingState.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::formattingState const):
        (WebCore::Layout::BlockFormattingContext::formattingState):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling const): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContent):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::formattingState const):
        (WebCore::Layout::InlineFormattingContext::formattingState):
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::formattingState const):
        (WebCore::Layout::TableFormattingContext::formattingState):

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

        BlobRegistry no longer needs SessionIDs
        https://bugs.webkit.org/show_bug.cgi?id=201936

        Reviewed by Geoffrey Garen.

        BlobRegistry no longer needs SessionIDs, now that we have a single session per WebProcess.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getFile):
        * Modules/entriesapi/DOMFileSystem.h:
        * Modules/entriesapi/FileSystemFileEntry.cpp:
        (WebCore::FileSystemFileEntry::file):
        * Modules/entriesapi/FileSystemFileEntry.h:
        * Modules/entriesapi/FileSystemFileEntry.idl:
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::blobFromData):
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::takeAsBlob):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blob):
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::~FetchLoader):
        (WebCore::FetchLoader::startLoadingBlobURL):
        * Modules/fetch/FetchLoader.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::putOrAddOnServer):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::createRecordingDataBlob):
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didReceiveRawData):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDBSynchronously):
        * bindings/js/SerializedScriptValue.h:
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::createForDrag):
        (WebCore::DataTransfer::createForDragStartEvent):
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        * dom/DataTransfer.h:
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::inputEventDataTransfer const):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::inputEventDataTransfer const):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::inputEventDataTransfer const):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::inputEventDataTransfer const):
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readFilename):
        (WebCore::WebCorePasteboardFileReader::readBuffer):
        * editing/WebCorePasteboardFileReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readImage):
        (WebCore::attachmentForFilePath):
        (WebCore::attachmentForData):
        * editing/markup.cpp:
        (WebCore::restoreAttachmentElementsInFragment):
        * fileapi/Blob.cpp:
        (WebCore::BlobURLRegistry::registerURL):
        (WebCore::BlobURLRegistry::unregisterURL):
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::deserialize):
        (WebCore::Blob::slice const):
        * fileapi/Blob.idl:
        * fileapi/File.cpp:
        (WebCore::File::createWithRelativePath):
        (WebCore::File::create):
        (WebCore::File::File):
        * fileapi/File.h:
        * fileapi/File.idl:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::~FileReaderLoader):
        (WebCore::FileReaderLoader::start):
        * fileapi/FileReaderLoader.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked):
        (WebCore::ThreadableBlobRegistry::registerBlobURLForSlice):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::filesChosen):
        * html/FileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        (WebCore::FileListCreator::FileListCreator):
        (WebCore::FileListCreator::createFileList):
        * html/FileListCreator.h:
        (WebCore::FileListCreator::create):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toBlob):
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::revoke):
        (WebCore::PublicURLManager::stop):
        * html/URLRegistry.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * platform/network/BlobRegistry.h:
        * testing/Internals.cpp:
        (WebCore::Internals::createFile):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createOpaqueWithBlobBodyResponse):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createResponseBlob):

2019-09-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Make all ScriptWrappable IsoHeap-ed
        https://bugs.webkit.org/show_bug.cgi?id=201846
        <rdar://problem/55407535>

        Reviewed by Mark Lam.

        This patch puts Event and derived classes under IsoHeap to make all ScriptWrappable classes IsoHeap-ed.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create): Deleted.
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability const): Deleted.
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.h:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.h:
        (WebCore::ApplePayPaymentMethodSelectedEvent::create): Deleted.
        (WebCore::ApplePayPaymentMethodSelectedEvent::paymentMethod): Deleted.
        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingContactSelectedEvent.h:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.h:
        * Modules/applepay/ApplePayValidateMerchantEvent.cpp:
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        (WebCore::ApplePayValidateMerchantEvent::create): Deleted.
        (WebCore::ApplePayValidateMerchantEvent::validationURL const): Deleted.
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.h:
        (WebCore::WebKitMediaKeyMessageEvent::create): Deleted.
        (WebCore::WebKitMediaKeyMessageEvent::message const): Deleted.
        (WebCore::WebKitMediaKeyMessageEvent::destinationURL const): Deleted.
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.h:
        (WebCore::WebKitMediaKeyNeededEvent::create): Deleted.
        (WebCore::WebKitMediaKeyNeededEvent::initData const): Deleted.
        * Modules/gamepad/GamepadEvent.cpp:
        * Modules/gamepad/GamepadEvent.h:
        (WebCore::GamepadEvent::create): Deleted.
        (WebCore::GamepadEvent::gamepad const): Deleted.
        * Modules/indexeddb/IDBRequestCompletionEvent.cpp:
        * Modules/indexeddb/IDBRequestCompletionEvent.h:
        (WebCore::IDBRequestCompletionEvent::create): Deleted.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/mediarecorder/BlobEvent.cpp:
        * Modules/mediarecorder/BlobEvent.h:
        * Modules/mediarecorder/MediaRecorderErrorEvent.cpp:
        * Modules/mediarecorder/MediaRecorderErrorEvent.h:
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/OverconstrainedErrorEvent.cpp: Copied from Source/WebCore/Modules/mediarecorder/BlobEvent.h.
        * Modules/mediastream/OverconstrainedErrorEvent.h:
        (WebCore::OverconstrainedErrorEvent::create): Deleted.
        (WebCore::OverconstrainedErrorEvent::error const): Deleted.
        (WebCore::OverconstrainedErrorEvent::OverconstrainedErrorEvent): Deleted.
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCPeerConnectionIceEvent.cpp:
        * Modules/mediastream/RTCPeerConnectionIceEvent.h:
        (WebCore::RTCPeerConnectionIceEvent::url const): Deleted.
        * Modules/mediastream/RTCTrackEvent.cpp:
        * Modules/mediastream/RTCTrackEvent.h:
        (WebCore::RTCTrackEvent::receiver const): Deleted.
        (WebCore::RTCTrackEvent::track const): Deleted.
        (WebCore::RTCTrackEvent::streams const): Deleted.
        (WebCore::RTCTrackEvent::transceiver const): Deleted.
        (WebCore::RTCTrackEvent::eventInterface const): Deleted.
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/PaymentMethodChangeEvent.cpp:
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * Modules/speech/SpeechSynthesisEvent.cpp:
        * Modules/speech/SpeechSynthesisEvent.h:
        (WebCore::SpeechSynthesisEvent::charIndex const): Deleted.
        (WebCore::SpeechSynthesisEvent::elapsedTime const): Deleted.
        (WebCore::SpeechSynthesisEvent::name const): Deleted.
        (WebCore::SpeechSynthesisEvent::eventInterface const): Deleted.
        * Modules/webaudio/AudioProcessingEvent.cpp:
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp:
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webgpu/GPUUncapturedErrorEvent.cpp:
        * Modules/webgpu/GPUUncapturedErrorEvent.h:
        * Modules/websockets/CloseEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * Modules/websockets/CloseEvent.h:
        (WebCore::CloseEvent::create): Deleted.
        (WebCore::CloseEvent::wasClean const): Deleted.
        (WebCore::CloseEvent::code const): Deleted.
        (WebCore::CloseEvent::reason const): Deleted.
        (WebCore::CloseEvent::CloseEvent): Deleted.
        * Modules/webvr/VRDisplayEvent.cpp:
        * Modules/webvr/VRDisplayEvent.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibleSetValueEvent.cpp:
        * accessibility/AccessibleSetValueEvent.h:
        (WebCore::AccessibleSetValueEvent::create): Deleted.
        (WebCore::AccessibleSetValueEvent::value const): Deleted.
        * animation/AnimationPlaybackEvent.cpp:
        * animation/AnimationPlaybackEvent.h:
        * bindings/js/ScriptWrappable.cpp: Copied from Source/WebCore/html/canvas/WebGLContextEvent.cpp.
        * bindings/js/ScriptWrappable.h:
        * dom/AnimationEvent.cpp:
        * dom/AnimationEvent.h:
        * dom/BeforeLoadEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/BeforeLoadEvent.h:
        * dom/BeforeTextInsertedEvent.cpp:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/ClipboardEvent.cpp:
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.cpp:
        * dom/CompositionEvent.h:
        * dom/CustomEvent.cpp:
        * dom/CustomEvent.h:
        * dom/DeviceMotionEvent.cpp:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.cpp:
        * dom/DeviceOrientationEvent.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/FocusEvent.cpp:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/HashChangeEvent.h:
        * dom/InputEvent.cpp:
        * dom/InputEvent.h:
        * dom/KeyboardEvent.cpp:
        * dom/KeyboardEvent.h:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MouseEvent.cpp:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.cpp:
        * dom/MutationEvent.h:
        * dom/OverflowEvent.cpp:
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.cpp:
        * dom/PageTransitionEvent.h:
        * dom/PointerEvent.cpp:
        * dom/PointerEvent.h:
        * dom/PopStateEvent.cpp:
        * dom/PopStateEvent.h:
        * dom/ProgressEvent.cpp:
        * dom/ProgressEvent.h:
        * dom/PromiseRejectionEvent.cpp:
        * dom/PromiseRejectionEvent.h:
        * dom/SecurityPolicyViolationEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/SecurityPolicyViolationEvent.h:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/TouchEvent.cpp:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.cpp:
        * dom/TransitionEvent.h:
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:
        * dom/UIEventWithKeyState.cpp:
        * dom/UIEventWithKeyState.h:
        * dom/WebKitAnimationEvent.cpp:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitTransitionEvent.cpp:
        * dom/WebKitTransitionEvent.h:
        * dom/WheelEvent.cpp:
        * dom/WheelEvent.h:
        * html/MediaEncryptedEvent.cpp:
        * html/MediaEncryptedEvent.h:
        * html/canvas/WebGLContextEvent.cpp:
        * html/canvas/WebGLContextEvent.h:
        * html/shadow/ProgressShadowElement.h:
        * html/track/TrackEvent.cpp:
        * html/track/TrackEvent.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::key const): Deleted.
        (WebCore::StorageEvent::oldValue const): Deleted.
        (WebCore::StorageEvent::newValue const): Deleted.
        (WebCore::StorageEvent::url const): Deleted.
        (WebCore::StorageEvent::storageArea const): Deleted.
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:
        * workers/service/ExtendableEvent.cpp:
        * workers/service/ExtendableEvent.h:
        * workers/service/ExtendableMessageEvent.cpp:
        * workers/service/ExtendableMessageEvent.h:
        * workers/service/FetchEvent.cpp:
        * workers/service/FetchEvent.h:
        * xml/XMLHttpRequestProgressEvent.cpp: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp.
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::position const): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::totalSize const): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::XMLHttpRequestProgressEvent): Deleted.

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

        [LFC] Introduce UsedVerticalValues::Constraints
        https://bugs.webkit.org/show_bug.cgi?id=201933
        <rdar://problem/55487485>

        Reviewed by Antti Koivisto.

        UsedVerticalValues::Constraints holds the constraint values ((optional)containing block height and contentbox top) for a particular box geometry computation. 
        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/FormattingContext.cpp:
        (WebCore::Layout::outOfFlowHorizontalConstraints):
        (WebCore::Layout::outOfFlowVerticalConstraints):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::outOfFlowConstraints): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        * layout/LayoutUnits.cpp:
        (WebCore::Layout::UsedVerticalValues::Constraints::Constraints):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedVerticalValues::Constraints::Constraints):
        (WebCore::Layout::UsedVerticalValues::UsedVerticalValues):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):

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

        Unreviewed, WinCairo build fix after r250045.

        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::computeContentLength):

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

        [LFC] Add contentbox left constraint to UsedHorizontalValues::Constraints
        https://bugs.webkit.org/show_bug.cgi?id=201923
        <rdar://problem/55485796>

        Reviewed by Antti Koivisto.

        Pass in the contentbox left constraint value to the FormattingContext::compute*() functions so that they don't need to read the containg block's geometry.
        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/FormattingContext.cpp:
        (WebCore::Layout::outOfFlowConstraints):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        * layout/LayoutUnits.cpp:
        (WebCore::Layout::UsedHorizontalValues::Constraints::Constraints):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::Constraints::Constraints):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):

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

        [LFC] Introduce UsedHorizontalValues::Constraints
        https://bugs.webkit.org/show_bug.cgi?id=201919
        <rdar://problem/55481927>

        Reviewed by Antti Koivisto.

        UsedHorizontalValues::Constraints holds the constraint values for a particular box geometry computation (currently it only has the horizontal width constraint) 

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding const):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::Constraints::Constraints):
        (WebCore::Layout::UsedHorizontalValues::UsedHorizontalValues):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        * layout/floats/FloatingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):

2019-09-18  Andy Estes  <aestes@apple.com>

        [Apple Pay] Tell websites why a session was cancelled
        https://bugs.webkit.org/show_bug.cgi?id=201912

        Reviewed by Brady Eidson.

        Added ApplePayCancelEvent as the interface for ApplePaySession's cancel event. This event
        object includes a `sessionError` attribute that exposes a Web-safe version of the PassKit
        domain error we received from PKPaymentAuthorization(View)Controller. Currently, we report
        all errors with code "unknown", but more codes will be added in future patches.

        Test: http/tests/ssl/applepay/ApplePayCancelEvent.https.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/applepay/ApplePayCancelEvent.cpp: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        (WebCore::ApplePayCancelEvent::ApplePayCancelEvent):
        (WebCore::ApplePayCancelEvent::sessionError const):
        (WebCore::ApplePayCancelEvent::eventInterface const):
        * Modules/applepay/ApplePayCancelEvent.h: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        (WebCore::ApplePayCancelEvent::create):
        * Modules/applepay/ApplePayCancelEvent.idl: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::didCancelPaymentSession):
        * Modules/applepay/ApplePaySession.h:
        * Modules/applepay/ApplePaySessionError.h: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        * Modules/applepay/ApplePaySessionError.idl: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::didCancelPaymentSession):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentHeaders.h:
        * Modules/applepay/PaymentSession.cpp:
        * Modules/applepay/PaymentSession.h:
        * Modules/applepay/PaymentSessionError.h: Copied from Source/WebCore/Modules/applepay/PaymentHeaders.h.
        * Modules/applepay/cocoa/PaymentSessionErrorCocoa.mm: Copied from Source/WebCore/Modules/applepay/PaymentSession.h.
        (WebCore::additionalError):
        (WebCore::PaymentSessionError::PaymentSessionError):
        (WebCore::PaymentSessionError::sessionError const):
        (WebCore::PaymentSessionError::platformError const):
        (WebCore::PaymentSessionError::unknownError const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::didCancelPaymentSession):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::cancelPayment):

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

        WebSWContextManagerConnection::installServiceWorker IPC no longer need a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201882

        Reviewed by Geoffrey Garen.

        WebSWContextManagerConnection::installServiceWorker IPC no longer need a sessionID now that we have a single
        sessionID per WebProcess.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        * workers/service/server/SWServerToContextConnection.h:

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

        CacheStorageProvider::createCacheStorageConnection() does not need to take in a SessionID
        https://bugs.webkit.org/show_bug.cgi?id=201920

        Reviewed by Geoffrey Garen.

        CacheStorageProvider::createCacheStorageConnection() does not need to take in a SessionID.
        This sessionID is no longer used now that we have a session per WebProcess.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::formDataSize):
        (WebCore::CacheStorageConnection::computeRealBodySize):
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::caches const):
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::sessionID const): Deleted.
        * Modules/cache/WorkerCacheStorageConnection.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::size const):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::blobSize):
        * fileapi/ThreadableBlobRegistry.h:
        * loader/cache/KeepaliveRequestTracker.cpp:
        (WebCore::KeepaliveRequestTracker::tryRegisterRequest):
        (WebCore::KeepaliveRequestTracker::registerRequest):
        (WebCore::KeepaliveRequestTracker::unregisterRequest):
        * page/CacheStorageProvider.h:
        (WebCore::CacheStorageProvider::createCacheStorageConnection):
        * platform/network/BlobRegistry.h:
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormData::lengthInBytes const):
        * platform/network/FormData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):
        (WebCore::Internals::cacheStorageEngineRepresentation):
        (WebCore::Internals::updateQuotaBasedOnSpaceUsage):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::createCacheStorageConnection):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::createCacheStorageConnection):
        * workers/service/context/ServiceWorkerThreadProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

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

        Drop FrameLoaderClient::sessionID()
        https://bugs.webkit.org/show_bug.cgi?id=201916

        Reviewed by Geoffrey Garen.

        Drop FrameLoaderClient::sessionID(). The Frame can get the sessionID from its page (Which is
        what the FrameLoaderClient::sessionID() ended up doing) and other call sites at WebKit2 layer
        can get the sessionID from the WebProcess singleton.

        * loader/EmptyClients.cpp:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::sessionID const):

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

        WebSWServerToContextConnection::PostMessageToServiceWorkerClient IPC no longer needs to take a sessionID
        https://bugs.webkit.org/show_bug.cgi?id=201883

        Reviewed by Geoffrey Garen.

        WebSWServerToContextConnection::PostMessageToServiceWorkerClient IPC no longer needs to take a sessionID,
        now that we have a single session per WebProcess.

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        * workers/service/context/SWContextManager.h:

2019-09-18  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r250030.

        Cause of Recent Build Failures.

        Reverted changeset:

        "Make all ScriptWrappable IsoHeap-ed"
        https://bugs.webkit.org/show_bug.cgi?id=201846
        https://trac.webkit.org/changeset/250030

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

        [LFC] FormattingContext::Geometry::computedHeight* functions need containingBlockHeight only.
        https://bugs.webkit.org/show_bug.cgi?id=201880
        <rdar://problem/55449623>

        Reviewed by Antti Koivisto.

        Let's tighten the incoming vertical parameter.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):

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

        DocumentMarkerController should not invoke ensureLineBoxes during TextIterator traversal
        https://bugs.webkit.org/show_bug.cgi?id=201911
        <rdar://problem/55455458>

        Reviewed by Zalan Bujtas.

        DocumentMarkerController::addMarker may call ensureLineBoxes but TextIterator doesn't expect mutations during traversal.
        Fix by doing range collection as a separate step.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::collectTextRanges):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addTextMatchMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::addDraggedContentMarker):
        (WebCore::DocumentMarkerController::addPlatformTextCheckingMarker):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::filterMarkers):
        * dom/DocumentMarkerController.h:

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

        [LFC] Shrink-to-fit-width needs the available width constraint value only
        https://bugs.webkit.org/show_bug.cgi?id=201896
        <rdar://problem/55465382>

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

2019-09-18  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r247566): Leak of UICTFontDescriptor in WebCore::FontDatabase::InstalledFont::InstalledFont()
        <https://webkit.org/b/201893>
        <rdar://problem/55464115>

        Reviewed by Brent Fulgham.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::InstalledFont::InstalledFont): Use
        adoptCF() to fix the leak.

2019-09-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Make all ScriptWrappable IsoHeap-ed
        https://bugs.webkit.org/show_bug.cgi?id=201846
        <rdar://problem/55407535>

        Reviewed by Mark Lam.

        This patch puts Event and derived classes under IsoHeap to make all ScriptWrappable classes IsoHeap-ed.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create): Deleted.
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability const): Deleted.
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.h:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.h:
        (WebCore::ApplePayPaymentMethodSelectedEvent::create): Deleted.
        (WebCore::ApplePayPaymentMethodSelectedEvent::paymentMethod): Deleted.
        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingContactSelectedEvent.h:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.h:
        * Modules/applepay/ApplePayValidateMerchantEvent.cpp:
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        (WebCore::ApplePayValidateMerchantEvent::create): Deleted.
        (WebCore::ApplePayValidateMerchantEvent::validationURL const): Deleted.
        * Modules/encryptedmedia/MediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.h:
        (WebCore::WebKitMediaKeyMessageEvent::create): Deleted.
        (WebCore::WebKitMediaKeyMessageEvent::message const): Deleted.
        (WebCore::WebKitMediaKeyMessageEvent::destinationURL const): Deleted.
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.h:
        (WebCore::WebKitMediaKeyNeededEvent::create): Deleted.
        (WebCore::WebKitMediaKeyNeededEvent::initData const): Deleted.
        * Modules/gamepad/GamepadEvent.cpp:
        * Modules/gamepad/GamepadEvent.h:
        (WebCore::GamepadEvent::create): Deleted.
        (WebCore::GamepadEvent::gamepad const): Deleted.
        * Modules/indexeddb/IDBRequestCompletionEvent.cpp:
        * Modules/indexeddb/IDBRequestCompletionEvent.h:
        (WebCore::IDBRequestCompletionEvent::create): Deleted.
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        * Modules/mediarecorder/BlobEvent.cpp:
        * Modules/mediarecorder/BlobEvent.h:
        * Modules/mediarecorder/MediaRecorderErrorEvent.cpp:
        * Modules/mediarecorder/MediaRecorderErrorEvent.h:
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/OverconstrainedErrorEvent.cpp: Copied from Source/WebCore/Modules/mediastream/RTCDataChannelEvent.h.
        * Modules/mediastream/OverconstrainedErrorEvent.h:
        (WebCore::OverconstrainedErrorEvent::create): Deleted.
        (WebCore::OverconstrainedErrorEvent::error const): Deleted.
        (WebCore::OverconstrainedErrorEvent::OverconstrainedErrorEvent): Deleted.
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCPeerConnectionIceEvent.cpp:
        * Modules/mediastream/RTCPeerConnectionIceEvent.h:
        (WebCore::RTCPeerConnectionIceEvent::url const): Deleted.
        * Modules/mediastream/RTCTrackEvent.cpp:
        * Modules/mediastream/RTCTrackEvent.h:
        (WebCore::RTCTrackEvent::receiver const): Deleted.
        (WebCore::RTCTrackEvent::track const): Deleted.
        (WebCore::RTCTrackEvent::streams const): Deleted.
        (WebCore::RTCTrackEvent::transceiver const): Deleted.
        (WebCore::RTCTrackEvent::eventInterface const): Deleted.
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/PaymentMethodChangeEvent.cpp:
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * Modules/speech/SpeechSynthesisEvent.cpp:
        * Modules/speech/SpeechSynthesisEvent.h:
        (WebCore::SpeechSynthesisEvent::charIndex const): Deleted.
        (WebCore::SpeechSynthesisEvent::elapsedTime const): Deleted.
        (WebCore::SpeechSynthesisEvent::name const): Deleted.
        (WebCore::SpeechSynthesisEvent::eventInterface const): Deleted.
        * Modules/webaudio/AudioProcessingEvent.cpp:
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp:
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webgpu/GPUUncapturedErrorEvent.cpp:
        * Modules/webgpu/GPUUncapturedErrorEvent.h:
        * Modules/websockets/CloseEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * Modules/websockets/CloseEvent.h:
        (WebCore::CloseEvent::create): Deleted.
        (WebCore::CloseEvent::wasClean const): Deleted.
        (WebCore::CloseEvent::code const): Deleted.
        (WebCore::CloseEvent::reason const): Deleted.
        (WebCore::CloseEvent::CloseEvent): Deleted.
        * Modules/webvr/VRDisplayEvent.cpp:
        * Modules/webvr/VRDisplayEvent.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibleSetValueEvent.cpp:
        * accessibility/AccessibleSetValueEvent.h:
        (WebCore::AccessibleSetValueEvent::create): Deleted.
        (WebCore::AccessibleSetValueEvent::value const): Deleted.
        * animation/AnimationPlaybackEvent.cpp:
        * animation/AnimationPlaybackEvent.h:
        * bindings/js/ScriptWrappable.cpp: Copied from Source/WebCore/html/canvas/WebGLContextEvent.cpp.
        * bindings/js/ScriptWrappable.h:
        * dom/AnimationEvent.cpp:
        * dom/AnimationEvent.h:
        * dom/BeforeLoadEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/BeforeLoadEvent.h:
        * dom/BeforeTextInsertedEvent.cpp:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.cpp:
        * dom/BeforeUnloadEvent.h:
        * dom/ClipboardEvent.cpp:
        * dom/ClipboardEvent.h:
        * dom/CompositionEvent.cpp:
        * dom/CompositionEvent.h:
        * dom/CustomEvent.cpp:
        * dom/CustomEvent.h:
        * dom/DeviceMotionEvent.cpp:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.cpp:
        * dom/DeviceOrientationEvent.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/FocusEvent.cpp:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/HashChangeEvent.h:
        * dom/InputEvent.cpp:
        * dom/InputEvent.h:
        * dom/KeyboardEvent.cpp:
        * dom/KeyboardEvent.h:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/MouseEvent.cpp:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.cpp:
        * dom/MutationEvent.h:
        * dom/OverflowEvent.cpp:
        * dom/OverflowEvent.h:
        * dom/PageTransitionEvent.cpp:
        * dom/PageTransitionEvent.h:
        * dom/PointerEvent.cpp:
        * dom/PointerEvent.h:
        * dom/PopStateEvent.cpp:
        * dom/PopStateEvent.h:
        * dom/ProgressEvent.cpp:
        * dom/ProgressEvent.h:
        * dom/PromiseRejectionEvent.cpp:
        * dom/PromiseRejectionEvent.h:
        * dom/SecurityPolicyViolationEvent.cpp: Copied from Source/WebCore/dom/BeforeTextInsertedEvent.cpp.
        * dom/SecurityPolicyViolationEvent.h:
        * dom/TextEvent.cpp:
        * dom/TextEvent.h:
        * dom/TouchEvent.cpp:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.cpp:
        * dom/TransitionEvent.h:
        * dom/UIEvent.cpp:
        * dom/UIEvent.h:
        * dom/UIEventWithKeyState.cpp:
        * dom/UIEventWithKeyState.h:
        * dom/WebKitAnimationEvent.cpp:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitTransitionEvent.cpp:
        * dom/WebKitTransitionEvent.h:
        * dom/WheelEvent.cpp:
        * dom/WheelEvent.h:
        * html/MediaEncryptedEvent.cpp:
        * html/MediaEncryptedEvent.h:
        * html/canvas/WebGLContextEvent.cpp:
        * html/canvas/WebGLContextEvent.h:
        * html/shadow/ProgressShadowElement.h:
        * html/track/TrackEvent.cpp:
        * html/track/TrackEvent.h:
        * storage/StorageEvent.cpp:
        * storage/StorageEvent.h:
        (WebCore::StorageEvent::key const): Deleted.
        (WebCore::StorageEvent::oldValue const): Deleted.
        (WebCore::StorageEvent::newValue const): Deleted.
        (WebCore::StorageEvent::url const): Deleted.
        (WebCore::StorageEvent::storageArea const): Deleted.
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:
        * workers/service/ExtendableEvent.cpp:
        * workers/service/ExtendableEvent.h:
        * workers/service/ExtendableMessageEvent.cpp:
        * workers/service/ExtendableMessageEvent.h:
        * workers/service/FetchEvent.cpp:
        * workers/service/FetchEvent.h:
        * xml/XMLHttpRequestProgressEvent.cpp: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.cpp.
        * xml/XMLHttpRequestProgressEvent.h:
        (WebCore::XMLHttpRequestProgressEvent::create): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::position const): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::totalSize const): Deleted.
        (WebCore::XMLHttpRequestProgressEvent::XMLHttpRequestProgressEvent): Deleted.

2019-09-18  Loïc Yhuel  <loic.yhuel@softathome.com>  and  Fujii Hironori  <Hironori.Fujii@sony.com>

        JPEGImageDecoder: use libjpeg-turbo RGBA output path even for Adobe transform=0 JPEGs
        https://bugs.webkit.org/show_bug.cgi?id=200163

        Reviewed by Carlos Garcia Campos.

        Remove the workaround for old libjpeg-turbo which doesn't support
        BGRA output for Adobe transform=0 images. The bug was fixed in
        libjpeg-turbo 1.2.1.

        No new tests, no behavior change.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode): Removed code in #if defined(TURBO_JPEG_RGB_SWIZZLE).
        (colorSpaceHasAlpha): Removed an unused inline function.

2019-09-18  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove build warning since r248998.

        This patch removes build warning below.
        warning: comparison between signed and unsigned integer expressions [-Wsign-compare]

        No new tests, no behavioral change.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2019-09-18  Fujii Hironori  <Hironori.Fujii@sony.com>

        [cairo] Incorrect targetRect in BackingStoreBackendCairoImpl::scroll
        https://bugs.webkit.org/show_bug.cgi?id=201895

        Reviewed by Carlos Garcia Campos.

        In BackingStoreBackendCairoImpl::scroll, targetRect is calculated
        wrongly by shifting maxX and maxY. Bug 59655 fixed the issue by
        removing the shifting, but only for BackingStoreBackendCairoX11::scroll.

        No new tests, no behavior change.

        * platform/graphics/cairo/BackingStoreBackendCairoImpl.cpp:
        (WebCore::BackingStoreBackendCairoImpl::scroll): Take intersection of targetRect and scrollRect.

2019-09-18  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a WKA extension point
        https://bugs.webkit.org/show_bug.cgi?id=201801
        <rdar://problem/55372507>

        Reviewed by Alexey Proskuryakov.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::requiresSupportedNetworks):
        (WebCore::convertAndValidate):

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

        Unreviewed, revert change that Alex mistakenly committed at the same time as r250006 and broke the build.

        * page/PerformanceObserver.idl:

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

        Stop calling Page::setSessionID() from WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=201888

        Reviewed by Alex Christensen.

        Stop calling Page::setSessionID() from WebKit2 since Page's sessionID can never change when
        using WebKit2 (We process-swap and create a new Page in a new process when changing data
        store). Instead, we now pass the sessionID ID when constructing the Page, as part of the
        PageConfiguration structure.

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * loader/EmptyClients.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setSessionID):
        * page/PageConfiguration.cpp:
        (WebCore::PageConfiguration::PageConfiguration):
        * page/PageConfiguration.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

2019-09-17  Mark Lam  <mark.lam@apple.com>

        Use constexpr instead of const in symbol definitions that are obviously constexpr.
        https://bugs.webkit.org/show_bug.cgi?id=201879

        Rubber-stamped by Joseph Pecoraro.

        No new tests.  Covered by existing tests.

        * bindings/js/JSDOMConstructorBase.h:
        * bindings/js/JSDOMWindowProperties.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.h:
        * bindings/scripts/test/JS/JSTestEnabledForContext.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:

2019-09-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::resolveContext const):
        * platform/win/BString.h:
        * svg/PatternAttributes.h:
        * svg/SVGLengthValue.cpp:
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        * workers/service/ServiceWorkerJob.cpp:
        * workers/service/WorkerSWClientConnection.cpp:
        * workers/service/server/SWServerRegistration.cpp:

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

        Remove some support for < iOS 12
        https://bugs.webkit.org/show_bug.cgi?id=201851
        <rdar://problem/55422044>

        Reviewed by Jiewen Tan and Alexey Proskuryakov.

        Remove some support for iOS versions less than 12.0.

        Update conditionals that reference __IPHONE_OS_VERSION_MIN_REQUIRED
        and __IPHONE_OS_VERSION_MAX_ALLOWED, assuming that they both have
        values >= 120000. This means that expressions like
        "__IPHONE_OS_VERSION_MIN_REQUIRED < 101200" are always False and
        "__IPHONE_OS_VERSION_MIN_REQUIRED >= 101200" are always True.

        This removal is part of a series of patches effecting such removal.

        No new tests -- no new or changed functionality.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::create):
        (WebCore::castDataArgumentToCCRSACryptorCreateFromDataIfNeeded): Deleted.

2019-09-17  Nikolas Zimmermann  <zimmermann@kde.org>

        SVG <animateMotion> does not reset the element to its first animation frame if its fill is "remove"
        https://bugs.webkit.org/show_bug.cgi?id=201565

        Reviewed by Said Abou-Hallawa.

        Fix fill="remove" support for <animateMotion>: properly trigger visual updates.
        Motion animations are implemented by provding an additional transformation on
        SVGGraphicsElements: the supplementalTransform().

        When an <animateMotion> element specifies fill="remove" the supplemental transform is
        correctly reset, when the animation is finished. However, nobody is notified about the
        change of transformation matrix. Fix by marking the target elements renderer as
        setNeedsTransformUpdate() and call markForLayoutAndParentResourceInvalidation().

        <animate> elements are not affected by the bug:
        SVGAnimateElementBase::clearAnimatedType()
         -> invokes SVGAttributeAnimator::stop()
            -> invokes applyAnimatedPropertyChange() [via SVGAnimatedPropertyAnimator]
            -> invokes SVGXXXElement::svgAttributeChanged().

        When animating e.g. the 'transform' attribute SVGGraphicsElement::svgAttributeChanged()
        will use exactly the same mechanism to trigger visul updates: first call
        setNeedsTransformUpdate() on the associated renderer, followd by a call to
        markForLayoutAndParentResourceInvalidation().

        --> Both code paths are now consistent.
        Also fixes http://web-platform-tests.live/svg/animations/animateMotion-fill-remove.html.

        Tests: svg/animations/fill-remove-support.html
               svg/animations/animateMotion-remove-freeze-use.svg

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::clearAnimatedType): Call applyResultsToTarget().
        (WebCore::SVGAnimateMotionElement::calculateAnimatedValue): Stop calling
        setNeedsTransformUpdate() on the target elements renderer, since applyResultsToTarget()
        is responsible for modifications of the renderer state.
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget): Always mark the renderer
        as setNeedsTransformUpdate() when applying the results, before the call to
        RenderSVGResource::markForLayoutAndParentResourceInvalidation(). This is more consistent
        with respect to the code path that updates the SVGElements instances (<use> support).

2019-09-17  Andy Estes  <aestes@apple.com>

        [Cocoa] Add a WKA extension point
        https://bugs.webkit.org/show_bug.cgi?id=201801
        <rdar://problem/55372507>

        Reviewed by Alexey Proskuryakov.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::requiresSupportedNetworks):
        (WebCore::convertAndValidate):

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

        TextIterator should convert tabs to spaces
        https://bugs.webkit.org/show_bug.cgi?id=201863

        Reviewed by Zalan Bujtas.

        As seen in tests

        imported/w3c/web-platform-tests/innerText/getter.html
        imported/w3c/web-platform-tests/html/dom/elements/the-innertext-idl-attribute/getter.html

        The old simple line layout path in TextIterator used to do this.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextBox):

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

        [LFC[MarginCollapsing] MarginCollapse::estimatedMarginBefore should take pre-computed non-collapsed margin values.
        https://bugs.webkit.org/show_bug.cgi?id=201848
        <rdar://problem/55419419>

        Reviewed by Antti Koivisto.

        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeIgnoringCollapsingThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):

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

        [First-letter] Use WeakPtr for the first-letter insertion point.
        https://bugs.webkit.org/show_bug.cgi?id=201842
        <rdar://problem/51373788>

        Reviewed by Antti Koivisto.

        The about-to-be-removed first letter renderer's sibling could potentially be destroyed too as the result of the anonymous subtree collapsing logic (when the next sibling is a generated anonymous block and it is not needed anymore.)

        Test: fast/text/first-letter-with-columns-crash.html

        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):

2019-09-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cannot create EGL window surface: EGL_BAD_ALLOC
        https://bugs.webkit.org/show_bug.cgi?id=201505

        Reviewed by Žan Doberšek.

        This happens because eglCreateWindowSurface() is called twice for the same window when not using the WPE
        renderer. New versions of Mesa fail the second time with a EGL_BAD_ALLOC.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext): Check surface is nullptr before falling back to use
        eglCreateWindowSurface().

2019-09-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Use WebPreferences instead of RuntimeEnabledFeatures in UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=198176
        <rdar://problem/55285709>

        Reviewed by Youenn Fablet.

        No changes of behavior.

        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable):
        Resolves the promise with false immediately when the feature flag is false.

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

        Access-Control-Expose-Headers parsed incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=172357

        Reviewed by Youenn Fablet.

        When parsing the list, strip HTTP spaces and verify
        that the list items are valid HTTP tokens.

        Behavior matches Firefox and Chrome.

        Test: imported/w3c/web-platform-tests/cors/access-control-expose-headers-parsing.window.html

        * platform/network/HTTPParsers.h:
        (WebCore::addToAccessControlAllowList):
        (WebCore::parseAccessControlAllowList):

2019-09-17  Youenn Fablet  <youenn@apple.com>

        Content-Type should be preserved on responses created from DOMCache
        https://bugs.webkit.org/show_bug.cgi?id=201815

        Reviewed by Alex Christensen.

       Covered by updated test expectations

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        Update content type when creating the response from DOMCache.

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

        Move code for traversing reversed text boxes from TextIterator to TextBoxIterator
        https://bugs.webkit.org/show_bug.cgi?id=201819

        Reviewed by Zalan Bujtas.

        Handle traversal order in TextBoxIterator.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        * editing/TextIterator.h:
        * rendering/line/LineLayoutInterfaceTextBoxes.cpp:
        (WebCore::LineLayoutInterface::TextBox::rect const):
        (WebCore::LineLayoutInterface::TextBox::logicalRect const):
        (WebCore::LineLayoutInterface::TextBox::hasHyphen const):
        (WebCore::LineLayoutInterface::TextBox::isLeftToRightDirection const):
        (WebCore::LineLayoutInterface::TextBox::dirOverride const):
        (WebCore::LineLayoutInterface::TextBox::text const):
        (WebCore::LineLayoutInterface::TextBox::localStartOffset const):
        (WebCore::LineLayoutInterface::TextBox::localEndOffset const):
        (WebCore::LineLayoutInterface::TextBox::length const):
        (WebCore::LineLayoutInterface::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutInterface::TextBoxIterator::traverseNextInVisualOrder):
        (WebCore::LineLayoutInterface::TextBoxIterator::traverseNextInTextOrder):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator== const):
        (WebCore::LineLayoutInterface::TextBoxIterator::atEnd const):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxInVisualOrderFor):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxInTextOrderFor):
        (WebCore::LineLayoutInterface::Provider::textBoxRangeFor):
        * rendering/line/LineLayoutInterfaceTextBoxes.h:
        (WebCore::LineLayoutInterface::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator++):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxFor):

2019-09-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][curl] Don't compile unused CertificateCFWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=201860

        Reviewed by Alex Christensen.

        Curl port is using ResourceHandle::setClientCertificateInfo
        instead of ResourceHandle::setClientCertificate.

        * PlatformWin.cmake: Added CertificateCFWin.cpp to WebCore_SOURCES only if USE_CFURLCONNECTION.
        * platform/network/ResourceHandle.h: Removed an unused method setClientCertificate.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setClientCertificate): Deleted.

2019-09-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [AppleWin] Assertion failure in defaultSupportedImageTypes in UTIRegistry.cpp
        https://bugs.webkit.org/show_bug.cgi?id=198286

        Reviewed by Brent Fulgham.

        Some image types aren't supported by CG for Windows.

        No new tests, covered by existing tests.

        * platform/graphics/cg/ImageSourceCGWin.cpp:
        (WebCore::MIMETypeForImageType): Return the correct MIME types for
        com.microsoft.cur and com.microsoft.ico.
        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes): Excluded public.jpeg-2000 and public.mpo-image if PLATFORM(WIN).

2019-09-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] Image::drawTiled → Cairo::drawSurface → cairo_paint_with_alpha → segfault happens in pixman
        https://bugs.webkit.org/show_bug.cgi?id=201755

        Reviewed by Don Olmstead.

        Segmentation faults happened in pixman while painting a image. In
        Cairo::drawSurface, originalSrcRect can be slightly larger than
        the surface size because of floating number calculations.
        Cairo::drawSurface created a subsurface which is running over the
        parent surface boundaries.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawSurface): Calculated a intersection with
        expandedSrcRect and the parent surface size for subsurface size.

2019-09-16  Eric Liang  <ericliang@apple.com>

        AX: USER: VO: Messages > Message > Shift-VO-M doesn't reveal correct actions
        https://bugs.webkit.org/show_bug.cgi?id=201840

        Reviewed by Chris Fleizach.

        menuForEvent: expects event-position in window's space, but we pass the position in Core's space. In this case, we need to convert core's space to window's space.
        Tested that existing tests passed with WK1 and WK2

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):

2019-09-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support more than two FIDO protocol versions
        https://bugs.webkit.org/show_bug.cgi?id=198408
        <rdar://problem/51292176>

        Reviewed by Chris Dumez.

        Covered by new API tests.

        * Modules/webauthn/fido/DeviceResponseConverter.cpp:
        (fido::readCTAPGetInfoResponse):
        Remove the check for the array size.

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

        [FTW] Correct lifespan of other SharedBitmaps
        https://bugs.webkit.org/show_bug.cgi?id=201800

        Reviewed by Dean Jackson.

        The pop-up menu code creates its own SharedBitmap in the WebContent process,
        which needs to release its handle before destruction, otherwise the UIProcess
        will be unable to access the GPU texture (since it will have been cleaned up).

        This patch also audits other uses of SharedBitmap to make sure a similar
        problem doesn't exist elsewhere.

        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::toDXGIDevice): Switch to IDXGIDevice1 (since that is our
        minimum target DX).
        (WebCore::Direct2D::factoryForDXGIDevice): Ditto.
        (WebCore::Direct2D::swapChainOfSizeForWindowAndDevice): Added.
        * platform/graphics/win/Direct2DUtilities.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate): Correct
        a very silly use-after-move in the implementation.
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextDirect2D::d3dDevice const): Added.
        (WebCore::PlatformContextDirect2D::setD3DDevice):

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

        Simplify WebResourceLoadObserver now that we have one WebProcess per session
        https://bugs.webkit.org/show_bug.cgi?id=201821

        Reviewed by Brent Fulgham.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::statisticsForURL):
        * testing/Internals.cpp:
        (WebCore::Internals::resourceLoadStatisticsForURL):

2019-09-16  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Remove GraphicsContext3D dependency from the outside of WebGL
        https://bugs.webkit.org/show_bug.cgi?id=201748

        Reviewed by Alex Christensen.

        This is a preliminary change to bring ANGLE support for WebGL to GTK port.
        GraphicsContext3DANGLE has its own egl context but we want to make ANGLE egl context
        for WebGL and other GL contexts (i.e., glx, gles/egl) for TextureMapper live together.
        Mixed uses of GraphicsContext3D outside of WebGL code could cause unintended behaviors.
        We want to make sure that only WebGL code uses it.

        No new tests since no functionality changed.

        * platform/graphics/GLContext.cpp:
        * platform/graphics/GLContext.h:
        * platform/graphics/glx/GLContextGLX.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::platformLayerBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:

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

        [LFC] Make the nested Geometry/MarginCollapse/Quirks c'tors private.
        https://bugs.webkit.org/show_bug.cgi?id=201825
        <rdar://problem/55403474>

        Reviewed by Antti Koivisto.

        The Geometry/MarginCollapse/Quirks objects should be constructed through the corresponding accessor functions.
        This is also a preparation for being able to pass the layout box in to these stack objects and call geometry(layoutBox)->outOfFlowVerticalGeometry() vs. geometry()->outOfFlowVerticalGeometry(layoutBox). 

        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/tableformatting/TableFormattingContext.h:

2019-09-16  Jon Davis  <jond@apple.com>

        Update feature status for Battery Status API, WebGL 2, and Dialog Element
        https://bugs.webkit.org/show_bug.cgi?id=201469

        Reviewed by Joseph Pecoraro.

        * features.json:

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

        Rename [WebAccessibilityObjectWrapper _accessibilityInsertText] to accessibilityInsertText to match accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=201820

        Reviewed by Chris Fleizach.

        No new tests necessary since this is a method rename.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):
        (-[WebAccessibilityObjectWrapper _accessibilityInsertText:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):
        (-[WebAccessibilityObjectWrapper _accessibilityInsertText:]): Deleted.

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

        [LFC] Always provide a containing block width value to compute* functions.
        https://bugs.webkit.org/show_bug.cgi?id=201809
        <rdar://problem/55383153>

        Reviewed by Antti Koivisto.

        The caller can always make a more informative decision about the default value when the containing block width is not available.
        (Currently the only case is when computing the preferred width.)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding const):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const):
        * layout/LayoutUnits.h:
        (WebCore::Layout::UsedHorizontalValues::UsedHorizontalValues):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

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

        [LFC][BFC] BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin should not read containing block's width
        https://bugs.webkit.org/show_bug.cgi?id=201807
        <rdar://problem/55381342>

        Reviewed by Antti Koivisto.

        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):

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

        Eliminate separate simple line layout path from TextIterator
        https://bugs.webkit.org/show_bug.cgi?id=201760

        Reviewed by Zalan Bujtas.

        Use the new line layout iterator to implement linebox traversal in TextIterator.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):

        InlineTextBox* -> LineLayoutInterface::TextBoxIterator
        Delete the seperate simple line layout path.

        (WebCore::TextIterator::handleTextNodeFirstLetter):
        (WebCore::TextIterator::emitCharacter):
        (WebCore::TextIterator::emitText):
        * editing/TextIterator.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::write):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::resolver const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::inQuirksMode const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator== const):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::simpleRun const):

        Make RunResolver::Iterator copyable (so TextBoxIterator becomes copyable too).

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::findNextTextFragment):
        * rendering/line/LineLayoutInterfaceTextBoxes.cpp:
        (WebCore::LineLayoutInterface::TextBox::rect const):
        (WebCore::LineLayoutInterface::TextBox::logicalRect const):
        (WebCore::LineLayoutInterface::TextBox::hasHyphen const):
        (WebCore::LineLayoutInterface::TextBox::isLeftToRightDirection const):
        (WebCore::LineLayoutInterface::TextBox::dirOverride const):
        (WebCore::LineLayoutInterface::TextBox::text const):
        (WebCore::LineLayoutInterface::TextBox::localStartOffset const):
        (WebCore::LineLayoutInterface::TextBox::localEndOffset const):
        (WebCore::LineLayoutInterface::TextBox::length const):

        Add offset and length functions.

        (WebCore::LineLayoutInterface::TextBox::iterator const):
        (WebCore::LineLayoutInterface::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutInterface::TextBoxIterator::traverseNext):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator== const):
        (WebCore::LineLayoutInterface::TextBoxIterator::atEnd const):
        (WebCore::LineLayoutInterface::Provider::firstTextBoxFor):
        (WebCore::LineLayoutInterface::Provider::textBoxRangeFor):
        (WebCore::LineLayoutInterface::Provider::iteratorForInlineTextBox):

        Add Provider class for making iterators. It constructs and keeps SimpleLineLayout::Resolvers alive during traversal as needed.

        * rendering/line/LineLayoutInterfaceTextBoxes.h:
        (WebCore::LineLayoutInterface::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator bool const):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator== const):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator!= const):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator* const):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator-> const):

        Make TextBoxIterator privately inherit TextBox. This way we don't need to construct temporaries and can easily implement operator->.

        (WebCore::LineLayoutInterface::TextBoxRange::TextBoxRange):
        (WebCore::LineLayoutInterface::TextBoxRange::begin const):
        (WebCore::LineLayoutInterface::TextBoxRange::end const):

        Use separate end() type of C++17 ranges.

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

        Expose misspelling ranges for editable content to accessibility clients.
        https://bugs.webkit.org/show_bug.cgi?id=201752
        <rdar://problem/49556828>

        Reviewed by Chris Fleizach.

        Test: accessibility/misspelling-range.html

        Added [WebAccessibilityObjectWrapper misspellingTextMarkerRange] and
        underlying AccessibilityObject implementation to expose misspellings to
        accessibility clients that provide an alternative user interface to
        spell checking.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::getMisspellingRange const):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper misspellingTextMarkerRange:direction:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilityMisspellingSearchCriteriaForParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2019-09-15  Andy Estes  <aestes@apple.com>

        [WebIDL] Derived dictionaries should inherit their inherited dictionaries' partials
        https://bugs.webkit.org/show_bug.cgi?id=201802

        Reviewed by Sam Weinig.

        Prior to this change, a dictionary D that inherits from dictionary B would not inherit B's
        partial dictionaries. Fixed this by moving supplemental dependencies processing from
        generate-bindings.pl to CodeGenerator.pm and reusing it in GetDictionaryByType.

        Added new bindings tests.

        * bindings/scripts/CodeGenerator.pm:
        (new):
        (ProcessDocument):
        (ProcessSupplementalDependencies):
        (shouldPropertyBeExposed):
        (GetDictionaryByType):
        * bindings/scripts/generate-bindings.pl:
        (generateBindings):
        (shouldPropertyBeExposed): Deleted.
        * bindings/scripts/test/JS/JSTestDerivedDictionary.cpp: Added.
        (WebCore::convertDictionary<TestDerivedDictionary>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestDerivedDictionary.h: Added.
        * bindings/scripts/test/JS/JSTestInheritedDictionary.cpp: Added.
        (WebCore::convertDictionary<TestInheritedDictionary>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestInheritedDictionary.h: Added.
        * bindings/scripts/test/TestDerivedDictionary.idl: Added.
        * bindings/scripts/test/TestInheritedDictionary.idl: Added.
        * bindings/scripts/test/TestSupplemental.idl:

2019-09-15  David Kilzer  <ddkilzer@apple.com>

        Missing call to [self init] in -[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]
        <https://webkit.org/b/201806>

        Reviewed by Simon Fraser.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        Call [self init] and return early if the result is nil.

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

        [WebGPU] Make WebGPURenderPipeline and WebGPUComputePipeline inherit from GPUObjectBase
        https://bugs.webkit.org/show_bug.cgi?id=201207

        Reviewed by Dean Jackson.

        Make remaining WebGPU "client" classes manage their error scopes, instead of the internal classes.
        Matches Web/GPUBuffer, and allows "invalid" WebGPU objects to create errors.

        Covered by existing tests.

        * Modules/webgpu/WebGPUComputePipeline.cpp:
        (WebCore::WebGPUComputePipeline::create):
        (WebCore::WebGPUComputePipeline::WebGPUComputePipeline):
        * Modules/webgpu/WebGPUComputePipeline.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const):
        (WebCore::WebGPUDevice::createComputePipeline const):
        * Modules/webgpu/WebGPURenderPipeline.cpp:
        (WebCore::WebGPURenderPipeline::create):
        (WebCore::WebGPURenderPipeline::WebGPURenderPipeline):
        * Modules/webgpu/WebGPURenderPipeline.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUComputePipeline.h:
        * platform/graphics/gpu/GPURenderPipeline.h:
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):

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

        Retire x86 32bit JIT support
        https://bugs.webkit.org/show_bug.cgi?id=201790

        Reviewed by Mark Lam.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::callAndBranchOnBooleanReturnValue):
        (WebCore::FunctionCall::swapArguments):

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

        [LFC] FormattingContext::Geometry::inFlowPositionedPositionOffset should not read containing block's width
        https://bugs.webkit.org/show_bug.cgi?id=201797
        <rdar://problem/55366244>

        Reviewed by Antti Koivisto.

        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):

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

        [LFC] FormattingContext::Geometry::inlineReplacedHeightAndMargin should not read containing block's width
        https://bugs.webkit.org/show_bug.cgi?id=201796
        <rdar://problem/55366109>

        Reviewed by Antti Koivisto.

        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases const):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):

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

        [LFC] FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry should not read containing block's width.
        https://bugs.webkit.org/show_bug.cgi?id=201794
        <rdar://problem/55365669>

        Reviewed by Antti Koivisto.

        This is in preparation for using constraint values instead of querying the display tree for containing block geometry information.
        See webkit.org/b/201795

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const):

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

        newController may be moved several times under SWClientConnection::notifyClientsOfControllerChange()
        https://bugs.webkit.org/show_bug.cgi?id=201792
        <rdar://problem/55351284>

        Reviewed by Youenn Fablet.

        Stop WTFMove()'ing inside the for loop.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::notifyClientsOfControllerChange):

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

        [LFC] FormattingContext::Geometry::computedHeightValue should not read containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=201791
        <rdar://problem/55361695>

        Reviewed by Antti Koivisto.

        While sizing/positioning a particular box, we oftentimes need some containing block geometry information.
        The idea here is that instead of calling formattingContext().geometry(containingBlock), these constraint values
        would be pushed in to those compute* functions. It helps controlling the access to the display box tree and
        prevents formatting context escaping.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):

2019-09-11  Dean Jackson  <dino@apple.com>

        Provide a prototype for AR QuickLook to trigger processing in the originating page
        https://bugs.webkit.org/show_bug.cgi?id=201371
        <rdar://54904781>

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::dispatchSystemPreviewActionEvent): Create and dispatch a MessageEvent.
        * dom/Document.h:

        * html/HTMLAnchorElement.cpp: Send along the page and frame identifiers for this
        object to ensure that any reply goes to the correct place.
        (WebCore::HTMLAnchorElement::handleClick):

        * loader/FrameLoadRequest.h: Use the new SystemPreviewInfo type.
        (WebCore::FrameLoadRequest::isSystemPreview const):
        (WebCore::FrameLoadRequest::systemPreviewInfo const):
        (WebCore::FrameLoadRequest::systemPreviewRect const): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):

        * loader/FrameLoaderTypes.h: Provide encoders for the type.
        (WebCore::SystemPreviewInfo::encode const):
        (WebCore::SystemPreviewInfo::decode):

        * platform/network/ResourceRequestBase.cpp: Use the new type.
        (WebCore::ResourceRequestBase::isSystemPreview const):
        (WebCore::ResourceRequestBase::systemPreviewInfo const):
        (WebCore::ResourceRequestBase::setSystemPreviewInfo):
        (WebCore::ResourceRequestBase::setSystemPreview): Deleted.
        (WebCore::ResourceRequestBase::systemPreviewRect const): Deleted.
        (WebCore::ResourceRequestBase::setSystemPreviewRect): Deleted.
        * platform/network/ResourceRequestBase.h:

        * testing/Internals.cpp: Expose the frame and page identifiers to testing.
        (WebCore::Internals::frameIdentifier const):
        (WebCore::Internals::pageIdentifier const):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Crash under WebCore::firstPositionInNode()
        https://bugs.webkit.org/show_bug.cgi?id=201764
        <rdar://problem/54823754>

        Reviewed by Wenson Hsieh and Geoff Garen.

        Make sure to keep a Ref<> to the textNode when we call insertNodeAtTabSpanPosition()
        or insertNodeAt().

        Test: editing/firstPositionInNode-crash.html

        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::positionInsideTextNode):

2019-09-13  Youenn Fablet  <youenn@apple.com>

        Partition processes running service workers by session ID
        https://bugs.webkit.org/show_bug.cgi?id=201643

        Reviewed by Chris Dumez.

        Move the creation of service worker context connection management to SWServer.
        This allows to partition service worker context connections by registrable domain and sessionID.
        WebKit2 is still responsible to create the IPC creation through a Function given to SWServer at construction
        time.
        SWServer now keeps a map of registrable domain -> context connection to use for running workers.
        It also keeps a map of being-created connections.
        In case a context connection is removed from the SWServer, the SWServer will notify all related worker instances
        that they are not running. The SWServer will also recreate a context connection if needed.

        This allows removing the global server context connection map.
        Make SWServerToContextConnection no longer refcounted to simplify the lifetime management.

        Covered by API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::contextConnectionCreated):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::needsContextConnectionForRegistrableDomain const):
        (WebCore::SWServer::addContextConnection):
        (WebCore::SWServer::removeContextConnection):
        (WebCore::SWServer::createContextConnection):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::contextConnectionForRegistrableDomain):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextConnection):

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

        [LFC] Do not create FormattingContext unless the root has child boxes.
        https://bugs.webkit.org/show_bug.cgi?id=201766
        <rdar://problem/55344449>

        Reviewed by Antti Koivisto.

        Just because a box establishes a formatting context, it does not necessarily mean we need to create a formatting context object for it.
        The established formatting context is responsible for laying out the descendant content. The formatting context root itself is
        laid out in the formatting context it lives in. So if there's no descendent content, we don't need to construct the context objects.

        <body><div style="float: left;"></div></body> <- this div establishes a block formatting context (float) but it does not have any content so laying
        it out simply means sizing and positioning it in the initial block formatting context.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        (WebCore::Layout::FormattingContext::mapTopToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapLeftToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapRightToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::root const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutState::establishedFormattingState const):
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::createFormattingContext):
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::hasFormattingState const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const):
        * layout/floats/FloatingContext.h:
        (WebCore::Layout::FloatingContext::root const):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatingState):
        (WebCore::Layout::FloatingState::bottom const):
        (WebCore::Layout::FloatingState::top const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::create):
        (WebCore::Layout::FloatingState::root const):
        (WebCore::Layout::FloatingState::leftBottom const):
        (WebCore::Layout::FloatingState::rightBottom const):
        (WebCore::Layout::FloatingState::bottom const):
        (WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingRoot const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::TableFormattingContext):
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        * layout/tableformatting/TableFormattingContext.h:

2019-09-13  Ali Juma  <ajuma@chromium.org>

        IntersectionObserverEntry#intersectionRatio can be larger than 1
        https://bugs.webkit.org/show_bug.cgi?id=200776

        Reviewed by Simon Fraser.

        When computing the intersection between a target and an intersection observer's 
        root, RenderBox::computeVisibleRectInContainer is used to map the target rect
        up the containing block chain, clipping along the way. When a RenderBox has
        a transform, this method expands the given rect to the enclosing rect in device
        pixels. This is fine for the use case of computing an invalidation rect, but for
        the intersection observer use case it means that it is possible for the computed
        intersection rect to be slightly larger than the original target rect, resulting
        in an intersection ratio greater than 1.

        Fix this by performing a final intersection between the intersection rect as
        computed above and the target rect.

        Test: intersection-observer/intersection-clipped-to-target.html

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

2019-09-13  Nikolas Zimmermann  <zimmermann@kde.org>

        SMIL animations of SVG <view> element have no effect
        https://bugs.webkit.org/show_bug.cgi?id=94469

        Reviewed by Said Abou-Hallawa.

        SMIL animations of the attributes associated with SVGViewElement work fine, but without any
        visual effect. When loading an SVG document with a given fragment identifier
        (e.g. test.svg#customView) where 'customView' references to an embedded SVGViewElement, the
        viewBox/preserveAspectRatio settings should be taken from the SVGViewElement. Currently
        there is no link between the SVGViewElement and the SVGSVGElement. The settings from the
        SVGViewElement are only pasrsed onco in SVGSVGElement::scrollToFragment(). Dynamic updates
        of the 'viewBox' and 'preserveAspectRatio' attributes of the SVGViewElement thus have no
        visual effect, since the SVGSVGElement does not re-evaluates its viewBox.

        Store a RefPtr to the currently used SVGViewElement in SVGSVGElement, and a WeakPtr back
        to the SVGSVGElement that currently references the SVGViewElement. This allows us to
        propagate SVGViewElement attribute changes to SVGSVGElement and re-evaluate the viewBox
        stored in SVGSVGElement and trigger visual updates.

        Tests: svg/custom/animation-on-view-element.html
               svg/custom/multiple-view-elements.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::scrollToFragment):
        * svg/SVGSVGElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::svgAttributeChanged): Add missing implementation, tracked by
        webkit.org/b/196554. Correctly handle SVGFitToViewBox property changes. Update the viewBox
        stored in the SVGSVGElement, that references the SVGViewElement. Afterwards invalidate the
        renderer associated with the SVGSVGElement, which properly triggers visual updates.
        * svg/SVGViewElement.h:

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

        [FTW] ImageBuffer/ImageBufferData is highly inefficient
        https://bugs.webkit.org/show_bug.cgi?id=201594

        Reviewed by Said Abou-Hallawa.

        My initial implementation of ImageBuffer and ImageBufferData for Direct2D involves too
        much moving of data from GPU to CPU and back. We only need to make a renderable version
        of the ImageBuffer when ImageBuffer::sinkIntoNativeImage or ImageBuffer::copyNativeImage
        are called.

        Currently, each ImageBuffer putData operation uploads the data to the GPU, and each
        ImageBuffer getData pulls the data from the GPU.

        This patch does the following:

        1. It makes the assumption that the ID2D1Bitmap it holds is under its control (i.e.,
           external draw operations do not manipulate the bitmap without marking it dirty).
        2. It holds a CPU copy of the data from the ID2D1Bitmap originally used to create it.
           It uses this data for all manipulations, and uploads to the bitmap only when
           an ID2D1Bitmap is requested for drawing, and before a drawing operation is performed
           on the associated ImageBuffer context.
        3. It does not read back from the ID2D1Bitmap unless it is told that it is dirty.
        4. It does not call 'ID2D1RenderTarget::SetTags' if ASSERTS are disabled because
           they are costly, and don't help in release builds.
 
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::fillRect): Use new 'setTags' method.
        (WebCore::Direct2D::fillRoundedRect): Ditto.
        (WebCore::Direct2D::fillRectWithRoundedHole): Ditto.
        (WebCore::Direct2D::fillRectWithGradient): Ditto.
        (WebCore::Direct2D::fillPath): Ditto.
        (WebCore::Direct2D::strokeRect): Ditto.
        (WebCore::Direct2D::strokePath): Ditto.
        (WebCore::Direct2D::drawPath): Ditto.
        (WebCore::Direct2D::drawWithShadow): Notify observers before and after we drew.
        (WebCore::Direct2D::drawWithoutShadow): Ditto.
        (WebCore::Direct2D::clearRect): Use new 'setTags' method.
        (WebCore::Direct2D::drawGlyphs): Ditto.
        (WebCore::Direct2D::drawNativeImage): Ditto.
        (WebCore::Direct2D::drawRect): Ditto.
        (WebCore::Direct2D::drawLine): Ditto.
        (WebCore::Direct2D::fillEllipse): Ditto.
        (WebCore::Direct2D::drawEllipse): Ditto.
        (WebCore::Direct2D::flush): Notify observer after we drew.
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::fill): Don't call SetTags in non-ASSERT builds.
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::ensureBackingStore const): Added.
        (WebCore::ImageBufferData::getData const): Only read from the GPU if the in-memory
        store is empty or out-of-sync.
        (WebCore::ImageBufferData::putData): Mark the bitmap as out-of-sync, but don't
        upload the data yet.
        (WebCore::ImageBufferData::loadDataToBitmapIfNeeded): Helper function to upload data to the GPU.
        (WebCore::ImageBufferData::compatibleBitmap): Only upload data if the relevant
        bitmap is out of date.
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Update constructor to register the ImageBufferData
        lambdas as observer for draw operations.
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::PlatformContextDirect2D): Update constructor to accept
        lambdas to run before and after draw operations.
        (WebCore::PlatformContextDirect2D::setTags): Added.
        (WebCore::PlatformContextDirect2D::notifyPreDrawObserver): Added.
        (WebCore::PlatformContextDirect2D::notifyPostDrawObserver): Added.
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextDirect2D::PlatformContextDirect2D):

2019-09-13  Russell Epstein  <repstein@apple.com>

        Unreviewed, rolling out r249709.

        Layout test added in this patch has been consistently failing
        since it landed.

        Reverted changeset:

        "Option + arrow moves caret past whitespace on iOS"
        https://bugs.webkit.org/show_bug.cgi?id=201575
        https://trac.webkit.org/changeset/249709

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

        [LFC] Rename FormattingContext::layout to layoutInFlowContent()
        https://bugs.webkit.org/show_bug.cgi?id=201763
        <rdar://problem/55340435>

        Reviewed by Antti Koivisto.

        FormattingContext::layout() only takes care of the inflow content. Out-out-flow boxes are laid out through FormattingContext::layoutOutOfFlowContent.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/FormattingContext.h:
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::BlockFormattingContext::layout): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::layout): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        (WebCore::Layout::TableFormattingContext::layout): Deleted.
        * layout/tableformatting/TableFormattingContext.h:

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

        [LFC] FormattingContext::displayBoxForLayoutBox should be split into 2 functions
        https://bugs.webkit.org/show_bug.cgi?id=201754
        <rdar://problem/55328753>

        Reviewed by Antti Koivisto.

        1. FormattingContext::geometryForBox() returns a const Display::Box. Use this function to access
        already computed geometry such as the containing block's content box width.
        This function can escape the current formatting context in certain cases and read geometry from parent/ancestor formatting contexts. 
        2. FormattingState::displayBox() returns a non-const version of the Display::Box. Use this function to
        create/get the display box of a particular layout box to set computed values. This call should never escape the
        current formatting context (as no one should mutate ancestor boxes).
        
        Normally while laying out a particular box, we need to collect some geometry information from other boxes in the tree like previous sibling, containing block.
        <div style="width: 100px"><div></div></div> <- the inner div's used width is based on the outer div's width. 
        However we should never mutate the geometry information on those other boxes (outer div). This patch helps avoiding accidental mutation on ancestors by
        returning a const version of the Display::Box.  

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        (WebCore::Layout::mapHorizontalPositionToAncestor):
        (WebCore::Layout::FormattingContext::mapTopToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapLeftToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapRightToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::geometryForBox const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        (WebCore::Layout::FormattingContext::displayBoxForLayoutBox const): Deleted.
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::hasDisplayBox const): Deleted.
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::displayBox const):
        * layout/FormattingState.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::hasClearance const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues):
        (WebCore::Layout::hasClearance): Deleted.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::absoluteDisplayBoxCoordinates const):
        (WebCore::Layout::FloatingContext::mapToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapTopToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapPointFromFormattingContextRootToFloatingStateRoot const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::isInlineContainerConsideredEmpty):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout):
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        (WebCore::Layout::TableFormattingContext::positionTableCells):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::computedTableWidth):

2019-09-13  Youenn Fablet  <youenn@apple.com>

        Use WebProcess processIdentifier to identify Service Worker connections
        https://bugs.webkit.org/show_bug.cgi?id=201459

        Reviewed by Chris Dumez.

        No observable change of behavior.

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        Pass sessionID to ease NetworkProcess selection of the client process connection.
        * workers/service/ServiceWorkerTypes.h:
        Mark server connection identifier be process identifier based.
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        * workers/service/server/SWServer.h:
        Let connection identifier be set in constructor instead of generated.

2019-09-13  Adrian Perez de Castro  <aperez@igalia.com>

        Factor out duplicated functions from HTTPParsers.cpp and HTTPHeaderField.cpp
        https://bugs.webkit.org/show_bug.cgi?id=201721

        Reviewed by Don Olmstead.

        No new tests needed.

        * loader/HTTPHeaderField.cpp: Remove "static" from prototypes of functions needed in HTTPParsers.cpp.
        (WebCore::RFC7230::isDelimiter):
        (WebCore::RFC7230::isQuotedPairSecondOctet):
        (WebCore::RFC7230::isCommentText):
        * loader/HTTPHeaderField.h: Add prototypes of functions needed in HTTPParsers.cpp.
        * platform/network/HTTPParsers.cpp: Use functionality from WebCore::RFC7230 where possible.
        (WebCore::skipWhile): Moved to allow implementing skipWhiteSpace() in terms of skipWhile().
        (WebCore::skipWhiteSpace): Implement using skipWhile() and the RFC7230::isWhitespace() predicate.
        (WebCore::isValidAcceptHeaderValue): Replace usage of isDelimiterCharacter() with RFC7230::isDelimiter().
        (WebCore::isValidHTTPToken): Replace usage of isHTTPTokenCharacter() with RFC7230::isTokenCharacter().
        (WebCore::skipQuotedPair): Partially reimplement in terms of RFC7230::isQuotedPairSecondOctet().
        (WebCore::skipComment): Replace usage of isCommentTextCharacter() with RFC7230::isCommentText().
        (WebCore::skipHTTPToken): Replace usage of isHTTPTokenCharacter() with RFC7230::isTokenCharacter().

2019-09-12  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed debug build fix for GLib-based ports.

        * platform/glib/UserAgentGLib.cpp: Add the HTTPParsers.h header
        inclusion to bring in the isValidUserAgentHeaderValue() declaration as
        required for an assertion check.

2019-09-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVGLengthValue should use two enums for 'type' and 'mode' instead of one unsigned for 'units'
        https://bugs.webkit.org/show_bug.cgi?id=201663

        Reviewed by Simon Fraser, Nikolas Zimmermann.

        SVGLengthValue had one unsigned to store SVGLengthMode and SVGLengthType.
        It used to allocate the least significant 4 bits of this unsigned to the
        SVGLengthMode while it leaves the rest for SVGLengthType.

        This will not be needed if SVGLengthMode and SVGLengthType are made of
        size uint_8.

        Also in this patch:

        -- SVGLengthNegativeValuesMode is made enum class.

        -- SVGLengthValue::blend() is moved to SVGLengthValue.cpp so we do not
           need to include SVGLengthContext.h in SVGLengthValue.h.

        -- SVGLengthType and SVGLengthMode are moved to SVGLengthValue.h. Instead
           of having SVGLengthValue.h includes SVGLengthConttext.h, the opposite
           will happen.

        -- SVGAnimatedPropertyDescription.h is deleted. It should have been deleted
           with the SVG tear off objects removal.

        -- SVGPropertyTraits<SVGAngleValue> and SVGPropertyTraits<SVGLengthValue>
           are deleted. They should have been deleted with SVGAnimatedType removal.

        -- SVGLengthValue::lengthModeForAnimatedLengthAttribute() is deleted. It
           was only called from SVGPropertyTraits<SVGLengthValue>.

        * WebCore.xcodeproj/project.pbxproj:
        * css/StyleResolver.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::calculateRadiiAndCenter):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::pathFromCircleElement):
        (WebCore::pathFromEllipseElement):
        (WebCore::pathFromRectElement):
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift const):
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        (WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
        * svg/LinearGradientAttributes.h:
        (WebCore::LinearGradientAttributes::LinearGradientAttributes):
        * svg/RadialGradientAttributes.h:
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        * svg/SVGAngleValue.h:
        (WebCore::SVGPropertyTraits<SVGAngleValue>::initialValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGAngleValue>::toString): Deleted.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::parseAttribute):
        * svg/SVGCircleElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::parseAttribute):
        * svg/SVGCursorElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::parseAttribute):
        * svg/SVGEllipseElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::parseAttribute):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::parseAttribute):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGImageElement.h:
        * svg/SVGLength.h:
        (WebCore::SVGLength::unitType const):
        (WebCore::SVGLength::setValueForBindings):
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):
        (WebCore::SVGLength::unitType): Deleted.
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::valueForLength):
        (WebCore::SVGLengthContext::convertValueToUserUnits const):
        (WebCore::SVGLengthContext::convertValueFromUserUnits const):
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage const):
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits const):
        * svg/SVGLengthContext.h:
        (): Deleted.
        * svg/SVGLengthList.h:
        (WebCore::SVGLengthList::create):
        * svg/SVGLengthValue.cpp:
        (WebCore::lengthTypeToString):
        (WebCore::parseLengthType):
        (WebCore::primitiveTypeToLengthType):
        (WebCore::lengthTypeToPrimitiveType):
        (WebCore::SVGLengthValue::SVGLengthValue):
        (WebCore::SVGLengthValue::construct):
        (WebCore::SVGLengthValue::blend):
        (WebCore::SVGLengthValue::fromCSSPrimitiveValue):
        (WebCore::SVGLengthValue::toCSSPrimitiveValue):
        (WebCore::SVGLengthValue::setValueAsString):
        (WebCore::SVGLengthValue::valueAsString const):
        (WebCore::SVGLengthValue::valueForBindings const):
        (WebCore::SVGLengthValue::setValue):
        (WebCore::SVGLengthValue::convertToSpecifiedUnits):
        (WebCore::storeUnit): Deleted.
        (WebCore::extractMode): Deleted.
        (WebCore::extractType): Deleted.
        (WebCore::SVGLengthValue::operator== const): Deleted.
        (WebCore::SVGLengthValue::operator!= const): Deleted.
        (WebCore::SVGLengthValue::unitType const): Deleted.
        (WebCore::SVGLengthValue::unitMode const): Deleted.
        (WebCore::SVGLengthValue::valueAsPercentage const): Deleted.
        (WebCore::SVGLengthValue::newValueSpecifiedUnits): Deleted.
        (WebCore::SVGLengthValue::lengthModeForAnimatedLengthAttribute): Deleted.
        * svg/SVGLengthValue.h:
        (WebCore::SVGLengthValue::lengthType const):
        (WebCore::SVGLengthValue::lengthMode const):
        (WebCore::SVGLengthValue::isZero const):
        (WebCore::SVGLengthValue::isRelative const):
        (WebCore::SVGLengthValue::valueAsPercentage const):
        (WebCore::SVGLengthValue::valueInSpecifiedUnits const):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::SVGLengthValue::blend const): Deleted.
        (WebCore::SVGPropertyTraits<SVGLengthValue>::initialValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGLengthValue>::parse): Deleted.
        (WebCore::SVGPropertyTraits<SVGLengthValue>::toString): Deleted.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::parseAttribute):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::parseAttribute):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseAttribute):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::parseAttribute):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseAttribute):
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::parseAttribute):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::parseAttribute):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::hasIntrinsicWidth const):
        (WebCore::SVGSVGElement::hasIntrinsicHeight const):
        (WebCore::SVGSVGElement::intrinsicWidth const):
        (WebCore::SVGSVGElement::intrinsicHeight const):
        * svg/SVGSVGElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::parseAttribute):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::parseAttribute):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::parseAttribute):
        * svg/SVGUseElement.h:
        * svg/properties/SVGAnimatedPropertyAccessorImpl.h:
        * svg/properties/SVGAnimatedPropertyDescription.h: Removed.
        * svg/properties/SVGAnimationAdditiveListFunctionImpl.h:
        (WebCore::SVGAnimationLengthListFunction::animate):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationLengthFunction::animate):
        * svg/properties/SVGValuePropertyAnimatorImpl.h:
        * svg/properties/SVGValuePropertyListAnimatorImpl.h:

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

        Node.replaceChild()'s pre-replacement validations are not done in the right order
        https://bugs.webkit.org/show_bug.cgi?id=201741

        Reviewed by Geoffrey Garen.

        Node.replaceChild()'s pre-replacement validations are not done in the right order (spec order):
        - https://dom.spec.whatwg.org/#concept-node-replace

        In particular, we do not do check 3 (If child’s parent is not parent, then throw a
        "NotFoundError" DOMException.) at the right time, because we were making this check
        *after* checkPreReplacementValidity(), instead of *during*.

        No new tests, rebaselined existing test.

        * dom/ContainerNode.cpp:
        (WebCore::checkAcceptChild):
        (WebCore::ContainerNode::ensurePreInsertionValidity):
        (WebCore::checkPreReplacementValidity):
        (WebCore::ContainerNode::replaceChild):

2019-09-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249801.

        Caused two servier worker layout tests to become flaky.

        Reverted changeset:

        "Use WebProcess processIdentifier to identify Service Worker
        connections"
        https://bugs.webkit.org/show_bug.cgi?id=201459
        https://trac.webkit.org/changeset/249801

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

        [WKTR] Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED()
        https://bugs.webkit.org/show_bug.cgi?id=201546

        Reviewed by Alex Christensen.

        Drop TestRunner.setPrivateBrowsingEnabled_DEPRECATED() from WebKitTestRunner as it does not do
        the right thing for WebKit2 and tests have been rewritten to not use it.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::setSessionIDForTesting): Deleted.
        * page/PageGroup.h:
        (): Deleted.

2019-09-12  Saam Barati  <sbarati@apple.com>

        [WHLSL] Slim down WSLMatrix and inline constructors in native code
        https://bugs.webkit.org/show_bug.cgi?id=201568

        Reviewed by Robin Morisset.

        Before, our WSL Matrix in MSL had templates to figure out how we're 
        constructing it. For example, with a list of elements, or a list of
        columns. However, we can remove this template code since when we're
        emitting Metal code, we know exactly how we're constructing the WSL
        matrix. So the NativeFunctionWriter now inlines the proper stores
        into the WSLMatrix elements.
        
        This patch speeds up Metal compile times in boids by ~4ms (16%) with
        a p-value of 0.0001.

        Covered by existing tests.

        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:
        (WebCore::WHLSL::Metal::metalCodePrologue):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):

2019-09-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Text indicator for an image link on the front page of apple.com looks wrong
        https://bugs.webkit.org/show_bug.cgi?id=201724
        <rdar://problem/54622894>

        Reviewed by Tim Horton.

        When computing the bounds of the range (<a>, 0) to (<a>, 1) for a text indicator snapshot where <a> is a link
        with a single non-breaking whitespace character, we currently use the text rect of the single space. This leads
        to a confusing text indicator, as the resulting snapshot is a tiny blank square in the top left corner of the
        link. This problem manifests when starting a drag or showing the system context menu on iOS, or force clicking
        or three-finger tapping to show a preview on macOS.

        To address this scenario, tweak the heuristic in the case where the text indicator option
        TextIndicatorOptionUseBoundingRectAndPaintAllContentForComplexRanges is specified, such that we consider a range
        containing only text with whitespaces to be "complex"; additionally, instead of falling back to the range's
        bounding rect (which in this case is still tiny), fall back to the common ancestor container's bounding rect,
        which encompasses not only the text inside the range but also the element containing the range (in this case,
        the anchor element).

        Test: fast/text-indicator/text-indicator-empty-link.html

        * page/TextIndicator.cpp:
        (WebCore::containsOnlyWhiteSpaceText):

        Add a helper to determine whether a Range is comprised only of rendered text that only contains whitespace
        characters.

        (WebCore::initializeIndicator):

        See ChangeLog entry above for more detail.

2019-09-12  Brady Eidson  <beidson@apple.com>

        PDF exporting on iOS should include URL rects.
        <rdar://problem/54900133> and https://bugs.webkit.org/show_bug.cgi?id=201693

        Reviewed by Tim Horton.

        Turns out that PDF exporting on iOS works fine.

        Tracking back through history it was disabled at least pre-2014.

        It was almost certainly disabled because it didn't work way back then,
        but it works great now.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setURLForRect): Remove the iOS platform exclusion.

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

        [GTK][WPE] webkit_settings_set_user_agent() allows content forbidden in HTTP headers
        https://bugs.webkit.org/show_bug.cgi?id=201077

        Reviewed by Carlos Garcia Campos.

        Add a function to validate whether a string contains a valid value
        which can be used in a HTTP User-Agent header.

        Covered by new WebCore API test HTTPParsers.ValidateUserAgentValues.

        * platform/glib/UserAgentGLib.cpp:
        (WebCore::standardUserAgent): Assert that the returned string is a valid User-Agent.
        (WebCore::standardUserAgentForURL): Ditto.
        * platform/network/HTTPParsers.cpp: Added a series of helper functions which skip over
        characters of a string, which can be used to scan over the different elements of an
        User-Agent value; all of them receive the position from the input string where to start
        scanning, updating it to the position right after the scanned item (this follow the
        convention already in use by other functions in the source file). Each of them has
        been annotated with the RFC number and section which contains the definition of the
        scanned item, and the corresponding BNF rules to make the code easier to follow.
        (WebCore::skipWhile): Added.
        (WebCore::isVisibleCharacter): Added.
        (WebCore::isOctectInFieldContentCharacter): Added.
        (WebCore::isCommentTextCharacter): Added.
        (WebCore::isHTTPTokenCharacter): Added.
        (WebCore::isValidHTTPToken): Refactored to use the new isHTTPTokenCharacter()
        helper function instead of having the test inside the loop.
        (WebCore::skipCharacter): Added.
        (WebCore::skipQuotedPair): Added.
        (WebCore::skipComment): Added.
        (WebCore::skipHTTPToken): Added.
        (WebCore::skipUserAgentProduct): Added.
        (WebCore::isValidUserAgentHeaderValue): Added.
        * platform/network/HTTPParsers.h: Add prototype for isValidUserAgentHeaderValue().

2019-09-12  Mark Lam  <mark.lam@apple.com>

        Harden JSC against the abuse of runtime options.
        https://bugs.webkit.org/show_bug.cgi?id=201597
        <rdar://problem/55167068>

        Reviewed by Filip Pizlo.

        No new tests.  Covered by existing tests.

        Enable Options::useDollarVM before we tell the JSGlobalObject to exposeDollarVM().
        The $vm utility is now hardened to require that Options::useDollarVM be
        enabled in order for it to be used.

        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

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

        Use typed identifiers for IDB connection identifiers
        https://bugs.webkit.org/show_bug.cgi?id=201682

        Reviewed by Chris Dumez.

        Migrate from uint64_t to a typed identifier for IDB connection identifiers.
        The identifier is reusing the process identifier type.
        No change of behavior.

        * Modules/indexeddb/client/IDBConnectionProxy.h:
        (WebCore::IDBClient::IDBConnectionProxy::serverConnectionIdentifier const):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::identifier const):
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::identifier const):
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllDatabaseNames):
        (WebCore::IDBServer::IDBServer::performGetAllDatabaseNames):
        (WebCore::IDBServer::IDBServer::didGetAllDatabaseNames):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::serverConnectionIdentifier const):
        * Modules/indexeddb/shared/IDBRequestData.h:
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
        (WebCore::IDBResourceIdentifier::emptyValue):
        (WebCore::IDBResourceIdentifier::deletedValue):
        (WebCore::IDBResourceIdentifier::isHashTableDeletedValue const):
        (WebCore::IDBResourceIdentifier::loggingString const):
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        (WebCore::IDBResourceIdentifier::hash const):
        (WebCore::IDBResourceIdentifier::connectionIdentifier const):
        (WTF::crossThreadCopy):
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::identifier const):
        * Modules/indexeddb/shared/InProcessIDBServer.h:

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

        Use WebProcess processIdentifier to identify Service Worker connections
        https://bugs.webkit.org/show_bug.cgi?id=201459

        Reviewed by Chris Dumez.

        No observable change of behavior.

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):
        Pass sessionID to ease NetworkProcess selection of the client process connection.
        * workers/service/ServiceWorkerTypes.h:
        Mark server connection identifier be process identifier based.
        * workers/service/context/SWContextManager.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        * workers/service/server/SWServer.h:
        Let connection identifier be set in constructor instead of generated.

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

        Disable DTLS1.0
        https://bugs.webkit.org/show_bug.cgi?id=201679

        Reviewed by Alex Christensen.

        Add an option to force to use DTLS1.0 and nothing else.
        Add internals API to enter in that mode to verify that normal configurations cannot communicate with DTLS1.0.

        Test: webrtc/datachannel/dtls10.html

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::setEnableWebRTCEncryption):
        (WebCore::LibWebRTCProvider::setUseDTLS10):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setUseDTLS10):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-09-11  Keith Rollin  <krollin@apple.com>

        Log timeoutValue passed on to CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=201701
        <rdar://problem/55279683>

        Reviewed by Chris Dumez.

        Export ResourceRequest::timeoutValue for use in WebKit.

        No new tests -- no new or changed functionality.

        * platform/network/ResourceRequestBase.h:

2019-09-11  Saam Barati  <sbarati@apple.com>

        [WHLSL] Remove null from the standard library
        https://bugs.webkit.org/show_bug.cgi?id=201672

        Reviewed by Robin Morisset.

        I meant to remove `null` from the standard library in r249351, but
        I had omitted the code I wrote to do that when I rebased that patch.
        This patch removes it and ensures all tests pass when parsing the entire
        standard library.

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        Use same parser for <meta http-equiv="refresh"> and `Refresh` HTTP header
        https://bugs.webkit.org/show_bug.cgi?id=201694

        Reviewed by Alex Christensen.

        Use same parser for <meta http-equiv="refresh"> and `Refresh` HTTP header. This aligns
        our behavior with Blink and makes us more compliant on web-platform-tests. This also
        simplifies our code.

        No new tests, rebaselined existing test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRefresh): Deleted.
        * platform/network/HTTPParsers.h:

2019-09-11  Saam Barati  <sbarati@apple.com>

        [WHLSL] Ensure structs/arrays with pointers as fields are disallowed
        https://bugs.webkit.org/show_bug.cgi?id=201525

        Reviewed by Robin Morisset.

        This patch adds a pass which both ensures that references are always initialized with
        concrete values and that we support logical mode validation by disallowing nested references.
        
        Specifically, the pass:
        
        1. Disallows structs to have fields which are references. This prevents us from having to
        figure out how to default initialize such a struct. We could relax this in the future if we
        did an analysis on which structs contain reference fields, and ensure such struct variables
        always have initializers. This would also require us to create constructors for structs which
        initialize each field.
        2. We also do the same for arrays.
        3. References can only be one level deep. So no pointers to pointers. No references to
        references, etc. This is to support logical mode validation rules.

        Test: webgpu/whlsl/ensure-proper-pointer-usage.html

        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.cpp: Added.
        (WebCore::WHLSL::checkReferenceTypes):
        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.h: Added.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Web Inspector: Canvas: instrument WebGPUDevice instead of GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=201650

        Reviewed by Joseph Pecoraro.

        Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`.

        A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even
        required (e.g. compute pipeline).  We should treat the `GPUCanvasContext` almost like a
        `-webkit-canvas` client of a `WebGPUDevice`.

        Tests: inspector/canvas/create-context-webgpu.html
               inspector/canvas/requestClientNodes-webgpu.html
               inspector/canvas/resolveContext-webgpu.html

        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::requestDevice const):
        Notify web inspector after a device is created.

        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::instances): Added.
        (WebCore::WebGPUDevice::instancesMutex): Added.
        (WebCore::WebGPUDevice::~WebGPUDevice): Added.
        Notify web inspector when the device is about to be destructed.

        * Modules/webgpu/GPUCanvasContext.h:
        * Modules/webgpu/GPUCanvasContext.cpp:
        (WebCore::GPUCanvasContext::create):
        (WebCore::GPUCanvasContext::configureSwapChain):

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::canvasIfContextMatchesDevice): Added.
        (WebCore::InspectorCanvas::create):
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::canvasContext const): Added.
        (WebCore::InspectorCanvas::canvasElement const): Added.
        (WebCore::InspectorCanvas::isDeviceForCanvasContext const): Added.
        (WebCore::InspectorCanvas::deviceContext const): Added.
        (WebCore::InspectorCanvas::scriptExecutionContext const): Added.
        (WebCore::InspectorCanvas::resolveContext const): Added.
        (WebCore::InspectorCanvas::clientNodes const): Added.
        (WebCore::InspectorCanvas::canvasChanged):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::releaseObjectForRecording):
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::canvasElement): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Added.
        (WebCore::InspectorInstrumentation::willConfigureSwapChainImpl): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDevice): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDevice): Added.
        (WebCore::InspectorInstrumentation::willConfigureSwapChain): Added.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::requestClientNodes): Added.
        (WebCore::InspectorCanvasAgent::resolveContext): Added.
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Added.
        (WebCore::InspectorCanvasAgent::willConfigureSwapChain): Added.
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::bindCanvas):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes): Deleted.
        (WebCore::contextAsScriptValue): Deleted.
        (WebCore::InspectorCanvasAgent::resolveCanvasContext): Deleted.

        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::context const):

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

        Posting a message to a redundant service worker should fail silently instead of throwing
        https://bugs.webkit.org/show_bug.cgi?id=201696

        Reviewed by Geoffrey Garen.

        Posting a message to a redundant service worker should fail silently instead of throwing:
        - https://w3c.github.io/ServiceWorker/#dom-serviceworker-postmessage-message-options
        - https://w3c.github.io/ServiceWorker/#run-service-worker (step 2)

        No new tests, rebaselined existing test.

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::runServiceWorkerIfNecessary):

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

        Align our XPath API with the specification and other browsers
        https://bugs.webkit.org/show_bug.cgi?id=201660

        Reviewed by Geoffrey Garen.

        Align our XPath API with the specification and other browsers:
        - Document/XPathEvaluator.createExpression()'s first parameter should be mandatory
        - Document/XPathEvaluator.evaluate()'s first 2 parameters should be mandatory
        - XPathExpression.evaluate()'s first parameter should be mandatory

        I have confirmed in the latest Chrome and Firefox that they match the specification.
        
        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::evaluate):
        * dom/Document.h:
        * dom/Document.idl:
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        * xml/XPathEvaluator.cpp:
        (WebCore::XPathEvaluator::evaluate):
        * xml/XPathEvaluator.h:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.cpp:
        (WebCore::XPathExpression::evaluate):
        * xml/XPathExpression.h:
        * xml/XPathExpression.idl:
        * xml/XPathUtil.cpp:
        (WebCore::XPath::isValidContextNode):
        * xml/XPathUtil.h:

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

        REGRESSION (iOS 13): Top fixed element on apple.com flickers in size while pinching in
        https://bugs.webkit.org/show_bug.cgi?id=201668
        rdar://problem/51934041

        Reviewed by Frédéric Wang.

        When computing the new layout viewport rect in ScrollingTreeFrameScrollingNode, use
        "StickToDocumentBounds" mode, not "StickToViewportBounds", because otherwise we'll compute
        a layout viewport that has negative top/left offsets which causes fixed elements to jump outside
        the viewport. The only code that should be moving things outside the viewport (a temporary effect
        that happens when pinching) is the 'isBelowMinimumScale' path in WebPageProxy::computeCustomFixedPositionRect().

        With this change ScrollingTreeFrameScrollingNode no longer needs m_behaviorForFixed; it can be removed later.

        Not currently testable, since it involves pinching in past minimum zoom and transients state.

        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition const):

2019-09-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r249753.

        caused inspector/canvas/shaderProgram-add-remove-webgl.html to
        crash on all Mac platforms.

        Reverted changeset:

        "Web Inspector: Canvas: instrument WebGPUDevice instead of
        GPUCanvasContext"
        https://bugs.webkit.org/show_bug.cgi?id=201650
        https://trac.webkit.org/changeset/249753

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

        REGRESSION (245006): can't scroll in "read more" view in Eventbrite app
        https://bugs.webkit.org/show_bug.cgi?id=201683
        <rdar://problem/54582602>

        Reviewed by Simon Fraser.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isEventbrite):

2019-09-11  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249758.

        Breaks the watchOS build.

        Reverted changeset:

        "[WHLSL] Ensure structs/arrays with pointers as fields are
        disallowed"
        https://bugs.webkit.org/show_bug.cgi?id=201525
        https://trac.webkit.org/changeset/249758

2019-09-11  Ali Juma  <ajuma@chromium.org>

        Prevent reentrancy FrameLoader::dispatchUnloadEvents()
        https://bugs.webkit.org/show_bug.cgi?id=200738

        Reviewed by Brady Eidson.

        Reentrancy causes m_pageDismissalEventBeingDispatched to be incorrectly
        updated, so don't allow reentrancy.

        Since this prevents m_pageDismissalEventBeingDispatched from being reset
        inside a reentrant call, it can have the unintended effect of causing
        FrameLoader::stopAllLoaders to early-out when called from
        FrameLoader::detachFromParent while a frame's unload event handler
        calls document.open() on a parent frame and causes itself to become
        detached. Allowing a load to continue in a detached frame will lead to
        a crash. To prevent this, add a new argument to FrameLoader::stopAllLoaders
        that FrameLoader::detachFromParent can use to prevent an early-out.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopAllLoaders):
        (WebCore::FrameLoader::detachFromParent):
        (WebCore::FrameLoader::dispatchUnloadEvents):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):
        Ensure that m_pageDismissalEventBeingDispatched is reset to its previous value, even if this is not None.
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        Add a StopLoadingPolicy enum.

2019-09-11  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Do not adopt floating references.
        https://bugs.webkit.org/show_bug.cgi?id=201685

        Reviewed by Carlos Garcia Campos.

        Covered by existing tests.

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer): gst_element_factory_make returns
        floating references, you do not adopt such references, rather you
        sink them.

2019-09-11  Saam Barati  <sbarati@apple.com>

        [WHLSL] Ensure structs/arrays with pointers as fields are disallowed
        https://bugs.webkit.org/show_bug.cgi?id=201525

        Reviewed by Robin Morisset.

        This patch adds a pass which both ensures that references are always initialized with
        concrete values and that we support logical mode validation by disallowing nested references.
        
        Specifically, the pass:
        
        1. Disallows structs to have fields which are references. This prevents us from having to
        figure out how to default initialize such a struct. We could relax this in the future if we
        did an analysis on which structs contain reference fields, and ensure such struct variables
        always have initializers. This would also require us to create constructors for structs which
        initialize each field.
        2. We also do the same for arrays.
        3. References can only be one level deep. So no pointers to pointers. No references to
        references, etc. This is to support logical mode validation rules.

        Test: webgpu/whlsl/ensure-proper-pointer-usage.html

        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.cpp: Added.
        (WebCore::WHLSL::checkReferenceTypes):
        * Modules/webgpu/WHLSL/WHLSLCheckReferenceTypes.h: Added.
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Web Inspector: Canvas: instrument WebGPUDevice instead of GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=201650

        Reviewed by Joseph Pecoraro.

        Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`.

        A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even
        required (e.g. compute pipeline).  We should treat the `GPUCanvasContext` almost like a
        `-webkit-canvas` client of a `WebGPUDevice`.

        Tests: inspector/canvas/create-context-webgpu.html
               inspector/canvas/requestClientNodes-webgpu.html
               inspector/canvas/resolveContext-webgpu.html

        * Modules/webgpu/WebGPUAdapter.cpp:
        (WebCore::WebGPUAdapter::requestDevice const):
        Notify web inspector after a device is created.

        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::instances): Added.
        (WebCore::WebGPUDevice::instancesMutex): Added.
        (WebCore::WebGPUDevice::~WebGPUDevice): Added.
        Notify web inspector when the device is about to be destructed.

        * Modules/webgpu/GPUCanvasContext.h:
        * Modules/webgpu/GPUCanvasContext.cpp:
        (WebCore::GPUCanvasContext::create):
        (WebCore::GPUCanvasContext::configureSwapChain):

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::canvasIfContextMatchesDevice): Added.
        (WebCore::InspectorCanvas::create):
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::canvasContext const): Added.
        (WebCore::InspectorCanvas::canvasElement const): Added.
        (WebCore::InspectorCanvas::isDeviceForCanvasContext const): Added.
        (WebCore::InspectorCanvas::deviceContext const): Added.
        (WebCore::InspectorCanvas::scriptExecutionContext const): Added.
        (WebCore::InspectorCanvas::resolveContext const): Added.
        (WebCore::InspectorCanvas::clientNodes const): Added.
        (WebCore::InspectorCanvas::canvasChanged):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::releaseObjectForRecording):
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::canvasElement): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDeviceImpl): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDeviceImpl): Added.
        (WebCore::InspectorInstrumentation::willConfigureSwapChainImpl): Added.
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebGPUDevice): Added.
        (WebCore::InspectorInstrumentation::willDestroyWebGPUDevice): Added.
        (WebCore::InspectorInstrumentation::willConfigureSwapChain): Added.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::requestClientNodes): Added.
        (WebCore::InspectorCanvasAgent::resolveContext): Added.
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::didCreateWebGPUDevice): Added.
        (WebCore::InspectorCanvasAgent::willDestroyWebGPUDevice): Added.
        (WebCore::InspectorCanvasAgent::willConfigureSwapChain): Added.
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::bindCanvas):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes): Deleted.
        (WebCore::contextAsScriptValue): Deleted.
        (WebCore::InspectorCanvasAgent::resolveCanvasContext): Deleted.

        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::context const):

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

        Nullptr crash in Page::sessionID() via WebKit::WebFrameLoaderClient::detachedFromParent2()
        https://bugs.webkit.org/show_bug.cgi?id=201625

        Reviewed by Ryosuke Niwa.

        This is based on a patch from Ryosuke Niwa.

        Drop setHasFrameSpecificStorageAccess() in WebCore and call it from the WebKit layer instead.

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        (WebCore::DocumentStorageAccess::setHasFrameSpecificStorageAccess): Deleted.
        * dom/DocumentStorageAccess.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:

2019-09-10  Brady Eidson  <beidson@apple.com>

        Add SPI to save a PDF from the contents of a WKWebView.
        <rdar://problem/48955900> and https://bugs.webkit.org/show_bug.cgi?id=195765

        Reviewed by Tim Horton.

        Covered by API tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Don't paint the debug color outside of the FrameRect.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setURLForRect):

        * rendering/PaintPhase.h: Add "AnnotateLinks" option to always gather and annotation links.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::hasOutlineAnnotation const): Also return true when the PaintOptions include "AnnotateLinks"

2019-09-10  Jiewen Tan  <jiewen_tan@apple.com>

        REGRESSION: [ Catalina WK2 ] http/wpt/webauthn/public-key-credential-create-success-u2f.https.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=201620
        <rdar://problem/51524958>

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * Modules/webauthn/fido/U2fResponseConverter.cpp:
        (fido::WebCore::createAttestedCredentialDataFromU2fRegisterResponse):
        Change the way how the aaguid is initialized to see if that fixes the issue.

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

        Add missing origin check for Service-Worker-Allowed header
        https://bugs.webkit.org/show_bug.cgi?id=201653

        Reviewed by Geoffrey Garen.

        Add missing origin check for Service-Worker-Allowed header:
        - https://w3c.github.io/ServiceWorker/#update-algorithm (step 15. 2.)

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::didReceiveResponse):

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

        IndexedDB: cache prepared SQLiteStatement in SQLiteIDBCursor
        https://bugs.webkit.org/show_bug.cgi?id=201548

        Reviewed by Alex Christensen.

        This should be a performance improvement as we don't compile the same SQLiteStatement everytime it is used.

        No new tests, no behavior change.

        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * Modules/indexeddb/server/SQLiteIDBCursor.h:

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

        RTCPeerConnection can only be instantiated in documents
        https://bugs.webkit.org/show_bug.cgi?id=201639

        Reviewed by Alex Christensen.

        Make it clear that RTCDataChannel expects Document since peer connections
        and data channels can only be instantiated in document environments.
        We keep one downcast in RTCPeerConnection constructor due to a limitation
        in binding generator for JS built-ins.
        No change of behavior.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::create):
        (WebCore::RTCDataChannel::RTCDataChannel):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        (WebCore::RTCPeerConnection::certificatesFromConfiguration):
        (WebCore::RTCPeerConnection::createDataChannel):
        (WebCore::RTCPeerConnection::document):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::channelEvent):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):

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

        Remove MediaStreamPrivate::scheduleDeferredTask
        https://bugs.webkit.org/show_bug.cgi?id=200975

        Reviewed by Eric Carlson.

        All calls to scheduleDeferredTask are done on the main thread.
        This was initially done to trigger less reconfiguration.
        But this makes the implementation significantly more complex.

        For instance, we have to wait for the document to update its media state
        and send it to UIProcess before calling the allow completion handler.

        Covered by existing tests.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        Make sure to update the document media state once the tracks have been added, similarly to the other constructor.
        This ensures the document media state is computed with the new MediaStreamTrack.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::isMediaStreamCorrectlyStarted):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::stop):
        (WebCore::UserMediaRequest::mediaStreamDidFail):
        * Modules/mediastream/UserMediaRequest.h:
        * page/MediaProducer.h:
        (WebCore::MediaProducer::isCapturing):
        Make sure to include getDisplayMedia as part of capture check.
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackMutedChanged):
        (WebCore::MediaStreamPrivate::trackEnabledChanged):
        (WebCore::MediaStreamPrivate::trackStarted):
        (WebCore::MediaStreamPrivate::trackEnded):
        * platform/mediastream/MediaStreamPrivate.h:

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

        Audio sometimes fail to capture in WebRTC
        https://bugs.webkit.org/show_bug.cgi?id=180748
        <rdar://problem/36032346>

        Reviewed by Eric Carlson.

        In some cases, Safari is not receiving unsuspend notifications.
        In that case, the capture unit might stay in suspend state forever.
        To work around that, we force to unsuspend whenever there is a new capture happening.
        This will make it so that reloading the page will unsuspend the page.

        Manually tested by triggering Siri, starting to use the microphone and quickly going back to a capturing page.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::provideSpeakerData):
        When suspension happens, the buffer size might change.
        Since this is only an issue if there are some references data, we now do not fail the capture when there
        is no reference data.
        (WebCore::CoreAudioSharedUnit::resume):
        (WebCore::CoreAudioSharedUnit::prepareForNewCapture):
        Make sure to start with a clean slate by setting suspend state to false for the shared unit.
        And failing all previous sources in case we are going back from suspension.
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioCaptureSourceFactory::audioCaptureDeviceManager):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):

2019-09-10  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fixes for non-unified builds after r249022
        https://bugs.webkit.org/show_bug.cgi?id=201610

        Reviewed by Joseph Pecoraro.

        No new tests needed.

        * fileapi/NetworkSendQueue.h: Add missing inclusion of wtf/WeakPtr.h; add the namespace to WTF::WeakPtr
        which is needed because there is no "using" clause.
        * inspector/InspectorInstrumentation.cpp: Add missing inclusion of the PageDOMDebuggerAgent.h header.
        * inspector/agents/WebDebuggerAgent.cpp: Add missing inclusion of the ScriptExecutionContext.h header.
        * inspector/agents/page/PageDOMDebuggerAgent.cpp: Add missing inclusion of the InstrumentingAgents.h header.

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

        Add support to RTCDataChannel.send(Blob)
        https://bugs.webkit.org/show_bug.cgi?id=201377

        Reviewed by Chris Dumez.

        Make use of NetworkSendQueue to enqueue and send properly messages.
        Test: imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-blob-order.html

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::createMessageQueue):
        (WebCore::RTCDataChannel::RTCDataChannel):
        (WebCore::RTCDataChannel::send):
        (WebCore::RTCDataChannel::close):
        * Modules/mediastream/RTCDataChannel.h:

2019-09-10  Ryosuke Niwa  <rniwa@webkit.org>

        Option + arrow moves caret past whitespace on iOS
        https://bugs.webkit.org/show_bug.cgi?id=201575

        Reviewed by Wenson Hsieh.

        The bug was caused by findNextWordFromIndex on iOS behaving differently from macOS and UIKit by skipping
        trailing whitespace after a word when moving forward and not skipping leading whitespace when moving backward.

        This patch introduces a new mode (StopAfterWord) of findNextWordFromIndex in iOS that better matches
        the behavior of findNextWordFromIndex on macOS and UIKit, and use it in various modify* functions of
        FrameSelection when the selection update is triggered by user.

        The legacy mode (LegacyStopBeforeWord) is used in all other call sites as well as when modify* functions
        are invoked from author scripts.

        Test: editing/selection/ios/move-by-word-with-keyboard.html

        * editing/FrameSelection.cpp:
        (WebCore::nextWordWhitespaceModeInIOS): Added. A helper to convert EUserTriggered to NextWordModeInIOS.
        (WebCore::FrameSelection::nextWordPositionForPlatform):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::updateAppearance):
        * editing/FrameSelection.h:
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::isWordStartMatch const):
        * editing/VisibleUnits.cpp:
        (WebCore::previousWordPositionBoundary):
        (WebCore::previousWordPosition):
        (WebCore::nextWordPositionBoundary):
        (WebCore::nextWordPosition):
        * editing/VisibleUnits.h:
        * platform/text/TextBoundaries.cpp:
        (WebCore::findNextWordFromIndex):
        * platform/text/TextBoundaries.h:
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findNextWordFromIndex): Added a new mode.

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

        REGRESSION: http/tests/resourceLoadStatistics/do-not-capture-statistics-for-simple-top-navigations.html is frequently timing out on iOS EWS bots
        https://bugs.webkit.org/show_bug.cgi?id=201550

        Reviewed by Alex Christensen.

        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::hasStatistics const):

2019-09-09  Timothy Hatcher  <timothy@apple.com>

        Tap and hold on Facebook sometimes creates a tall empty selection.
        https://bugs.webkit.org/show_bug.cgi?id=201618
        rdar://53630145

        Reviewed by Megan Gardner.

        API Test: SelectionTests.ByWordAtEndOfDocument

        * editing/VisibleUnits.cpp:
        (WebCore::wordRangeFromPosition):
        Remove special case code for the possibility of an empty paragraph and at the end
        of the document. This is no longer needed and was causing a large selection to be
        created on Facebook due to large areas of non-selectable content on the page.

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

        getComputedStyle for line-height: normal should return the keyword instead of a length
        https://bugs.webkit.org/show_bug.cgi?id=201296

        Reviewed by Ryosuke Niwa.

        Per https://github.com/w3c/csswg-drafts/issues/3749,
        Gecko and Blink has this behavior already.

        This patch makes WebKit has the same behavior with them.

        Tests: imported/w3c/web-platform-tests/css/css-inline/parsing/line-height-computed.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-line-height.html
               imported/w3c/web-platform-tests/html/rendering/replaced-elements/the-select-element/select-1-line-height.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle):

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

        Disable TLS 1.0 and 1.1 in WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=201573

        Reviewed by Youenn Fablet.

        This expands on what I started in r249019 when I disabled legacy TLS for our use of NSURLSession.
        Since our WebSocket implementation uses a different network interface, disable legacy TLS for them, too.
        I use the same temporary default to re-enable legacy TLS.  I also add a unit test for both WebSockets and NSURLSession use.

        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::Function<bool):
        (WebCore::SocketStreamHandleImpl::setLegacyTLSEnabledCheck):
        (WebCore::SocketStreamHandleImpl::createStreams):

2019-09-09  Saam Barati  <sbarati@apple.com>

        Unreviewed follow up to r249630. We need padding for ADDRESS32 CPUs to allow replaceWith to work on the intended types.

        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:

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

        [LFC][TFC] Introduce cell spacing.
        https://bugs.webkit.org/show_bug.cgi?id=201605
        <rdar://problem/55184009>

        Reviewed by Antti Koivisto.

        This patch adds support for horizontal and vertical cell spacing (border-spacing). Now LFC matches table geometry for simple table content with multiple columns and rows. 

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const): Now we can use the generic, check the inflow content logic for table height.
        * layout/LayoutUnits.h:
        (WebCore::Layout::HorizontalEdges::width const):
        (WebCore::Layout::VerticalEdges::height const):
        * layout/Verification.cpp:
        (WebCore::Layout::verifyAndOutputSubtree):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout):
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox):
        (WebCore::Layout::TableFormattingContext::positionTableCells):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computedTableWidth):
        (WebCore::Layout::TableFormattingContext::useAsContentLogicalWidth):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin const):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::widthConstraints const):
        (WebCore::Layout::TableGrid::ColumnsContext::useAsLogicalWidth): Deleted.
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::setHorizontalSpacing):
        (WebCore::Layout::TableGrid::horizontalSpacing const):
        (WebCore::Layout::TableGrid::setVerticalSpacing):
        (WebCore::Layout::TableGrid::verticalSpacing const):
        (WebCore::Layout::TableGrid::ColumnsContext::logicalWidth const):

2019-09-09  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r249574.

        Caused fast/mediastream/media-stream-track-source-failure.html
        to become flaky.

        Reverted changeset:

        "Remove MediaStreamPrivate::scheduleDeferredTask"
        https://bugs.webkit.org/show_bug.cgi?id=200975
        https://trac.webkit.org/changeset/249574

2019-09-09  Rob Buis  <rbuis@igalia.com>

        [GTK][WPE] Remove attributes deprecated from MathML3
        https://bugs.webkit.org/show_bug.cgi?id=197492

        Reviewed by Frédéric Wang.

        Remove some MathML3 deprecated attributes:
        https://github.com/mathml-refresh/mathml/issues/5#issuecomment-475506856

        This change also maps the dir attribute to direction for MathML Core.

        Test: imported/w3c/web-platform-tests/mathml/relations/css-styling/attribute-mapping-001.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::collectStyleForPresentationAttribute):

2019-09-09  Youenn Fablet  <youenn@apple.com>

        Move checkProcessLocalPortForActivity from provider to registry
        https://bugs.webkit.org/show_bug.cgi?id=201400

        Reviewed by Alex Christensen.

        Update the registry to take a callback that is used to implement checkProcessLocalPortForActivity.
        This allows WK1 and WK2 to have their own implementation.

        Make the call to checkProcessLocalPortForActivity directly on the registry.
        Remove unneeded worker checkProcessLocalPortForActivity method.
        No change of behavior.

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::createMessagePortChannelRegistry):
        (WebCore::MessagePortChannelProviderImpl::MessagePortChannelProviderImpl):
        (WebCore::MessagePortChannelProviderImpl::checkProcessLocalPortForActivity): Deleted.
        * dom/messageports/MessagePortChannelProviderImpl.h:
        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::MessagePortChannelRegistry):
        (WebCore::MessagePortChannelRegistry::checkProcessLocalPortForActivity):
        * dom/messageports/MessagePortChannelRegistry.h:
        (WebCore::MessagePortChannelRegistry::provider): Deleted.
        * dom/messageports/WorkerMessagePortChannelProvider.cpp:
        (WebCore::WorkerMessagePortChannelProvider::checkProcessLocalPortForActivity): Deleted.
        * dom/messageports/WorkerMessagePortChannelProvider.h:

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

        [WHLSL] Add back a version of the property resolver
        https://bugs.webkit.org/show_bug.cgi?id=201251

        Reviewed by Robin Morisset.

        This patch adds back the property resolver to aid in how we emit metal code.
        The goal of the new property resolver phase is to allow two things:
        1. For property access expressions, metal codegen should be allowed to evaluate
        the base, and if it's an index expression, the index, as many times as needed.
        So this patch ensures that if Metal evaluates such things, effects aren't performed
        more than once.
        
        2. For ReadModifyWrite expressions, metal codegen should be able to evaluate the
        leftValueExpression as many times as it'd like without performing the effects of
        leftValueExpression more than once.
        
        Here are a couple examples of this transformation:
        `a()[b()]` -> `(temp1 = a(), temp2 = b(), temp1[temp2])`
        `(*a())[b()] += 42;` -> `(temp1 = &*a(), temp2 = b(), (*temp1)[temp2] += 42)`
        
        The interesting rules break down like:
        - When the base is an lvalue, we take its address and replace the old base
        with a dereference of the new pointer variable.
        - When the base is an rvalue, we evaluate it and store it in a temporary
        variable, and switch the base to be a reference of that variable.
        - All indices are evaluated before the property access instruction and
        replaced with a reference to the temporary variable.

        Test: webgpu/whlsl/property-evaluation-order.html

        * Modules/webgpu/WHLSL/AST/WHLSLExpression.cpp:
        (WebCore::WHLSL::AST::Expression::mayBeEffectful const):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.cpp:
        (WebCore::WHLSL::findHighZombies):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::PropertyResolver::handleLeftHandSideBase):
        (WebCore::WHLSL::PropertyResolver::handlePropertyAccess):
        (WebCore::WHLSL::resolveProperties):

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

        Add support for postMessage buffering between the service worker and window
        https://bugs.webkit.org/show_bug.cgi?id=201169

        Reviewed by Youenn Fablet.

        As per the Service Worker specification, a service worker client's message
        queue is initially disabled and only gets enabled after:
        - The DOMContentLoaded event has been fired
        or
        - The client sets the navigator.serviceWorker.onmessage event handler
        or
        - navigator.serviceWorker.startMessages() is called

        While the message queue is disabled, messages posted by the service worker
        to the client simply get queued and only get processed once the queue gets
        enabled.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        Call startMessages() on the ServiceWorkerContainer once the DOMContentLoaded event has
        been fired.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ensureServiceWorkerContainer):
        * dom/ScriptExecutionContext.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        Fix a bug where a service worker would not be able to post a message to a client until
        that client has accessed navigator.serviceWorker (since the ServiceWorkerContainer is
        lazy initialized). To address the issue, we now initialize the ServiceWorkerContainer
        when a message is received from the service worker. Previously, messages were just
        getting dropped.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        When the ServiceWorkerContainer is constructed, suspend its message queue if its context
        document is still parsing.

        (WebCore::ServiceWorkerContainer::startMessages):
        Resume the message queue when startMessages() is called.

        (WebCore::ServiceWorkerContainer::postMessage):
        Enqueue the event instead of firing it right away.

        (WebCore::ServiceWorkerContainer::addEventListener):
        if navigator.serviceWorker.onmessage event handler gets set by the JavaScript, call
        startMessages().

        * workers/service/ServiceWorkerContainer.h:

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

        [Service Workers] Drop support for registration resurrection
        https://bugs.webkit.org/show_bug.cgi?id=201584

        Reviewed by Alex Christensen.

        Drop support for registration resurrection (Unregistering then quickly re-registering would resurrect
        the original registration instead of creating a new one). This behavior is no longer in the
        specification (No more "isUninstalling" flag on the registration, and the registration is removed
        from the "scope to registration map" right away upon unregistering).

        This resurrection behavior was causing a lot of flakiness in the tests so it is likely we will be able
        to unskip some tests. This is also what was causing the flakiness that caused Bug 201169 to be rolled
        out.

        No new tests, updated existing tests.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::activeWorkerFromRegistrationID):
        (WebCore::SWServer::getRegistration):
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::getRegistrations):
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::terminatePreinstallationWorker):
        (WebCore::SWServer::didFinishActivation):
        (WebCore::SWServer::claim):
        (WebCore::SWServer::addClientServiceWorkerRegistration):
        (WebCore::SWServer::removeClientServiceWorkerRegistration):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorker):
        (WebCore::SWServer::doRegistrationMatching):
        (WebCore::SWServer::registrationFromServiceWorkerIdentifier):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::removeFromScopeToRegistrationMap):
        (WebCore::SWServer::performGetOriginsWithRegistrationsCallbacks):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::runUpdateJob):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::clear):
        (WebCore::SWServerRegistration::handleClientUnload):
        (WebCore::SWServerRegistration::isUnregistered const):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::scopeURLWithoutFragment const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::m_scriptResourceMap):
        (WebCore::SWServerWorker::contextData const):
        (WebCore::SWServerWorker::skipWaiting):
        (WebCore::SWServerWorker::setHasPendingEvents):
        (WebCore::SWServerWorker::setState):
        (WebCore::SWServerWorker::registration const):
        * workers/service/server/SWServerWorker.h:

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

        Unreviewed, rolling out r249353.

        The test for this change is a flaky failure.

        Reverted changeset:

        "Add support for postMessage buffering between the service
        worker and window"
        https://bugs.webkit.org/show_bug.cgi?id=201169
        https://trac.webkit.org/changeset/249353

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

        Deprecate WKContextGetWebsiteDataStore
        https://bugs.webkit.org/show_bug.cgi?id=200050

        Reviewed by Geoff Garen.

        * platform/network/CacheValidation.cpp:
        (WebCore::collectVaryingRequestHeaders):
        (WebCore::verifyVaryingRequestHeaders):
        * platform/network/CacheValidation.h:
        Replace a few NetworkStorageSession& with NetworkStorageSession*
        so I can replace defaultStorageSession with the correct NetworkStorageSession in NetworkCache.cpp.

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

        [FTW] Minor cleanups to avoid crashes during web browsing
        https://bugs.webkit.org/show_bug.cgi?id=201572

        Reviewed by Alexey Proskuryakov.

        This patch addresses a few crashes seen when doing general web browsing using
        the FTW build of WebKit:

        1. ImageBuffer::sinkIntoImage was attempting to use a render target after WTFMoving it elsewhere.
        2. ImageBuffer::copyNativeImage was not properly checking the type of the render
           target to make sure it was suitable for Bitmap operations.
        3. BackingStoreBackendDirect2DImpl::scroll would crash if the scroll offset was
           outside the bounds of the current view. In that case, it would attempt to allocate
           a zero-size texture, which triggered a crash.

        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp:
        (WebCore::BackingStoreBackendDirect2DImpl::scroll):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::sinkIntoImage):
        (WebCore::ImageBuffer::copyNativeImage const):

2019-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Incorrect selection rect revealed after pasting images in a contenteditable element
        https://bugs.webkit.org/show_bug.cgi?id=201549
        <rdar://problem/50956429>

        Reviewed by Simon Fraser.

        Editor::replaceSelectionWithFragment currently scrolls to reveal the selection after inserting the given
        DocumentFragment. However, this scrolling occurs before any inserted images have loaded yet, which causes the
        wrong caret rect to be revealed, since all image elements inserted during paste will be empty.

        To fix this, we defer revealing the selection after inserting the fragment until after all images that have
        been inserted are done loading. While waiting for images to load, if any layers which may be scrolled as a
        result of revealing the selection are scrolled, we additionally cancel the deferred selection reveal. See
        comments below for more detail.

        Tests: editing/pasteboard/do-not-reveal-selection-after-programmatic-scroll.html
               editing/pasteboard/reveal-selection-after-pasting-images.html
               PasteImage.RevealSelectionAfterPastingImage

        * editing/Editing.cpp:
        (WebCore::visibleImageElementsInRangeWithNonLoadedImages):

        Add a new helper to iterate through a range and collect all image elements in that range, that contain cached
        images that have not finished loading yet.

        * editing/Editing.h:
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):

        Instead of always immediately revealing the selection after applying the ReplaceSelectionCommand, collect the
        image elements that were just inserted, and avoid immediately revealing the selection if any of these images
        have non-null cached images, but are not loaded yet. Instead, hold on to these images in a set, remove them once
        they finish loading using the new method below, and once all images are removed, reveal the selection.

        (WebCore::Editor::revealSelectionIfNeededAfterLoadingImageForElement):
        (WebCore::Editor::renderLayerDidScroll):

        Called whenever a scrollable RenderLayer is scrolled (or in the case of FrameView, the root layer). In the case
        where Editor is waiting to reveal the selection, we check to see if the scrolled layer is an ancestor of the
        layer enclosing the start of the selection.

        (WebCore::Editor::respondToChangedSelection):

        If the selection changes between pasting and waiting for pasted images to load, just cancel waiting to reveal
        the selection after pasting.

        * editing/Editor.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertedContentRange const):

        Add a helper method to grab the Range of content inserted after applying the command.

        * editing/ReplaceSelectionCommand.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::didFinishLoadingImageForElement):

        Notify Editor after an image finishes loading.

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

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

        PathDirect2D Cleanups
        https://bugs.webkit.org/show_bug.cgi?id=201534

        Reviewed by Fujii Hironori.

        1. Add a COMPtr<> move operator.
        2. Reduce copying ID2D1Geometry objects.
        3. Protect against using the ID2D1PathGeometry after the
           ID2D1GeometrySink's Close operation is used.
        4. Add a debug-only 'refCount' function to COMPtr to help
           track down memory errors.

        * platform/graphics/Path.h:
        (WebCore::Path::activePath const): Deleted.
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::fillPath):
        (WebCore::Direct2D::drawPath):
        * platform/graphics/win/PathDirect2D.cpp:
        * platform/win/COMPtr.h:
        (COMPtr::COMPtr):
        (=):
        (refCount):

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

        Move the ResourceLoadObserver logic to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=201517

        Reviewed by Brent Fulgham.

        Move the ResourceLoadObserver logic to WebKit2 since it is not used by WebKit1. This allows us to simplify
        code.

        In a follow-up patch, I will simplify the code even further by leveraging the fact that a WebContent process
        is always associated with a single WebsiteDataStore / sessionID:
        - No need for a HashMap of sessionIDs
        - No need to even allocate the ResourceLoadObserver if the WebProcess is associated with an ephemeral session.

        * dom/Document.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::sharedObserver):
        (WebCore::ResourceLoadObserver::setShared):
        (WebCore::ResourceLoadObserver::shared):
        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::~ResourceLoadObserver):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logFontLoad):
        (WebCore::ResourceLoadObserver::logCanvasRead):
        (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed):
        (WebCore::ResourceLoadObserver::logScreenAPIAccessed):
        (WebCore::ResourceLoadObserver::statisticsForURL):
        (WebCore::ResourceLoadObserver::updateCentralStatisticsStore):
        (WebCore::ResourceLoadObserver::clearState):
        (WebCore::ResourceLoadObserver::setShouldLogUserInteraction):
        * page/DeprecatedGlobalSettings.h:

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

        [WebGPU] Update several interface and enum names to match spec
        https://bugs.webkit.org/show_bug.cgi?id=201564

        Reviewed by Dean Jackson.

        Rename GPUShaderStageBit -> GPUShaderStage.
        Rename GPUColorWriteBits -> GPUColorWrite.
        Rename TRANSFER_SRC/DST -> COPY_SRC/DST.
        Rename GPUPipelineStageDescriptor -> GPUProgrammableStageDescriptor.

        Existing tests trivially updated to match.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webgpu/GPUBindGroupLayoutBinding.h:
        * Modules/webgpu/GPUBufferUsage.idl:
        * Modules/webgpu/GPUColorStateDescriptor.idl:
        * Modules/webgpu/GPUColorWrite.idl: Renamed from Source/WebCore/Modules/webgpu/GPUColorWriteBits.idl.
        * Modules/webgpu/GPUShaderStage.h: Renamed from Source/WebCore/Modules/webgpu/GPUShaderStageBit.h.
        * Modules/webgpu/GPUShaderStage.idl: Renamed from Source/WebCore/Modules/webgpu/GPUShaderStageBit.idl.
        * Modules/webgpu/GPUTextureUsage.idl:
        * Modules/webgpu/WebGPUComputePipelineDescriptor.cpp:
        (WebCore::WebGPUComputePipelineDescriptor::tryCreateGPUComputePipelineDescriptor const):
        * Modules/webgpu/WebGPUComputePipelineDescriptor.h:
        * Modules/webgpu/WebGPUComputePipelineDescriptor.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.cpp: Renamed from Source/WebCore/Modules/webgpu/WebGPUPipelineStageDescriptor.cpp.
        (WebCore::WebGPUProgrammableStageDescriptor::tryCreateGPUProgrammableStageDescriptor const):
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.h: Renamed from Source/WebCore/Modules/webgpu/WebGPUPipelineStageDescriptor.h.
        * Modules/webgpu/WebGPUProgrammableStageDescriptor.idl: Renamed from Source/WebCore/Modules/webgpu/WebGPUPipelineStageDescriptor.idl.
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPURenderPipelineDescriptor::tryCreateGPURenderPipelineDescriptor const):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * Modules/webgpu/WebGPURenderPipelineDescriptor.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * platform/graphics/gpu/GPUBuffer.h:
        (WebCore::GPUBuffer::isCopySource const):
        (WebCore::GPUBuffer::isCopyDestination const):
        (WebCore::GPUBuffer::isTransferSource const): Deleted.
        (WebCore::GPUBuffer::isTransferDestination const): Deleted.
        * platform/graphics/gpu/GPUBufferUsage.h:
        * platform/graphics/gpu/GPUColorStateDescriptor.h:
        * platform/graphics/gpu/GPUColorWrite.h: Renamed from Source/WebCore/platform/graphics/gpu/GPUColorWriteBits.h.
        * platform/graphics/gpu/GPUComputePipelineDescriptor.h:
        (WebCore::GPUComputePipelineDescriptor::GPUComputePipelineDescriptor):
        * platform/graphics/gpu/GPUPipelineDescriptorBase.h:
        * platform/graphics/gpu/GPUProgrammableStageDescriptor.h: Renamed from Source/WebCore/platform/graphics/gpu/GPUPipelineStageDescriptor.h.
        (WebCore::GPUProgrammableStageDescriptor::GPUProgrammableStageDescriptor):
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h:
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor):
        * platform/graphics/gpu/GPUTexture.h:
        (WebCore::GPUTexture::isCopySource const):
        (WebCore::GPUTexture::isCopyDestination const):
        (WebCore::GPUTexture::isReadOnly const):
        (WebCore::GPUTexture::isTransferSource const): Deleted.
        (WebCore::GPUTexture::isTransferDestination const): Deleted.
        * platform/graphics/gpu/GPUTextureUsage.h:
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::GPUBindGroupLayout::tryCreate):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::GPUBindGroup::tryCreate):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        (WebCore::GPUCommandBuffer::copyBufferToTexture):
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        (WebCore::GPUCommandBuffer::copyTextureToTexture):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPUPipelineMetalConvertLayout.cpp:
        (WebCore::convertShaderStageFlags):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::mtlColorWriteMaskForGPUColorWriteFlags):
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags):

2019-09-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r249367): m_decodingPromises grows indefinitely until ImageLoader destruction
        https://bugs.webkit.org/show_bug.cgi?id=201402

        Reviewed by Youenn Fablet and Daniel Bates.

        Add the static functions resolvePromises() and rejectPromises(). These 
        functions take an lvalue reference to a Vector of promises. Inside them,
        the lvalue reference argument are exchanged with an empty Vector of
        promises then the promises are processed. This clears m_decodingPromises
        and fixes the leak.

        Add an internal API which returns the count of the pending promises of
        an HTMLImageElement. This internal API will be used in the attached test.

        Test: fast/images/decode-resolve-reject-no-leak.html

        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::pendingDecodePromisesCountForTesting const):
        * loader/ImageLoader.cpp:
        (WebCore::resolvePromises):
        ImageLoader::decode() calls BitmapImage::decode() and moves m_decodingPromises
        in capture. When decoding finishes, this function is called to resolve the
        promises. But ImageLoader might get deleted before the image decoding
        finishes. So this function has to be static.

        (WebCore::rejectPromises):
        (WebCore::ImageLoader::resolveDecodePromises):
        (WebCore::ImageLoader::rejectDecodePromises):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::decode):
        (WebCore::resolveDecodePromises): Deleted.
        (WebCore::rejectDecodePromises): Deleted.
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::pendingDecodePromisesCountForTesting const):
        * testing/Internals.cpp:
        (WebCore::Internals::imagePendingDecodePromisesCountForTesting):
        * testing/Internals.h:
        * testing/Internals.idl:

2019-09-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Prefer null namespace 'href' over 'xlink:href' on SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=195802

        Reviewed by Youenn Fablet.

        -- When the attribute "href" is set, its value is always reflected in
           SVGURIReference::m_href.

        -- When the attribute "href" is removed, the value of the attribute
           "xlink:href" is always reflected in SVGURIReference::m_href.

        -- When the "xlink:href" is set, its value is reflected in
           SVGURIReference::m_href only if the attribute "href" is not set.

        Tests: svg/custom/href-xlink-href-gradient-element-expected.svg
               svg/custom/href-xlink-href-gradient-element.svg
               svg/custom/href-xlink-href-use-element-expected.svg
               svg/custom/href-xlink-href-use-element.svg

        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::parseAttribute):

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

        [LFC][TFC] Set computed row width.
        https://bugs.webkit.org/show_bug.cgi?id=201533
        <rdar://problem/55098828>

        Reviewed by Antti Koivisto.

        Decouple cell box layout/display box setup and set the computed row width.    

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout):

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

        [LFC] A formatting context root is always a containing block for relative: static boxes.
        https://bugs.webkit.org/show_bug.cgi?id=201554
        <rdar://problem/55123295>

        Reviewed by Antti Koivisto.

        "For other elements, if the element's position is 'relative' or 'static', the containing block is formed by the content
        edge of the nearest ancestor box that is a block container or which establishes a formatting context."

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::containingBlock const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        IndexedDB: use SQL COUNT statement for count operation
        https://bugs.webkit.org/show_bug.cgi?id=201465

        Reviewed by Geoffrey Garen.

        We did count operation by moving objectStore/index iterator from begin to end and counting the steps. We can
        utilize the SQL COUNT statement, and improve the performance further by caching the statement.

        Tested on release build minibrowser. Without the change, the mean time to complete one iteration in 
        PerformanceTests/IndexedDB/basic/index-count.html and PerformanceTests/IndexedDB/basic/objectStore-count.html is
        about 50ms. With the change it is about 2ms.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        (WebCore::IDBServer::SQLiteIDBBackingStore::closeSQLiteDB):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:

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

        When disabling legacy private browsing for testing, change the SessionID back to what it was, not the defaultSessionID
        https://bugs.webkit.org/show_bug.cgi?id=201480

        Reviewed by Youenn Fablet.

        No change in behavior, but this blocks bug 200050 which will make WebKitTestRunner use a persistent, non-default session.
        Without this change, that change causes lots of test failures because we are switching from the legacy private browsing session
        to the default session instead of the session we were using.

        * page/Page.cpp:
        (WebCore::Page::enableLegacyPrivateBrowsing): Deleted.
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::setSessionIDForTesting):
        (WebCore::PageGroup::enableLegacyPrivateBrowsingForTesting): Deleted.
        * page/PageGroup.h:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::setSessionIDForTesting):
        (WebCore::StorageNamespaceProvider::enableLegacyPrivateBrowsingForTesting): Deleted.
        * storage/StorageNamespaceProvider.h:

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

        Remove MediaStreamPrivate::scheduleDeferredTask
        https://bugs.webkit.org/show_bug.cgi?id=200975

        Reviewed by Eric Carlson.

        All calls to scheduleDeferredTask are done on the main thread.
        This was initially done to trigger less reconfiguration.
        But this makes the implementation significantly more complex.

        For instance, we have to wait for the document to update its media state
        and send it to UIProcess before calling the allow completion handler.

        Covered by existing tests.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        Make sure to update the document media state once the tracks have been added, similarly to the other constructor.
        This ensures the document media state is computed with the new MediaStreamTrack.
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::isMediaStreamCorrectlyStarted):
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::stop):
        (WebCore::UserMediaRequest::mediaStreamDidFail):
        * Modules/mediastream/UserMediaRequest.h:
        * page/MediaProducer.h:
        (WebCore::MediaProducer::isCapturing):
        Make sure to include getDisplayMedia as part of capture check.
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::trackMutedChanged):
        (WebCore::MediaStreamPrivate::trackEnabledChanged):
        (WebCore::MediaStreamPrivate::trackStarted):
        (WebCore::MediaStreamPrivate::trackEnded):
        * platform/mediastream/MediaStreamPrivate.h:

2019-09-06  Rob Buis  <rbuis@igalia.com>

        Implement MathML DOM
        https://bugs.webkit.org/show_bug.cgi?id=200470

        Reviewed by Ryosuke Niwa.

        Expose MathML DOM as specified here [1].

        [1] https://mathml-refresh.github.io/mathml-core/#dom-mathmlelement

        Tests: imported/w3c/web-platform-tests/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/css-inline-style-interface.tentative.html
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/integration-point-4.html
               imported/w3c/web-platform-tests/mathml/relations/html5-tree/math-global-event-handlers.tentative.html
               mathml/focus-event-handling.html
               mathml/tabindex-order.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSElementCustom.cpp:
        (WebCore::createNewElementWrapper):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseAttribute):
        * mathml/MathMLElement.idl: Copied from Source/WebCore/html/HTMLOrForeignElement.idl.
        * mathml/MathMLMathElement.idl: Copied from Source/WebCore/html/HTMLOrForeignElement.idl.
        * mathml/mathtags.in:

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

        [GStreamer] YUV buffers on iMX platforms have to be treated as RGBA
        https://bugs.webkit.org/show_bug.cgi?id=201537

        Reviewed by Philippe Normand.

        The imxvpudecoder element on iMX platforms decodes YUV data in a
        platform-specific way, gathering the YUV data in a single texture and
        then relying on the sampler in the Vivante graphics drivers to
        automagically decode that YUV data into RGBA values.

        To correctly display such decoded data, we have to represent that
        single texture as an RGBA texture, even when the GStreamer buffer is
        crafted as containing planar YUV data.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::platformLayerBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

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

        AccessibilityRenderObject::setSelectedTextRange fails to set the selection passed an empty line.
        https://bugs.webkit.org/show_bug.cgi?id=201518
        <rdar://problem/54835122>

        Reviewed by Ryosuke Niwa.

        Test: accessibility/set-selected-text-range-after-newline.html

        In the case of an empty line, the CharacterIterator range start and end
        were not equal, thus we were not advancing the iterator and returning
        the iterator range end, which is not correct. With this change we are
        always advancing the iterator if its text is just '\n'. This covers all
        the cases we fixed before plus empty lines.

        * editing/Editing.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator):

2019-09-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Add support for MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=201445

        Reviewed by Brent Fulgham.

        Spec: <https://www.w3.org/TR/uievents/#dom-mouseevent-buttons>

        * platform/win/GDIUtilities.h:
        (buttonsForEvent): Added.
        * platform/win/PlatformMouseEventWin.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        Set m_buttons.

2019-09-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Support Per-Monitor (V2) DPI Awareness
        https://bugs.webkit.org/show_bug.cgi?id=201450

        Reviewed by Don Olmstead.

        * platform/win/GDIUtilities.cpp:
        (WebCore::deviceScaleFactorForWindow): Use GetDpiForWindow if available by using soft linking.

2019-09-05  Charlie Turner  <cturner@igalia.com>

        [EME] Introduce a Proxy CDM for thread-safe access to CDM instances from background decryption threads
        https://bugs.webkit.org/show_bug.cgi?id=201339

        Reviewed by Xabier Rodriguez-Calvar.

        Covered by existing tests.

        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::isolatedKey):
        (WebCore::ProxyCDMClearKey::isolatedKeys const):
        (WebCore::CDMInstanceClearKey::CDMInstanceClearKey):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (handleKeyResponse):
        (findAndSetKey):
        (decrypt):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (isCDMInstanceAvailable):
        (sinkEventHandler):
        (setContext):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::proxyCDM const):
        * testing/MockCDMFactory.h:

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

        [LFC] LayoutState should not need the initial containing block
        https://bugs.webkit.org/show_bug.cgi?id=201511
        <rdar://problem/55079241>

        Reviewed by Antti Koivisto.

        Throw-away layouts should just be able to initialize a dedicated LayoutState without passing in the ICB.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::markNeedsUpdate):
        (WebCore::Layout::LayoutState::run):
        (WebCore::Layout::LayoutState::LayoutState): Deleted.
        * layout/LayoutState.h:
        (WebCore::Layout::LayoutState::initialContainingBlock const): Deleted.
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutState::verifyAndOutputMismatchingLayoutTree const):
        * layout/floats/FloatingContext.cpp: Fix a (very sad)typo.
        (WebCore::Layout::FloatingContext::constraints const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::printLayoutTreeForLiveDocuments):

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

        [WebGPU] Implement GPUUncapturedErrorEvent
        https://bugs.webkit.org/show_bug.cgi?id=199676

        Reviewed by Dean Jackson.

        Implement GPUUncapturedErrorEvent and "uncapturederror" event name.
        Add the onuncapturederror EventHandler attribute to GPUDevice.

        Test: webgpu/uncaptured-errors.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webgpu/GPUUncapturedErrorEvent.cpp:
        (WebCore::GPUUncapturedErrorEvent::create):
        (WebCore::GPUUncapturedErrorEvent::GPUUncapturedErrorEvent):
        (WebCore::GPUUncapturedErrorEvent::eventInterface const):
        * Modules/webgpu/GPUUncapturedErrorEvent.h:
        * Modules/webgpu/GPUUncapturedErrorEvent.idl:
        * Modules/webgpu/WebGPUAdapter.cpp: Must now provide ScriptExecutionContext to any created GPUDevice.
        (WebCore::WebGPUAdapter::requestDevice const):
        * Modules/webgpu/WebGPUAdapter.h:
        * Modules/webgpu/WebGPUAdapter.idl:
        * Modules/webgpu/WebGPUDevice.cpp: Is now an EventTarget.
        (WebCore::WebGPUDevice::tryCreate):
        (WebCore::WebGPUDevice::WebGPUDevice):
        (WebCore::printValidationErrorToConsole):
        (WebCore::WebGPUDevice::dispatchUncapturedError): Events should only be fired from the main thread.
        * Modules/webgpu/WebGPUDevice.h:
        * Modules/webgpu/WebGPUDevice.idl:
        * Modules/webgpu/WebGPUDeviceEventHandler.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * platform/graphics/gpu/GPUError.cpp: GPUErrors can only be created internally; creation should never fail.
        (WebCore::createError):
        * platform/graphics/gpu/GPUError.h:
        * platform/graphics/gpu/GPUErrorScopes.cpp:
        (WebCore::GPUErrorScopes::create):
        (WebCore::GPUErrorScopes::GPUErrorScopes):
        (WebCore::GPUErrorScopes::generateError): Use a callback for now, since GPUErrorScopes is still under platform.
        * platform/graphics/gpu/GPUErrorScopes.h:
        (WebCore::GPUErrorScopes::create): Deleted.

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

        Generate event region for both the main graphics layer and the scrolled contents layer
        https://bugs.webkit.org/show_bug.cgi?id=201487

        Reviewed by Simon Fraser.

        We currently generate region for one of them only. With borders both need it.
        
        Also share more code with painting paths.

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

        Generate region for both layers.

        (WebCore::RenderLayerBacking::paintIntoLayer):

        Add event region context parameter so we can use this function for event region update too.

        * rendering/RenderLayerBacking.h:

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

        REGRESSION (iOS 13): Bulleted list copied from Notes to Mail results in Times New Roman
        https://bugs.webkit.org/show_bug.cgi?id=201490

        Reviewed by Daniel Bates.

        The bug was caused by an element in the pasted content not having any explicit font name resolving
        to use the font-family value of `-webkit-standard`. When such an inline style is inserted into
        Mail's WKWebView which sets a different font family, ReplaceSelectionCommand would fail to strip away,
        making the pasted content using the default font family of Times New Roman.

        Fixed the bug by stripping away font-family set to -webkit-standard in the sanitization document
        since that's indicative of the pasted content not having any font family being specified.

        In the future, we should consider making regular copy (as opposed to the copy for sanitization)
        resolve generic font family names to concrete font names since different WKWebView might be using
        different concrete font names. Unfortuantely, such a change is quite involved and risky since various
        paste side code in EditingStyle that removes redundant inline styles (i.e. redundant `font-family`)
        need to be aware of this special font family resolution.

        Tests: editing/pasteboard/paste-cocoa-writer-markup-with-webkit-standard-font-family.html
               PasteHTML.DoesNotAddStandardFontFamily

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        (WebCore::familyNameFromCSSPrimitiveValue): Added.
        (WebCore::loneFontFamilyName): Extracted from usesForbiddenSystemFontAsOnlyFontFamilyName. Fixed
        a bug that it was not handling the case when `font-family` property's value is a CSSPrimitiveValue
        instead of a CSSValueList.
        (WebCore::usesForbiddenSystemFontAsOnlyFontFamilyName): Deleted.
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization): Remove `font-family` property when
        StandardFontFamilySerializationMode::Strip is specified and its value is `-webkit-standard`.
        * editing/EditingStyle.h:
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator): Added
        StandardFontFamilySerializationMode as an argument.
        (WebCore::StyledMarkupAccumulator::appendStartTag):
        (WebCore::StyledMarkupAccumulator::serializeNodes):
        (WebCore::serializePreservingVisualAppearanceInternal): Ditto.
        (WebCore::serializePreservingVisualAppearance): Use StandardFontFamilySerializationMode::Keep
        to preserve the pre-existing behavior.
        (WebCore::sanitizedMarkupForFragmentInDocument): Use StandardFontFamilySerializationMode::Strip
        as this is the code used by sanitization code.

2019-09-05  Chris Fleizach  <cfleizach@apple.com>

        AX: children cache are not re-computed if tab index is removed
        https://bugs.webkit.org/show_bug.cgi?id=201502

        Reviewed by Zalan Bujtas.

        Test: accessibility/tabindex-removed.html

        If the tabindex changes, it can potentially affect whether an element is accessible. If we don't update the children cache
        information can be stale and lead to incorrect navigation with VoiceOver.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChange):

2019-09-05  Konstantin Tokarev  <annulen@yandex.ru>

        Don't call PlatformMediaSessionManager methods when neither VIDEO nor WEB_AUDIO is enabled
        https://bugs.webkit.org/show_bug.cgi?id=201508

        Reviewed by Jer Noble.

        Definitions of these methods are guarded with #if ENABLE(VIDEO) || ENABLE(WEB_AUDIO),
        so calling them causes linking errors.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldDeactivateAudioSession):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::processWillSuspend):
        (WebCore::Internals::processDidResume):
        (WebCore::Internals::setIsPlayingToAutomotiveHeadUnit):

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

        Fix implicit conversion that loses precision
        https://bugs.webkit.org/show_bug.cgi?id=201476
        <rdar://problem/55043129>

        Reviewed by Youenn Fablet, Alex Christensen.

        Building for watchOS results in the following error:

            .../Source/WebCore/fileapi/NetworkSendQueue.cpp:66:42: error: implicit conversion loses integer precision: 'unsigned long long' to 'unsigned int' [-Werror,-Wshorten-64-to-32]
                    enqueue(JSC::ArrayBuffer::create(byteLength, 1), 0, 0);

        Fix this by replacing byteLength (which is known to be zero at this
        point) with 0U.

        No new tests -- no new or changed functionality.

        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):

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

        Introduce WorkerSWClientConnection to make SWClientConnection mono-thread
        https://bugs.webkit.org/show_bug.cgi?id=201430

        Reviewed by Alex Christensen.

        Make SWClientConnection RefCounted.
        Add a WorkerSWClientConnection dedicated to be used by worker/service worker contexts.
        Simplify ServiceWorkerContainer logic based on this refactoring.

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::swClientConnection):
        * workers/WorkerGlobalScope.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::postTaskForJob):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::mainThreadConnection):
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistrationState):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::notifyRegistrationIsSettled):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::notifyFailedFetchingScript):
        (WebCore::ServiceWorkerContainer::ensureSWClientConnection):
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::isolatedCopy const):
        * workers/service/WorkerSWClientConnection.cpp: Added.
        (WebCore::WorkerSWClientConnection::WorkerSWClientConnection):
        (WebCore::WorkerSWClientConnection::~WorkerSWClientConnection):
        (WebCore::WorkerSWClientConnection::matchRegistration):
        (WebCore::WorkerSWClientConnection::getRegistrations):
        (WebCore::WorkerSWClientConnection::whenRegistrationReady):
        (WebCore::WorkerSWClientConnection::addServiceWorkerRegistrationInServer):
        (WebCore::WorkerSWClientConnection::removeServiceWorkerRegistrationInServer):
        (WebCore::WorkerSWClientConnection::didResolveRegistrationPromise):
        (WebCore::WorkerSWClientConnection::postMessageToServiceWorker):
        (WebCore::WorkerSWClientConnection::serverConnectionIdentifier const):
        (WebCore::WorkerSWClientConnection::mayHaveServiceWorkerRegisteredForOrigin const):
        (WebCore::WorkerSWClientConnection::syncTerminateWorker):
        (WebCore::WorkerSWClientConnection::registerServiceWorkerClient):
        (WebCore::WorkerSWClientConnection::unregisterServiceWorkerClient):
        (WebCore::WorkerSWClientConnection::finishFetchingScriptInServer):
        (WebCore::WorkerSWClientConnection::isThrottleable const):
        (WebCore::WorkerSWClientConnection::updateThrottleState):
        (WebCore::WorkerSWClientConnection::scheduleJob):
        (WebCore::WorkerSWClientConnection::scheduleJobInServer):
        * workers/service/WorkerSWClientConnection.h: Added.

2019-09-04  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] InspectorNetworkAgent.cpp(1122,20): error: cannot decompose this type; 'std::tuple_size<const WTF::KeyValuePair<WTF::String, WTF::RefPtr<WTF::JSONImpl::Value, WTF::DumbPtrTraits<WTF::JSONImpl::Value> > >>::value' is not a valid integral const
        https://bugs.webkit.org/show_bug.cgi?id=201489

        Unreviewed build fix for clang-cl.

        clang-cl 8 can't use a structured binding for a const struct.

        No behavior change.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::interceptWithResponse): Not to use a structured binding for a const struct.

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

        Unreviewed, another build fix after r249501.

        * loader/EmptyFrameLoaderClient.h:

2019-09-04  Timothy Hatcher  <timothy@apple.com>

        Mail appears to be double inverting code copied from Notes, Xcode, or Terminal.
        https://bugs.webkit.org/show_bug.cgi?id=201368
        rdar://problem/40529867

        Reviewed by Ryosuke Niwa.

        Dark mode content that is pasted should have the inline styles inverse color
        transformed by the color filter to match the color filtered document contents.

        Layout Test: editing/pasteboard/paste-dark-mode-color-filtered.html
        API Tests: PasteHTML.TransformColorsOfDarkContent, PasteHTML.DoesNotTransformColorsOfLightContent,
            PasteRTFD.TransformColorsOfDarkContent, PasteRTFD.DoesNotTransformColorsOfLightContent

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::inverseTransformColorIfNeeded): Added caret-color to the transformed properties.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::fragmentNeedsColorTransformed): Added.
        (WebCore::ReplaceSelectionCommand::inverseTransformColor): Added.
        (WebCore::ReplaceSelectionCommand::doApply): Call fragmentNeedsColorTransformed() and inverseTransformColor().
        * editing/ReplaceSelectionCommand.h:

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

        Unreviewed, drop extra whitespace added in r249515.

        * loader/EmptyFrameLoaderClient.h:

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

        Unreviewed build fix after r249501.

        r249501 seems to have exposed the fact that EmptyFrameLoaderClient.h is missing a #pragma once.

        * loader/EmptyFrameLoaderClient.h:

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

        REGRESSION (iOS 13): If an overflow:hidden with a non-zero scroll position is toggled to overflow:scroll, some other scroll causes its scroll position to get reset
        https://bugs.webkit.org/show_bug.cgi?id=201528
        rdar://problem/55044885

        Reviewed by Frédéric Wang.
        
        If, when an overflow scrolling node is created, the scroller has non-zero scroll
        position (for example, via toggling to overflow:hidden, setting scrollTop, then toggling
        to overflow:scroll), then on the next update its scroll position will reset back to zero.

        The bug was that newly created ScrollingTreeScrollingNodes didn't set m_currentScrollPosition
        to the scroll position coming from the state node, so a subsequent update could cause
        the 0,0 currentScrollPosition to get applied. If we're making a new node, and there's no
        requestedScrollPosition, then initialize m_currentScrollPosition.

        Test: scrollingcoordinator/ios/scroller-initial-scroll-position.html

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

2019-09-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make Promise implementation faster
        https://bugs.webkit.org/show_bug.cgi?id=200898

        Reviewed by Saam Barati.

        * Modules/streams/ReadableStream.js:
        (pipeThrough):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamError):
        (readableStreamReaderGenericRelease):

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

        Line artifacts in note body after viewing note with <attachment>s
        https://bugs.webkit.org/show_bug.cgi?id=201474
        <rdar://problem/51306108>

        Reviewed by Simon Fraser.

        Test: fast/attachment/attachment-border-should-stay-inside-attachment.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::attachmentBorderPath):
        (WebCore::paintAttachmentBorder):
        Inset the border rect by half the width, so that <attachment> doesn't
        paint out-of-bounds.

2019-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Local Overrides - Provide substitution content for resource loads (URL based)
        https://bugs.webkit.org/show_bug.cgi?id=201262
        <rdar://problem/13108764>

        Reviewed by Devin Rousso.

        Tests: http/tests/inspector/network/local-resource-override-basic.html
               http/tests/inspector/network/local-resource-override-main-resource.html
               http/tests/inspector/network/local-resource-override-script-tag.html
               http/tests/inspector/network/resource-response-inspector-override.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * Headers.cmake:
        New files.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInterceptRequestImpl):
        (WebCore::InspectorInstrumentation::shouldInterceptResponseImpl):
        (WebCore::InspectorInstrumentation::interceptResponseImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontends):
        (WebCore::InspectorInstrumentation::willInterceptRequest):
        (WebCore::InspectorInstrumentation::shouldInterceptResponse):
        (WebCore::InspectorInstrumentation::interceptResponse):
        (WebCore::InspectorInstrumentation::frontendCreated):
        (WebCore::InspectorInstrumentation::frontendDeleted):
        * inspector/InspectorInstrumentationPublic.cpp:
        * inspector/InspectorInstrumentationPublic.h:
        * inspector/InspectorInstrumentationWebKit.cpp:
        (WebCore::InspectorInstrumentationWebKit::shouldInterceptResponseInternal):
        (WebCore::InspectorInstrumentationWebKit::interceptResponseInternal):
        * inspector/InspectorInstrumentationWebKit.h: Added.
        (WebCore::InspectorInstrumentationWebKit::shouldInterceptResponse):
        (WebCore::InspectorInstrumentationWebKit::interceptResponse):
        Provide a slim InspectorInstrumentation API that can be used in the WebKit
        layer without a ton of includes.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::responseSource):
        (WebCore::InspectorNetworkAgent::disable):
        (WebCore::InspectorNetworkAgent::continuePendingResponses):
        (WebCore::InspectorNetworkAgent::setInterceptionEnabled):
        (WebCore::InspectorNetworkAgent::addInterception):
        (WebCore::InspectorNetworkAgent::removeInterception):
        (WebCore::InspectorNetworkAgent::willInterceptRequest):
        (WebCore::InspectorNetworkAgent::shouldInterceptResponse):
        (WebCore::InspectorNetworkAgent::interceptResponse):
        (WebCore::InspectorNetworkAgent::interceptContinue):
        (WebCore::InspectorNetworkAgent::interceptWithResponse):
        Manage a list of URLs that will be intercepted and send
        intercepts to an active frontend for response content.

        * inspector/agents/InspectorNetworkAgent.h:
        (WebCore::InspectorNetworkAgent::PendingInterceptResponse::PendingInterceptResponse):
        (WebCore::InspectorNetworkAgent::PendingInterceptResponse::~PendingInterceptResponse):
        (WebCore::InspectorNetworkAgent::PendingInterceptResponse::originalResponse):
        (WebCore::InspectorNetworkAgent::PendingInterceptResponse::respondWithOriginalResponse):
        (WebCore::InspectorNetworkAgent::PendingInterceptResponse::respond):
        Callback for an eventual intercept response.

        * platform/network/ResourceResponseBase.h:
        New ResponseSource - Inspector Override.

        * loader/DocumentLoader.cpp:
        (WebCore::logResourceResponseSource):
        * testing/Internals.cpp:
        (WebCore::responseSourceToString):
        Handle new response sources.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        Avoid preloading or using the cache for URLs that would be intercepted
        by an active Inspector frontend.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::remove):
        Assertion to help detect if we ever get override content into the MemoryCache.

        * loader/ResourceLoader.h:
        (WebCore::DocumentLoader::responseReceived):
        * loader/ResourceLoader.cpp:
        Fix typos.

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

        Expose WebPageProxy identifier to the Network Process
        https://bugs.webkit.org/show_bug.cgi?id=201467

        Reviewed by Geoffrey Garen.

        * loader/EmptyFrameLoaderClient.h:
        (isType):
        * loader/FrameLoaderClient.h:

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

        Remove unused SPI that accesses MemoryCache directly
        https://bugs.webkit.org/show_bug.cgi?id=201468

        Reviewed by Tim Horton.

        * loader/cache/MemoryCache.cpp:
        (WebCore::dummyCachedImageClient): Deleted.
        (WebCore::MemoryCache::addImageToCache): Deleted.
        (WebCore::MemoryCache::removeImageFromCache): Deleted.
        * loader/cache/MemoryCache.h:

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

        [LFC] Assert on FormattingContext escaping
        https://bugs.webkit.org/show_bug.cgi?id=201464
        <rdar://problem/55029574>

        Reviewed by Antti Koivisto.

        This patch asserts on accidental formatting context escaping. This is only a correctness issue at the moment,
        since we don't support multithreaded subtree layout yet.
        Normally we should not need to access display boxes in different formatting contexts during layout, but there are a few, justified cases when it is required.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::displayBoxForLayoutBox const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::displayBoxForLayoutBox const): Deleted.
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::absoluteDisplayBoxCoordinates const):
        (WebCore::Layout::FloatingContext::mapToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapTopToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapPointFromFormattingContextRootToFloatingStateRoot const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        [LFC] FormattingContext::map* functions are too generic.
        https://bugs.webkit.org/show_bug.cgi?id=201447
        <rdar://problem/55005733>

        Reviewed by Antti Koivisto.

        We don't need such generic mapping functions yet. This patch is also in preparation for
        asserting on formatting context escaping. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapTopToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapLeftToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapRightToFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::mapLeftToAncestor const): Deleted.
        (WebCore::Layout::FormattingContext::mapRightToAncestor const): Deleted.
        (WebCore::Layout::FormattingContext::mapBoxToAncestor const): Deleted.
        (WebCore::Layout::FormattingContext::mapTopToAncestor const): Deleted.
        (WebCore::Layout::FormattingContext::mapPointToAncestor const): Deleted.
        (WebCore::Layout::FormattingContext::mapPointToDescendent const): Deleted.
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::constraints const):
        (WebCore::Layout::FloatingContext::append):
        (WebCore::Layout::FloatingContext::absoluteDisplayBoxCoordinates const):
        (WebCore::Layout::FloatingContext::mapToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapTopToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapPointFromFormattingContextRootToFloatingStateRoot const):
        (WebCore::Layout::mapToFormattingContextRoot): Deleted.
        * layout/floats/FloatingContext.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2019-09-04  Antoine Quint  <graouts@apple.com>

        [iPadOS] Unable to change sheets on Airtable.com
        https://bugs.webkit.org/show_bug.cgi?id=201456
        <rdar://problem/51557377>

        Reviewed by Dean Jackson.

        Simulated mouse events are required to be able to manipulate cells and and columns on Airtable.com. However, dispatching a "mousedown" event on
        tabs allowing to pick a different sheet ends up calling preventDefault() and prevent "click" events from being dispatched, which makes it
        impossible to change sheet. We now limit the dispatch of simulated mouse events to the grid.

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

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

        Abstract out WebSocketChannel message queue
        https://bugs.webkit.org/show_bug.cgi?id=201359

        Reviewed by Alex Christensen.

        Move BlobLoader in its own file.
        Introduce NetworkSendQueue class to handle the sending of messages, some of them being blobs.
        This class ensures that messages will be sent in order, even though blob data is resolved asynchronously.

        Covered by existing tests.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobLoader.h: Added.
        (WebCore::BlobLoader::BlobLoader):
        (WebCore::BlobLoader::~BlobLoader):
        (WebCore::BlobLoader::didFinishLoading):
        (WebCore::BlobLoader::didFail):
        (WebCore::BlobLoader::complete):
        * fileapi/NetworkSendQueue.cpp: Added.
        (WebCore::NetworkSendQueue::NetworkSendQueue):
        (WebCore::NetworkSendQueue::enqueue):
        (WebCore::NetworkSendQueue::clear):
        (WebCore::NetworkSendQueue::processMessages):
        * fileapi/NetworkSendQueue.h: Added.

2019-09-04  Rob Buis  <rbuis@igalia.com>

        Allow checking whether image was created from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=200662

        Reviewed by Darin Adler.

        No behavior change.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::create):
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::createdByParser const):
        * html/HTMLTagNames.in:

2019-09-04  Zan Dobersek  <zdobersek@igalia.com>

        Remove unused ScrollingTreeOverflowScrollProxyNode implementation
        https://bugs.webkit.org/show_bug.cgi?id=201376

        Reviewed by Simon Fraser.

        Remove the unused ScrollingTreeOverflowScrollProxyNode implementation
        and header files that were added in r246723 but are not included in any
        build. Cocoa-specific implementation remains untouched, and other
        scrolling systems should be providing their own (as is the case with
        other types of nodes).

        * page/scrolling/ScrollingTreeOverflowScrollProxyNode.cpp: Removed.
        * page/scrolling/ScrollingTreeOverflowScrollProxyNode.h: Removed.

2019-09-04  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Sound is down-pitched when playing video from YLE Areena
        https://bugs.webkit.org/show_bug.cgi?id=201399

        Reviewed by Xabier Rodriguez-Calvar.

        If the FDK-AAC decoder is available, promote it and downrank the
        libav AAC decoders, due to their broken LC support, as reported in:
        https://ffmpeg.org/pipermail/ffmpeg-devel/2019-July/247063.html

        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):

2019-09-04  Pablo Saavedra  <psaavedra@igalia.com>

        [GTK] Build failure in Debian Stable and Ubuntu LTS bots after r249427
        https://bugs.webkit.org/show_bug.cgi?id=201434

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::waitForCPUSync):

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

        [macCatalyst] Unable to upload non-image files using drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=201438

        Reviewed by Tim Horton.

        On recent builds of macOS 10.15, NSItemProviders that are produced when dropping files from Finder into a
        macCatalyst app no longer contain `kUTTypeFileURL` as a registered type identifier. This means that the current
        heuristic for figuring out whether or not an item provider can be represented as a file upload is broken, since
        it thinks all dropped content is inline data.

        On iOS, we treat an NSItemProvider as an "uploaded" file as long as it hasn't been explicitly marked as inline
        data, such as a dragged selection from a native text field. However, on macCatalyst, all item providers return
        preferredPresentationStyle of UIPreferredPresentationStyleUnspecified, regardless of the source, so this check
        is useless on macCatalyst since it would consider all dropped content as a file upload (text selections, plain
        URLs, etc.).

        Luckily, NSItemProvider's -suggestedName is now populated in recent macOS builds, which means we have a much
        stronger (and more robust) hint that a dropped item provider is actually a file. For the time being, use this
        instead of always returning `NO`.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderLoadResult canBeRepresentedAsFileUpload]):

        Make a minor tweak to move the UIPreferredPresentationStyleInline check to shared code, such that when
        <rdar://55002929> is fixed, our code will automatically correctly treat inline item providers that have been
        explicitly marked as such.

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

        Remove redundant painting phase arguments from GraphicsLayerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=201443

        Reviewed by Simon Fraser.

        It is available from the GraphicsLayer.

        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::paintContents):
        * page/PageOverlayController.h:
        * page/mac/ServicesOverlayController.h:
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::paintGraphicsLayerContents):
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintFlagsForLayer const):

        Factor into a function.

        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderLayerCompositor.h:

2019-09-03  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Implement SampleLevel(), SampleBias(), and SampleGrad()
        https://bugs.webkit.org/show_bug.cgi?id=201385

        Reviewed by Dean Jackson.

        These are used in the Babylon.js demo.

        Tests: webgpu/whlsl/textures-sample-bias.html
               webgpu/whlsl/textures-sample-grad.html
               webgpu/whlsl/textures-sample-level.html

        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::sampleType):
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addFullTexture):
        (WebCore::WHLSL::Intrinsics::addDepthTexture):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        FrameLoader::FrameProgressTracker::progressCompleted() does not need a pageID
        https://bugs.webkit.org/show_bug.cgi?id=201431

        Reviewed by Antti Koivisto.

        FrameLoader::FrameProgressTracker::progressCompleted() does not need to request a pageID
        from the client. It can merely pass the Page object and the upper layers can very easily
        get the identifier of that page.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::progressCompleted):
        * loader/LoaderStrategy.h:

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

        REGRESSION (r249078): Flaky crash in com.apple.JavaScriptCore: Inspector::InjectedScriptModule::ensureInjected
        https://bugs.webkit.org/show_bug.cgi?id=201201
        <rdar://problem/54771560>

        Reviewed by Joseph Pecoraro.

        Tests: inspector/debugger/tail-deleted-frames-this-value.html
               inspector/heap/getRemoteObject.html

        * inspector/CommandLineAPIModuleSource.js:
        Avoid executing functions when injecting. Instead, modify the `CommandLineAPI` directly.

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

        [LFC][TFC] Initialize <thead><tbody><tfoot> display boxes.
        https://bugs.webkit.org/show_bug.cgi?id=201235
        <rdar://problem/54807060>

        Reviewed by Antti Koivisto.

        Set them as blank for now.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout const):

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

        [LFC][Floating] Replace all LayoutState::displayBoxForLayoutBox() calls with FormattingContext::displayBoxForLayoutBox()
        https://bugs.webkit.org/show_bug.cgi?id=201414
        <rdar://problem/54963302>

        Reviewed by Antti Koivisto.

        Fix the final LayoutState::displayBoxForLayoutBox() callsites. Now all displayBoxForLayoutBox() calls are directed to the
        established FormattingContext.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::mapHorizontalPositionToAncestor):
        (WebCore::Layout::FormattingContext::mapLeftToAncestor const):
        (WebCore::Layout::FormattingContext::mapRightToAncestor const):
        (WebCore::Layout::FormattingContext::mapBoxToAncestor const):
        (WebCore::Layout::FormattingContext::mapTopToAncestor const):
        (WebCore::Layout::FormattingContext::mapPointToAncestor const):
        (WebCore::Layout::FormattingContext::mapPointToDescendent const):
        (WebCore::Layout::FormattingContext::mapLeftToAncestor): Deleted.
        (WebCore::Layout::FormattingContext::mapRightToAncestor): Deleted.
        (WebCore::Layout::FormattingContext::mapBoxToAncestor): Deleted.
        (WebCore::Layout::FormattingContext::mapTopToAncestor): Deleted.
        (WebCore::Layout::FormattingContext::mapPointToAncestor): Deleted.
        (WebCore::Layout::FormattingContext::mapPointToDescendent): Deleted.
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::root const):
        (WebCore::Layout::FormattingContext::formattingState const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout):
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::mapToFormattingContextRoot):
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::constraints const):
        (WebCore::Layout::FloatingContext::append):
        * layout/floats/FloatingContext.h:
        (WebCore::Layout::FloatingContext::formattingContext const):
        (WebCore::Layout::FloatingContext::root const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):

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

        Cancelled transitions on Google image search leave content with opacity 0 sometimes
        https://bugs.webkit.org/show_bug.cgi?id=201482
        rdar://problem/54921036

        Reviewed by Tim Horton.
        
        If, in a single rendering update, we started an accelerated opacity transition, and then removed
        it, we'd still push the transition onto the CALayer with fillForwards and never remove it, so its
        effects would last forever.

        Fix by making GraphicsLayerCA::removeAnimation() remove animations from the uncomittedAnimations
        list as well.
        
        Also fix layer names in debug; if a layer's primaryLayerID changed, we'd fail to rename the
        CALayer, causing confusion when logging at layer dumps. Fix by adding the layer ID just
        before pushing the name to the platform layer.

        Some drive-by logging cleanup.

        Test: legacy-animation-engine/compositing/transitions/add-remove-transition.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::debugName const):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        (WebCore::GraphicsLayerCA::debugName const):
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::pauseAnimation):
        (WebCore::GraphicsLayerCA::seekAnimation):
        (WebCore::GraphicsLayerCA::removeAnimation):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationEnded):
        (WebCore::GraphicsLayerCA::updateNames):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):

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

        [LFC] FloatingState should not need to query for display boxes.
        https://bugs.webkit.org/show_bug.cgi?id=201408
        <rdar://problem/54958348>

        Reviewed by Antti Koivisto.

        This is in preparation for transitioning the floating codebase to use the formatting context for
        retrieving display boxes.
        FloatingContext should be responsible for adding/removing the new/existing float boxes to the state.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::append):
        (WebCore::Layout::FloatingContext::remove):
        * layout/floats/FloatingContext.h:
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):
        (WebCore::Layout::belongsToThisFloatingContext): Deleted.
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::horizontalMargin const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):

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

        [LFC][Floats] Do not pass FloatingState to FloatItem
        https://bugs.webkit.org/show_bug.cgi?id=201406
        <rdar://problem/54957097>

        Reviewed by Antti Koivisto.

        This is in preparation for transitioning the floating codebase to use the formatting context for
        retrieving display boxes. Now FloatItems don't need the FloatingState to compute absolute display boxes.  

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::append):
        * layout/floats/FloatingState.h:

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

        [LFC][Floats] Do not pass FloatingState to FloatAvoider/FloatBox
        https://bugs.webkit.org/show_bug.cgi?id=201405
        <rdar://problem/54956381>

        Reviewed by Antti Koivisto.

        This is in preparation for transitioning the floating codebase to use the formatting context for
        retrieving display boxes. Now FloatAvoiders/FloatBoxes don't need the FloatingState to compute absolute display boxes.

        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        (WebCore::Layout::FloatAvoider::overflowsContainingBlock const):
        (WebCore::Layout::FloatAvoider::rectInContainingBlock const):
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::floatingState const): Deleted.
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::FloatBox):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatBox.h:
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::mapToFormattingContextRoot):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        * platform/graphics/LayoutPoint.h:
        (WebCore::LayoutPoint::isZero const):

2019-09-03  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Enable WebAuthn by default for MobileSafari and SafariViewService
        https://bugs.webkit.org/show_bug.cgi?id=201369
        <rdar://problem/54903724>

        Reviewed by Brent Fulgham.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isSafariViewService):
        Adds a way to detect SafariViewService.

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

        Cache "compositingAncestor" during the compositing updateBackingAndHierarchy() tree walk
        https://bugs.webkit.org/show_bug.cgi?id=201403

        Reviewed by Antti Koivisto.

        Finding a layer's compositingAncestor requires an ancestor tree walk. We can avoid this during
        compositing updates, since we're already in the middle of a paint-order tree walk, and can just
        keep track of the current compositingAncestor on the way down.

        Shaves a few % off time in updateCompositingLayers().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::ComputedOffsets::ComputedOffsets):
        (WebCore::ComputedOffsets::fromAncestorGraphicsLayer):
        (WebCore::RenderLayerBacking::computePrimaryGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::UpdateBackingTraversalState::UpdateBackingTraversalState):
        (WebCore::RenderLayerCompositor::UpdateBackingTraversalState::stateForDescendants const):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::updateLayerCompositingState):
        (WebCore::RenderLayerCompositor::computeCoordinatedPositioningForLayer const):
        (WebCore::RenderLayerCompositor::coordinatedScrollingRolesForLayer const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForLayer):
        (WebCore::RenderLayerCompositor::updateScrollingNodeForPositioningRole):
        * rendering/RenderLayerCompositor.h:

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

        Make "clips compositing descendants" an indirect compositing reason
        https://bugs.webkit.org/show_bug.cgi?id=201381

        Reviewed by Antti Koivisto.

        Whether a layer has to composite to clip composited descendants is an "indirect" reason,
        just like having to composite for filters if there's a composited descendant. So add
        IndirectCompositingReason::Clipping, and have computeIndirectCompositingReason() compute this,
        replacing the code that ran in computeCompositingRequirements().

        This is some preparatory cleanup for webkit.org/b/201330.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer const):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::computeIndirectCompositingReason const):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const): Deleted.
        * rendering/RenderLayerCompositor.h:

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

        [LFC][Floats] Move FloatingState::constraints to FloatingContext
        https://bugs.webkit.org/show_bug.cgi?id=201393
        <rdar://problem/54939361>

        Reviewed by Antti Koivisto.

        This is in preparation for transitioning the floating codebase to use the formatting context for
        retrieving display boxes. Now FloatingContext (just like any other formatting context) holds on to the formatting
        context root.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout):
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::constraints const):
        * layout/floats/FloatingContext.h:
        (WebCore::Layout::FloatingContext::isEmpty const):
        (WebCore::Layout::FloatingContext::root const):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::constraints const): Deleted.
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::last const):
        (WebCore::Layout::FloatingState::isEmpty const): Deleted.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):

2019-09-03  Chris Lord  <clord@igalia.com>

        [GStreamer] Add support to copy YUV video textures into images
        https://bugs.webkit.org/show_bug.cgi?id=200922

        Reviewed by Philippe Normand and Xabier Rodriguez-Calvar.

        Use gst_gl_color_convert to convert to RGB before using ImageGStreamer
        with gstreamer-gl.

        No new tests, not changing behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2019-09-03  Chris Lord  <clord@igalia.com>

        [GStreamer] Add support to copy YUV video textures into platform textures
        https://bugs.webkit.org/show_bug.cgi?id=200914

        Reviewed by Xabier Rodriguez-Calvar and Miguel Gomez.

        Enable YUV (including planar and semi-planar) video texture to platform
        texture copy in VideoTextureCopierGStreamer.

        No new tests, not changing behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::platformLayerBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        (WebCore::TextureMapperPlatformLayerBuffer::textureVariant):

2019-09-03  Zan Dobersek  <zdobersek@igalia.com>  and  Chris Lord  <clord@igalia.com>

        [Texmap][GStreamer] Add support to upload more color formats into the texture
        https://bugs.webkit.org/show_bug.cgi?id=132869

        Reviewed by Xabier Rodriguez-Calvar.

        Support non-interleaved YUV color for gstreamer-gl

        This adds direct support for rendering I420, I444, YV12, YV21, Y42B,
        NV12, NV21 and VUYA color formats using GLGL shaders when using
        gstreamer-gl for video rendering. This avoids a surface copy on the GPU
        in those cases.

        No new tests, not changing behavior.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::waitForCPUSync):
        (WebCore::GstVideoFrameHolder::hasMappedTextures const):
        (WebCore::GstVideoFrameHolder::videoFrame const):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::optionsForFilterType):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::prepareTransformationMatrixWithFlags):
        (WebCore::TextureMapperGL::drawTexturePlanarYUV):
        (WebCore::TextureMapperGL::drawTextureSemiPlanarYUV):
        (WebCore::TextureMapperGL::drawTexturePackedYUV):
        (WebCore::TextureMapperGL::drawTexturedQuadWithProgram):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::TextureMapperPlatformLayerBuffer):
        (WebCore::TextureMapperPlatformLayerBuffer::~TextureMapperPlatformLayerBuffer):
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2019-09-03  Rob Buis  <rbuis@igalia.com>

        Remove support for load/error on link=prefetch
        https://bugs.webkit.org/show_bug.cgi?id=201348

        Reviewed by Youenn Fablet.

        Remove support for firing load/error on link=prefetch
        to address tracking concerns.

        Tests: http/wpt/prefetch/load-events-dynamic.html
               http/wpt/prefetch/load-events.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::linkLoaded):
        (WebCore::HTMLLinkElement::linkLoadingErrored):
        * html/HTMLLinkElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::addPrefetchLoadEventListener):

2019-09-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [WebCore] Resource usage accounting should accept non KERN_SUCCESS
        https://bugs.webkit.org/show_bug.cgi?id=201409

        Reviewed by Andreas Kling.

        While iterating threads, we are not suspending these threads. Underlying threads can have gone
        at any time and we will get non KERN_SUCCESS error code when a thread has gone. We should ignore
        these threads.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::threadInfos):

2019-09-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [SVG] fragment-only url 'url(#fragment)' should be resolved against the current document with regardless to HTML <base> element
        https://bugs.webkit.org/show_bug.cgi?id=189499
        <rdar://problem/44466206>

        Reviewed by Said Abou-Hallawa.

        Fragment-only URL 'url(#fragment)' should be resolved against the
        current document even if HTML <base> element is specified.
        Spec: <https://drafts.csswg.org/css-values/#local-urls>

        Tests: css3/filters/effect-reference-local-url-with-base.html
               css3/masking/clip-path-reference-local-url-with-base.html
               http/tests/svg/local-url-with-valid-base-and-resource.html
               svg/animations/local-url-target-reference.html
               svg/custom/local-url-reference-clip-path.html
               svg/custom/local-url-reference-fill.html
               svg/custom/local-url-reference-filter.html
               svg/custom/local-url-reference-marker.html
               svg/custom/local-url-reference-mask.html
               svg/custom/local-url-reference-pattern.html
               svg/custom/local-url-reference-radial-gradient.html
               svg/custom/local-url-reference-srcdoc.html
               svg/custom/local-url-reference-stroke.html
               svg/custom/local-url-reference-use.html
               svg/text/textpath-local-url-reference.html

        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::fragmentIdentifierFromIRIString): Return the fragment if the URL starts with '#'.

2019-09-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Remove a unused PlatformWheelEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=201398

        Reviewed by Don Olmstead.

        No behavior change.

        * platform/PlatformWheelEvent.h:
        * platform/win/WheelEventWin.cpp:
        Removed a unused PlatformWheelEvent constructor.

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

        [FTW] NativeImagePtr is drawn with invalid scaling
        https://bugs.webkit.org/show_bug.cgi?id=201391

        Reviewed by Don Olmstead.

        The current implementation of FTW improperly applies scaling factors to native images,
        resulting in blocky images (in some cases).

        This patch corrects the handling of native images, corrects a bug in bitmap render
        context scaling, and retrieves more data from the ImageDecoder's metadata system.

        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::createBitmapRenderTargetOfSize): Supply an appropriately sized
        pixel dimension for non-unity scale factors.
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::ImageBuffer): Include the scale factor when creating a
        bitmap render target.
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::frameOrientationAtIndex const): Read the orientation
        data form the image metadata.
        (WebCore::ImageDecoderDirect2D::frameAllowSubsamplingAtIndex const): Always return
        true, to match the CG implementation.
        (WebCore::ImageDecoderDirect2D::frameHasAlphaAtIndex const): Correct to match the
        behavior of CG.
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::drawNativeImage): Pass through the Direct2DOperations helper method, which
        handles scaling and subsampling properly.

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

        Introduce WorkerMessagePortChannelRegistry
        https://bugs.webkit.org/show_bug.cgi?id=201333

        Reviewed by Alex Christensen.

        This patch introduces a dedicated registry for workers.
        This registry will hop to the main thread and use the
        regular main thread registry to do the actual processing.

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::messagePortChannelProvider):
        * dom/Document.h:
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::hasPendingActivity const):
        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::takeAllMessagesForPort):
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannel.h:
        * dom/messageports/MessagePortChannelProvider.cpp:
        (WebCore::MessagePortChannelProvider::singleton):
        (WebCore::MessagePortChannelProvider::fromContext):
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::takeAllMessagesForPort):
        (WebCore::MessagePortChannelProviderImpl::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelProviderImpl.h:
        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::takeAllMessagesForPort):
        (WebCore::MessagePortChannelRegistry::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelRegistry.h:
        * dom/messageports/WorkerMessagePortChannelProvider.cpp: Added.
        (WebCore::WorkerMessagePortChannelProvider::WorkerMessagePortChannelProvider):
        (WebCore::WorkerMessagePortChannelProvider::~WorkerMessagePortChannelProvider):
        (WebCore::WorkerMessagePortChannelProvider::createNewMessagePortChannel):
        (WebCore::WorkerMessagePortChannelProvider::entangleLocalPortInThisProcessToRemote):
        (WebCore::WorkerMessagePortChannelProvider::messagePortDisentangled):
        (WebCore::WorkerMessagePortChannelProvider::messagePortClosed):
        (WebCore::WorkerMessagePortChannelProvider::postMessageToRemote):
        (WebCore::WorkerMessagePortChannelProvider::takeAllMessagesForPort):
        (WebCore::WorkerMessagePortChannelProvider::checkRemotePortForActivity):
        (WebCore::WorkerMessagePortChannelProvider::checkProcessLocalPortForActivity):
        * dom/messageports/WorkerMessagePortChannelProvider.h: Added.
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::messagePortChannelProvider):
        * workers/WorkerGlobalScope.h:

2019-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Resources don't work when only a subset of a bind group is referenced by a shader
        https://bugs.webkit.org/show_bug.cgi?id=201383

        Reviewed by Dean Jackson.

        Bind groups correspond to argument buffers in Metal. Both the Metal API and Metal Shading Language
        have to agree on the layout of exactly which resources lie at which byte offsets within an argument
        buffer.

        Before this patch, we only emitted code for the items in the argument buffer that were actually
        referenced by the shader source code. However, because these items are held inside a struct, if
        we omit one item from the middle of the struct, the byte offets of all the successive items would
        be wrong. This means that the Metal API and the shader would disagree about how to access these
        resources, making the resources inaccessible (and causing security problems).

        Tests: webgpu/whlsl/sparse-bind-group-2.html
               webgpu/whlsl/sparse-bind-group-3.html
               webgpu/whlsl/sparse-bind-group.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceHelperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitHelperTypes):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::matchResources):
        (WebCore::WHLSL::matchVertexAttributes):
        (WebCore::WHLSL::matchColorAttachments):

2019-09-01  Commit Queue  <commit-queue@webkit.org>

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

        broke WHLSL tests (Requested by litherum on #webkit).

        Reverted changeset:

        "[WHLSL] Resources don't work when only a subset of a bind
        group is referenced by a shader"
        https://bugs.webkit.org/show_bug.cgi?id=201383
        https://trac.webkit.org/changeset/249369

2019-09-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r249366.

        WinCairo WebKit2 crashes in some websites and the device scale
        factor is not correct in high DPI.

        Reverted changeset:

        "[WinCairo, FTW] Properly handle device scale factor"
        https://bugs.webkit.org/show_bug.cgi?id=201361
        https://trac.webkit.org/changeset/249366

2019-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Resources don't work when only a subset of a bind group is referenced by a shader
        https://bugs.webkit.org/show_bug.cgi?id=201383

        Reviewed by Dean Jackson.

        Bind groups correspond to argument buffers in Metal. Both the Metal API and Metal Shading Language
        have to agree on the layout of exactly which resources lie at which byte offsets within an argument
        buffer.

        Before this patch, we only emitted code for the items in the argument buffer that were actually
        referenced by the shader source code. However, because these items are held inside a struct, if
        we omit one item from the middle of the struct, the byte offets of all the successive items would
        be wrong. This means that the Metal API and the shader would disagree about how to access these
        resources, making the resources inaccessible (and causing security problems).

        Tests: webgpu/whlsl/sparse-bind-group-2.html
               webgpu/whlsl/sparse-bind-group-3.html
               webgpu/whlsl/sparse-bind-group.html

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceHelperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitHelperTypes):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::matchResources):
        (WebCore::WHLSL::matchVertexAttributes):
        (WebCore::WHLSL::matchColorAttachments):

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

        HTMLImageElement::decode() should return a resolved promise for decoding non bitmap images
        https://bugs.webkit.org/show_bug.cgi?id=201243

        Reviewed by Youenn Fablet.

        The specs: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-decode
        states that, decode() should resolve the pending promise if the decoding
        was requested for a non bitmap image.

        Test: fast/images/decode-non-bitmap-image-resolve.html

        * loader/ImageLoader.cpp:
        (WebCore::resolveDecodePromises):
        (WebCore::rejectDecodePromises):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::decode):
        (WebCore::ImageLoader::decodeError): Deleted.
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::hasPendingDecodePromises const):

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

        [WinCairo, FTW] Properly handle device scale factor
        https://bugs.webkit.org/show_bug.cgi?id=201361

        Reviewed by Don Olmstead.

        Update the Direct2D ImageBuffer/ImageBufferData classes to correctly handle
        the device scale factor.

        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::putByteArray):

2019-08-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        EXIF orientation should be respected when rendering images 
        https://bugs.webkit.org/show_bug.cgi?id=201123

        Reviewed by Simon Fraser.

        -- Image::size() will return the rendered size based on the image
           orientation. If image orientation is FromImage, ImageSource will query
           the actual image orientation from the ImageDecoder. The low level APIs
           might transpose the size just before calling the system API to draw
           the image.

        -- RenderElement::imageOrientation() will return ImageOrientation::FromImage
           for all images and for all ports till the CSS image-orientation specs
           is finalized.

        -- The default of ImagePaintingOptions argument of GraphicsContext::drawImage()
           will be changed to { ImageOrientation::FromImage }.

        -- Image element: RenderImage::paintIntoRect() will pass imageOrientation()
           which returns ImageOrientation::FromImage to GraphicsContext::drawImage().

        -- CSS background image: RenderBoxModelObject::paintFillLayerExtended will
           pass ImageOrientation::FromImage by default to GraphicsContext::drawTiledImage().

        -- Images on canvas: CanvasRenderingContext2DBase::drawImage() will pass
           ImageOrientation::FromImage by default to GraphicsContext::drawImage().

        -- SVG images: RenderSVGImage::paintForeground() calls GraphicsContext::drawImage()
           with the default ImagePaintingOptions which is now { ImageOrientation::FromImage }.

        -- SVG feImage filters: FEImage::platformApplySoftware() calls
           GraphicsContext::drawImage() with the default ImagePaintingOptions
           which is now { ImageOrientation::FromImage }.

        -- ImageDocument: RenderElement::imageOrientation() returns FromImage
           always and for all ports.

        Tests: fast/images/exif-orientation-background.html
               fast/images/exif-orientation-canvas.html
               fast/images/exif-orientation-content.html
               fast/images/exif-orientation-element-object-fit.html
               fast/images/exif-orientation-element.html
               fast/images/exif-orientation-image-object.html
               fast/images/exif-orientation-svg-feimage.html
               fast/images/exif-orientation-svg-image.html

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer const):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::drawImage):
        * platform/graphics/Image.h:
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::sizeRespectingOrientation const): Deleted.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::orientation):
        (WebCore::ImageSource::size):
        (WebCore::ImageSource::sizeRespectingOrientation): Deleted.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size const):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::imageOrientation const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::size const):
        * svg/graphics/SVGImageForContainer.h:

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

        XMLHttpRequest: responseXML returns null if the Content-Type is valid (end in +xml) in some cases
        https://bugs.webkit.org/show_bug.cgi?id=46146

        Reviewed by Youenn Fablet.

        Make response MIME type fallback to text/xml in case mimeType could
        not be extracted [1] and use the stricter ParsedContentType for that.

        Behavior matches Firefox.

        Test: web-platform-tests/xhr/responsexml-media-type.htm

        [1] https://xhr.spec.whatwg.org/#response-mime-type

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType const):

2019-08-31  Frederic Wang  <fwang@igalia.com>

        Fix interpretation of fraction shifts
        https://bugs.webkit.org/show_bug.cgi?id=201242

        Reviewed by Rob Buis.

        In fractions, numerator/denominator shifts are currently interpreted relative to the math
        axis while they should be relative to the baseline [1]. This patch refactors the
        RenderMathMLFraction to do that and aligns more on MathML Core [2] [3]. This fixes serious
        rendering bugs in fractions.

        [1] https://github.com/mathml-refresh/mathml/issues/123
        [2] https://mathml-refresh.github.io/mathml-core/#fraction-with-nonzero-line-thickness
        [3] https://mathml-refresh.github.io/mathml-core/#fraction-with-zero-line-thickness

        No new tests, existing tests updated.

        * rendering/mathml/RenderMathMLFraction.h: ascentOverHorizontalAxis() is replaced with
        fractionAscent() which gives the actual baseline position rather than the math axis position.
        fractionParameters() and stackParameters() are modified so that they only return the shifts,
        now stored in a shared FractionParameters struct.
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::fractionParameters const): Store existing parameters in local
        variables and perform adjustments to the shift values so that the minimal gap constraints
        are satisfied. Return them as a FractionParameters.
        (WebCore::RenderMathMLFraction::stackParameters const): Ditto.
        (WebCore::RenderMathMLFraction::fractionAscent const): This calculates the ascent above
        the baseline as described in [2] [3] and replaces ascentOverHorizontalAxis. To minimize
        changeset, this continues to ignore contribution of denominator size and not to distinguish
        ink or non-ink metrics.
        (WebCore::RenderMathMLFraction::layoutBlock): The position of the denominator is now just
        calculated as a shift from the baseline. The height is given by the bottom of the
        denominator. The old "ascent + mathAxisHeight() + denominatorDescent" does not make any
        sense.
        (WebCore::RenderMathMLFraction::paint): Use fractionAscent() instead of
        ascentOverHorizontalAxis().
        (WebCore::RenderMathMLFraction::firstLineBaseline const): Ditto.

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

        DocumentStorageAccess::hasStorageAccess() / requestStorageAccess() don't need to know about pageID / frameID
        https://bugs.webkit.org/show_bug.cgi?id=201364

        Reviewed by John Wilander.

        DocumentStorageAccess::hasStorageAccess() / requestStorageAccess() don't need to know about pageID / frameID. pageID is
        redundant since it is being ignored by the callee. For the frame, simply pass the frame object in.

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::hasStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::hasStorageAccess):
        (WebCore::ChromeClient::requestStorageAccess):

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

        [LFC] Transition from Geometry(formattingContext()) to formattingContext().quirks()
        https://bugs.webkit.org/show_bug.cgi?id=201372
        <rdar://problem/54905514>

        Reviewed by Antti Koivisto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::close):

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

        [LFC] Proxy LayoutState::displayBoxForLayoutBox() calls through FormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=201365
        <rdar://problem/54900815>

        Reviewed by Antti Koivisto.

        This patch is in preparation for enforcing displayBoxForLayoutBox() calls to stay within the current formatting context.
        (There are a few odd cases left (floats and coordinate mapping) and they are going to be addressed in a separate patch.)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::displayBoxForLayoutBox const):
        (WebCore::Layout::FormattingContext::hasDisplayBox const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::hasClearance):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::formattingContext const):
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        (WebCore::Layout::LineLayout::layoutState const): Deleted.
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::isInlineContainerConsideredEmpty):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout):
        (WebCore::Layout::TableFormattingContext::computedTableWidth):

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

        WebPage::fromCorePage() to take and return a C++ reference
        https://bugs.webkit.org/show_bug.cgi?id=201367

        Reviewed by Antti Koivisto.

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow const):

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

        Add support for postMessage buffering between the service worker and window
        https://bugs.webkit.org/show_bug.cgi?id=201169

        Reviewed by Youenn Fablet.

        As per the Service Worker specification, a service worker client's message
        queue is initially disabled and only gets enabled after:
        - The DOMContentLoaded event has been fired
        or
        - The client sets the navigator.serviceWorker.onmessage event handler
        or
        - navigator.serviceWorker.startMessages() is called

        While the message queue is disabled, messages posted by the service worker
        to the client simply get queued and only get processed once the queue gets
        enabled.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        Call startMessages() on the ServiceWorkerContainer once the DOMContentLoaded event has
        been fired.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ensureServiceWorkerContainer):
        * dom/ScriptExecutionContext.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        Fix a bug where a service worker would not be able to post a message to a client until
        that client has accessed navigator.serviceWorker (since the ServiceWorkerContainer is
        lazy initialized). To address the issue, we now initialize the ServiceWorkerContainer
        when a message is received from the service worker. Previously, messages were just
        getting dropped.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        When the ServiceWorkerContainer is constructed, suspend its message queue if its context
        document is still parsing.

        (WebCore::ServiceWorkerContainer::startMessages):
        Resume the message queue when startMessages() is called.

        (WebCore::ServiceWorkerContainer::postMessage):
        Enqueue the event instead of firing it right away.

        (WebCore::ServiceWorkerContainer::addEventListener):
        if navigator.serviceWorker.onmessage event handler gets set by the JavaScript, call
        startMessages().

        * workers/service/ServiceWorkerContainer.h:

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

        Minor optimization in determineNonLayerDescendantsPaintedContent()
        https://bugs.webkit.org/show_bug.cgi?id=201352

        Reviewed by Antti Koivisto.

        It's cheaper to call renderText.hasRenderedText() than renderText.linesBoundingBox(), because
        the latter has to traverse all the InlineTextBoxes. This code path is fairly hot when
        scrolling twitter feeds, since it's called from RenderLayer::updateLayerPositionsAfterScroll()
        which calls RenderLayer::isVisuallyNonEmpty().

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

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

        [WHLSL] Remove getters/setters/anders
        https://bugs.webkit.org/show_bug.cgi?id=201008

        Reviewed by Robin Morisset.

        This patch changes WHLSL in a significant way. This patch removes getters/setters/anders
        from the language. In our experience writing WHLSL shaders, these parts of the language
        went unused, and they added a lot of complexity to the implementation of the compiler.
        
        This patch now treats field accesses and array indexes as intrinsics inside the compiler.
        This patch removes all notions of named operators, anders, and indexed operators
        from the compiler and the standard library. The checker now intrinsically knows the
        return type for property accesses and indexed expressions based on what the
        base type is.
        
        To make this work in practice was difficult, since getters/setters/anders
        solved a lot of the difficult problems we had in generating metal code. For
        example, all swizzle operators were getters and setters, so assigning to a
        swizzle fell out naturally from implementing setters. However, during metal
        codegen, all we see is a dot expression with "xy" as a property. Our previous
        architecture of emitting Metal code using pointers which represent lvalues
        doesn't work because you can't take the address of a swizzle. For example,
        "auto* x = &vector.yz" is invalid metal code.
        
        So, this patch changes the entire metal code generator to emit WHLSL expressions
        as Metal expressions. To do this, I had to change a lot about how the compiler
        was implemented:
        - I changed the indexed accesses of matrices to return columns instead of
        rows. This allowed WHLSL code like `mat[0].xy = 42` to be compiled into
        the equivalent metal code of `mat[0].xy = 42`.
        - I changed the native function inliner to emit expressions instead of
        statements.
        - We also simplify the language by removing null and requiring all
        reference type variables to have an initializer. This means that
        null is no longer a valid value, which allows us to omit null checks
        inside the metal code generator. To make this work with array
        accesses, we now clamp accesses instead of returning null for OOB
        accesses.
        
        I've also filed one required bug as a followup. I didn't include it in this
        patch to make it easier to review along. Currently, there are two places in
        metal codegen where we evaluate effects twice. That will be fixed in:
        https://bugs.webkit.org/show_bug.cgi?id=201251

        Tests: webgpu/whlsl/address-of-swizzle.html
               webgpu/whlsl/array-oob-alias.html
               webgpu/whlsl/matrix-index-assign.html
               webgpu/whlsl/matrix-index-order.html
               webgpu/whlsl/oob-access-2.html
               webgpu/whlsl/operator-syntax.html

        * Modules/webgpu/WHLSL/AST/WHLSLAST.h:
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.cpp:
        (WebCore::WHLSL::AST::Expression::destroy):
        (WebCore::WHLSL::AST::Expression::destruct):
        (WebCore::WHLSL::AST::PropertyAccessExpression::getterFunctionName const): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setterFunctionName const): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::anderFunctionName const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::copyTypeTo const):
        (WebCore::WHLSL::AST::Expression::isMakePointerExpression const):
        (WebCore::WHLSL::AST::Expression::isNullLiteral const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.cpp: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.h: Removed.
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::getterFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::anderFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::threadAnderFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setterFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setGetterFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setAnderFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setThreadAnderFunction): Deleted.
        (WebCore::WHLSL::AST::PropertyAccessExpression::setSetterFunction): Deleted.
        (): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLType.cpp:
        (WebCore::WHLSL::AST::Type::destroy):
        (WebCore::WHLSL::AST::Type::destruct):
        (WebCore::WHLSL::AST::ResolvableType::canResolve const):
        (WebCore::WHLSL::AST::ResolvableType::conversionCost const):
        * Modules/webgpu/WHLSL/AST/WHLSLType.h:
        (WebCore::WHLSL::AST::Type::isIntegerLiteralType const):
        (WebCore::WHLSL::AST::Type::isNullLiteralType const): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::HoistedVariableCollector::HoistedVariableCollector):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitConstantExpressionString):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValueWithNullability): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValue): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendLeftValue): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValue): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValueAndNullability): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastLeftValue): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:
        (WebCore::WHLSL::Metal::metalCodePrologue):
        (WebCore::WHLSL::Metal::generateMetalCode):
        (WebCore::WHLSL::Metal::metalCodeProlog): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        (WebCore::WHLSL::Metal::vectorInnerType): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        (WebCore::WHLSL::ASTDumper::visit):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h:
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::wrappedUintType):
        (WebCore::WHLSL::Checker::normalizedTypeForFunctionKey):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::Checker::resolveFunction):
        (WebCore::WHLSL::Checker::assignConcreteType):
        (WebCore::WHLSL::resolveWithOperatorLength): Deleted.
        (WebCore::WHLSL::Checker::genericPointerType): Deleted.
        (WebCore::WHLSL::Checker::finishVisiting): Deleted.
        * Modules/webgpu/WHLSL/WHLSLHighZombieFinder.cpp:
        (WebCore::WHLSL::findHighZombies):
        (): Deleted.
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::commit):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::boolVectorTypeForSize const):
        (WebCore::WHLSL::Intrinsics::uintVectorTypeForSize const):
        (WebCore::WHLSL::Intrinsics::intVectorTypeForSize const):
        (WebCore::WHLSL::Intrinsics::floatVectorTypeForSize const):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        * Modules/webgpu/WHLSL/WHLSLLiteralTypeChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseEnumerationMember):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLProgram.cpp: Added.
        (WebCore::WHLSL::Program::isValidVectorProperty):
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::resolveProperties):
        (WebCore::WHLSL::PropertyResolver::visit): Deleted.
        (WebCore::WHLSL::wrapAnderCallArgument): Deleted.
        (WebCore::WHLSL::anderCallArgument): Deleted.
        (WebCore::WHLSL::setterCall): Deleted.
        (WebCore::WHLSL::getterCall): Deleted.
        (WebCore::WHLSL::modify): Deleted.
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue): Deleted.
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting): Deleted.
        (WebCore::WHLSL::LeftValueSimplifier::visit): Deleted.
        (WebCore::WHLSL::PropertyResolver::simplifyLeftValue): Deleted.
        * Modules/webgpu/WHLSL/WHLSLPruneUnreachableStandardLibraryFunctions.cpp:
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        [LFC] Pass FormattingContext to Geometry/Quirks/BlockMarginCollapsing classes
        https://bugs.webkit.org/show_bug.cgi?id=201355
        <rdar://problem/54895959>

        Reviewed by Antti Koivisto.

        This is in preparation for enforcing LFC to not call outside of the formatting context.
        LayoutState::displayBoxForLayoutBox calls will be forced to go through the FormattingContext class to
        check LFC escaping.


        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::isBlockFormattingContext const):
        (WebCore::Layout::FormattingContext::isInlineFormattingContext const):
        (WebCore::Layout::FormattingContext::isTableFormattingContext const):
        (WebCore::Layout::FormattingContext::Geometry::layoutState const):
        (WebCore::Layout::FormattingContext::Geometry::layoutState):
        (WebCore::Layout::FormattingContext::Geometry::formattingContext const):
        (WebCore::Layout::FormattingContext::geometry const):
        (WebCore::Layout::FormattingContext::Quirks::layoutState const):
        (WebCore::Layout::FormattingContext::Quirks::layoutState):
        (WebCore::Layout::FormattingContext::Quirks::formattingContext const):
        (WebCore::Layout::FormattingContext::quirks const):
        (WebCore::Layout::FormattingContext::Geometry::Geometry):
        (WebCore::Layout::FormattingContext::Quirks::Quirks):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::formattingContext const):
        (WebCore::Layout::BlockFormattingContext::geometry const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::formattingContext const):
        (WebCore::Layout::BlockFormattingContext::marginCollapse const):
        (WebCore::Layout::BlockFormattingContext::Quirks::formattingContext const):
        (WebCore::Layout::BlockFormattingContext::quirks const):
        (WebCore::Layout::BlockFormattingContext::Geometry::Geometry):
        (WebCore::Layout::BlockFormattingContext::Quirks::Quirks):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::MarginCollapse):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layoutState const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingContext const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::formattingRoot const):
        (WebCore::Layout::InlineFormattingContext::Quirks::formattingContext const):
        (WebCore::Layout::InlineFormattingContext::quirks const):
        (WebCore::Layout::InlineFormattingContext::Geometry::formattingContext const):
        (WebCore::Layout::InlineFormattingContext::geometry const):
        (WebCore::Layout::InlineFormattingContext::Geometry::Geometry):
        (WebCore::Layout::InlineFormattingContext::Quirks::Quirks):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::InlineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::isVisuallyEmpty const):
        (WebCore::Layout::Line::close):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::adjustBaselineAndLineHeight):
        (WebCore::Layout::Line::inlineItemContentHeight const):
        (WebCore::Layout::Line::layoutState const):
        (WebCore::Layout::Line::formattingContext const):
        * layout/inlineformatting/InlineLine.h:
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::Geometry::formattingContext const):
        (WebCore::Layout::TableFormattingContext::geometry const):
        (WebCore::Layout::TableFormattingContext::Geometry::Geometry):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        Unreviewed, rolling out r249338.

        Caused 500+ layout test failures on WK1

        Reverted changeset:

        "Add support for postMessage buffering between the service
        worker and window"
        https://bugs.webkit.org/show_bug.cgi?id=201169
        https://trac.webkit.org/changeset/249338

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

        Remove HAVE_CFNETWORK_WITH_IGNORE_HSTS conditional
        https://bugs.webkit.org/show_bug.cgi?id=201279

        Reviewed by Darin Adler.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::schemeWasUpgradedDueToDynamicHSTS): Deleted.

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

        Caret does not appear in text field inside a transformed, overflow: hidden container
        https://bugs.webkit.org/show_bug.cgi?id=201317
        <rdar://problem/54859264>

        Reviewed by Simon Fraser.

        This patch refactors the heuristic for determining whether to suppress selection gestures and UI in a way that
        fixes the corner case encountered in this bug. To understand why this test case fails with our existing
        heuristic, consider the below test case.

        Let's say we have an input field inside an "overflow: hidden;" container, which is positioned in such a way that
        it is completely clipped by its enclosing container which is also "overflow: hidden". Our existing logic would
        appropriately identify this as a hidden editable element.

        However, let's now apply a transform to the input field's closest "overflow: hidden" ancestor, such that the
        field is now visible. Since RenderLayer::offsetFromAncestor doesn't take transforms into account when we try to
        find the offset of the "overflow: hidden" layer relative to the root view, we end up passing an offsetFromRoot
        of (0, 100vw) to RenderLayer::calculateClipRects, which computes a background clip rect of (0, 0, 100vw, 100vh).

        This means that at the end of RenderLayer::calculateClipRects, we end up intersecting the background clip rect
        (0, 0, 100vw, 100vh) against (100vw, 0, 100vw, 100vh), which results in the empty rect, and subsequently makes
        us believe we're editing a hidden editable element.

        Instead of tacking on more logic to isTransparentOrFullyClippedRespectingParentFrames, we can fix this by using
        RenderObject::computeVisibleRectInContainer instead, performing a similar walk up the render tree to compute the
        visible rect of each focused element or subframe relative to its root. This is capable of taking transforms into
        account. See comments below for more details.

        Test: editing/selection/ios/show-selection-in-transformed-container-2.html

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

        Split out isTransparentOrFullyClippedRespectingParentFrames into two methods: RenderLayer's
        isTransparentRespectingParentFrames, and RenderObject's hasNonEmptyVisibleRectRespectingParentFrames. The
        transparency check starts at the enclosing layer and walks up the layer tree, while the non-empty visible rect
        check looks for renderers that are completely empty relative to their root views.

        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::hasNonEmptyVisibleRectRespectingParentFrames const):

        Rewrite logic for detecting completely clipped editable areas (that formerly lived in
        isTransparentOrFullyClippedRespectingParentFrames) to use computeVisibleRectInContainer instead.

        * rendering/RenderObject.h:

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

        Add support for postMessage buffering between the service worker and window
        https://bugs.webkit.org/show_bug.cgi?id=201169

        Reviewed by Youenn Fablet.

        As per the Service Worker specification, a service worker client's message
        queue is initially disabled and only gets enabled after:
        - The DOMContentLoaded event has been fired
        or
        - The client sets the navigator.serviceWorker.onmessage event handler
        or
        - navigator.serviceWorker.startMessages() is called

        While the message queue is disabled, messages posted by the service worker
        to the client simply get queued and only get processed once the queue gets
        enabled.

        No new tests, rebaselined existing test.

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        Call startMessages() on the ServiceWorkerContainer once the DOMContentLoaded event has
        been fired.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::ensureServiceWorkerContainer):
        * dom/ScriptExecutionContext.h:
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        Fix a bug where a service worker would not be able to post a message to a client until
        that client has accessed navigator.serviceWorker (since the ServiceWorkerContainer is
        lazy initialized). To address the issue, we now initialize the ServiceWorkerContainer
        when a message is received from the service worker. Previously, messages were just
        getting dropped.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ServiceWorkerContainer):
        When the ServiceWorkerContainer is constructed, suspend its message queue if its context
        document is still parsing.

        (WebCore::ServiceWorkerContainer::startMessages):
        Resume the message queue when startMessages() is called.

        (WebCore::ServiceWorkerContainer::postMessage):
        Enqueue the event instead of firing it right away.

        (WebCore::ServiceWorkerContainer::addEventListener):
        if navigator.serviceWorker.onmessage event handler gets set by the JavaScript, call
        startMessages().

        * workers/service/ServiceWorkerContainer.h:

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

        Add system tracing points for compositing updates, and touch-event dispatching
        https://bugs.webkit.org/show_bug.cgi?id=201327

        Reviewed by Alex Christensen.

        TraceScope in RenderLayerCompositor::updateCompositingLayers().

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

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

        [FTW] Use DirectX SharedResource as basis for SharedBitmap
        https://bugs.webkit.org/show_bug.cgi?id=201157

        Reviewed by Alex Christensen.

        Currently an ID2D1Bitmap is used as the backing store for the SharedBitmap that is the
        base type for sharing data between the WebContent Process and the UIProcess. However, this
        involves moving GPU memory to local memory, copying that memory into the SharedMemory member
        of the SharedBitmap, then building a new GPU bitmap on the UIProcess side from that SharedMemory.

        Profiling indicates that this is the single largest place FTW WebKit spends its time.

        Instead, we should use Direct2D's ability to render to an IDXGISurface, which can be shared
        between multiple processes. This should avoid the GPU->CPU copy, the Direct2D-allocated
        CPU->Shared Memory copy, and the shared memory to GPU copy.
 
        * platform/graphics/win/BackingStoreBackendDirect2D.h:
        (WebCore::BackingStoreBackendDirect2D::renderTarget const): Change type.
        (WebCore::BackingStoreBackendDirect2D::dxSurface const): Added.
        (WebCore::BackingStoreBackendDirect2D::BackingStoreBackendDirect2D): Require a DXD11 device.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp:
        (WebCore::BackingStoreBackendDirect2DImpl::BackingStoreBackendDirect2DImpl): Use Direct2D's
        IDXGISurface to make a render target we can use to support our fast cross-process sharing.
        (WebCore::BackingStoreBackendDirect2DImpl::scroll):
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::fillRect): Remove unneeded PlatformContextStateSaver.
        (WebCore::Direct2D::fillRoundedRect): Ditto.
        (WebCore::Direct2D::fillRectWithGradient): Ditto.
        (WebCore::Direct2D::fillPath): Ditto.
        (WebCore::Direct2D::strokePath): Ditto.
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::pixelFormat): Switch to constants for bitmap format.
        (WebCore::Direct2D::createDXGISurfaceOfSize): Added.
        (WebCore::Direct2D::createSurfaceRenderTarget): Added.
        (WebCore::Direct2D::writeDiagnosticPNGToPath):
        (WebCore::Direct2D::dxgiImmediateContext): Added.
        (WebCore::Direct2D::defaultDirectXDevice): Added.
        (WebCore::Direct2D::createDeviceAndContext): Added.
        (WebCore::Direct2D::toDXGIDevice): Added.
        (WebCore::Direct2D::factoryForDXGIDevice): Added.
        * platform/graphics/win/Direct2DUtilities.h:

2019-08-30  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: update size of database when database operation is completed
        https://bugs.webkit.org/show_bug.cgi?id=201057

        Reviewed by Youenn Fablet.

        Currently when a database operation was completed, we re-computed the disk usage of the origin. This computation 
        listed all databases in the origin directory and read the size of each database file, which was very inefficient 
        because the completed operation should only affect one database.

        This patch makes UniqueIDBDatabase keep track of database size and reports size change to QuotaUser.

        Tested PerformanceTests/IndexedDB/basic/objectstore-add.html on release build minibrowser. This change makes
        the test over 50% faster.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::QuotaUser::increaseSpaceUsed):
        (WebCore::IDBServer::IDBServer::QuotaUser::decreaseSpaceUsed):
        (WebCore::IDBServer::IDBServer::computeSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::increaseSpaceUsed):
        (WebCore::IDBServer::IDBServer::decreaseSpaceUsed):
        (WebCore::IDBServer::IDBServer::setSpaceUsed): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::databaseSize const):
        (WebCore::IDBServer::MemoryIDBBackingStore::close):
        (WebCore::IDBServer::MemoryIDBBackingStore::databasesSizeForOrigin const): Deleted.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForDirectory):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseSize const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::close):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForFolder): Deleted.
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::deleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::shutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose):
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::openBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didOpenBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::postDatabaseTaskReply):
        (WebCore::IDBServer::UniqueIDBDatabase::updateSpaceUsedIfNeeded):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-08-30  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Replaying the video should update currentTime
        https://bugs.webkit.org/show_bug.cgi?id=201307

        Reviewed by Xabier Rodriguez-Calvar.

        While writing a test to confirm that https://bugs.webkit.org/show_bug.cgi?id=190050
        has indeed been fixed I noticed a non-conformity: when the video has
        ended, right after calling .play() for a second playback currentTime
        did not return zero, but the video duration.

        This turned to be due to the m_isEndReached flag not being reseted on
        seeks (replaying a video incurs in a seek done from multi-platform
        code).

        Test: imported/w3c/web-platform-tests/media-source/mediasource-replay.html

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):

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

        [LFC] Make Geometry/Quirk/MarginCollapse subclasses stateful.
        https://bugs.webkit.org/show_bug.cgi?id=201343
        <rdar://problem/54883787>

        Reviewed by Antti Koivisto.

        This is in preparation for enforcing LFC to not call outside of the formatting context.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const): Deleted.
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const): Deleted.
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent const): Deleted.
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::layoutState const):
        (WebCore::Layout::FormattingContext::Geometry::layoutState):
        (WebCore::Layout::FormattingContext::geometry const):
        (WebCore::Layout::FormattingContext::Quirks::layoutState const):
        (WebCore::Layout::FormattingContext::Quirks::layoutState):
        (WebCore::Layout::FormattingContext::quirks const):
        (WebCore::Layout::FormattingContext::Geometry::Geometry):
        (WebCore::Layout::FormattingContext::Quirks::Quirks):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto const):
        (WebCore::Layout::FormattingContext::Geometry::fixedValue const):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight const):
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases const):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder const):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding const):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::constrainByMinMaxWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::fixedValue): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight): Deleted.
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned): Deleted.
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedBorder): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedPadding): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::constrainByMinMaxWidth): Deleted.
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren):
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForAncestors):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFormattingRoot):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        (WebCore::Layout::BlockFormattingContext::setEstimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::layout const): Deleted.
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const): Deleted.
        (WebCore::Layout::BlockFormattingContext::placeInFlowPositionedChildren const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeStaticVerticalPosition const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeStaticHorizontalPosition const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPosition const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForAncestors const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFormattingRoot const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForFloatClear const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints const): Deleted.
        (WebCore::Layout::BlockFormattingContext::setEstimatedMarginBefore const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::geometry const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::layoutState const):
        (WebCore::Layout::BlockFormattingContext::marginCollapse const):
        (WebCore::Layout::BlockFormattingContext::quirks const):
        (WebCore::Layout::BlockFormattingContext::removeEstimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::Geometry::Geometry):
        (WebCore::Layout::BlockFormattingContext::Quirks::Quirks):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::MarginCollapse):
        (WebCore::Layout::BlockFormattingContext::removeEstimatedMarginBefore const): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition): Deleted.
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::needsStretching const):
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreCollapsedQuirkMargin const):
        (WebCore::Layout::BlockFormattingContext::Quirks::needsStretching): Deleted.
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldIgnoreCollapsedQuirkMargin): Deleted.
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSiblingMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::positiveNegativeMarginAfter):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginBefore):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeIgnoringCollapsingThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updatePositiveNegativeMarginValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithPreviousSiblingMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithFirstInFlowChildMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithSiblingMarginBeforeWithClearance): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithLastInFlowChildMarginAfter): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithNextSiblingMarginBefore): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox):
        (WebCore::Layout::InlineFormattingContext::layout const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints const): Deleted.
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const): Deleted.
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::quirks const):
        (WebCore::Layout::InlineFormattingContext::geometry const):
        (WebCore::Layout::InlineFormattingContext::Geometry::Geometry):
        (WebCore::Layout::InlineFormattingContext::Quirks::Quirks):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin): Deleted.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineFormattingContextQuirks.cpp:
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing const):
        (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints const):
        (WebCore::Layout::InlineFormattingContext::Quirks::lineDescentNeedsCollapsing): Deleted.
        (WebCore::Layout::InlineFormattingContext::Quirks::lineHeightConstraints): Deleted.
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::close):
        * layout/inlineformatting/InlineLine.h:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout):
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computedTableWidth):
        (WebCore::Layout::TableFormattingContext::distributeAvailableWidth):
        (WebCore::Layout::TableFormattingContext::layout const): Deleted.
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints const): Deleted.
        (WebCore::Layout::TableFormattingContext::ensureTableGrid const): Deleted.
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns const): Deleted.
        (WebCore::Layout::TableFormattingContext::computedTableWidth const): Deleted.
        (WebCore::Layout::TableFormattingContext::distributeAvailableWidth const): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::geometry const):
        (WebCore::Layout::TableFormattingContext::Geometry::Geometry):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin const):
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin): Deleted.

2019-08-30  Keith Rollin  <krollin@apple.com>

        Remove AppKitCompatibilityDeclarations.h
        https://bugs.webkit.org/show_bug.cgi?id=201283
        <rdar://problem/54822042>

        Reviewed by Alexey Proskuryakov.

        The two copies of these files -- on in WTF, one in MiniBrowser -- are
        empty and can be removed.

        No new tests -- no new or changed functionality.

        * WebCorePrefix.h:

2019-08-30  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Gracefully fail on invalid non-first initialization segment
        https://bugs.webkit.org/show_bug.cgi?id=201322

        Reviewed by Xabier Rodriguez-Calvar.

        In normal operation of AppendPipeline, except during tear down,
        qtdemux never removes a pad. Even if a new initialization segment is
        appended, the pad is reused.

        There is an exception though: when the new initialization segment has
        an incompatible set of tracks. This is invalid under the MSE spec and
        should produce an error, but in this case this was making an assertion
        fail -- in particular by sending an EOS to the to-be-removed pad, which
        AppendPipeline doesn't expect.

        This patch changes the assertion with graceful error handling for that
        error.

        Fixes media/media-source/media-source-seek-detach-crash.html

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleErrorConditionFromStreamingThread):
        (WebCore::AppendPipeline::handleErrorSyncMessage):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:

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

        [GStreamer] Do not ref the player count from background threads.
        https://bugs.webkit.org/show_bug.cgi?id=201222

        Reviewed by Xabier Rodriguez-Calvar.

        Test: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html

        In the sync-message handler, a ref() was being taken waiting for a
        CDM instance to be attached. This hits asserts since you are not
        allowed to ref() an object created on the main thread
        (BasePlayer) on a background thread.

        The protection condition was overly scoped, tidied up the locking
        and made it more granular. To avoid needing to hold a ref() in the
        background thread, use instead a semaphore to signal when a CDM
        instance is attached, or the player has been destroyed.

        Also remove an erroneous safe-guard, the operator= in
        isCDMInstanceAvailable will ref() the CDMInstance for us. This use
        of holding a reference to CDMInstance in the decryptors is not
        thread-safe, and now we have a problem since there's no clean way
        to communicate with CDMInstance from background threads without
        being thread unsafe. For ClearKey and Widevine, a thread safe
        ProxyCDM needs to be designed and passed to background
        threads (upcoming patch).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (isCDMInstanceAvailable):

2019-08-30  Sihui Liu  <sihui_liu@apple.com>

        [wk2] LayoutTest imported/w3c/web-platform-tests/IndexedDB/fire-error-event-exception.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=169621

        Reviewed by Alex Christensen.

        Event handlers of IDB objects were called in unexpected order because of race, which made the console messages 
        in the tests come out of order.
        Usually, an operation/request result is handled as follows:
        1. IDBServer sends IDBResultData to IDBClient.
        2. IDBClient receives IDBResultData and finishes a IDBTransaction operation with that result.
        3. IDBTransaction schedules operation completed timer.
        4. (Some time later) Timer fires, and IDBTransaction completes a request with the result and dispatches event.
        5. (Some time later) IDBTransaction is notified that event is dispatched. If there are other results received, 
        IDBTransaction schedules operation completed timer.

        In previous implementation, if the IDBClient received a second IDBResultData for the same IDBTransaction between
        step 3 and step 4, it would not schedule timer because timer was still active; if it received the result between
        step 4 and step 5, it would schedule timer again.

        Consider a flow like this:
        result1 of transaction1 received, timer of transaction1 scheduled
        result2 of transaction2 received, timer of transaction2 scheduled
        result3 of transaction1 is received, timer of transaction1 active so no scheduling
        timer of transaction1 fired, event1 to be dispatched to request1
        timer of transaction2 fired, event2 to be dispatched to request2
        result4 of transaction2 received, timer of transaction2 scheduled
        event1 dispatched, timer of transaction1 scheduled (for handling result3)
        event2 dispatched, timer of transaction2 active so no scheduling
        timer of transaction2 fired, event3 to dispatch to request4
        timer of transaction1 fired, event4 to dispatch to request3

        request4 would get event before request3, though result3 was received before result4. We should stop scheduling
        event if an IDBTransaction is in between step 4 and 5, which means its m_currentlyCompletingRequest is not null.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::operationCompletedOnServer):

2019-08-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: async event listener stack traces should be available in Workers
        https://bugs.webkit.org/show_bug.cgi?id=200903

        Reviewed by Joseph Pecoraro.

        Tests: inspector/worker/dom-debugger-event-interval-breakpoints.html
               inspector/worker/dom-debugger-event-listener-breakpoints.html
               inspector/worker/dom-debugger-event-timeout-breakpoints.html
               inspector/worker/dom-debugger-url-breakpoints.html

        * inspector/agents/WebDebuggerAgent.h:
        * inspector/agents/WebDebuggerAgent.cpp:
        (WebCore::WebDebuggerAgent::enabled const): Added.
        (WebCore::WebDebuggerAgent::enable):
        (WebCore::WebDebuggerAgent::disable):
        (WebCore::WebDebuggerAgent::didAddEventListener): Added.
        (WebCore::WebDebuggerAgent::willRemoveEventListener): Added.
        (WebCore::WebDebuggerAgent::willHandleEvent): Added.
        (WebCore::WebDebuggerAgent::didPostMessage): Added.
        (WebCore::WebDebuggerAgent::didFailPostMessage): Added.
        (WebCore::WebDebuggerAgent::willDispatchPostMessage): Added.
        (WebCore::WebDebuggerAgent::didDispatchPostMessage): Added.
        (WebCore::WebDebuggerAgent::didClearAsyncStackTraceData): Added.
        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::enabled const): Added.
        (WebCore::PageDebuggerAgent::enable):
        (WebCore::PageDebuggerAgent::disable):
        (WebCore::PageDebuggerAgent::didClearAsyncStackTraceData): Deleted.
        (WebCore::PageDebuggerAgent::didAddEventListener): Deleted.
        (WebCore::PageDebuggerAgent::willRemoveEventListener): Deleted.
        (WebCore::PageDebuggerAgent::willHandleEvent): Deleted.
        (WebCore::PageDebuggerAgent::didPostMessage): Deleted.
        (WebCore::PageDebuggerAgent::didFailPostMessage): Deleted.
        (WebCore::PageDebuggerAgent::willDispatchPostMessage): Deleted.
        (WebCore::PageDebuggerAgent::didDispatchPostMessage): Deleted.
        Move various `InspectorInstrumentation` calls from `PageDebuggerAgent` to `WebDebuggerAgent`
        so that `WorkerDebuggerAgent` also inherits them.

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::webDebuggerAgent const): Added.
        (WebCore::InstrumentingAgents::setWebDebuggerAgent): Added.
        (WebCore::InstrumentingAgents::inspectorDebuggerAgent const): Deleted.
        (WebCore::InstrumentingAgents::setInspectorDebuggerAgent): Deleted.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::mainFrameStartedLoading):
        (WebCore::InspectorTimelineAgent::startProgrammaticCapture):
        (WebCore::InspectorTimelineAgent::stopProgrammaticCapture):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::isDebuggerPausedImpl):
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::didAddEventListenerImpl):
        (WebCore::InspectorInstrumentation::willRemoveEventListenerImpl):
        (WebCore::InspectorInstrumentation::didPostMessageImpl):
        (WebCore::InspectorInstrumentation::didFailPostMessageImpl):
        (WebCore::InspectorInstrumentation::willDispatchPostMessageImpl):
        (WebCore::InspectorInstrumentation::didDispatchPostMessageImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::didHandleEventImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSPImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didFireAnimationFrameImpl):
        Replace `inspectorDebuggerAgent` with `webDebuggerAgent` so the right instrumentation hooks
        are available.

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

        Add "IsolatedCopy" in the name of String getters that call isolatedCopy() on the string
        https://bugs.webkit.org/show_bug.cgi?id=201318

        Reviewed by Alex Christensen.

        Add "IsolatedCopy" in the name of String getters that call isolatedCopy() on the string, for clarity.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::performGetAllDatabaseNames):
        (WebCore::IDBServer::IDBServer::removeDatabasesModifiedSinceForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::removeDatabasesWithOriginsForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::computeSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::upgradeFilesIfNecessary):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::databaseDirectoryPathIsolatedCopy const):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseRootDirectoryIsolatedCopy const):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::stringIdentifierIsolatedCopy const):
        (WebCore::Database::displayNameIsolatedCopy const):
        (WebCore::Database::expectedVersionIsolatedCopy const):
        (WebCore::Database::fileNameIsolatedCopy const):
        (WebCore::Database::details const):
        (WebCore::Database::didCommitWriteTransaction):
        (WebCore::Database::didExceedQuota):
        * Modules/webdatabase/Database.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::maximumSize):
        (WebCore::DatabaseTracker::doneCreatingDatabase):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        * Modules/webdatabase/SQLError.h:
        (WebCore::SQLError::messageIsolatedCopy const):
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::clearAll):
        * workers/service/server/RegistrationDatabase.h:
        (WebCore::RegistrationDatabase::databaseDirectoryIsolatedCopy const):

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        No new tests -- no new or changed functionality.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

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

        Copying and pasting two paragraphs with a newline between them results in stray paragraph with newline inside.
        https://bugs.webkit.org/show_bug.cgi?id=201306

        Reviewed by Wenson Hsieh.

        Test: editing/pasteboard/paste-without-nesting.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::moveNodeOutOfAncestor): Consider the ancestor node safe to remove
        if there is no rendered text inside, not just if there are any child nodes.

2019-08-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOMDebugger: support event breakpoints in Worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=200651

        Reviewed by Joseph Pecoraro.

        Tests: inspector/worker/dom-debugger-dom-breakpoints.html
               inspector/worker/dom-debugger-event-animation-frame-breakpoints.html
               inspector/worker/dom-debugger-event-interval-breakpoints.html
               inspector/worker/dom-debugger-event-listener-breakpoints.html
               inspector/worker/dom-debugger-event-timeout-breakpoints.html
               inspector/worker/dom-debugger-url-breakpoints.html

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::enabled const):
        (WebCore::InspectorDOMDebuggerAgent::enable):
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasEnabled):
        (WebCore::InspectorDOMDebuggerAgent::debuggerWasDisabled):
        (WebCore::InspectorDOMDebuggerAgent::setEventBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::~InspectorDOMDebuggerAgent): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::frameDocumentUpdated): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::willInvalidateStyleAttr): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::didInsertDOMNode): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::didRemoveDOMNode): Deleted.
        (WebCore::domTypeForName): Deleted.
        (WebCore::domTypeName): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::setDOMBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::removeDOMBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::hasBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::updateSubtreeBreakpoints): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::willFireAnimationFrame): Deleted.
        * inspector/agents/page/PageDOMDebuggerAgent.h: Added.
        * inspector/agents/page/PageDOMDebuggerAgent.cpp: Added.
        (WebCore::domTypeForName):
        (WebCore::domTypeName):
        (WebCore::PageDOMDebuggerAgent::PageDOMDebuggerAgent):
        (WebCore::PageDOMDebuggerAgent::enabled const):
        (WebCore::PageDOMDebuggerAgent::enable):
        (WebCore::PageDOMDebuggerAgent::disable):
        (WebCore::PageDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::PageDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::PageDOMDebuggerAgent::frameDocumentUpdated):
        (WebCore::PageDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::PageDOMDebuggerAgent::didInsertDOMNode):
        (WebCore::PageDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::PageDOMDebuggerAgent::didRemoveDOMNode):
        (WebCore::PageDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::PageDOMDebuggerAgent::willFireAnimationFrame):
        (WebCore::PageDOMDebuggerAgent::willInvalidateStyleAttr):
        (WebCore::PageDOMDebuggerAgent::setAnimationFrameBreakpoint):
        (WebCore::PageDOMDebuggerAgent::descriptionForDOMEvent):
        (WebCore::PageDOMDebuggerAgent::updateSubtreeBreakpoints):
        (WebCore::PageDOMDebuggerAgent::hasBreakpoint):
        * inspector/agents/worker/WorkerDOMDebuggerAgent.h: Added.
        * inspector/agents/worker/WorkerDOMDebuggerAgent.cpp: Added.
        (WebCore::WorkerDOMDebuggerAgent::WorkerDOMDebuggerAgent):
        (WebCore::WorkerDOMDebuggerAgent::setDOMBreakpoint):
        (WebCore::WorkerDOMDebuggerAgent::removeDOMBreakpoint):
        (WebCore::WorkerDOMDebuggerAgent::setAnimationFrameBreakpoint):
        Split the `InspectorDOMDebuggerAgent` into two subclasses depending on the inspected target
        type, as certain `DOMDebugger` commands don't make sense for a `Worker` context:
         - DOM breakpoints, as there is no DOM in a `Worker` context
         - animation frame event breakpoints, as there is no `requestAnimationFrame` function

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::createLazyAgents):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::createLazyAgents):

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::pageDOMDebuggerAgent const): Added.
        (WebCore::InstrumentingAgents::setPageDOMDebuggerAgent): Added.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willInvalidateStyleAttrImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove CCBigNum fallback code
        https://bugs.webkit.org/show_bug.cgi?id=201250
        <rdar://problem/54814330>

        Reviewed by Jiewen Tan.

        Bug 184637 added support for CCRSAGetCRTComponents, falling back to
        the older CCBigNum code if CCRSAGetCRTComponents was not available. We
        now only support OS's that have CCRSAGetCRTComponents so remove the
        fallback code.

        No new tests -- no new or changed functionality.

        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::CCBigNum::CCBigNum): Deleted.
        (WebCore::CCBigNum::~CCBigNum): Deleted.
        (WebCore::CCBigNum::operator=): Deleted.
        (WebCore::CCBigNum::data const): Deleted.
        (WebCore::CCBigNum::operator- const): Deleted.
        (WebCore::CCBigNum::operator% const): Deleted.
        (WebCore::CCBigNum::inverse const): Deleted.
        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents):

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

        [LFC][TFC] Initialize <tr> display boxes.
        https://bugs.webkit.org/show_bug.cgi?id=201232
        <rdar://problem/54806789>

        Reviewed by Antti Koivisto.

        Set them as blank for now.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::initializeDisplayBoxToBlank const):
        (WebCore::Layout::TableFormattingContext::layout const):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Row::Row):
        (WebCore::Layout::TableGrid::appendCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Row::box const):

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

        document.fonts.ready is resolved too quickly
        https://bugs.webkit.org/show_bug.cgi?id=174030
        <rdar://problem/33083550>

        Reviewed by Frédéric Wang.

        As described in https://drafts.csswg.org/css-font-loading/#font-face-set-ready, the ready promise
        is only fulfilled after layout operations complete and no additional font loads are necessary.

        This patch implements this by notifying the FontFaceSet created for the document when the document
        is finished loading. At that time, the promise will be resolved as soon as fonts are finished loading if any.

        Test: imported/w3c/web-platform-tests/infrastructure/assumptions/document-fonts-ready.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::optionalFontFaceSet):
        * css/CSSFontSelector.h:
        * css/FontFaceSet.cpp:
        (WebCore::FontFaceSet::FontFaceSet):
        (WebCore::FontFaceSet::startedLoading):
        (WebCore::FontFaceSet::didFirstLayout):
        (WebCore::FontFaceSet::completedLoading):
        * css/FontFaceSet.h:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):

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

        [LFC][BFC] BlockFormattingContext::usedAvailableWidthForFloatAvoider should only be called on float avoiders.
        https://bugs.webkit.org/show_bug.cgi?id=201238
        <rdar://problem/54807663>

        Reviewed by Antti Koivisto.

        Make the horizontal available space logic for float avoiders more explicit/readable. 

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):

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

        [LFC] Inline content logging should have some extra space for better readability
        https://bugs.webkit.org/show_bug.cgi?id=201236
        <rdar://problem/54807336>

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputInlineRuns):

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

        Avoid running the outline painting phase if no renderers have outlines
        https://bugs.webkit.org/show_bug.cgi?id=201284

        Reviewed by Said Abou-Hallawa.

        The outline painting phase (paintOutlineForFragments()) can take up to 20% of the painting time
        even when there are no outlines. Keep track of which renderers have outlines, and only run the phase
        when printing (for hasOutlineAnnotation()) or if there are any renderers with outlines.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderView.h:

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

        [LFC][TFC] Use the "complicated-cases" category for computing the TFC root's height
        https://bugs.webkit.org/show_bug.cgi?id=201230
        <rdar://problem/54806131>

        Reviewed by Antti Koivisto.

        This might change in the future but for now let's use the "complicated cases" when we need to compute the TFC's height and vertical margin.
        This is very BFC specific since (block)TFC is always parented in a BFC.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):

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

        [LFC][TFC] The table wrapper box is a block level box
        https://bugs.webkit.org/show_bug.cgi?id=201229
        <rdar://problem/54805515>

        Reviewed by Antti Koivisto.

        This is the anonymous box that we inject as the parent of the table caption/actual table box.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedVerticalPositionForAncestors const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesBlockFormattingContext const):
        (WebCore::Layout::Box::isFloatAvoider const):
        (WebCore::Layout::Box::isBlockLevelBox const):

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

        Skip fetch event dispatching if no fetch event handler is added at script evaluation time
        https://bugs.webkit.org/show_bug.cgi?id=201174

        Reviewed by Chris Dumez.

        At end of worker script evaluation, store whether a fetch event handler is registered.
        Send it back to the SWServer that will store it in the corresponding SWServerWorker.

        Add support for soft update directly from the registration.
        This will trigger a soft-update from the worker context itself.
        In theory, this should be started by the job queue but we do not have a way yet to implement this as per spec.

        Test: http/wpt/service-workers/skipFetchEvent.https.html

        * workers/DedicatedWorkerThread.h:
        (WebCore::DedicatedWorkerThread::start):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::finishedEvaluatingScript):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
        (WebCore::SWContextManager::startedServiceWorker):
        (WebCore::SWContextManager::softUpdate):
        * workers/service/context/SWContextManager.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        (WebCore::ServiceWorkerThread::softUpdate):
        (WebCore::ServiceWorkerThread::finishedEvaluatingScript):
        (WebCore::ServiceWorkerThread::start):
        * workers/service/context/ServiceWorkerThread.h:
        (WebCore::ServiceWorkerThread::doesHandleFetch const):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::shouldSoftUpdate const):
        (WebCore::SWServerRegistration::softUpdate):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::isStale const):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::generateConnectionIdentifier):
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::scriptContextStarted):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::scriptContextStarted):
        (WebCore::SWServerWorker::setState):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::shouldSkipFetchEvent const):

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=201224
        <rdar://problem/54795934>

        Reviewed by Darin Adler.

        Remove symbols in WebKitTargetConditionals.xcconfig related to macOS
        10.13, including WK_MACOS_1013 and WK_MACOS_BEFORE_1013, and suffixes
        like _MACOS_SINCE_1013.

        No new tests -- no new or changed functionality.

        * Configurations/WebKitTargetConditionals.xcconfig:

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

        [GStreamer] Do not use makeWeakPtr from streaming thread.
        https://bugs.webkit.org/show_bug.cgi?id=201220

        Reviewed by Xabier Rodriguez-Calvar.

        Test: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-retrieve-persistent-license.https.html

        Recently some asserts were added that you can't create WeakPtr's
        from streaming threads when the factory is created on the
        main-thread. The fix is to eagerly create the WeakPtr at player
        initialization time, rather than lazily when the streaming thread
        first asks for it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

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

        Address some MathML FIXMEs 
        https://bugs.webkit.org/show_bug.cgi?id=201293

        Reviewed by Frédéric Wang.

        Add element tag checks for data, time and dialog.

        * mathml/MathMLOperatorDictionary.h:
        * mathml/MathMLPresentationElement.cpp:
        (WebCore::MathMLPresentationElement::isPhrasingContent):
        (WebCore::MathMLPresentationElement::isFlowContent):

2019-08-29  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Nicosia::Animation is missing the copy assignment operator
        https://bugs.webkit.org/show_bug.cgi?id=201298

        Reviewed by Carlos Garcia Campos.

        Along with the copy constructor, the Nicosia::Animation class also
        requires the copy assignment operator that's invoked whenever
        the containing Nicosia::Animations object is copied across different
        state objects.

        Much like the constructor, the copy assignment should clone the
        TimingFunction object to make it safely reusable in other contexts.
        This fixes the assertion failures in debug configurations over the
        improper cross-thread RefCounted usage.

        * platform/graphics/nicosia/NicosiaAnimation.cpp:
        (Nicosia::Animation::operator=):
        * platform/graphics/nicosia/NicosiaAnimation.h:
        Explicitly default the move constructor and assignment operator,
        providing the whole quartet.

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

        https://bugs.webkit.org/show_bug.cgi?id=200917
        Do not call addHTTPOriginIfNeeded for window.open

        window.open() always uses GET requests and addHTTPOriginIfNeeded
        has no effect for GET, so do not call it.

        Reviewed by Frédéric Wang.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

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

        WebSockets: first-party for cookies not set in handshake request when using platform APIs
        https://bugs.webkit.org/show_bug.cgi?id=200165

        Reviewed by Youenn Fablet.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::webSocketConnectRequest):

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

        Implement HTMLOrForeignElement
        https://bugs.webkit.org/show_bug.cgi?id=201219

        Reviewed by Frédéric Wang.

        Add FIXME for updating the spec link.

        * html/HTMLOrForeignElement.idl:

2019-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Implement layer representation retain, release mechanics
        https://bugs.webkit.org/show_bug.cgi?id=201133

        Reviewed by Carlos Garcia Campos.

        * page/scrolling/nicosia/ScrollingStateNodeNicosia.cpp:
        (WebCore::LayerRepresentation::retainPlatformLayer):
        Type-cast the layer object to the reference-counted
        Nicosia::PlatformLayer type and reference that object.
        (WebCore::LayerRepresentation::releasePlatformLayer):
        Ditto, but dereference the object.

2019-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::PlatformLayer::accessStaging() helper
        https://bugs.webkit.org/show_bug.cgi?id=201132

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::accessStaging):
        Add an accessor into the staging state of the Nicosia::PlatformLayer
        object. This will be needed for the application of scrolling changes
        in the asynchronous scrolling system.

2019-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Expose Nicosia layer as the underlying CoordinatedGraphicsLayer platform layer
        https://bugs.webkit.org/show_bug.cgi?id=201131

        Reviewed by Carlos Garcia Campos.

        Add the CoordinatedGraphicsLayer::platformLayer() override, returning
        the Nicosia::CompositionLayer object as the underlying platform layer.
        This will come in handy for asynchronous scrolling.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::platformLayer const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2019-08-28  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Polish ScrollingCoordinator implementation
        https://bugs.webkit.org/show_bug.cgi?id=201130

        Reviewed by Carlos Garcia Campos.

        These changes primarily mirror the Mac implementation of this class.

        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::pageDestroyed):
        Upon releasing the ThreadedScrollingTree, it should also be invalidated
        on the scrolling thread.
        (WebCore::ScrollingCoordinatorNicosia::commitTreeState):
        Invoke willCommitTree() at the beginning of this method. Additionally
        the pending-commit-count is incremented for the ThreadedScrollingTree
        object.

2019-08-28  Ryosuke Niwa  <rniwa@webkit.org>

        Make tabIndex IDL attribute reflect its content attribute
        https://bugs.webkit.org/show_bug.cgi?id=199606
        <rdar://problem/52811448>

        Reviewed by Chris Dumez.

        This patch makes tabIndex IDL attribute no longer return 0 when the element is focusable
        to match the latest HTML5 specification. Instead, the IDL attribute simply reflect the tabindex
        content attribute with some elements having 0 as the default tab index (see r248784):
        https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute

        The practical implication is that tabIndex IDL attribute on a root editable element (a.k.a.
        editing host in HTML5 spec term), body element in design mode, and media elements with
        media controls would start returning -1 instead of 0.

        Mechanically, this is accomplished by removing the special case in Element::tabIndexForBindings
        when supportsFocus returned true. The effect, if any, this patch has on each element which
        overrides Element::supportsFocus is summarized as follows (indentation simplies inheritance):

        HTMLAnchorElement -> No effect since defaultTabIndex returns 0.
            HTMLAreaElement -> Ditto.
        HTMLBodyElement -> Changes to return -1 in design mode.
        HTMLElement -> Changes to return -1 on a root editable element.
        HTMLFormControlElement
            HTMLButtonElement -> No effect since defaultTabIndex returns 0.
            HTMLFieldSetElement -> No effect since this is an override to use HTMLElement's supportsFocus.
            HTMLFormControlElementWithState
                HTMLKeygenElement -> No effect since defaultTabIndex returns 0.
                HTMLSelectElement -> Ditto.
                HTMLTextFormControlElement -> Ditto.
                    HTMLInputElement -> Ditto.
                    HTMLTextAreaElement -> Ditto.
            HTMLOutputElement -> No effect since this is an override to use HTMLElement's supportsFocus.
        HTMLFrameElementBase - No change. Added defaultTabIndex on HTMLIFrameElement and HTMLFrameElement
            to returns 0.
        HTMLImageElement - No impact since it only affects when an image is set to be editable via SPI.
        HTMLMediaElement - Changes to return -1 when media controls is present.
        HTMLPlugInElement - applet and embed elements change to return -1 when the plugin is available.
        HTMLSummaryElement - No change. Added defaultTabIndex to return 0 when it's active to match
            supportsFocus as well as the HTML5 specification.
        MathMLElement - No effect since tabIndex IDL attribute does not exist in MathML.
        SVGAElement - No effect since defaultTabIndex returns 0.
        SVGClipPathElement - No effect since it always returns false.
        SVGDefsElement - No effect since it always returns false.

        Tests: fast/dom/tabindex-defaults.html
               plugins/focus.html

        * dom/Element.cpp:
        (WebCore::Element::tabIndexForBindings const): Made the change.
        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::defaultTabIndex const): Added to preserve the existing behavior.
        * html/HTMLFrameElement.h:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::defaultTabIndex const): Ditto.
        * html/HTMLIFrameElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::defaultTabIndex const): Added. Always return 0 to match the spec.
        * html/HTMLObjectElement.h:
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::defaultTabIndex const): Added. Return 0 when the this summary
        is the active summary element of the details element.
        * html/HTMLSummaryElement.h:

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

        Make FillLayer::hasImage() inline
        https://bugs.webkit.org/show_bug.cgi?id=201265

        Reviewed by Zalan Bujtas.

        FillLayer::hasImage() shows up on profiles because it's called from hot functions like
        isTransparent() and hasMask(), so make a basic inline version that doens't have
        to walk the list.

        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::hasImageInAnyLayer const):
        (WebCore::FillLayer::hasImage const): Deleted.
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::hasImage const):

2019-08-28  Peng Liu  <peng.liu6@apple.com>

        REGRESSION: String check: “realtime” Suggesting “real time”
        https://bugs.webkit.org/show_bug.cgi?id=201107
        <rdar://problem/46372620>

        Reviewed by Jer Noble.

        Update Localizable.strings.

        No new test.

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):

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

        PaintFrequencyTracker triggers too many calls to MonotonicTime::now() on layer painting
        https://bugs.webkit.org/show_bug.cgi?id=201261

        Reviewed by Zalan Bujtas.

        MonotonicTime::now() shows up as expensive when painting layer-heavy content, because PaintFrequencyTracker
        makes two calls per layer paint.

        Halve the number of calls by storing m_lastPaintTime at the start of the paint; doing so doesn't substantially
        change the behavior of the tracker.

        * rendering/PaintFrequencyTracker.h:
        (WebCore::PaintFrequencyTracker::begin):
        (WebCore::PaintFrequencyTracker::end):

2019-08-28  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed. Restabilize non-unified build.

        * inspector/agents/WebConsoleAgent.h:
        * loader/ResourceLoadObserver.h:

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

        Devirtualize RenderBox::visualOverflowRect()
        https://bugs.webkit.org/show_bug.cgi?id=201231

        Reviewed by Zalan Bujtas.

        The only override of RenderBox::visualOverflowRect() was in RenderView, for "paintsEntireContents" views, and as
        far as I can tell this is not necessary. visualOverflowRect() is hot when called from RenderLayer::localBoundingBox() --
        this shows in profiles when scrolling large patch reviews, so making it non-virtual is a performance enhancement.
        
        RenderLayer::localBoundingBox() can also just call visualOverflowRect(), since that returns borderBoxRect()
        when there is no overflow.

        * rendering/RenderBox.h:
        (WebCore::RenderBox::visualOverflowRect const):
        * rendering/RenderLayer.cpp:
        (WebCore::performOverlapTests): Minor optimization to avoid a call to boundingBox().
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::visualOverflowRect const): Deleted.
        * rendering/RenderView.h:

2019-08-28  Austin Eng  <enga@chromium.org>

        Create ANGLE EGL Context with all extensions disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=200900

        Reviewed by Alex Christensen.

        In WebGL, extensions must be explicitly requested before they are enabled.
        Fixes the following WebGL conformance tests with the ANGLE backend
        LayoutTests/webgl/*/conformance/extensions/ext-blend-minmax.html
        LayoutTests/webgl/*/conformance/extensions/ext-frag-depth.html
        LayoutTests/webgl/*/conformance/extensions/ext-shader-texture-lod.html
        LayoutTests/webgl/*/conformance/extensions/ext-sRGB.html
        LayoutTests/webgl/*/conformance/extensions/oes-standard-derivatives.html
        LayoutTests/webgl/*/conformance/extensions/oes-texture-float.html
        LayoutTests/webgl/*/conformance/extensions/webgl-compressed-texture-s3tc.html
        LayoutTests/webgl/*/conformance/glsl/misc/shader-with-dfdx.frag.html
        LayoutTests/webgl/*/conformance/glsl/variables/glsl-built-ins.html
        LayoutTests/webgl/*/conformance/textures/misc/texture-npot-video.html
        LayoutTests/webgl/*/conformance/textures/misc/texture-npot.html

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        (WebCore::ANGLEInstancedArrays::supported):
        * html/canvas/WebGLCompressedTextureASTC.cpp:
        (WebCore::WebGLCompressedTextureASTC::WebGLCompressedTextureASTC):
        * html/canvas/WebGLCompressedTextureATC.cpp:
        (WebCore::WebGLCompressedTextureATC::WebGLCompressedTextureATC):
        * html/canvas/WebGLCompressedTexturePVRTC.cpp:
        (WebCore::WebGLCompressedTexturePVRTC::WebGLCompressedTexturePVRTC):
        * html/canvas/WebGLCompressedTextureS3TC.cpp:
        (WebCore::WebGLCompressedTextureS3TC::WebGLCompressedTextureS3TC):
        (WebCore::WebGLCompressedTextureS3TC::supported):
        * html/canvas/WebGLDebugShaders.cpp:
        (WebCore::WebGLDebugShaders::WebGLDebugShaders):
        * html/canvas/WebGLDepthTexture.cpp:
        (WebCore::WebGLDepthTexture::WebGLDepthTexture):
        * html/canvas/WebGLDrawBuffers.cpp:
        (WebCore::WebGLDrawBuffers::WebGLDrawBuffers):
        (WebCore::WebGLDrawBuffers::supported):
        * platform/graphics/angle/GraphicsContext3DANGLE.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::validateDepthStencil):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2019-08-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        All image drawing functions should take an argument of type ImagePaintingOptions
        https://bugs.webkit.org/show_bug.cgi?id=201059

        Reviewed by Simon Fraser.

        In this patch:
        -- All the image drawing function will take an argument of type
           ImagePaintingOptions instead of passing individual options.

        -- ImagePaintingOptions is made like a set of options. It can be
           initialized with any number of options and the order does not matter

        -- Image::originalSize() is deleted because it returns size() and none
           of the Image concrete classes overrides this implementation.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::createFromBuffer):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        (WebCore::drawImageToContext):
        (WebCore::CanvasRenderingContext2DBase::fullCanvasCompositedDrawImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::drawCrossfadeSubimage):
        (WebCore::CrossfadeGeneratedImage::draw):
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::draw):
        (WebCore::CustomPaintImage::drawPattern):
        * platform/graphics/CustomPaintImage.h:
        * platform/graphics/GeneratedImage.h:
        (WebCore::GeneratedImage::draw):
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        (WebCore::GradientImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::drawConsumingImageBuffer):
        (WebCore::ImagePaintingOptions::ImagePaintingOptions): Deleted.
        (WebCore::ImagePaintingOptions::usesDefaultInterpolation const): Deleted.
        * platform/graphics/GraphicsContextImpl.cpp:
        (WebCore::GraphicsContextImpl::drawImageImpl):
        (WebCore::GraphicsContextImpl::drawTiledImageImpl):
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawPattern):
        (WebCore::Image::drawTiled):
        (WebCore::Image::computeIntrinsicDimensions):
        * platform/graphics/Image.h:
        (WebCore::Image::drawPattern):
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        (WebCore::Image::originalSize const): Deleted.
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::drawConsuming):
        * platform/graphics/ImagePaintingOptions.h: Added.
        (WebCore::ImagePaintingOptions::ImagePaintingOptions):
        (WebCore::ImagePaintingOptions::compositeOperator const):
        (WebCore::ImagePaintingOptions::blendMode const):
        (WebCore::ImagePaintingOptions::decodingMode const):
        (WebCore::ImagePaintingOptions::orientation const):
        (WebCore::ImagePaintingOptions::interpolationQuality const):
        (WebCore::ImagePaintingOptions::setOption):
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        (WebCore::NamedImageGeneratedImage::drawPattern):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowLayerBuffer):
        (WebCore::Cairo::drawShadowImage):
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::drawPattern):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::drawNativeImage):
        (WebCore::GraphicsContextImplCairo::drawPattern):
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawConsuming):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawPattern):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawConsuming):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::drawNativeImage):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawNativeImage::DrawNativeImage):
        (WebCore::DisplayList::DrawNativeImage::apply const):
        (WebCore::DisplayList::DrawPattern::DrawPattern):
        (WebCore::DisplayList::DrawPattern::apply const):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawNativeImage::create):
        (WebCore::DisplayList::DrawPattern::create):
        (WebCore::DisplayList::DrawPattern::DrawPattern):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawNativeImage):
        (WebCore::DisplayList::Recorder::drawPattern):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::platformApplySoftware):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::drawNativeImage):
        (Nicosia::CairoOperationRecorder::drawPattern):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::drawNativeImage):
        (WebCore::Direct2D::drawPattern):
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/GraphicsContextImplDirect2D.h:
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::drawNativeImage):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::drawPatternForContainer):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        (WebCore::SVGImageForContainer::drawPattern):
        * svg/graphics/SVGImageForContainer.h:

2019-08-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        XLinkNames namespace is required before the 'href' attribute of SVG animate elements
        https://bugs.webkit.org/show_bug.cgi?id=201227

        Reviewed by Ryosuke Niwa.

        To get the animation target element, get the value of the "href" attribute
        or the "xlink:href" attribute.

        Tests: svg/custom/href-svg-namespace-animate-target.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):

2019-08-28  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r249209.

        Broke 19 webgpu/ tests

        Reverted changeset:

        "[WHLSL] Inline typedef'd types during Metal code generation
        to simplify generated code while also making it easier to
        read"
        https://bugs.webkit.org/show_bug.cgi?id=201185
        https://trac.webkit.org/changeset/249209

2019-08-28  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Matrices need to have correct alignment
        https://bugs.webkit.org/show_bug.cgi?id=201212

        Reviewed by Robin Morisset.

        Matrices have particular alignment requirements and size requirements.

          Type   | Alignment | Size
        ---------------------------
        float2x2 |         8 |   16
        float2x3 |        16 |   32
        float2x4 |        16 |   32
        float3x2 |         8 |   24
        float3x3 |        16 |   48
        float3x4 |        16 |   48
        float4x2 |         8 |   32
        float4x3 |        16 |   64
        float4x4 |        16 |   64

        These are important because they may be a member of a struct, and we don't want to misplace
        every successive item in the struct.

        Test: webgpu/whlsl/matrix-alignment.html

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

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

        Implement HTMLOrForeignElement
        https://bugs.webkit.org/show_bug.cgi?id=201219

        Reviewed by Ryosuke Niwa.

        Add the HTMLOrForeignElement [1] interface to share properties
        and methods between HTML, SVG and MathML.

        [1] https://github.com/mathml-refresh/mathml/issues/83

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/StaticRange.h:
        * html/HTMLElement.idl:
        * html/HTMLOrForeignElement.idl: Added.
        * svg/SVGElement.idl:

2019-08-28  Sam Weinig  <weinig@apple.com>

        [WHLSL] Inline typedef'd types during Metal code generation to simplify generated code while also making it easier to read
        https://bugs.webkit.org/show_bug.cgi?id=201185

        Reviewed by Saam Barati.

        The current Metal code generation generates many unnecessary typedefs during TypeNamer::emitMetalTypeDefinitions
        such as 'typedef float2 type19;' that can be removed by just using resolved type whereever the typedef would have
        been used. The only types that actually need to be predefined are the types that declare a new struct or enum, which 
        means we can stop emitting for AST::TypeReference, AST::Pointer, AST::Array, and AST::TypeDefinition. Instead, the
        relevent mangledNameForType constructs the computed name on the fly. 
        
        This is a 25% speedup in the metal code generation phase.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        Switch to using auto rather than Mangled*Name when it is obvious and the actual return type
        may need to become more complicated (e.g. MangledOrNativeTypeName).

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::visit):
        There is no need to generate typenames for AST::TypeDefinitions if they are never used.

        (WebCore::WHLSL::Metal::TypeNamer::generateUniquedTypeName):
        The only UnnamedType that needs a generated typename now is AST::ArrayReferenceType, which emits a struct interface.

        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        Stop generating type definitions for AST::TypeReference, AST::Pointer, AST::Array.

        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        Stop generating type definitions for AST::TypeDefinition.

        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypeDefinitions):
        Update for rename from m_unnamedTypeMapping to m_arrayReferenceTypeMapping.

        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForType):
        Look into the types and generate a concrete type name when necessary. Lazily cache the constructed
        names for AST::ArrayType and AST::Pointer.

2019-08-28  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=201197
        <rdar://problem/54759985>

        Reviewed by Darin Adler.

        Update conditionals that reference WK_MACOS_1013 and suffixes like
        _MACOS_SINCE_1013, assuming that we're always building on 10.13 or
        later and that these conditionals are always True or False.

        See Bug 200694 for earlier changes in this area.

        No new tests -- no new or changed functionality.

        * Configurations/FeatureDefines.xcconfig:

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

        geolocation.watchPosition() / getCurrentPosition() should return PERMISSION_DENIED when context is not secure
        https://bugs.webkit.org/show_bug.cgi?id=201221

        Reviewed by Ryosuke Niwa.

        geolocation.watchPosition() / getCurrentPosition() should return PERMISSION_DENIED when context is not secure,
        not POSITION_UNAVAILABLE. Both Gecko and Blink agree on PERMISSION_DENIED.

        No new tests, updated existing tests.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):

2019-08-28  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] WebKitMediaSrc rework
        https://bugs.webkit.org/show_bug.cgi?id=199719

        Reviewed by Xabier Rodriguez-Calvar.

        This patch reworks the WebKitMediaSrc element and many of the player
        private methods that interacted with it.

        In comparison with the old WebKitMediaSrc, in the new one seeks have
        been massively simplified.

        The new WebKitMediaSrc no longer relies on a bin or appsrc, having
        greater control over its operation. This made it comparatively much
        easier to implement features such as seek before playback or
        single-stream flushing.

        stream-collection events are emitted from the WebKitMediaSrc to reuse
        the track handling in MediaPlayerPrivateGStreamer for playbin3, which
        is now used for MSE pipelines.

        Additional tests have been added to check some assumptions, and some
        bugs that have surfaced with the changes have been fixed but no new
        features (like multi-track support) are implemented in this patch.

        One instance of these bugs is `resized` events, which were previously
        being emitted when frames with different resolutions where appended.
        This is a wrong behavior that has not been preserved in the rework, as
        resize events should be emitted when the frames are shown, not
        just appended.

        There are subtler bugfixes, such as ignoring PTS-less frames in
        AppendPipeline::appsinkNewSample(). These frames are problematic for
        MSE, yet they were somehow passing through the pipelines. Since
        WebKitMediaSrc is stricter with assertions, these have to be filtered.

        This test gets rid of !m_mseSeekCompleted assertion failures in tests
        and potentially other hard to debug bugs in the previous seek
        algorithm.

        This patch makes the following existing tests pass:

        imported/w3c/web-platform-tests/media-source/mediasource-config-change-webm-a-bitrate.html
        imported/w3c/web-platform-tests/media-source/mediasource-config-change-webm-v-framesize.html

        New test: imported/w3c/web-platform-tests/media-source/mediasource-buffered-seek.html
        New test: LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-video-element/video_timeupdate_on_seek.html (non-MSE related)

        * Headers.cmake:
        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstMiniObject>):
        (WTF::derefGPtr<GstMiniObject>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        (WebCore::MediaPlayerPrivateGStreamer::paused const):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::invalidateCachedPosition):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize const):
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSizeFromCaps const):
        (WebCore::MediaPlayerPrivateGStreamerBase::samplesHaveDifferentNaturalSize const):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::MediaSampleGStreamer):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::appsinkCaps):
        (WebCore::AppendPipeline::streamType):
        (WebCore::AppendPipeline::demuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE):
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::play):
        (WebCore::MediaPlayerPrivateGStreamerMSE::pause):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seek):
        (WebCore::MediaPlayerPrivateGStreamerMSE::seekCompleted):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setReadyState):
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceSetup):
        (WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
        (WebCore::MediaPlayerPrivateGStreamerMSE::didEnd):
        (WebCore::MediaPlayerPrivateGStreamerMSE::unblockDurationChanges):
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):
        (WebCore::MediaSourceClientGStreamerMSE::flush):
        (WebCore::MediaSourceClientGStreamerMSE::enqueueSample):
        (WebCore::MediaSourceClientGStreamerMSE::isReadyForMoreSamples):
        (WebCore::MediaSourceClientGStreamerMSE::notifyClientWhenReadyForMoreSamples):
        (WebCore::MediaSourceClientGStreamerMSE::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        (WebCore::MediaSourceGStreamer::waitForSeekCompleted):
        * platform/graphics/gstreamer/mse/MediaSourceGStreamer.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp: Removed.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h: Removed.
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample):
        (WebCore::SourceBufferPrivateGStreamer::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateGStreamer::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (WebKitMediaSrcPrivate::streamByName):
        (Stream::Stream):
        (Stream::StreamingMembers::StreamingMembers):
        (Stream::StreamingMembers::durationEnqueued const):
        (findPipeline):
        (webkit_media_src_class_init):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (debugProbe):
        (collectionPlusStream):
        (collectionMinusStream):
        (gstStreamType):
        (webKitMediaSrcAddStream):
        (webKitMediaSrcRemoveStream):
        (webKitMediaSrcActivateMode):
        (webKitMediaSrcPadLinked):
        (webKitMediaSrcStreamNotifyLowWaterLevel):
        (webKitMediaSrcLoop):
        (webKitMediaSrcEnqueueObject):
        (webKitMediaSrcEnqueueSample):
        (webKitMediaSrcEnqueueEvent):
        (webKitMediaSrcEndOfStream):
        (webKitMediaSrcIsReadyForMoreSamples):
        (webKitMediaSrcNotifyWhenReadyForMoreSamples):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcStreamFlushStart):
        (webKitMediaSrcStreamFlushStop):
        (webKitMediaSrcFlush):
        (webKitMediaSrcSeek):
        (countStreamsOfType):
        (webKitMediaSrcGetProperty):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h: Removed.

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

        Have RenderSVGBlock compute visual overflow just like everyone else
        https://bugs.webkit.org/show_bug.cgi?id=201211

        Reviewed by Zalan Bujtas.

        RenderSVGBlock overrode visualOverflowRect() just to account for text shadow. This prevents callers
        optimizing calls to visualOverflowRect(), so instead have RenderSVGBlock implement computeOverflow()
        and call addVisualOverflow().

        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::computeOverflow):
        (WebCore::RenderSVGBlock::visualOverflowRect const): Deleted.
        * rendering/svg/RenderSVGBlock.h:

2019-08-28  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r248807): Objects stored in ElementRareData are leaked
        https://bugs.webkit.org/show_bug.cgi?id=200954

        Reviewed by Antti Koivisto.

        Use a custom deleter in std::unique_ptr to call the correct destructor instead of making
        NodeRareData's destructor virtual. Added NodeRareData::isElementRareData to differentiate
        ElementRareData and NodeRareData by borrowing 1 bit from the frame count.

        No new tests since there should be no behavioral change.

        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * dom/Node.cpp:
        (WebCore::Node::materializeRareData): Call the constructors of unique_ptr directly since
        make_unique does not take a custom deleter. We can't add the support to makeUnique either
        without making it three arguments since we need to cast ElementRareData to NodeRareData
        in addition to specifying a custom deleter (normal casting wouldn't work due to
        the presence of a custom deleter).
        (WebCore::Node::NodeRareDataDeleter::operator() const): Added.
        * dom/Node.h:
        (WebCore::Node::NodeRareDataDeleter): Added.
        * dom/NodeRareData.cpp:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData): Makes newly added Type.
        (WebCore::NodeRareData::isElementRareData): Added.
        (WebCore::NodeRareData::~NodeRareData): Deleted.

2019-08-28  Claudio Saavedra  <csaavedra@igalia.com>

        [SOUP] Shut compilation warning

        Unreviewed. RELEASE_LOG_ERROR() needs a channel.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::setupHSTSEnforcer):

2019-08-28  Claudio Saavedra  <csaavedra@igalia.com>

        [SOUP] Fix the debug build after r249192

        Unreviewed build fix.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::setupHSTSEnforcer):

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

        Unable to enter text in https://eat.fi
        https://bugs.webkit.org/show_bug.cgi?id=193046

        Reviewed by Ryosuke Niwa.

        This is because the button element inside the label is receiving the click event, which causes the form to be
        submitted. According to the spec we should do nothing in this case, because button element is considered to be
        interactive content.

        "The activation behavior of a label element for events targeted at interactive content descendants of a label
        element, and any descendants of those interactive content descendants, must be to do nothing."
        https://html.spec.whatwg.org/#the-label-element

        This patch adds HTMLElement::isInteractiveContent() according to the HTML spec:

        "Interactive content is content that is specifically intended for user interaction.
        a (if the href attribute is present), audio (if the controls attribute is present), button, details, embed,
        iframe, img (if the usemap attribute is present), input (if the type attribute is not in the Hidden state),
        label, object (if the usemap attribute is present), select, textarea, video (if the controls attribute is
        present)"
        https://html.spec.whatwg.org/#interactive-content-2

        That's used in HTMLLabelElement::defaultEventHandler() using the helper method
        isEventTargetedAtInteractiveDescendants() to decide whether to simulate a click event or do nothing.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isInteractiveContent const):
        * html/HTMLAnchorElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLDetailsElement.h:
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isInteractiveContent const):
        * html/HTMLEmbedElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isInteractiveContent const):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isInteractiveContent const):
        * html/HTMLInputElement.h:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::isEventTargetedAtInteractiveDescendants const):
        (WebCore::HTMLLabelElement::defaultEventHandler):
        * html/HTMLLabelElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isInteractiveContent const):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::isInteractiveContent const):
        * html/HTMLObjectElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HiddenInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::isInteractiveContent const):
        * html/InputType.h:

2019-08-28  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK][WPE] Implement HSTS for the soup network backend
        https://bugs.webkit.org/show_bug.cgi?id=192074

        Reviewed by Carlos Garcia Campos.

        libsoup 2.67.1 introduced HSTS support via a SoupSessionFeature.
        Add support to the soup network backend by adding the feature to
        SoupNetworkSession and handling HSTS protocol upgrades, by
        propagating the scheme change further to clients. This patch adds
        the HSTS feature unconditionally, but it still possible to add
        a boolean property to the web context class if desired.

        Additionally, add API to the WebKitWebsiteDataManager to specify
        the directory where the HSTS database is saved. If the directory
        is not set or if the data manager is ephemeral, use a
        non-persistent, memory only HSTS enforcer.

        Implement as well the methods needed to clean-up and delete HSTS
        policies from the storage and expose the feature in GTK+ MiniBrowser's
        about:data.

        * platform/network/soup/GUniquePtrSoup.h:
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::hstsStorageDirectory):
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::setHSTSPersistentStorage):
        (WebCore::SoupNetworkSession::setupHSTSEnforcer):
        (WebCore::SoupNetworkSession::getHostNamesWithHSTSCache):
        (WebCore::SoupNetworkSession::deleteHSTSCacheForHostNames):
        (WebCore::SoupNetworkSession::clearHSTSCache):
        * platform/network/soup/SoupNetworkSession.h:

2019-08-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SVG2: Add length, item getter and item setter to all SVG lists
        https://bugs.webkit.org/show_bug.cgi?id=199526

        Reviewed by Simon Fraser.

        -- Implement the SVG2 specs for SVG lists:
        https://svgwg.org/svg2-draft/types.html#TermListInterface.

        -- Match the arguments' names in the IDL files with the specs.

        Tests: svg/dom/SVGLengthList-length-indexed-access.xhtml
               svg/dom/SVGPathSegList-length-indexed-access.xhtml

        * svg/SVGLengthList.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegList.idl:
        * svg/SVGPointList.idl:
        * svg/SVGStringList.idl:
        * svg/SVGTransformList.idl:
        * svg/properties/SVGList.h:
        (WebCore::SVGList::length const):
        (WebCore::SVGList::setItem):

2019-08-27  John Wilander  <wilander@apple.com>  and  Fujii Hironori  <Hironori.Fujii@sony.com>

        Make FrameLoader::open() set outgoing referrer properly
        https://bugs.webkit.org/show_bug.cgi?id=167050
        <rdar://problem/27972404>

        Reviewed by Youenn Fablet.

        In debug builds, an assertion failed in WebCore::SecurityPolicy::generateReferrerHeader:
        ASSERTION FAILED: referrer == URL(URL(), referrer).strippedForUseAsReferrer()

        In release builds, cached pages with a URL fragment sent its URL fragment in the referrer.

        m_outgoingReferrer mistakenly had a URL fragment.

        Test: http/tests/navigation/page-cache-fragment-referrer.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open): Set m_outgoingReferrer by using
        FrameLoader::setOutgoingReferrer to remove URL fragments.

2019-08-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Unreviewed. Build fix after r249175.

        Fix the condition which generates the declaration of vm in
        GenerateGetOwnPropertySlotByIndex.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotByIndex):

2019-08-27  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Implement GPUErrors for and relax GPUBuffer validation rules
        https://bugs.webkit.org/show_bug.cgi?id=200852

        Reviewed by Dean Jackson.

        Fix incorrect usage validation during GPUBuffer creation.
        Implement GPUError reporting for GPUBuffer creation and methods.

        Test: webgpu/buffer-errors.html

        * Modules/webgpu/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::create):
        (WebCore::WebGPUBuffer::WebGPUBuffer):
        (WebCore::WebGPUBuffer::unmap):
        (WebCore::WebGPUBuffer::destroy):
        (WebCore::WebGPUBuffer::rejectOrRegisterPromiseCallback):
        * Modules/webgpu/WebGPUBuffer.h: Now inherits from GPUObjectBase.
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const):
        (WebCore::WebGPUDevice::createBufferMapped const):
        * platform/graphics/gpu/GPUBuffer.h: No longer inherits from GPUObjectBase.
        * platform/graphics/gpu/GPUObjectBase.h:
        (WebCore::GPUObjectBase::errorScopes):
        (WebCore::GPUObjectBase::generateError): Deleted.
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage):
        (WebCore::GPUBuffer::tryCreate): Alignment issue should be general WebGPU requirement.
        (WebCore::GPUBuffer::GPUBuffer):
        (WebCore::GPUBuffer::~GPUBuffer): Must do cleanup without generating errors.
        (WebCore::GPUBuffer::registerMappingCallback):
        (WebCore::GPUBuffer::copyStagingBufferToGPU):
        (WebCore::GPUBuffer::unmap):
        (WebCore::GPUBuffer::destroy):

2019-08-27  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Layout and position the cell boxes
        https://bugs.webkit.org/show_bug.cgi?id=201192
        <rdar://problem/54758638>

        Reviewed by Antti Koivisto.

        Add a very basic (and faily incomplete) table cell layout logic. This is mostly WIP.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot):
        (WebCore::Layout::contentHeightForFormattingContextRoot): Deleted.
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout const):
        (WebCore::Layout::TableFormattingContext::computedTableWidth const):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp: Copied from Source/WebCore/layout/tableformatting/TableFormattingContext.h.
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::setLogicalLeft):
        (WebCore::Layout::TableGrid::Column::logicalLeft const):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::logicalRight const):
        (WebCore::Layout::TableGrid::Row::setLogicalTop):
        (WebCore::Layout::TableGrid::Row::logicalTop const):
        (WebCore::Layout::TableGrid::Row::setLogicalHeight):
        (WebCore::Layout::TableGrid::Row::logicalHeight const):
        (WebCore::Layout::TableGrid::Row::logicalBottom const):

2019-08-27  Mark Lam  <mark.lam@apple.com>

        Refactor to use VM& instead of VM* at as many places as possible.
        https://bugs.webkit.org/show_bug.cgi?id=201172

        Reviewed by Yusuke Suzuki.

        No new tests.  Covered by existing tests.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        (WebCore::CDMSessionClearKey::update):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * animation/KeyframeEffect.cpp:
        (WebCore::processKeyframeLikeObject):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::dumpHeap):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::JSConverter<IDLDOMString>::convert):
        (WebCore::JSConverter<IDLByteString>::convert):
        (WebCore::JSConverter<IDLUSVString>::convert):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::addScopedChildrenIndexes):
        (WebCore::JSDOMWindow::defineOwnProperty):
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::DialogHandler::returnValue const):
        (WebCore::JSDOMWindow::setOpener):
        (WebCore::JSDOMWindow::setOpenDatabase):
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::JSDOMWindowProperties::getOwnPropertySlotByIndex):
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSImageDataCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::getOwnPropertySlotByIndex):
        (WebCore::JSLocation::putByIndex):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetCallData):
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::getOwnPropertySlotByIndex):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::resolve):
        (WebCore::ScriptModuleLoader::importModule):
        (WebCore::ScriptModuleLoader::createImportMetaProperties):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneDeserializer::CachedString::jsString):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::CloneDeserializer::deserialize):
        * bindings/js/WebCoreBuiltinNames.h:
        (WebCore::WebCoreBuiltinNames::WebCoreBuiltinNames):
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::clearJSWindowProxiesNotMatchingDOMWindow):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotByIndex):
        (GenerateGetOwnPropertyNames):
        (GeneratePutByIndex):
        (GenerateDeletePropertyByIndex):
        (GenerateDictionaryImplementationContent):
        (addUnscopableProperties):
        (GenerateImplementation):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationDefinition):
        (GenerateSerializerDefinition):
        (GenerateCallbackImplementationContent):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceNameConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsConstructor::initializeProperties):
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsSetter):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsSetter):
        (WebCore::setJSTestCEReactionsStringifierAttributeSetter):
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsNotNeededSetter):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsNotNeededSetter):
        (WebCore::setJSTestCEReactionsStringifierAttributeNotNeededSetter):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierConstructor::initializeProperties):
        (WebCore::setJSTestCEReactionsStringifierValueSetter):
        (WebCore::setJSTestCEReactionsStringifierValueWithoutReactionsSetter):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerConstructor::initializeProperties):
        (WebCore::setJSTestCallTracerTestAttributeInterfaceSetter):
        (WebCore::setJSTestCallTracerTestAttributeSpecifiedSetter):
        (WebCore::setJSTestCallTracerTestAttributeWithVariantSetter):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::convertDictionary<TestCallbackInterface::Dictionary>):
        (WebCore::JSTestCallbackInterfaceConstructor::initializeProperties):
        (WebCore::JSTestCallbackInterface::callbackWithNoParam):
        (WebCore::JSTestCallbackInterface::callbackWithArrayParam):
        (WebCore::JSTestCallbackInterface::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallbackInterface::callbackWithStringList):
        (WebCore::JSTestCallbackInterface::callbackWithBoolean):
        (WebCore::JSTestCallbackInterface::callbackRequiresThisToPass):
        (WebCore::JSTestCallbackInterface::callbackWithAReturnValue):
        (WebCore::JSTestCallbackInterface::callbackThatRethrowsExceptions):
        (WebCore::JSTestCallbackInterface::callbackThatSkipsInvokeCheck):
        (WebCore::JSTestCallbackInterface::callbackWithThisObject):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITConstructor::initializeProperties):
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionItemWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameWithoutTypeCheck):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingConstructor::initializeProperties):
        (WebCore::JSTestEnabledBySettingPrototype::finishCreation):
        (WebCore::setJSTestEnabledBySettingTestSubObjEnabledBySettingConstructorSetter):
        (WebCore::setJSTestEnabledBySettingEnabledBySettingAttributeSetter):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::JSTestEnabledForContextConstructor::initializeProperties):
        (WebCore::setJSTestEnabledForContextTestSubObjEnabledForContextConstructorSetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::convertDictionary<TestEventConstructor::Init>):
        (WebCore::JSTestEventConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::initializeProperties):
        (WebCore::JSTestEventTarget::getOwnPropertySlotByIndex):
        (WebCore::JSTestEventTarget::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
        (WebCore::setJSTestGlobalObjectRegularAttributeSetter):
        (WebCore::setJSTestGlobalObjectPublicAndPrivateAttributeSetter):
        (WebCore::setJSTestGlobalObjectPublicAndPrivateConditionalAttributeSetter):
        (WebCore::setJSTestGlobalObjectEnabledAtRuntimeAttributeSetter):
        (WebCore::setJSTestGlobalObjectTestCEReactionsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestCEReactionsStringifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestCallTracerConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestCallbackInterfaceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestClassWithJSBuiltinConstructorConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestDOMJITConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestDomainSecurityConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestEnabledBySettingConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestEventConstructorConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestEventTargetConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestExceptionConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestGenerateIsReachableConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestGlobalObjectConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterNoIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterThrowingExceptionConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterWithIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestInterfaceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestInterfaceLeadingUnderscoreConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestIterableConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestJSBuiltinConstructorConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestMapLikeConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestMediaQueryListListenerConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedConstructorConstructorSetter):
        (WebCore::setJSTestGlobalObjectAudioConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterNoIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterThrowingExceptionConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterCallWithConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterNoIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterWithIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterNoIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterThrowingExceptionConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIdentifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestOverrideBuiltinsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestPluginInterfaceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestReadOnlyMapLikeConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestReportExtraMemoryCostConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestSerializationConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestSerializationIndirectInheritanceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestSerializationInheritConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestSerializationInheritFinalConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestSerializedScriptValueInterfaceConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierAnonymousOperationConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierNamedOperationConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierOperationImplementedAsConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierOperationNamedToStringConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierReadOnlyAttributeConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestStringifierReadWriteAttributeConstructorSetter):
        (WebCore::setJSTestGlobalObjectTestTypedefsConstructorSetter):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterNoIdentifier::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterThrowingException::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestIndexedSetterWithIdentifier::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::initializeProperties):
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttrSetter):
        (WebCore::setJSTestInterfaceImplementsStr2Setter):
        (WebCore::setJSTestInterfaceImplementsStr3Setter):
        (WebCore::setJSTestInterfaceImplementsNodeSetter):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttrSetter):
        (WebCore::setJSTestInterfaceSupplementalStr2Setter):
        (WebCore::setJSTestInterfaceSupplementalStr3Setter):
        (WebCore::setJSTestInterfaceSupplementalNodeSetter):
        (WebCore::setJSTestInterfaceReflectAttributeSetter):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterableConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
        (WebCore::setJSTestJSBuiltinConstructorTestAttributeRWCustomSetter):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::getOwnPropertyNames):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedDeleterNoIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedDeleterNoIdentifier::deletePropertyByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedDeleterThrowingException::getOwnPropertyNames):
        (WebCore::JSTestNamedDeleterThrowingException::deletePropertyByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedDeleterWithIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedDeleterWithIdentifier::deletePropertyByIndex):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterConstructor::initializeProperties):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterCallWith::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedGetterCallWith::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedGetterNoIdentifier::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedGetterWithIdentifier::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterNoIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterNoIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterThrowingException::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterThrowingException::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterThrowingException::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithIdentifier::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithIdentifier::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetter::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithIndexedGetter::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::putByIndex):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertySlotByIndex):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::getOwnPropertyNames):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::putByIndex):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::initializeProperties):
        (WebCore::JSTestNodePrototype::finishCreation):
        (WebCore::setJSTestNodeNameSetter):
        (WebCore::JSTestNode::serialize):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionaryToJS):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):
        (WebCore::convertDictionary<TestObj::ParentDictionary>):
        (WebCore::convertDictionary<TestObj::ChildDictionary>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryA>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryB>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryC>):
        (WebCore::JSTestObjConstructor::initializeProperties):
        (WebCore::JSTestObjPrototype::finishCreation):
        (WebCore::JSTestObj::getOwnPropertyNames):
        (WebCore::setJSTestObjConstructorStaticStringAttrSetter):
        (WebCore::setJSTestObjEnumAttrSetter):
        (WebCore::setJSTestObjByteAttrSetter):
        (WebCore::setJSTestObjOctetAttrSetter):
        (WebCore::setJSTestObjShortAttrSetter):
        (WebCore::setJSTestObjClampedShortAttrSetter):
        (WebCore::setJSTestObjEnforceRangeShortAttrSetter):
        (WebCore::setJSTestObjUnsignedShortAttrSetter):
        (WebCore::setJSTestObjLongAttrSetter):
        (WebCore::setJSTestObjLongLongAttrSetter):
        (WebCore::setJSTestObjUnsignedLongLongAttrSetter):
        (WebCore::setJSTestObjStringAttrSetter):
        (WebCore::setJSTestObjUsvstringAttrSetter):
        (WebCore::setJSTestObjTestObjAttrSetter):
        (WebCore::setJSTestObjTestNullableObjAttrSetter):
        (WebCore::setJSTestObjLenientTestObjAttrSetter):
        (WebCore::setJSTestObjStringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::setJSTestObjUsvstringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::setJSTestObjByteStringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::setJSTestObjStringLongRecordAttrSetter):
        (WebCore::setJSTestObjUsvstringLongRecordAttrSetter):
        (WebCore::setJSTestObjStringObjRecordAttrSetter):
        (WebCore::setJSTestObjStringNullableObjRecordAttrSetter):
        (WebCore::setJSTestObjDictionaryAttrSetter):
        (WebCore::setJSTestObjNullableDictionaryAttrSetter):
        (WebCore::setJSTestObjAnnotatedTypeInUnionAttrSetter):
        (WebCore::setJSTestObjAnnotatedTypeInSequenceAttrSetter):
        (WebCore::setJSTestObjImplementationEnumAttrSetter):
        (WebCore::setJSTestObjXMLObjAttrSetter):
        (WebCore::setJSTestObjCreateSetter):
        (WebCore::setJSTestObjReflectedStringAttrSetter):
        (WebCore::setJSTestObjReflectedUSVStringAttrSetter):
        (WebCore::setJSTestObjReflectedIntegralAttrSetter):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttrSetter):
        (WebCore::setJSTestObjReflectedBooleanAttrSetter):
        (WebCore::setJSTestObjReflectedURLAttrSetter):
        (WebCore::setJSTestObjReflectedUSVURLAttrSetter):
        (WebCore::setJSTestObjReflectedCustomIntegralAttrSetter):
        (WebCore::setJSTestObjReflectedCustomBooleanAttrSetter):
        (WebCore::setJSTestObjReflectedCustomURLAttrSetter):
        (WebCore::setJSTestObjEnabledAtRuntimeAttributeSetter):
        (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter):
        (WebCore::setJSTestObjTypedArrayAttrSetter):
        (WebCore::setJSTestObjCustomAttrSetter):
        (WebCore::setJSTestObjOnfooSetter):
        (WebCore::setJSTestObjOnwebkitfooSetter):
        (WebCore::setJSTestObjWithExecStateAttributeSetter):
        (WebCore::setJSTestObjWithCallWithAndSetterCallWithAttributeSetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeSetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttributeSetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeSetter):
        (WebCore::setJSTestObjConditionalAttr1Setter):
        (WebCore::setJSTestObjConditionalAttr2Setter):
        (WebCore::setJSTestObjConditionalAttr3Setter):
        (WebCore::setJSTestObjConditionalAttr4ConstructorSetter):
        (WebCore::setJSTestObjConditionalAttr5ConstructorSetter):
        (WebCore::setJSTestObjConditionalAttr6ConstructorSetter):
        (WebCore::setJSTestObjAnyAttributeSetter):
        (WebCore::setJSTestObjObjectAttributeSetter):
        (WebCore::setJSTestObjMutablePointSetter):
        (WebCore::setJSTestObjStrawberrySetter):
        (WebCore::setJSTestObjIdSetter):
        (WebCore::setJSTestObjReplaceableAttributeSetter):
        (WebCore::setJSTestObjNullableLongSettableAttributeSetter):
        (WebCore::setJSTestObjNullableStringSettableAttributeSetter):
        (WebCore::setJSTestObjNullableUSVStringSettableAttributeSetter):
        (WebCore::setJSTestObjNullableByteStringSettableAttributeSetter):
        (WebCore::setJSTestObjAttributeWithReservedEnumTypeSetter):
        (WebCore::setJSTestObjPutForwardsAttributeSetter):
        (WebCore::setJSTestObjPutForwardsNullableAttributeSetter):
        (WebCore::setJSTestObjStringifierAttributeSetter):
        (WebCore::setJSTestObjConditionallyReadWriteAttributeSetter):
        (WebCore::setJSTestObjConditionalAndConditionallyReadWriteAttributeSetter):
        (WebCore::setJSTestObjConditionallyExposedToWindowAttributeSetter):
        (WebCore::setJSTestObjConditionallyExposedToWorkerAttributeSetter):
        (WebCore::setJSTestObjConditionallyExposedToWindowAndWorkerAttributeSetter):
        (WebCore::JSTestObj::serialize):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequenceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlotByIndex):
        (WebCore::JSTestOverrideBuiltins::getOwnPropertyNames):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfaceConstructor::initializeProperties):
        (WebCore::JSTestPluginInterface::getOwnPropertySlotByIndex):
        (WebCore::JSTestPluginInterface::putByIndex):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::convertDictionary<TestPromiseRejectionEvent::Init>):
        (WebCore::JSTestPromiseRejectionEventConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerializationConstructor::initializeProperties):
        (WebCore::setJSTestSerializationFirstStringAttributeSetter):
        (WebCore::setJSTestSerializationSecondLongAttributeSetter):
        (WebCore::setJSTestSerializationThirdUnserializableAttributeSetter):
        (WebCore::setJSTestSerializationFourthUnrestrictedDoubleAttributeSetter):
        (WebCore::setJSTestSerializationFifthLongAttributeSetter):
        (WebCore::setJSTestSerializationSixthTypedefAttributeSetter):
        (WebCore::setJSTestSerializationSeventhDirectlySerializableAttributeSetter):
        (WebCore::setJSTestSerializationEighthIndirectlyAttributeSetter):
        (WebCore::setJSTestSerializationNinthOptionalDirectlySerializableAttributeSetter):
        (WebCore::setJSTestSerializationTenthFrozenArrayAttributeSetter):
        (WebCore::setJSTestSerializationEleventhSequenceAttributeSetter):
        (WebCore::setJSTestSerializationTwelfthInterfaceSequenceAttributeSetter):
        (WebCore::JSTestSerialization::serialize):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritanceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInheritConstructor::initializeProperties):
        (WebCore::setJSTestSerializationInheritInheritLongAttributeSetter):
        (WebCore::JSTestSerializationInherit::serialize):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinalConstructor::initializeProperties):
        (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeFooSetter):
        (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeBarSetter):
        (WebCore::JSTestSerializationInheritFinal::serialize):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
        (WebCore::setJSTestSerializedScriptValueInterfaceValueSetter):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValueSetter):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributeConstructor::initializeProperties):
        (WebCore::setJSTestStringifierReadWriteAttributeIdentifierSetter):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::initializeProperties):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttrSetter):
        (WebCore::setJSTestTypedefsSerializedScriptValueSetter):
        (WebCore::setJSTestTypedefsAttributeWithClampSetter):
        (WebCore::setJSTestTypedefsAttributeWithClampInTypedefSetter):
        (WebCore::setJSTestTypedefsBufferSourceAttrSetter):
        (WebCore::setJSTestTypedefsDomTimeStampAttrSetter):
        * bridge/NP_jsobject.cpp:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::stringValue const):
        (JSC::Bindings::CInstance::getPropertyNames):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::identifierFromNPIdentifier):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject setValue:forKey:]):
        (-[WebScriptObject valueForKey:]):
        (-[WebScriptObject removeWebScriptKey:]):
        (-[WebScriptObject hasWebScriptKey:]):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::defaultValue):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertNSStringToString):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertyNames):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::loadTrigger):
        (WebCore::ContentExtensions::loadAction):
        * crypto/SubtleCrypto.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        * domjit/DOMJITHelpers.h:
        (WebCore::DOMJIT::toWrapperSlow):
        * html/HTMLMediaElement.cpp:
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        (WebCore::HTMLMediaElement::setControllerJSProperty):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):
        (WebCore::constructInternalProperty):
        (WebCore::objectForPaymentOptions):
        (WebCore::objectForPaymentCurrencyAmount):
        (WebCore::objectForPaymentItem):
        (WebCore::objectForPaymentShippingOption):
        (WebCore::objectForPaymentDetailsModifier):
        (WebCore::objectForPaymentDetails):
        (WebCore::jsStringForPaymentRequestState):
        (WebCore::WebInjectedScriptHost::getInternalProperties):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        * inspector/agents/page/PageAuditAgent.cpp:
        (WebCore::PageAuditAgent::populateAuditObject):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::screenshot):
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::doCustomPaint):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):
        (WebCoreTestSupport::setupNewlyCreatedServiceWorker):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):

2019-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: don't attach properties to `injectedScript` for the CommandLineAPI
        https://bugs.webkit.org/show_bug.cgi?id=201193

        Reviewed by Joseph Pecoraro.

        For some reason, adding `injectedScript._inspectObject` inside CommandLineAPIModuleSource.js
        causes inspector/debugger/tail-deleted-frames-this-value.html to fail.

        We should have a similar approach to adding command line api getters and functions, in that
        the CommandLineAPIModuleSource.js calls a function with a callback.

        * inspector/CommandLineAPIModuleSource.js:
        (injectedScript._inspectObject): Deleted.

2019-08-27  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Align table formatting context code with the existing layout logic.
        https://bugs.webkit.org/show_bug.cgi?id=201168
        <rdar://problem/54732633>

        Reviewed by Antti Koivisto.

        Let's make the TFC go through the exisint shrink-to-fit computation. Tables behave slightly different from
        other shrink-to-fit boxes as they are streched to their minimum width(MIN) even when 'width' is non-auto and computed to less than MIN. 

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout const):
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints const):
        (WebCore::Layout::TableFormattingContext::computedTableWidth const):
        (WebCore::Layout::TableFormattingContext::computeTableWidth const): Deleted.
        (WebCore::Layout::TableFormattingContext::computeTableHeight const): Deleted.
        (WebCore::Layout::TableFormattingContext::distributeAvailableHeight const): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableGrid.h:

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

        Minor optimization in InlineFlowBox::paintBoxDecorations()
        https://bugs.webkit.org/show_bug.cgi?id=201199

        Reviewed by Zalan Bujtas.

        This function can early return before computing localRect, which takes a bit of time (seen
        on profiles).

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):

2019-08-27  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        Drawing an animated image to a canvas via drawImage should draw the first frame
        https://bugs.webkit.org/show_bug.cgi?id=74779
        <rdar://problem/42282454>

        Reviewed by Said Abou-Hallawa.

        After this patch, when an animated image is drawn into a canvas via
        drawImage, the actual image that the canvas will receive will be
        a new Image object with the contents of the first frame of the animation.

        It also adds an internal setting to keep the previous behaviour
        (draw the current frame playing) because there are several layout
        tests that rely on canvas.drawImage() to check that animated images
        play properly.

        Test: fast/canvas/drawImage-animated-gif-draws-first-frame-and-no-reset-image.html

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setAnimatedImageDebugCanvasDrawingEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2019-08-27  Antti Koivisto  <antti@apple.com>

        InlineTextBox::end() should return first-past-end offset
        https://bugs.webkit.org/show_bug.cgi?id=201181

        Reviewed by Zalan Bujtas.

        It currently points to the last character, except for empty text boxes.
        This is awkward in itself and also inconsistent, as we use first-past-end offset everywhere else.

        * dom/Position.cpp:
        (WebCore::Position::downstream const):

        Add a check for zero length case to avoid changing behavior.

        * layout/Verification.cpp:
        (WebCore::Layout::checkForMatchingTextRuns):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::calculateDocumentMarkerBounds const):
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers const):
        (WebCore::InlineTextBox::paintCompositionUnderlines const):
        (WebCore::InlineTextBox::paintCompositionUnderline const):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::end const):

        end = start + len

        * rendering/RenderText.cpp:
        (WebCore::RenderText::setTextWithOffset):
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::localQuadForTextBox):
        (WebCore::RenderTextLineBoxes::absoluteRectsForRange const):
        (WebCore::RenderTextLineBoxes::absoluteQuadsForRange const):
        (WebCore::RenderTextLineBoxes::dirtyRange):

        Here the incoming 'end' used linebox style too, move that to the new definition too.

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

        Crash under WebCore::jsNotificationConstructorPermission
        https://bugs.webkit.org/show_bug.cgi?id=201186
        <rdar://problem/53962833>

        Reviewed by Youenn Fablet.

        Update the Notification API implementation to null-check the page before using. The page becomes null
        when using the API in a frame that gets detached from its parent while in the middle of running
        script.

        Test: http/tests/notifications/request-in-detached-frame.html

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::permission):
        (WebCore::Notification::requestPermission):

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

        Disabled devices should not be taken into account when searching for a capture device
        https://bugs.webkit.org/show_bug.cgi?id=201183
        <rdar://problem/54353440>

        Reviewed by Jer Noble.

        Manually tested.

        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioDeviceWithUID):
        We currently keep a list of devices, some of which might be disabled.
        We should not take into account disabled devices, only enabled devices
        when doing this search.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        Improve logging.

2019-08-26  Jer Noble  <jer.noble@apple.com>

        Removing fullscreen element in rAF() callback after requestFullscreen() can leave fullscreen in inconsistent state.
        https://bugs.webkit.org/show_bug.cgi?id=201101
        <rdar://problem/54164587>

        Reviewed by Eric Carlson.

        Test: fullscreen/full-screen-request-removed-with-raf.html

        Add a new state variable, m_pendingFullscreenElement, to track which element is about to
        become the fullscreen element, so that when elements are removed or cancelFullscreen() is
        called, the state machine inside the fullscreen algorithm can cancel effectively.

        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::requestFullscreenForElement):
        (WebCore::FullscreenManager::cancelFullscreen):
        (WebCore::FullscreenManager::exitFullscreen):
        (WebCore::FullscreenManager::willEnterFullscreen):
        (WebCore::FullscreenManager::willExitFullscreen):
        (WebCore::FullscreenManager::didExitFullscreen):
        (WebCore::FullscreenManager::adjustFullscreenElementOnNodeRemoval):
        (WebCore::FullscreenManager::clear):
        (WebCore::FullscreenManager::fullscreenElementRemoved): Deleted.
        * dom/FullscreenManager.h:

2019-08-27  Peng Liu  <peng.liu6@apple.com>

        webkitpresentationmodechanged is fired twice when exiting picture in picture
        https://bugs.webkit.org/show_bug.cgi?id=193765

        Reviewed by Jer Noble.

        This patch removes the extra "webkitpresentationmodechanged" event when the browser switches from
        picture-in-picture or fullscreen to inline.

        The bug was introduced by the fix for bug
        https://bugs.webkit.org/show_bug.cgi?id=181095
        But now we are using modern media controls and the fix is not necessary.
        Reverting that fix can fix the issue.

        Also, this patch gets rid of the unnecessary try to call a JavaScript function which is not available
        in the modern media controls.

        Test: media/presentationmodechanged-fired-once.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):

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

        Image pasted from screenshot into Mail compose window via share sheet has the wrong aspect ratio
        https://bugs.webkit.org/show_bug.cgi?id=201171
        <rdar://problem/54671275>

        Reviewed by Tim Horton.

        Augments an existing app-specific hack to include the Mail composition service, in addition to Mail.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isMailCompositionService):

        Add a new bundle checking method for the Mail composition service (com.apple.MailCompositionService).

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

        Only plumb the preferred presentation height through to the web process if the application is neither Mail nor
        the Mail composition service. In the future, we should consider putting this hack behind SPI, or maybe only
        expose the preferred presentation width in all apps (it isn't difficult to imagine a use case where a "Mail-
        compose-like" web app has `img { max-width: 100%; }` in their stylesheet).

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

        Origin header not included in WebSocket handshake request when using platform WebSocket API
        https://bugs.webkit.org/show_bug.cgi?id=200535

        Reviewed by Youenn Fablet.

        Add Origin HTTP header to the WebSocket handshake request.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::webSocketConnectRequest):

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

        Make MediaStreamTrackPrivate RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=201040

        Reviewed by Darin Adler.

        MediaStreamTrackPrivate should not be ref/deref except from the main thread.
        The only method called from a background thread is audioSamplesAvailable in which
        it is unsafe to ref a MediaStreamTrackPrivate.
        Make the track RefCounted will ensure that no ref/deref is made in background threads.
        No observable change of behavior.

        * platform/mediastream/MediaStreamTrackPrivate.h:

2019-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [WebCore] DataCue should not use gcProtect / gcUnprotect
        https://bugs.webkit.org/show_bug.cgi?id=201170

        Reviewed by Mark Lam.

        JSC::gcProtect and JSC::gcUnprotect are designed for JavaScriptCore.framework and we should not use them in WebCore. It is
        checking whether we are holding a JS API lock. But the caller of these API would be the C++ holder's destructor, and this should be
        allowed since this destruction must happen in main thread or web thread, and this should not happen while other thread is taking JS API lock.
        For example, we are destroying JSC::Strong<>, JSC::Weak<> without taking JS API lock. But since JSC::gcProtect and JSC::gcUnprotect are designed
        for JavaScriptCore.framework, they are not accounting this condition, and we are hitting debug assertion in GC stress bot.

        Ideally, we should convert this JSValue field to JSValueInWrappedObject. But JSValueInWrappedObject needs extra care. We should
        know how the owner and JS wrapper are kept and used to use JSValueInWrappedObject correctly.

        As a first step, this patch just replaces raw JSValue + gcProtect/gcUnprotect with JSC::Strong<>.

        This change fixes LayoutTests/media/track/track-in-band-metadata-display-order.html crash in GC stress bot. The crash trace is the following.

            Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
            0   com.apple.JavaScriptCore          0x000000010ee3d980 WTFCrash + 16
            1   com.apple.JavaScriptCore          0x000000010ee408ab WTFCrashWithInfo(int, char const*, char const*, int) + 27
            2   com.apple.JavaScriptCore          0x000000010feb5327 JSC::Heap::unprotect(JSC::JSValue) + 215
            3   com.apple.WebCore                 0x0000000120f33b53 JSC::gcUnprotect(JSC::JSCell*) + 51
            4   com.apple.WebCore                 0x0000000120f329fc JSC::gcUnprotect(JSC::JSValue) + 76
            5   com.apple.WebCore                 0x0000000120f32968 WebCore::DataCue::~DataCue() + 88
            6   com.apple.WebCore                 0x0000000120f32ac5 WebCore::DataCue::~DataCue() + 21
            7   com.apple.WebCore                 0x0000000120f32ae9 WebCore::DataCue::~DataCue() + 25
            8   com.apple.WebCore                 0x0000000120f37ebf WTF::RefCounted<WebCore::TextTrackCue, std::__1::default_delete<WebCore::TextTrackCue> >::deref() const + 95
            9   com.apple.WebCore                 0x000000012103a345 void WTF::derefIfNotNull<WebCore::TextTrackCue>(WebCore::TextTrackCue*) + 53
            10  com.apple.WebCore                 0x000000012103a309 WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >::~RefPtr() + 41
            11  com.apple.WebCore                 0x000000012102bfc5 WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >::~RefPtr() + 21
            12  com.apple.WebCore                 0x00000001210e91df WTF::VectorDestructor<true, WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> > >::destruct(WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >*, WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >*) + 47
            13  com.apple.WebCore                 0x00000001210e913d WTF::VectorTypeOperations<WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> > >::destruct(WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >*, WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >*) + 29
            14  com.apple.WebCore                 0x00000001210e9100 WTF::Vector<WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >, 0ul, WTF::CrashOnOverflow, 16ul>::~Vector() + 64
            15  com.apple.WebCore                 0x00000001210e7a25 WTF::Vector<WTF::RefPtr<WebCore::TextTrackCue, WTF::DumbPtrTraits<WebCore::TextTrackCue> >, 0ul, WTF::CrashOnOverflow, 16ul>::~Vector() + 21
            16  com.apple.WebCore                 0x00000001210e93d3 WebCore::TextTrackCueList::~TextTrackCueList() + 51

        * html/track/DataCue.cpp:
        (WebCore::DataCue::DataCue):
        (WebCore::DataCue::~DataCue):
        (WebCore::DataCue::setData):
        (WebCore::DataCue::value const):
        (WebCore::DataCue::setValue):
        (WebCore::DataCue::valueOrNull const):
        * html/track/DataCue.h:

2019-08-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: use more C++ keywords for defining agents
        https://bugs.webkit.org/show_bug.cgi?id=200959

        Reviewed by Joseph Pecoraro.

         - make constructors `protected` when the agent isn't meant to be constructed directly
         - add `virtual` destructors that are defined in the *.cpp so forward-declarations work
         - use `final` wherever possible
         - add comments to indicate where any virtual functions come from

        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorCPUProfilerAgent.h:
        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * inspector/agents/InspectorLayerTreeAgent.h:
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        * inspector/agents/InspectorMemoryAgent.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        * inspector/agents/InspectorWorkerAgent.h:
        * inspector/agents/InspectorWorkerAgent.cpp:
        * inspector/agents/WebConsoleAgent.h:
        * inspector/agents/WebConsoleAgent.cpp:
        * inspector/agents/WebDebuggerAgent.h:
        * inspector/agents/WebDebuggerAgent.cpp:
        * inspector/agents/WebHeapAgent.h:
        * inspector/agents/WebHeapAgent.cpp:
        * inspector/agents/page/PageAuditAgent.h:
        * inspector/agents/page/PageAuditAgent.cpp:
        * inspector/agents/page/PageConsoleAgent.h:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        * inspector/agents/page/PageHeapAgent.h:
        * inspector/agents/page/PageHeapAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.h:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.h:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        * inspector/agents/worker/ServiceWorkerAgent.h:
        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        * inspector/agents/worker/WorkerAuditAgent.h:
        * inspector/agents/worker/WorkerAuditAgent.cpp:
        * inspector/agents/worker/WorkerConsoleAgent.h:
        * inspector/agents/worker/WorkerConsoleAgent.cpp:
        * inspector/agents/worker/WorkerDebuggerAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.h:
        * inspector/agents/worker/WorkerNetworkAgent.cpp:
        * inspector/agents/worker/WorkerRuntimeAgent.h:
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:

2019-08-26  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Rewrite all tests to use WHLSL and delete the isWHLSL flag
        https://bugs.webkit.org/show_bug.cgi?id=201162

        Reviewed by Saam Barati.

        We want to keep the MSL codepath for debugging, so the codepath isn't deleted entirely, but it is no longer web exposed.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createShaderModule const):
        * Modules/webgpu/WebGPUShaderModuleDescriptor.h:
        * Modules/webgpu/WebGPUShaderModuleDescriptor.idl:
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUShaderModuleDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::tryCreate):

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

        Change default value of window.open()'s url argument
        https://bugs.webkit.org/show_bug.cgi?id=200882

        Reviewed by Ryosuke Niwa.

        Update default URL parameter value for window.open() to be "" instead of "about:blank", as per:
        - https://github.com/whatwg/html/issues/4762

        This aligns our behavior with other Web browser engines.

        No new tests, rebaselined existing test.

        * page/DOMWindow.idl:

2019-08-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: unify agent command error messages
        https://bugs.webkit.org/show_bug.cgi?id=200950

        Reviewed by Joseph Pecoraro.

        Different agents can sometimes have different error messages for commands that have a
        similar intended effect.  We should make our error messages more similar.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorCSSAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        * inspector/agents/InspectorMemoryAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorTimelineAgent.cpp:
        * inspector/agents/InspectorWorkerAgent.cpp:
        * inspector/agents/page/PageAuditAgent.cpp:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        * inspector/agents/worker/WorkerAuditAgent.cpp:
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        Elide function lists to avoid an extremely large ChangeLog entry.

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

        Regression: ITP started doing a lot more IPC after its logic was moved to the network process
        https://bugs.webkit.org/show_bug.cgi?id=201155

        Reviewed by John Wilander.

        ITP started doing a lot more IPC after its logic was moved to the network process. Web processes used to
        send their statistics to the UIProcess at most every 5 seconds. However, when the logic got moved to the network
        process, we started notifying the network process via IPC after every sub resource load. This is bad for performance
        and battery life. This patch restores the 5 second delay to address the issue.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::ResourceLoadObserver):
        (WebCore::ResourceLoadObserver::setRequestStorageAccessUnderOpenerCallback):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::scheduleNotificationIfNeeded):
        (WebCore::ResourceLoadObserver::updateCentralStatisticsStore):
        (WebCore::ResourceLoadObserver::clearState):
        * loader/ResourceLoadObserver.h:

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

        Optimize computation of AbsoluteClipRects clip rects
        https://bugs.webkit.org/show_bug.cgi?id=201148

        Reviewed by Zalan Bujtas.

        When adding layers to the compositing overlap map, we compute AbsoluteClipRects for every
        layer which is expensive. This was more expensive than necessary because we converted them
        to TemporaryClipRects when crossing painting boundaries, but AbsoluteClipRects don't
        care about painting boundaries, so don't do this.

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

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

        Drop WEBCORE_EXPORT from ChromeClient class
        https://bugs.webkit.org/show_bug.cgi?id=201146

        Reviewed by Alex Christensen.

        Drop WEBCORE_EXPORT from ChromeClient class. All its methods and either pure virtual or inlined in the header.

        * page/ChromeClient.h:

2019-08-26  David Kilzer  <ddkilzer@apple.com>

        Don't compute upconverted characters twice in buildQuery() in DataDetection.mm
        <https://webkit.org/b/201144>
        <rdar://problem/54689399>

        Reviewed by Brent Fulgham.

        * editing/cocoa/DataDetection.mm:
        (WebCore::buildQuery): Extract common variables to prevent double
        conversion for 8-bit strings.

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

        [FTW] Go back to ID2D1Bitmap as our NativeImage type
        https://bugs.webkit.org/show_bug.cgi?id=201122

        Reviewed by Alex Christensen.

        In Bug 200093 I switched the OS type of NativeImagePtr from ID2D1Bitmap to IWICBitmap.
        However, this was an ill-advised approach, because it dramatically harmed performance due
        to the heavy use of software rendering.

        I originally made this change because I thought this was the only way to get to the backing
        bits of the bitmaps, but it turns out that a more recent Direct2D data type (ID2D1Bitmap1)
        has the ability to map its memory to CPU-accessible memory, allowing software filter effects.

        This patch switches back to the ID2D1Bitap data type, and hooks up the ID2D1Bitmap1 data type
        to access the underlying memory of the bitmaps when software filter effects are used.

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        * platform/graphics/win/Direct2DOperations.cpp:
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::writeDiagnosticPNGToPath):
        (WebCore::Direct2D::writeImageToDiskAsPNG): Deleted.
        * platform/graphics/win/Direct2DUtilities.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        * platform/graphics/win/NativeImageDirect2D.cpp:
        * platform/graphics/win/PatternDirect2D.cpp:
        * svg/graphics/SVGImage.cpp:

2019-08-26  Sam Weinig  <weinig@apple.com>

        [WHLSL] TypeNamer can be simplified by replacing BaseTypeNameNode with uniqued AST::UnnamedTypes
        https://bugs.webkit.org/show_bug.cgi?id=200632

        Reviewed by Saam Barati.

        There is no longer a reason to keep a parallel tree of the UnnamedType-like objects
        BaseTypeNameNodes. Instead, we can store a single HashMap mapping from UnnamedTypeKeys
        to MangledTypeName, and use the the UnnamedType stored in the UnnamedTypeKey while 
        emitting the metal code. This removes the parallel BaseTypeNameNode type hierarchy
        and removes an extra allocation for each UnnamedType. 

        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedTypeHash.h:
        Define HashTraits and DefaultHash specializations for UnnamedTypeKey to simplify
        uses of UnnamedTypeKey as a key in HashMap/HashSet.

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::insert): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::generateUniquedTypeName):
        Replace old insert function with generateUniquedTypeName, which uniques and generates
        names for the UnnamedType and any 'parent' UnnamedTypes.

        (WebCore::WHLSL::Metal::BaseTypeNameNode): Deleted.
        Remove BaseTypeNameNode and subclasses.

        (WebCore::WHLSL::Metal::TypeNamer::find): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode): Deleted.
        We no longer need the find or createNameNode functions, as the UnnamedTypes can be now be
        used directly everywhere.

        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        Switch to directly using the UnnamedType and always have the caller pass in the mangled
        name, since in the main emit loop, we always have access to the them. Also, inline the
        the recursive calls to emitNamedTypeDefinition for 'parent' types to avoid unnecessary
        extra switch over the kind getting the parent, and avoid it entirely for TypeReference
        which never has a parent.
        
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        Switches to now passing in the neighbors, since they are always available in the main 
        emit loop. Also move to a switch statement rather than ifs for consistency. 
        
        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypeDefinitions):
        Pass keys and values into the emit functions to avoid double lookups.

        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForType):
        Update to hash lookup.

        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        Take advantage of default HashTraits and DefaultHash for UnnamedTypeKey.

2019-08-26  Peng Liu  <peng.liu6@apple.com>

        REGRESSION (18E140): “return streaming movie to real time” suggesting “resume real time streaming”
        https://bugs.webkit.org/show_bug.cgi?id=201108
        <rdar://problem/46372525>

        Reviewed by Eric Carlson.

        Update Localizable.strings.

        No new test.

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementHelpText):

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

        CacheStorageConnection::computeRealBodySize is not thread-safe
        https://bugs.webkit.org/show_bug.cgi?id=201074

        Reviewed by Chris Dumez.

        In case of a form data, the size computation might require sync IPC to the network process which is not thread-safe
        In that case, hop to the main thread to compute the size of the body.
        Covered by existing service worker tests in Debug mode.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::formDataSize):
        (WebCore::CacheStorageConnection::computeRealBodySize):

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

        MessagePort should be WeakPtrFactoryInitialization::Eager
        https://bugs.webkit.org/show_bug.cgi?id=201073

        Reviewed by Chris Dumez.

        Covered by existing layout tests.

        * dom/MessagePort.h:

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

        Have RenderLayer::calculateClipRects() use offsetFromAncestor() when possible
        https://bugs.webkit.org/show_bug.cgi?id=201066

        Reviewed by Dean Jackson.

        offsetFromAncestor() is a layer tree walk, so faster than localToContainerPoint(),
        but we can't use it when there are transforms on the layer and intermediates up
        to the ancestor.
        
        canUseConvertToLayerCoords() was trying to answer the question about whether it's
        OK to use offsetFromAncestor() (which calls convertToLayerCoords() internally), but
        it has insufficient information to make a determination. Leave this issue alone, but
        at least rename canUseConvertToLayerCoords().

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

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

        Page crashes under CGPathAddUnevenCornersRoundedRect
        https://bugs.webkit.org/show_bug.cgi?id=201117

        Reviewed by Dean Jackson.
        
        Fix crash on https://onehtmlpagechallenge.com/entries/pure-css-still-life-water-lemon.html
        We were passing CG radius values where the sum of two radii was greater than the height or
        width, caused by rounding when converting from floats to doubles.

        Test: fast/borders/renderable-uneven-rounded-rects.html

        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::platformAddPathForRoundedRect):

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

        RenderLayer::updateLayerPositions() doesn't propagate the ancestor flags correctly
        https://bugs.webkit.org/show_bug.cgi?id=201115

        Reviewed by Zalan Bujtas.

        When an updateLayerPositions() traversal starts at a non-root layer, we failed to populate
        the ancestor-related UpdateLayerPositionsFlag flags, leaving layers with missing flags
        (e.g. the m_hasTransformedAncestor flag). This is detected by the patch in bug 201066.

        Fix by having updateLayerPositionsAfterStyleChange() and updateLayerPositionsAfterLayout()
        initialize the flags from the parent layer.

        This is a behavior change not detected by any existing test, but will be exercised once
        the patch from bug 201066 lands.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::flagsForUpdateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive): Log hasTransformedAncestor().
        * rendering/RenderLayer.h:

2019-08-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add section renderers to the layout tree (THEAD/TBODY/TFOOT)
        https://bugs.webkit.org/show_bug.cgi?id=201114
        <rdar://problem/54664992>

        Reviewed by Antti Koivisto.

        Section renderers (THEAD/TBODY/TFOOT) are direct children of the RenderTable. Let's include them in the layout tree as well.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createTableStructure):
        (WebCore::Layout::outputInlineRuns):

2019-08-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Box::isAnonymous() can not rely on the lack of ElementType.
        https://bugs.webkit.org/show_bug.cgi?id=201106
        <rdar://problem/54660287>

        Reviewed by Antti Koivisto.

        Add bool m_isAnonymous member to mark anonymous layout boxes. Anonymous boxes are not rare enough to include this variable in RareData.

        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::setIsAnonymous):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):

2019-08-24  Antti Koivisto  <antti@apple.com>

        Implement layout system independent text box iterator
        https://bugs.webkit.org/show_bug.cgi?id=201076

        Reviewed by Zalan Bujtas.

        Add a generic way to traverse line layout without caring about the details of the underlying layout system.

        This patch adds basic support for traversing text boxes and uses it to remove layout path specific branches in RenderTreeAsText.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeTextBox):
        (WebCore::write):
        (WebCore::writeTextRun): Deleted.
        (WebCore::writeSimpleLine): Deleted.
        * rendering/line/LineLayoutInterfaceTextBoxes.cpp: Added.
        (WebCore::LineLayoutInterface::TextBox::rect const):
        (WebCore::LineLayoutInterface::TextBox::logicalRect const):
        (WebCore::LineLayoutInterface::TextBox::hasHyphen const):
        (WebCore::LineLayoutInterface::TextBox::isLeftToRightDirection const):
        (WebCore::LineLayoutInterface::TextBox::dirOverride const):
        (WebCore::LineLayoutInterface::TextBox::text const):
        (WebCore::LineLayoutInterface::TextBoxIterator::TextBoxIterator):
        (WebCore::LineLayoutInterface::TextBoxIterator::traverseNext):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator== const):
        (WebCore::LineLayoutInterface::simpleLineRunResolverForText):
        (WebCore::LineLayoutInterface::rangeForText):
        (WebCore::LineLayoutInterface::TextBoxRange::TextBoxRange):
        (WebCore::LineLayoutInterface::textBoxes):
        * rendering/line/LineLayoutInterfaceTextBoxes.h: Added.
        (WebCore::LineLayoutInterface::TextBox::TextBox):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator++):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator!= const):
        (WebCore::LineLayoutInterface::TextBoxIterator::operator* const):
        (WebCore::LineLayoutInterface::TextBoxRange::begin const):
        (WebCore::LineLayoutInterface::TextBoxRange::end const):

2019-08-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Non-inline formatting context(table, grid etc) root container should not collapse through.
        https://bugs.webkit.org/show_bug.cgi?id=201099
        <rdar://problem/54658946>

        Reviewed by Antti Koivisto.

        I didn't manage to find it in the spec, but surely formatting contexts like table, grid and flex should behave like
        block so that their vertical margins are not adjoining, when they have at least one inflow child.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough):

2019-08-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add THEAD/TBODY/TFOOT output to Layout::showLayoutTree
        https://bugs.webkit.org/show_bug.cgi?id=201113
        <rdar://problem/54664134>

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutBox):

2019-08-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Remove redundant Layout::Box::ElementType::TableRowGroup
        https://bugs.webkit.org/show_bug.cgi?id=201112
        <rdar://problem/54663833>

        Reviewed by Antti Koivisto.

        Use Layout::Box::ElementType::TableBodyGroup instead.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isPaddingApplicable const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):

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

        RenderLayerModelObject should not call private RenderLayer functions
        https://bugs.webkit.org/show_bug.cgi?id=201111

        Reviewed by Zalan Bujtas.

        Make RenderLayerModelObject no longer a friend class of RenderLayer, giving it a public
        willRemoveChildWithBlendMode() function to call. Also make the UpdateLayerPositionsFlag
        enum private, providing a updateLayerPositionsAfterStyleChange() for RenderLayerModelObject,
        and changing the arguments of updateLayerPositionsAfterLayout() for FrameView.

        No behavior change.

        * page/FrameView.cpp:
        (WebCore::FrameView::didLayout):
        (WebCore::updateLayerPositionFlags): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterStyleChange):
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::RenderLayer::willRemoveChildWithBlendMode):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleDidChange):

2019-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        Implement StaticRange constructor
        https://bugs.webkit.org/show_bug.cgi?id=201055

        Reviewed by Wenson Hsieh.

        Added the constructor to StaticRange per https://github.com/whatwg/dom/pull/778.

        Test: imported/w3c/web-platform-tests/dom/ranges/StaticRange-constructor.html

        * dom/StaticRange.cpp:
        (WebCore::isDocumentTypeOrAttr):
        (WebCore::StaticRange::create):
        * dom/StaticRange.h:
        * dom/StaticRange.idl:

2019-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: create additional command line api functions for other console methods
        https://bugs.webkit.org/show_bug.cgi?id=200971

        Reviewed by Joseph Pecoraro.

        Expose all `console.*` functions in the command line API, since they're all already able to
        be referenced via the `console` object.

        Provide a simpler interface for other injected scripts to modify the command line API.

        * inspector/CommandLineAPIModuleSource.js:
        (injectedScript._inspectObject): Added.
        (normalizeEventTypes): Added.
        (logEvent): Added.
        (canQuerySelectorOnNode): Added.
        (bind): Deleted.
        (value): Deleted.
        (this.method.toString): Deleted.
        (CommandLineAPI): Deleted.
        (CommandLineAPIImpl): Deleted.
        (CommandLineAPIImpl.prototype): Deleted.
        (CommandLineAPIImpl.prototype._canQuerySelectorOnNode): Deleted.
        (CommandLineAPIImpl.prototype.x): Deleted.
        (CommandLineAPIImpl.prototype.dir): Deleted.
        (CommandLineAPIImpl.prototype.dirxml): Deleted.
        (CommandLineAPIImpl.prototype.keys): Deleted.
        (CommandLineAPIImpl.prototype.values): Deleted.
        (CommandLineAPIImpl.prototype.profile): Deleted.
        (CommandLineAPIImpl.prototype.profileEnd): Deleted.
        (CommandLineAPIImpl.prototype.table): Deleted.
        (CommandLineAPIImpl.prototype.screenshot): Deleted.
        (CommandLineAPIImpl.prototype.monitorEvents): Deleted.
        (CommandLineAPIImpl.prototype.unmonitorEvents): Deleted.
        (CommandLineAPIImpl.prototype.inspect): Deleted.
        (CommandLineAPIImpl.prototype.queryInstances): Deleted.
        (CommandLineAPIImpl.prototype.queryObjects): Deleted.
        (CommandLineAPIImpl.prototype.queryHolders): Deleted.
        (CommandLineAPIImpl.prototype.copy): Deleted.
        (CommandLineAPIImpl.prototype.clear): Deleted.
        (CommandLineAPIImpl.prototype.getEventListeners): Deleted.
        (CommandLineAPIImpl.prototype._inspectedObject): Deleted.
        (CommandLineAPIImpl.prototype._normalizeEventTypes): Deleted.
        (CommandLineAPIImpl.prototype._logEvent): Deleted.
        (CommandLineAPIImpl.prototype._inspect): Deleted.

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

        Crash under TimerBase::setNextFireTime() in the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=201097
        <rdar://problem/54658339>

        Reviewed by Ryosuke Niwa.

        NetworkStateNotifier is a WebCore/platform class used by both WebKitLegacy and WebKit2 in the NetworkProcess.
        On iOS, the lambda in the implementation of NetworkStateNotifier::startObserving() may get called by the
        underlying framework on a non-main thread and we therefore want to go back to the main thread before calling
        NetworkStateNotifier::singleton().updateStateSoon(). This is important because updateStateSoon() will schedule
        a WebCore::Timer. The issue is that the code was using WebThreadRun() to go back the the main thread. While
        this works fine in iOS WK1, it does not do what we want in WebKit2 in the network process. Indeed, before there
        is no WebThread in the network process, WebThreadRun() will simply run the block on whatever thread we're one.
        This would lead to crashes when trying to schedule the Timer in updateStateSoon(). To address the issue, we now
        use callOnMainThread().

        * platform/network/ios/NetworkStateNotifierIOS.mm:
        (WebCore::NetworkStateNotifier::startObserving):

2019-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r248807): Objects stored in ElementRareData are leaked
        https://bugs.webkit.org/show_bug.cgi?id=200954

        Reviewed by David Kilzer.

        NodeRareData didn't have a virtual destructor. As a result, member variables
        of ElementRareData did not get destructed properly.

        * dom/NodeRareData.cpp:
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::~NodeRareData):

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

        [iOS] [WebKit2] Tapping on the “I’m” text suggestion after typing “i’” does nothing
        https://bugs.webkit.org/show_bug.cgi?id=201085
        <rdar://problem/53056118>

        Reviewed by Tim Horton.

        Exposes an existing quote folding function as a helper on TextIterator, and also adjusts foldQuoteMarks to take
        a const String& rather than a String. See WebKit ChangeLog for more details.

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMarks):
        (WebCore::SearchBuffer::SearchBuffer):
        * editing/TextIterator.h:

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

        Remove IDBDatabaseIdentifier::m_mainFrameOrigin
        https://bugs.webkit.org/show_bug.cgi?id=201078

        Reviewed by Darin Adler.

        No change of behavior.

        * Modules/indexeddb/IDBDatabaseIdentifier.h:

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

        [geolocation] Rename interfaces and remove [NoInterfaceObject]
        https://bugs.webkit.org/show_bug.cgi?id=200885

        Reviewed by Alex Christensen.

        Rename Geolocation interfaces and expose them on the global Window object to match the
        latest specification:
        - https://w3c.github.io/geolocation-api/#api_description

        Test: fast/dom/Geolocation/exposed-geolocation-interfaces.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::setFatalError):
        (WebCore::GeoNotifier::runSuccessCallback):
        (WebCore::GeoNotifier::runErrorCallback):
        (WebCore::GeoNotifier::timerFired):
        * Modules/geolocation/GeoNotifier.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::createGeolocationPosition):
        (WebCore::createGeolocationPositionError):
        (WebCore::Geolocation::lastPosition):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::requestUsesCachedPosition):
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::haveSuitableCachedPosition):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::cancelRequests):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::makeSuccessCallbacks):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::setError):
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/GeolocationClient.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::lastPosition):
        * Modules/geolocation/GeolocationController.h:
        * Modules/geolocation/GeolocationCoordinates.cpp: Renamed from Source/WebCore/Modules/geolocation/Coordinates.cpp.
        (WebCore::GeolocationCoordinates::GeolocationCoordinates):
        * Modules/geolocation/GeolocationCoordinates.h: Renamed from Source/WebCore/Modules/geolocation/Coordinates.h.
        (WebCore::GeolocationCoordinates::create):
        (WebCore::GeolocationCoordinates::isolatedCopy const):
        * Modules/geolocation/GeolocationCoordinates.idl: Renamed from Source/WebCore/Modules/geolocation/Coordinates.idl.
        * Modules/geolocation/GeolocationPosition.h:
        (WebCore::GeolocationPosition::create):
        (WebCore::GeolocationPosition::isolatedCopy const):
        (WebCore::GeolocationPosition::timestamp const):
        (WebCore::GeolocationPosition::coords const):
        (WebCore::GeolocationPosition::GeolocationPosition):
        * Modules/geolocation/GeolocationPosition.idl: Renamed from Source/WebCore/Modules/geolocation/Geoposition.idl.
        * Modules/geolocation/GeolocationPositionData.h: Copied from Source/WebCore/Modules/geolocation/GeolocationPosition.h.
        (WebCore::GeolocationPositionData::GeolocationPositionData):
        (WebCore::GeolocationPositionData::encode const):
        (WebCore::GeolocationPositionData::decode):
        (WebCore::GeolocationPositionData::isValid const):
        * Modules/geolocation/GeolocationPositionError.h: Renamed from Source/WebCore/Modules/geolocation/PositionError.h.
        (WebCore::GeolocationPositionError::create):
        (WebCore::GeolocationPositionError::GeolocationPositionError):
        * Modules/geolocation/GeolocationPositionError.idl: Renamed from Source/WebCore/Modules/geolocation/PositionError.idl.
        * Modules/geolocation/Geoposition.h: Removed.
        * Modules/geolocation/PositionCallback.h:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.h:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/geolocation/ios/GeolocationPositionDataIOS.mm: Renamed from Source/WebCore/Modules/geolocation/ios/GeolocationPositionIOS.mm.
        (WebCore::GeolocationPositionData::GeolocationPositionData):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::setPosition):
        (WebCore::GeolocationClientMock::lastPosition):
        * platform/mock/GeolocationClientMock.h:

2019-08-20  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Support NFC authenticators for iOS
        https://bugs.webkit.org/show_bug.cgi?id=188624
        <rdar://problem/43354214>

        Reviewed by Chris Dumez.

        Tests: http/wpt/webauthn/ctap-nfc-failure.https.html
               http/wpt/webauthn/public-key-credential-create-failure-nfc.https.html
               http/wpt/webauthn/public-key-credential-create-success-nfc.https.html
               http/wpt/webauthn/public-key-credential-get-failure-nfc.https.html
               http/wpt/webauthn/public-key-credential-get-success-nfc.https.html

        * Modules/webauthn/apdu/ApduResponse.h:
        Adds a new method to support moving m_data.
        * Modules/webauthn/fido/FidoConstants.h:
        Adds constants for NFC applet selection.

2019-08-23  Ross Kirsling  <ross.kirsling@sony.com>

        JSC should have public API for unhandled promise rejections
        https://bugs.webkit.org/show_bug.cgi?id=197172

        Reviewed by Keith Miller.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::promiseRejectionTracker):
        Move JSInternalPromise early-out to JSC side.

2019-08-23  Kate Cheney  <katherine_cheney@apple.com>

        Support ITP on a per-session basis (198923)
        https://bugs.webkit.org/show_bug.cgi?id=198923

        Reviewed by Chris Dumez.

        This patch updated the data structure used to collect resource load
        statistics in order to support ITP data collection on a per session
        basis. Each sessionID is stored as a key-value pair with its own map
        of ResourceLoadStatistics.

        It also updated the statisticsForURL function call to perform lookups
        of URL data based on sessionID.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setStatisticsUpdatedCallback):
        (WebCore::ResourceLoadObserver::shouldLog const):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logFontLoad):
        (WebCore::ResourceLoadObserver::logCanvasRead):
        (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure):
        (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed):
        (WebCore::ResourceLoadObserver::logScreenAPIAccessed):
        (WebCore::ResourceLoadObserver::ensureResourceStatisticsForRegistrableDomain):
        (WebCore::ResourceLoadObserver::statisticsForURL):
        (WebCore::ResourceLoadObserver::takeStatistics):
        (WebCore::ResourceLoadObserver::clearState):
        * loader/ResourceLoadObserver.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resourceLoadStatisticsForURL):

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

        Remove unnecessary call to enclosingClippingScopes()
        https://bugs.webkit.org/show_bug.cgi?id=201063

        Reviewed by Zalan Bujtas.

        This line of code did nothing, and was left in by mistake. Remove it.

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

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

        Cache hasCompositedScrollableOverflow as a bit on RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=201065

        Reviewed by Zalan Bujtas.

        hasCompositedScrollableOverflow() is pretty hot on some compositing-related code paths, and isn't
        super cheap, as it checks a Setting and calls into renderer code. Optimize by computing it in
        computeScrollDimensions().

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::hasCompositedScrollableOverflow const):
        (WebCore::RenderLayer::computeScrollDimensions):
        * rendering/RenderLayer.h:

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

        Don't call clipCrossesPaintingBoundary() when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=201064

        Reviewed by Zalan Bujtas.

        clipCrossesPaintingBoundary() does some RenderLayer ancestor walks, so avoid
        calling it when we already know that the clip rects are TemporaryClipRects.

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

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

        [GStreamer] Hole-punch build is broken
        https://bugs.webkit.org/show_bug.cgi?id=200972

        Reviewed by Žan Doberšek.

        This patch fixes link issues when building with
        USE_GSTREAMER_HOLEPUNCH enabled, the hole punch client destructor
        was missing.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Remove FAST_ALLOCATED annotation, because:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        it's now in the base class, along with a default destructor.

2019-08-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [SVG] -webkit-clip-path treats url(abc#xyz) as url(#xyz) because it checks only URL fragment part
        https://bugs.webkit.org/show_bug.cgi?id=201030

        Reviewed by Ryosuke Niwa.

        Tests: svg/clip-path/clip-path-invalid-reference-001-expected.svg
               svg/clip-path/clip-path-invalid-reference-001.svg
               svg/clip-path/clip-path-invalid-reference-002-expected.svg
               svg/clip-path/clip-path-invalid-reference-002.svg

        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertClipPath): Use
        SVGURIReference::fragmentIdentifierFromIRIString to get fragment
        identifier from -webkit-clip-path.

2019-08-22  Andy Estes  <aestes@apple.com>

        [watchOS] Disable Content Filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=201047

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

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

        Try to recover nicely when getting an unexpected schema in the service workers database
        https://bugs.webkit.org/show_bug.cgi?id=201002
        <rdar://problem/54574991>

        Reviewed by Youenn Fablet.

        Try to recover nicely when getting an unexpected schema in the service workers database instead
        of crashing the network process. To recover, we delete the database file and re-create it.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::ensureValidRecordsTable):

2019-08-22  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Crash may happen when an SVG <feImage> element references the root <svg> element
        https://bugs.webkit.org/show_bug.cgi?id=201014

        Reviewed by Ryosuke Niwa.

        When an <feImage> references an <svg> element as its target image but
        this <svg> element is also one of the ancestors of the <feImage>, the
        parent <filter> should not be applied.

        Test: svg/filters/filter-image-ref-root.html

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build const):

2019-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        Make ImageBuffer and SVG's FilterData isoheap'ed
        https://bugs.webkit.org/show_bug.cgi?id=201029

        Reviewed by Simon Fraser.

        Made ImageBuffer and RenderSVGResourceFilter use IsoHeap.

        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:

2019-08-22  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK][WPE] Fixes for non-unified builds after r248547
        https://bugs.webkit.org/show_bug.cgi?id=201044

        Reviewed by Philippe Normand.

        * platform/audio/AudioResamplerKernel.h: Add missing inclusion of wtf/Noncopyable.h

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

        Make MediaStreamTrackPrivate WeakPtrFactoryInitialization::Eager
        https://bugs.webkit.org/show_bug.cgi?id=201037

        Reviewed by Darin Adler.

        No change of behavior, replacing m_weakThis by the more convenient Eager.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:

2019-08-17  Darin Adler  <darin@apple.com>

        Use makeString and multi-argument StringBuilder::append instead of less efficient multiple appends
        https://bugs.webkit.org/show_bug.cgi?id=200862

        Reviewed by Ryosuke Niwa.

        * Modules/indexeddb/shared/IDBDatabaseInfo.cpp:
        (WebCore::IDBDatabaseInfo::loggingString const): Use one append instead of multiple.
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::loggingString const): Ditto.
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCCodecParameters): Ditto.
        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::YouTubePluginReplacement::youTubeURLFromAbsoluteURL): Ditto.
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::generateDatabaseFileName): Ditto.
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::createHeaderValue const): Ditto.
        (WebCore::WebSocketExtensionDispatcher::appendAcceptedExtension): Ditto.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientLocation const): Use makeString instead of
        StringBuilder.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::appendArgumentMustBe): Use one append instead of multiple.
        (WebCore::throwArgumentMustBeEnumError): Ditto.
        (WebCore::throwArgumentTypeError): Ditto.
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::recursivePrint): Ditto.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Ditto.
        (WebCore::buildEllipseString): Ditto.
        (WebCore::buildPolygonString): Ditto.
        (WebCore::buildInsetString): Ditto.

        * css/CSSCalculationValue.cpp:
        (WebCore::buildCssText): Deleted.
        (WebCore::CSSCalcValue::customCSSText const): Use makeString.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::cssText const): Use one append instead of multiple.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::customCSSText const): Use makeString.
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::customCSSText const): Ditto.
        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::cssText const): Ditto.
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::customCSSText const): Ditto.

        * css/CSSGradientValue.cpp:
        (WebCore::appendGradientStops): Moved code here from CSSLinearGradientValue::customCSSText
        so it can be shared with CSSRadialGradientValue::customCSSText. Use one append per stop.
        (WebCore::CSSLinearGradientValue::customCSSText const): Use one append instead of multiple.
        (WebCore::CSSRadialGradientValue::customCSSText const): Ditto.
        (WebCore::CSSConicGradientValue::customCSSText const): Ditto.
        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::cssText const): Ditto.
        * css/CSSNamespaceRule.cpp:
        (WebCore::CSSNamespaceRule::cssText const): Ditto.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::selectorText const): Use makeString.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        Use one append instead of multiple.

        * css/CSSPropertySourceData.cpp:
        (WebCore::CSSPropertySourceData::CSSPropertySourceData): Initialize in the
        structure definition instead of the constructor.
        (WebCore::CSSPropertySourceData::toString const): Use makeString.
        * css/CSSPropertySourceData.h: Initialize in the structure definition.

        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::cssText const): Use makeString.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceDescriptor): Use makeString.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::font const): Use one append instead of multiple.

2019-08-22  Kai Ninomiya  <kainino@chromium.org>

        Pass conformance/attribs WebGL conformance tests
        https://bugs.webkit.org/show_bug.cgi?id=200901

        Reviewed by Alex Christensen.

        Tested by
        LayoutTests/webgl/*/conformance/attribs/gl-vertexattribpointer.html,
        LayoutTests/webgl/2.0.0/conformance/more/functions/vertexAttribPointerBadArgs.html,
        and other conformance/attribs/* tests not included in LayoutTests.
        LayoutTests/webgl/1.0.2/conformance/more/functions/vertexAttribPointerBadArgs.html
        fails as expected because it is an old snapshot of an incorrect test.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes):
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):
        * html/canvas/WebGLVertexArrayObjectBase.cpp:
        (WebCore::WebGLVertexArrayObjectBase::setVertexAttribState):
        * html/canvas/WebGLVertexArrayObjectBase.h:

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

        Typing Korean in title field after typing in the body inserts extraneous characters on blog.naver.com
        https://bugs.webkit.org/show_bug.cgi?id=201023
        <rdar://problem/54294794>

        Reviewed by Ryosuke Niwa.

        Ensures that we recognize the blog editor on blog.naver.com to be a hidden editable area. This website places
        focus inside an editable body element of a subframe that is completely empty (width: 0 and border: 0). See the
        WebKit ChangeLog for more details.

        Test: editing/selection/ios/do-not-show-selection-in-empty-borderless-subframe.html

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

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

        CaptureDeviceManager does not need to be CanMakeWeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=200936

        Reviewed by Alex Christensen.

        CaptureDeviceManager does not need to create a weak pointer in deviceChanged
        since it directly calls RealtimeMediaSourceCenter singleton.

        CoreAudioCaptureDeviceManager does not need to create a weak pointer since its only
        instance is NeverDestroyed.
        No change of behavior.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (WebCore::CaptureDeviceManager::deviceChanged):
        * platform/mediastream/CaptureDeviceManager.h:
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::createAudioObjectPropertyListenerBlock):
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices):
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:

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

        Fix unsafe usage of MediaStreamTrackPrivate from background thread in MediaStreamTrackPrivate::audioSamplesAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=200924

        Reviewed by Youenn Fablet.

        MediaStreamTrackPrivate is constructed / destructed on the main thread but its MediaStreamTrackPrivate::audioSamplesAvailable()
        gets called on a background thread. The audioSamplesAvailable() method may get called until the MediaStreamTrackPrivate
        destructor unregisters |this| as an observer from m_source. Event though MediaStreamTrackPrivate subclasses ThreadSafeRefCounted,
        ref'ing |this| on the background thread inside audioSamplesAvailable() is still unsafe as the destructor may already be running
        on the main thread.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        * platform/mediastream/MediaStreamTrackPrivate.h:

2019-08-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove the dead code of ScalableImageDecoder for scaling
        https://bugs.webkit.org/show_bug.cgi?id=200498

        Reviewed by Daniel Bates.

        No ports are using the down scaling feature of
        ScalableImageDecoder now. Removed it.

        No behavior change.

        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::prepareScaleDataIfNecessary): Deleted.
        (WebCore::ScalableImageDecoder::upperBoundScaledX): Deleted.
        (WebCore::ScalableImageDecoder::lowerBoundScaledX): Deleted.
        (WebCore::ScalableImageDecoder::upperBoundScaledY): Deleted.
        (WebCore::ScalableImageDecoder::lowerBoundScaledY): Deleted.
        (WebCore::ScalableImageDecoder::scaledY): Deleted.
        * platform/image-decoders/ScalableImageDecoder.h:
        (WebCore::ScalableImageDecoder::scaledSize): Deleted.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setSize):
        (WebCore::GIFImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::setSize): Deleted.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
        (WebCore::JPEG2000ImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::initFrameBuffer):
        (WebCore::PNGImageDecoder::frameComplete):
        (WebCore::PNGImageDecoder::setSize): Deleted.
        * platform/image-decoders/png/PNGImageDecoder.h:

2019-08-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add a 'final' declaration on shouldOverridePauseDuringRouteChange().

        * Modules/mediastream/MediaStream.h:

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

        [WHLSL] Improve default constructor and emit fewer pointers in metal codegen
        https://bugs.webkit.org/show_bug.cgi?id=200995

        Reviewed by Myles C. Maxfield.

        This patch makes it so that we:
        1. Emit less code for copy constructors by omitting an unused variable.
        2. Emit ternary expressions instead of if statements for conditional assignments.
        3. Don't copy pointers for producing an lvalue from DereferenceExpression.
        4. Lazily produce lvalues for GlobalVariableReference.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):

2019-08-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Vertex shader and fragment shader need to be able to come from two different programs
        https://bugs.webkit.org/show_bug.cgi?id=195446

        Reviewed by Saam Barati.

        When an author configures WebGPU to render things, the author provides a vertex shader and a fragment
        shader, and they both execute within the same draw call. It's common for authors coming from WebGL to
        put the two shaders in distinct files. Until this patch, WHLSL was unable to process two shaders from
        different sources which were meant to be hooked together.

        The first thing this patch does is add the notion of a "shader module" to the WHLSL compiler. This
        represents the source code containing one or more shaders. When the author wants to actually compile
        their source, they supply one or more shader modules to the compiler. The compiler then looks in the
        first module for the vertex shader and the second module for the fragment shader. The two modules are
        passed by reference, so they may refer to the same underlying object, which is supported.

        Shader modules have this interesting behavior where, within a shader module, funtion / type names may
        refer to each other, but may not refer to any other name within any other shader module. They behave
        as if all the names inside the module are not exported. So, it would seem that the most natural way to
        support this would be to run the WHLSL compiler and the MSL compiler twice independently, once for each
        module. However, this means that our compile times would double, which would be unfortunate. Instead,
        a more performant option would be to make the WHLSL compiler smart enough to handle multiple shader
        modules at once, and to produce a single merged output program that contains everything. It does this
        by parsing all the shader modules into a single Program object, but remembering which items in the 
        Program came from which places.

        This is implemented by teaching the WHLSL compiler about "namespaces." There are three namespaces: one
        for each shader module, and an additional one for the standard library. Every global object (e.g.
        named types and functions) knows which namespace it lives inside. The NameResolver has been educated
        to understand namespaces, so when you ask it for a name in a particular namespace, it will look up
        all the names both in that namespace and in the standard library's namespace, and it will union the
        results together.

        Function overload resolution doesn't actually go through the name resolver; instead, it's handled by
        sorting all functions into buckets such that any CallExpression only has to look in a single bucket
        to find all its potential overloads. These buckets can't be educated about namespaces (consider a
        function which has overloads in all 3 namespaces that is called from both shader modules - all the
        overloads must end up in the same bucket). Therefore, this logic is moved into
        resolveFunctionOverload(), which will now disregard candidate functions if they are in an inaccessible 
        namespace.

        Tests: webgpu/whlsl/separate-shader-modules/separate-shader-modules-10.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-11.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-12.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-13.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-14.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-15.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-16.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-17.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-18.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-19.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-2.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-20.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-21.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-22.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-23.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-24.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-25.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-26.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-27.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-3.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-4.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-5.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-6.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-7.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-8.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules-9.html
               webgpu/whlsl/separate-shader-modules/separate-shader-modules.html

        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::nameSpace const):
        (WebCore::WHLSL::AST::FunctionDeclaration::setNameSpace):
        * Modules/webgpu/WHLSL/AST/WHLSLNameSpace.h: Copied from Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h.
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        (WebCore::WHLSL::AST::NamedType::nameSpace const):
        (WebCore::WHLSL::AST::NamedType::setNameSpace):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::emitMetalFunctions):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::DuplicateFunctionKey::operator== const):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::FunctionKey::operator== const):
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::checkShaderType):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::Checker::resolveFunction):
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        * Modules/webgpu/WHLSL/WHLSLNameContext.cpp:
        (WebCore::WHLSL::NameContext::add):
        (WebCore::WHLSL::NameContext::getTypes):
        (WebCore::WHLSL::NameContext::getFunctions):
        (WebCore::WHLSL::NameContext::searchTypes const):
        (WebCore::WHLSL::NameContext::searchFunctions const):
        (WebCore::WHLSL::NameContext::globalExists const):
        (WebCore::WHLSL::NameContext::localExists const):
        (WebCore::WHLSL::NameContext::exists): Deleted.
        * Modules/webgpu/WHLSL/WHLSLNameContext.h:
        (WebCore::WHLSL::NameContext::setCurrentNameSpace):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        (WebCore::WHLSL::resolveNamesInTypes):
        (WebCore::WHLSL::resolveTypeNamesInFunctions):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        (WebCore::WHLSL::NameResolver::setCurrentNameSpace):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::fail):
        (WebCore::WHLSL::Parser::consumeIntegralLiteral):
        (WebCore::WHLSL::Parser::consumeNonNegativeIntegralLiteral):
        (WebCore::WHLSL::Parser::parseConstantExpression):
        (WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
        (WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
        (WebCore::WHLSL::Parser::parseBuiltInSemantic):
        (WebCore::WHLSL::Parser::parseResourceSemantic):
        (WebCore::WHLSL::Parser::parseStageInOutSemantic):
        (WebCore::WHLSL::Parser::parseEnumerationDefinition):
        (WebCore::WHLSL::Parser::parseEnumerationMember):
        (WebCore::WHLSL::Parser::parseNumThreadsFunctionAttribute):
        (WebCore::WHLSL::Parser::parseVertexOrFragmentFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseSwitchCase):
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseVariableDeclarations):
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        (WebCore::WHLSL::Parser::parseTerm):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::ShaderModule::ShaderModule):
        (WebCore::WHLSL::createShaderModule):
        (WebCore::WHLSL::ShaderModuleDeleter::operator()):
        (WebCore::WHLSL::prepareShared):
        (WebCore::WHLSL::prepare):
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WHLSL/WHLSLProgram.h:
        (WebCore::WHLSL::Program::append):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        (WebCore::WHLSL::resolveFunctionOverloadImpl):
        (WebCore::WHLSL::resolveFunctionOverload):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.h:
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::matchSemantics):
        (WebCore::WHLSL::findEntryPoint): Deleted.
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.h:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        (WebCore::WHLSL::includeStandardLibrary):
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUShaderModule.h:
        (WebCore::GPUShaderModule::platformShaderModule const):
        (WebCore::GPUShaderModule::whlslModule const):
        (WebCore::GPUShaderModule::whlslSource const): Deleted.
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertRenderPipelineDescriptor):
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::tryCreate):
        (WebCore::GPUShaderModule::GPUShaderModule):

2019-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        SVG element should become focusable when focus and key event listeners are added
        https://bugs.webkit.org/show_bug.cgi?id=200997

        Reviewed by Said Abou-Hallawa.

        This patch removes the odd behavior WebKit (and Blink) browsers had to make SVG elements
        with key or focus event listeners focusable. New behavior matches the behavior of Firefox
        as well as the SVG 2.0 specification: https://www.w3.org/TR/SVG2/interact.html#Focus

        Test: svg/custom/tabindex-order.html

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::supportsFocus const):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::hasFocusEventListeners const): Deleted.
        (WebCore::SVGElement::isMouseFocusable const): Deleted.
        * svg/SVGElement.h:
        * svg/SVGGraphicsElement.h:

2019-08-21  Jer Noble  <jer.noble@apple.com>

        Adopt AVSystemController_ActiveAudioRouteDidChangeNotification
        https://bugs.webkit.org/show_bug.cgi?id=200992
        <rdar://problem/54408993>

        Reviewed by Eric Carlson.

        Follow-up to r248962: When the active audio route changes, and the
        system instructs us to pause, only pause the currently audible sessions.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::activeAudioRouteDidChange):
        (-[WebMediaSessionHelper activeAudioRouteDidChange:]):
        (WebCore::MediaSessionManageriOS::activeRouteDidChange): Deleted.

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

        Do not adjust viewport if editing selection is already visible
        https://bugs.webkit.org/show_bug.cgi?id=200907
        <rdar://problem/53903417>

        Reviewed by Simon Fraser.

        Test: fast/scrolling/ios/autoscroll-input-when-very-zoomed.html

        Currently due to scrolling being mostly handled by integers, we are getting
        issues with rounding errors when trying to adjust the viewport while
        editing text when we are significantly zoomed in. The real fix would be to 
        start dealing with scrolling with floats/doubles, but until such time,
        we should early out of adjusting selections that we are certain are currently
        visible.

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

2019-08-21  Tim Horton  <timothy_horton@apple.com>

        [Mail] Tapping top of message scrolls back to copied text instead of top of the message
        https://bugs.webkit.org/show_bug.cgi?id=200999
        <rdar://problem/54564878>

        Reviewed by Wenson Hsieh.

        Test: editing/selection/ios/change-selection-by-tapping-with-existing-selection.html

        * page/EditorClient.h:
        (WebCore::EditorClient::shouldAllowSingleClickToChangeSelection const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        Instead of encoding platform behaviors in EventHandler, defer to EditorClient.

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

        Crash under StringImpl::endsWith() in SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade()
        https://bugs.webkit.org/show_bug.cgi?id=200990
        <rdar://problem/54566439>

        Reviewed by Alex Christensen.

        Make sure we call isolatedCopy() on SQLiteIDBBackingStore::m_databaseRootDirectory before using
        it from background threads.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseRootDirectory const):

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

        Crash under StringImpl::~StringImpl() in IDBServer::computeSpaceUsedForOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=200989
        <rdar://problem/54565546>

        Reviewed by Alex Christensen.

        Make sure we call isolatedCopy() on IDBServer::m_databaseDirectoryPath before using it from
        background threads.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::performGetAllDatabaseNames):
        (WebCore::IDBServer::IDBServer::removeDatabasesModifiedSinceForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::removeDatabasesWithOriginsForVersion):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::computeSpaceUsedForOrigin):
        (WebCore::IDBServer::IDBServer::upgradeFilesIfNecessary):
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::databaseDirectoryPath const):

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

        Crash under StringImpl::endsWith() in RegistrationDatabase::openSQLiteDatabase()
        https://bugs.webkit.org/show_bug.cgi?id=200991
        <rdar://problem/54566689>

        Reviewed by Geoffrey Garen.

        Make sure we call isolatedCopy() on RegistrationDatabase::m_databaseDirectory before using
        it from background threads.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::clearAll):
        * workers/service/server/RegistrationDatabase.h:
        (WebCore::RegistrationDatabase::databaseDirectory const):

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

        Disabling text autosizing should prevent text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=200955
        <rdar://problem/48095374>

        Reviewed by Simon Fraser.

        Before this change there was no way to reliably change the text size on iOS when a -webkit-text-size-adjust:none style was applied
        because it would ignore the WKPreferences value for _textAutosizingEnabled.  Now that value has the desired effect when laying out.

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

2019-08-21  Jer Noble  <jer.noble@apple.com>

        Adopt AVSystemController_ActiveAudioRouteDidChangeNotification
        https://bugs.webkit.org/show_bug.cgi?id=200992
        <rdar://problem/54408993>

        Reviewed by Eric Carlson.

        When the system notifies us that the active audio route has changed in such a way
        that necessitates pausing, pause all media sessions, exempting those that are
        associated with WebRTC, since "pausing" an active audio conference isn't really
        possible.

        * Modules/mediastream/MediaStream.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::shouldOverridePauseDuringRouteChange const):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::shouldOverridePauseDuringRouteChange const):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::activeRouteDidChange):
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper activeAudioRouteDidChange:]):

2019-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Put keygen element behind a runtime flag and disable it by default
        https://bugs.webkit.org/show_bug.cgi?id=200850

        Reviewed by Antti Koivisto.

        The HTML keygen element has been removed from Chrome, Firefox, and the HTML specification in 2017.
        This patch disables the keygen element by default by adding a runtime enabled flag which is disabled by default.

        * bindings/js/WebCoreBuiltinNames.h:
        * html/HTMLKeygenElement.idl:
        * html/HTMLTagNames.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setKeygenElementEnabled):
        (WebCore::RuntimeEnabledFeatures::keygenElementEnabled const):

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

        Get rid of m_weakThis data members now that we have a safe way to call makeWeakPtr() from various threads
        https://bugs.webkit.org/show_bug.cgi?id=200981

        Reviewed by Alex Christensen.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.cpp:
        (WebCore::LibWebRTCDTMFSenderBackend::LibWebRTCDTMFSenderBackend):
        (WebCore::LibWebRTCDTMFSenderBackend::OnToneChange):
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.h:
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::CookieStorageObserver):
        (WebCore::CookieStorageObserver::cookiesDidChange):

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

        Add internal setting to disable SecureContext checks
        https://bugs.webkit.org/show_bug.cgi?id=200980
        <rdar://problem/54438512>

        Reviewed by Alex Christensen.

        Add internal setting to disable SecureContext checks, in order to facilitate development
        for features like Service workers or device orientation / motion.

        * dom/Document.cpp:
        (WebCore::Document::isSecureContext const):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::secureContextChecksEnabled const):
        (WebCore::RuntimeEnabledFeatures::setSecureContextChecksEnabled):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::isSecureContext const):

2019-08-21  Jer Noble  <jer.noble@apple.com>

        [iOS] HLS streams disappear from Now Playing when paused on the lock screen
        https://bugs.webkit.org/show_bug.cgi?id=200951
        <rdar://problem/54534301>

        Reviewed by Eric Carlson.

        The AVPlayerItemTracks will get recreated on occasion (during seeks, and when
        changing buffering policy) which can result in a player which no longer reports
        that it has audio, which in turn results in Now Playing no longer considering
        the web page to be an eligable now playing application. Bridge this gap by also
        taking AVPlayerItem.hasEnabledAudio into account when determining whether the 
        player has audio.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):

2019-08-21  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Clang warns about mismatched type tag in declarations for ImageOrientation
        https://bugs.webkit.org/show_bug.cgi?id=200982

        Reviewed by Carlos Alberto Lopez Perez.

        No new tests needed.

        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h: Change
        type tag in the forward declaration to "struct", hence matching the
        actual type definition.

2019-08-21  Antti Koivisto  <antti@apple.com>

        ASSERTION FAILED: !s_isInvalidatingStyleWithRuleSets in com.apple.WebCore: WebCore::DocumentRuleSets::collectFeatures const
        https://bugs.webkit.org/show_bug.cgi?id=200919
        <rdar://problem/53413013>

        Reviewed by Zalan Bujtas.

        Bots show that in some timing-dependent cases we may end up constructing a style resolver in the middle the class change invalidation.

        This happens flakily on Pad bots in

        media/track/track-node-add-remove.html
        media/W3C/video/events/event_loadstart_manual.html
        media/W3C/video/readyState/readyState_initial.html

        and also reproes locally with lots of runs over these tests.

        * style/StyleInvalidationFunctions.h:
        (WebCore::Style::traverseRuleFeatures):

        Ensure that for elements in shadow tree the host resolver is also always constructed before starting rule-based invalidation.

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

        REGRESSION: naver.com - Multiple taps are required to open email
        https://bugs.webkit.org/show_bug.cgi?id=200979
        <rdar://problem/54295239>

        Reviewed by Dean Jackson.

        The "click" events on subjects in the message list are prevented by preventDefault() being called from a "mouseup" event listener.
        This shouldn't actually happen, but due to how simulated mouse events are implemented, there is no current distinction between
        "touchend" and "mouseup" events. It is safe however to opt mail.naver.com out of simulated mouse events altogether.

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

2019-08-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Page: re-add enable/disable after r248454
        https://bugs.webkit.org/show_bug.cgi?id=200947

        Reviewed by Joseph Pecoraro.

        We shouldn't design the agent system with only Web Inspector in mind. Other clients may want
        to have different functionality, not being told about frames creation/updates/destruction.
        In these cases, we should have graceful error message failures for other agents that rely on
        the Page agent.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::enable): Added.
        (WebCore::InspectorPageAgent::disable): Added.

        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::createStyleSheet):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):
        * inspector/agents/page/PageNetworkAgent.cpp:
        (WebCore::PageNetworkAgent::loaderIdentifier):
        (WebCore::PageNetworkAgent::frameIdentifier):
        (WebCore::PageNetworkAgent::scriptExecutionContext):
        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):

2019-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        nextElementWithGreaterTabIndex should use shadowAdjustedTabIndex
        https://bugs.webkit.org/show_bug.cgi?id=200943

        Reviewed by Wenson Hsieh.

        Use shadowAdjustedTabIndex instead of tabIndexForElement in nextElementWithGreaterTabIndex.

        Because nextElementWithGreaterTabIndex is only called to find an element with a tab index
        set to a greater value than the argument tabIndex, which is always a positive integer,
        whether we call shadowAdjustedTabIndex or tabIndexForElement has no effect on an element
        with a shadow root or on a slot element. Furthermore, none of the elements with
        an isKeyboardFocusable override can have a author defined shadow root attached either.

        As a result, this refactoring will have no observable behavioral change.

        No new tests since there should be no observable behavior change.

        * page/FocusController.cpp:
        (WebCore::tabIndexForElement): Merged into shadowAdjustedTabIndex.
        (WebCore::shadowAdjustedTabIndex):
        (WebCore::nextElementWithGreaterTabIndex):

2019-08-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove MathMLElement::defaultTabIndex()
        https://bugs.webkit.org/show_bug.cgi?id=200944

        Reviewed by Frédéric Wang.

        Removed MathMLElement::defaultTabIndex since it doesn't have any observable effect since
        MathMLElement doesn't expose tabIndex IDL attribute, and sequential (tab key) focus navigation
        checks MathMLElement::isKeyboardFocusable, which doesn't rely on defaultTabIndex, anyway.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultTabIndex const): Deleted.
        * mathml/MathMLElement.h:

2019-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Implement `queryHolders` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=200458

        Reviewed by Joseph Pecoraro.

        Call `queryHolders(object)` from the Console to return an array of objects that strongly
        reference the given `object`. This could be very useful for finding JavaScript "leaks".

        Test: inspector/console/queryHolders.html

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPIImpl.prototype.queryHolders): Added.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/js/DOMGCOutputConstraint.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::analyzeHeap): Added.
        (WebCore::JSDOMWindow::heapSnapshot): Deleted.
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::analyzeHeap): Added.
        (WebCore::JSDocument::heapSnapshot): Deleted.
        * bindings/scripts/test/JS/*:
        Rename `heapSnapshot` to `analyzeHeap` to match JavaScriptCore changes.

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

        [WHLSL] We need to null check when emitting native code for operator&.<field-name>
        https://bugs.webkit.org/show_bug.cgi?id=200846

        Reviewed by Myles C. Maxfield.

        Test: webgpu/whlsl/structure-field-access-on-null.html

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):

2019-08-20  Justin Fan  <justin_fan@apple.com>

        Unreviewed comment follow-up for https://bugs.webkit.org/show_bug.cgi?id=200752.

        * html/canvas/GPUBasedCanvasRenderingContext.h:

2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        The default tab index of output and fieldset should be -1
        https://bugs.webkit.org/show_bug.cgi?id=200834

        Reviewed by Alex Christensen.

        This patch updates the default tab index of output and fieldset to -1 to match the behavior of
        Chrome and Firefox as well as the latest HTML specification:
        https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute

        To do that, this patch replaces HTMLFormControlElement::defaultTabIndex with defaultTabIndex
        implementation in each one of its concrete subclass such as HTMLButtonElement to mirror
        the language of the specification as follows:

        HTMLFormControlElement
            HTMLButtonElement -> 0
            HTMLFieldSetElement -> -1
            HTMLFormControlElementWithState
                HTMLKeygenElement -> 0 - Not specified anywhere but preserving the existing behavior.
                HTMLSelectElement -> 0
                HTMLTextFormControlElement
                    HTMLInputElement -> 0
                    HTMLTextAreaElement -> 0
            HTMLOutputElement -> -1 

        Even though Element::shouldBeIgnoredInSequentialFocusNavigation() checks the value of
        defaultTabIndex, this patch does not affect the actual sequential (tab) focus navigation:
        Beacuse HTMLOutputElement and HTMLFieldSetElement have supportsFocus overrides to call
        HTMLElement::supportsFocus instead of HTMLFormControlElement::supportsFocus, these two
        elements are focusable only when tabindex is set or it's a root content editable element.
        But all root editable elements are focusable anyway and the default tab index does not
        matter when tabindex is set.

        Test: fast/dom/tabindex-defaults.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultTabIndex const): Added.
        * html/HTMLButtonElement.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::defaultTabIndex const): Deleted.
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultTabIndex const): Added.
        * html/HTMLKeygenElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::defaultTabIndex const): Added.
        * html/HTMLKeygenElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultTabIndex const): Added.
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::defaultTabIndex const): Added.
        * html/HTMLTextAreaElement.h:

2019-08-20  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] isConsideredClickable should be able to process elements with no renderers
        https://bugs.webkit.org/show_bug.cgi?id=200926
        <rdar://problem/54519579>

        Reviewed by Simon Fraser.

        This patch fixes the crash when the visible->hidden change triggers an isConsideredClickable() call with a 'display: none' element.

        Test: fast/events/touch/ios/content-observation/going-from-hidden-to-visible-and-to-hidden-crash.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::isConsideredClickable):

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

        Clicking the search icon on ae.com hangs the web content process
        https://bugs.webkit.org/show_bug.cgi?id=200889
        <rdar://problem/54359330>

        Reviewed by Ryosuke Niwa.

        The hang occurs under FrameSelection::selectionAtSentenceStart, while computing an EditorState to send to the UI
        process. This act of determining whether the given positon is at the start of sentence entails moving backwards
        from the start of the current visible selection until the start of a paragraph or sentence is found, using
        VisiblePosition::previous to iterate backwards through VisiblePositions.

        However, on this website, VisiblePosition::previous ends up just returning the current position, and we loop
        infinitely as a result because we never actually move backwards. This happens because VisiblePosition::previous
        first uses previousVisuallyDistinctCandidate to find a candidate Position before the current position, but when
        the position is canonicalized to create a VisiblePosition, it is moved back to its original Position as the deep
        equivalent.

        In the attached test case (which is representative of the relevant part of the DOM on ae.com), we try to find
        the previous VisiblePosition from (#c, 0). The previous visually distinct candidate we initially find is
        (#b, 0), since:

        1. The enclosing renderer is a RenderBlock with a non-zero height.
        2. The enclosing renderer has no rendered children.
        3. The position is at the first editing position in the node (i.e. the span element).

        However, when canonicalizing the position, we find that neither the upstream nor the downstream position is a
        candidate because both the upstream and downstream nodes end up well outside of the span (the upstream node ends
        up being at the start of the body element, and the downstream position ends up right before the start of #c's
        container). The downstream position is at the end of a text node with a leading newline, it's not a candidate
        because its last caret offset is less than the length of the text node.

        As a result, even though the given position (#b, 0) is a candidate itself, its downstream and upstream positions
        are not. Thus, VisiblePosition::canonicalPosition expands the scope of its candidate positions to the next
        closest candidate positions; the next candidate position is (#c, 0). Both of these candidates are outside of the
        containing block, so we (somewhat arbitrarily) break the tie by choosing the next visible position, bringing us
        back to (#c, 0).

        There are several ways to fix this, one of which involves fixing the downstream/upstream positions of (#b, 0) so
        that they no longer jump out of the containing block of #b and cause (#b, 0) to be an invalid visible position
        despite being a candidate position. This can be achieved by adjusting the heuristic in
        endsOfNodeAreVisuallyDistinctPositions (used when moving upstream or downstream). Currently, this helper
        function returns false for #b because they contain a single (non-rendered) whitespace character. Removing this
        extraneous whitespace character actually causes the problem to stop reproducing, since #b and #c no longer
        contain any child nodes. This is important because the heuristic in Position::downstream attempts to keep the
        downstream position within the confines of the enclosing visual boundary, which (currently) ends up being the
        entire body element because endsOfNodeAreVisuallyDistinctPositions returns false for #b.

        To avoid this scenario, we teach endsOfNodeAreVisuallyDistinctPositions to treat inline-block containers that
        are empty (that is, contain no rendered content) but may have children for editing in the same way as inline-
        block containers that don't have any children; in both scenarios, they may contain a candidate position, so we
        should treat the ends of the container node as being visually distinct.

        Doing so causes the downstream position of (#b, 0) to be kept within the immediate containing span element,
        which then allows (#b, 0) to be a canonical VisiblePosition.

        Tests:  fast/events/focus-anchor-with-tabindex-hang.html
                editing/selection/modify-backward-inline-block-containers.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::previous const):

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

        [FTW] Fix scrolling in modern WebKit views
        https://bugs.webkit.org/show_bug.cgi?id=200923

        Reviewed by Don Olmstead.

        The initial implementation of scrolling in Direct2D had errors that
        caused hilarious rendering glitches. This patch corrects the logic
        so that page scroll is correct.
 
        * platform/graphics/win/BackingStoreBackendDirect2D.h:
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp:
        (WebCore::BackingStoreBackendDirect2DImpl::scroll):
        (WebCore::BackingStoreBackendDirect2DImpl::bitmapBrush):
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::drawNativeImage):
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::copyRectFromOneSurfaceToAnother):
        (WebCore::Direct2D::writeImageToDiskAsPNG): Added diagnostic utility to
        dump textures to disk for review.
        * platform/graphics/win/Direct2DUtilities.h:
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::systemImagingFactory): Switch to more
        recent factory with additional features.
        * platform/graphics/win/ImageDecoderDirect2D.h:

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

        [WHLSL] Only take the pointer of a variable or global variable reference if it is used
        https://bugs.webkit.org/show_bug.cgi?id=200908

        Reviewed by Dean Jackson.

        Previously, we would always emit Metal code to produce an lvalue pointer
        even when it wasn't used. This patch adds a mechanism to lazily generate
        such pointers when they're actually needed, since we often don't use them.
        This is a 7% Metal compile time speedup on compute_boids with a p value of
        0.0001.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValueWithNullability):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLMangledNames.h:
        (WebCore::WHLSL::Metal::MangledVariableName::operator bool const):

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

        Unsafe usage of CookieStorageObserver from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=200920

        Reviewed by Alex Christensen.

        Unsafe usage of CookieStorageObserver from a background thread. CookieStorageObserver gets
        constructed / destructed on the main thread. However, CookieStorageObserver::cookiesDidChange()
        gets called on a background thread and tries to ref |this|. Even though CookieStorageObserver
        is ThreadSafeRefCounted, this is still unsafe because the CookieStorageObserver destructor may
        already be running on the main thread when CookieStorageObserver::cookiesDidChange() gets called
        on the background thread.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/CookieStorageObserver.h:
        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::CookieStorageObserver):
        (WebCore::CookieStorageObserver::cookiesDidChange):
        (WebCore::CookieStorageObserver::create): Deleted.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookieStorageObserver const):

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

        Use a strongly typed identifier for StorageNamespace's identifier
        https://bugs.webkit.org/show_bug.cgi?id=200895

        Reviewed by Alex Christensen and Youenn Fablet.

        * storage/StorageNamespace.h:

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

        Make IDB quota check lambdas take a weak of UniqueIDBDatabaseTransaction instead of a ref
        https://bugs.webkit.org/show_bug.cgi?id=196696

        Reviewed by Alex Christensen.

        Refing the transaction in the lambdas extend their lifetime.
        Taking a weak pointer of them is better as this will not extend their lifetime.
        In particular, if the database is deleted, the corresponding transactions might be deleted.
        This makes quota checks less intrusive in IDB lifetime management.
        Covered by existing tests.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

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

        Remove DeferredPromise::sessionID()
        https://bugs.webkit.org/show_bug.cgi?id=200616

        Reviewed by Alex Christensen.

        Calling sessionID() on DeferredPromise is valid if the DeferredPromise is not suspended.
        Since this might not always be true in call sites, add a resolve promise that is passed a function that returns
        the value to resolve.
        This function is taking a ScriptExecutionContext from which the session ID can be retrieved.
        This is safe since the function will only be called if the DeferredPromise is not suspended.
        Update call sites accordingly.
        No change of behavior.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::resolve):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blob):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DeferredPromise::resolveCallbackValueWithNewlyCreated):
        (WebCore::DeferredPromise::sessionID const): Deleted.

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

        PendingActivationMediaStream does not need to be refcounted
        https://bugs.webkit.org/show_bug.cgi?id=200879

        Reviewed by Alex Christensen.

        No observable change of behavior.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        (WebCore::UserMediaRequest::mediaStreamDidFail):
        No need to asynchronously remove the observer since MediaStreamPrivate handles that properply now.
        * Modules/mediastream/UserMediaRequest.h:

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: add a global breakpoint for pausing in the next microtask
        https://bugs.webkit.org/show_bug.cgi?id=200652

        Reviewed by Joseph Pecoraro.

        Test: inspector/debugger/setPauseOnMicrotasks.html

        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/worker/WorkerDebuggerAgent.h:

        * inspector/agents/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::willRunMicrotask): Added.
        (WebCore::InspectorTimelineAgent::didRunMicrotask): Added.

2019-08-19  Sam Weinig  <weinig@apple.com>

        [WHLSL] Make generated Metal code should be indented properly to ease reading while debugging
        https://bugs.webkit.org/show_bug.cgi?id=200870

        Reviewed by Saam Barati.

        Adds indentation of generated Metal code using the new WTF::Indentation and WTF::IndentationScope
        classes. This makes reading the generated Metal code much easier while debugging it, and does not
        seem to introduce any performance regression (I measured no difference on compute_boids.html test).

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitUnpackResourcesAndNamedBuiltIns):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitPack):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: have more aggressive checks for dataURLs provided to `console.screenshot`
        https://bugs.webkit.org/show_bug.cgi?id=200747

        Reviewed by Joseph Pecoraro.

        Always send any /data:*+/ strings to the frontend and have it render there. If that doesn't
        work, have the frontend "spoof" an error message look and feel.

        Test: inspector/console/console-screenshot.html

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

2019-08-19  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Fix misspelling of -preventsDisplaySleepForVideoPlayback
        https://bugs.webkit.org/show_bug.cgi?id=200774
        <rdar://problem/54321071>

        Reviewed by Eric Carlson.

        Only declare the API on platforms where that API is undefined, so as
        to catch this kind of misspelling at compile time.

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

2019-08-19  Justin Fan  <justin_fan@apple.com>

        WebGPU layers don't show up sometimes
        https://bugs.webkit.org/show_bug.cgi?id=200752

        Reviewed by Dean Jackson.

        Ensure HTML canvas is properly notified of WebGPU updates. Fixes alpha WebGPU MotionMark benchmark no-show issue.

        Normal WebGPU behavior unaffected and covered by existing tests.

        * Modules/webgpu/GPUCanvasContext.cpp:
        (WebCore::GPUCanvasContext::configureSwapChain):
        (WebCore::GPUCanvasContext::reshape):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/GPUBasedCanvasRenderingContext.cpp: Added.
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext):
        (WebCore::GPUBasedCanvasRenderingContext::htmlCanvas const):
        (WebCore::GPUBasedCanvasRenderingContext::notifyCanvasContentChanged):
        * html/canvas/GPUBasedCanvasRenderingContext.h:
        (WebCore::GPUBasedCanvasRenderingContext::GPUBasedCanvasRenderingContext): Deleted.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::reshape):
        (WebCore::WebGLRenderingContextBase::htmlCanvas): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentChanged):

2019-08-19  Sihui Liu  <sihui_liu@apple.com>

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545
        <rdar://problem/54201783>

        Reviewed by Youenn Fablet.

        Re-land r248526 with fix for performance tests.

        No change of behavior as IDB specific quota is no longer used.
        Instead a global quota is used. This quota currently handles IDB and Cache API.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::setPerOriginQuota): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::perOriginQuota const): Deleted.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::quotaForOrigin const): Deleted.
        (WebCore::IDBServer::SQLiteIDBBackingStore::maximumSize const): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::setQuota): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

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

        [Pointer Events] Removing the capture element prevents future pointer events from being dispatched on macOS
        https://bugs.webkit.org/show_bug.cgi?id=200887
        <rdar://problem/54104147>

        Reviewed by Dean Jackson.

        Test: pointerevents/mouse/pointer-capture-element-removal.html

        While we should only dispatch a lostpointercapture event to a connected element, clearing the capture element set on the frame's EventHandler
        should always happen, regardless of the connected status of the previous capture element, since otherwise all future mouse and pointer events
        would be targeted at the now-disconnected, former capture element.

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

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

        Remove SessionID::emptySessionID()
        https://bugs.webkit.org/show_bug.cgi?id=200811

        Reviewed by Alex Christensen.

        No change of behavior, update SessionID call sites.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * dom/Document.cpp:
        (WebCore::Document::sessionID const):
        (WebCore::Document::privateBrowsingStateDidChange):
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):

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

        Stop MediaDevices timer when stopping MediaDevices
        https://bugs.webkit.org/show_bug.cgi?id=200880

        Reviewed by Eric Carlson.

        No change of behavior.
        Stop timer when stopping MediaDevices and check for MediaDevices being stopped before scheduling the timer.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::stop):
        Remove document/controller check since at that point,
        the document should not be null and the controller should be there.
        (WebCore::MediaDevices::scheduledEventTimerFired):
        (WebCore::MediaDevices::listenForDeviceChanges):

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix for GTK and WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=200620

        It seems that these files have different flags that is not tested in EWS.

        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:

2019-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, actual static_assert part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoff Garen.

        * platform/network/curl/CookieJarCurl.h:

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

        enumerateDevices should return the same JS objects if called twice
        https://bugs.webkit.org/show_bug.cgi?id=200767

        Reviewed by Eric Carlson.

        Make MediaDevices store the last list of enumerated MediaDeviceInfo objects.
        Reuse them for the next enumerateDevices call if needed.
        In case of a device change event, make sure the next enumerateDevices call will fetch the new list of devices.
        When constructing the new list of devices, reuse any preexisting device in the old list as specified by
        https://w3c.github.io/mediacapture-main/#dom-mediadevices-enumeratedevices.

        Update enumerateDevices to use a completion handler.
        Remove MediaDevicesRequest and MediaDevicesEnumerationRequest.
        Covered by updated test and existing tests.

        * Modules/mediastream/MediaDeviceInfo.cpp:
        (WebCore::MediaDeviceInfo::MediaDeviceInfo):
        (WebCore::MediaDeviceInfo::create):
        * Modules/mediastream/MediaDeviceInfo.h:
        * Modules/mediastream/MediaDeviceInfo.idl:
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        (WebCore::MediaDevices::stop):
        (WebCore::MediaDevices::refreshDevices):
        (WebCore::MediaDevices::enumerateDevices):
        (WebCore::MediaDevices::scheduledEventTimerFired):
        (WebCore::MediaDevices::listenForDeviceChanges):
        (WebCore::MediaDevices::addEventListener):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaDevices.idl:
        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp: Removed.
        * Modules/mediastream/MediaDevicesEnumerationRequest.h: Removed.
        * Modules/mediastream/MediaDevicesRequest.cpp: Removed.
        * Modules/mediastream/MediaDevicesRequest.h: Removed.
        * Modules/mediastream/RTCRtpSender.cpp:
        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::isAllowedToUse):
        (WebCore::UserMediaController::canCallGetUserMedia const):
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::enumerateMediaDevices):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-08-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, makeUnique / makeUniqueWithoutFastMallocCheck part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoff Garen.

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::logDeveloperWarning):
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::from):
        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::from):
        * Modules/cache/WorkerGlobalScopeCaches.cpp:
        (WebCore::WorkerGlobalScopeCaches::from):
        * Modules/credentialmanagement/NavigatorCredentials.cpp:
        (WebCore::NavigatorCredentials::from):
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::InitDataRegistry::extractPsshBoxesFromCenc):
        * Modules/encryptedmedia/legacy/LegacyCDM.cpp:
        (WebCore::LegacyCDM::create):
        * Modules/encryptedmedia/legacy/LegacyCDMPrivateClearKey.cpp:
        (WebCore::LegacyCDMPrivateClearKey::createSession):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadBlob):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        (WebCore::FetchResponse::BodyLoader::start):
        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::from):
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::from):
        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
        (WebCore::DOMWindowIndexedDatabase::from):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::index):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::createObjectStore):
        (WebCore::IDBTransaction::createIndex):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::IDBConnectionToServer):
        * Modules/indexeddb/client/TransactionOperation.cpp:
        (WebCore::IDBClient::TransactionOperation::TransactionOperation):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getOrCreateUniqueIDBDatabase):
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::ensureQuotaUser):
        * Modules/indexeddb/server/IndexValueStore.cpp:
        (WebCore::IDBServer::IndexValueStore::addRecord):
        * Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
        (WebCore::IDBServer::MemoryBackingStoreTransaction::create):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::MemoryBackingStoreTransaction):
        (WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::create):
        (WebCore::IDBServer::MemoryIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::MemoryIDBBackingStore::setDatabaseInfo):
        * Modules/indexeddb/server/MemoryIndex.cpp:
        (WebCore::IDBServer::MemoryIndex::putIndexKey):
        (WebCore::IDBServer::MemoryIndex::maybeOpenCursor):
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::maybeOpenCursor):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::maybeCreate):
        (WebCore::IDBServer::SQLiteIDBCursor::maybeCreateBackingStoreCursor):
        (WebCore::IDBServer::SQLiteIDBCursor::createSQLiteStatement):
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::begin):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didOpenBackingStore):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformAbortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::IDBRequestData):
        (WebCore::IDBRequestData::isolatedCopy):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::decode):
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::IDBResultData):
        (WebCore::IDBResultData::isolatedCopy):
        (WebCore::IDBResultData::openDatabaseSuccess):
        (WebCore::IDBResultData::openDatabaseUpgradeNeeded):
        (WebCore::IDBResultData::deleteDatabaseSuccess):
        (WebCore::IDBResultData::putOrAddSuccess):
        (WebCore::IDBResultData::getRecordSuccess):
        (WebCore::IDBResultData::getAllRecordsSuccess):
        (WebCore::IDBResultData::openCursorSuccess):
        (WebCore::IDBResultData::iterateCursorSuccess):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::decode):
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::versionChange):
        (WebCore::IDBTransactionInfo::IDBTransactionInfo):
        (WebCore::IDBTransactionInfo::isolatedCopy):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::decode):
        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
        (WebCore::InProcessIDBServer::quotaManager):
        * Modules/mediacapabilities/NavigatorMediaCapabilities.cpp:
        (WebCore::NavigatorMediaCapabilities::from):
        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::mockPicker):
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::buffered const):
        (WebCore::MediaSource::setLiveSeekableRange):
        * Modules/mediastream/NavigatorMediaDevices.cpp:
        (WebCore::NavigatorMediaDevices::from):
        * Modules/mediastream/UserMediaController.cpp:
        (WebCore::provideUserMediaTo):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::channelEvent):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::collectTransceivers):
        (WebCore::LibWebRTCMediaEndpoint::newTransceiver):
        (WebCore::LibWebRTCMediaEndpoint::createTransceiverBackends):
        (WebCore::LibWebRTCMediaEndpoint::transceiverBackendFromSender):
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::createDTMFBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp:
        (WebCore::LibWebRTCRtpTransceiverBackend::createReceiverBackend):
        (WebCore::LibWebRTCRtpTransceiverBackend::createSenderBackend):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * Modules/notifications/NotificationController.cpp:
        (WebCore::provideNotification):
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::from):
        * Modules/quota/NavigatorStorageQuota.cpp:
        (WebCore::NavigatorStorageQuota::from):
        * Modules/quota/WorkerNavigatorStorageQuota.cpp:
        (WebCore::WorkerNavigatorStorageQuota::from):
        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        (WebCore::DOMWindowSpeechSynthesis::from):
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::ensurePlatformSpeechSynthesizer):
        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::decodeAsync):
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::decodeAudioData):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::createKernel):
        (WebCore::BiquadProcessor::getFrequencyResponse):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::createKernel):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::createBandLimitedTables):
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::setFftSize):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::createKernel):
        * Modules/webauthn/fido/FidoHidMessage.cpp:
        (fido::FidoHidMessage::FidoHidMessage):
        * Modules/webauthn/fido/FidoHidPacket.cpp:
        (fido::FidoHidInitPacket::createFromSerializedData):
        (fido::FidoHidContinuationPacket::createFromSerializedData):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::close):
        (WebCore::Database::scheduleTransaction):
        (WebCore::Database::scheduleTransactionStep):
        (WebCore::Database::tableNames):
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::recordCreatingDatabase):
        (WebCore::DatabaseTracker::recordDeletingDatabase):
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSql):
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        * Modules/webdriver/NavigatorWebDriver.cpp:
        (WebCore::NavigatorWebDriver::from):
        * Modules/webgpu/NavigatorGPU.cpp:
        (WebCore::NavigatorGPU::from):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::createEntryPointScaffolding):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::assignConcreteType):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseSemantic):
        * Modules/webgpu/WorkerNavigatorGPU.cpp:
        (WebCore::WorkerNavigatorGPU::from):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpgradeURL):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        (WebCore::WebSocketChannel::enqueueTextFrame):
        (WebCore::WebSocketChannel::enqueueRawFrame):
        (WebCore::WebSocketChannel::enqueueBlobFrame):
        (WebCore::WebSocketChannel::processOutgoingFrameQueue):
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketDeflateFramer::createExtensionProcessor):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::inflate):
        * Modules/websockets/WebSocketDeflater.cpp:
        (WebCore::WebSocketDeflater::WebSocketDeflater):
        (WebCore::WebSocketInflater::WebSocketInflater):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        * Modules/webvr/NavigatorWebVR.cpp:
        (WebCore::NavigatorWebVR::from):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::updateFinishedState):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::jsEventTargetCast):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::transferArrayBuffers):
        (WebCore::SerializedScriptValue::create):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::decode):
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::initNormalWorld):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodNamed const):
        (JSC::Bindings::CClass::fieldNamed const):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodNamed const):
        (JSC::Bindings::ObjcClass::fieldNamed const):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * contentextensions/CombinedURLFilters.cpp:
        (WebCore::ContentExtensions::CombinedURLFilters::CombinedURLFilters):
        (WebCore::ContentExtensions::CombinedURLFilters::addPattern):
        * crypto/SubtleCrypto.cpp:
        (WebCore::normalizeCryptoAlgorithmParameters):
        (WebCore::crossThreadCopyImportParams):
        * css/CSSCalculationValue.cpp:
        (WebCore::determineCategory):
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle):
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::appendSources):
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/CSSGroupingRule.cpp:
        (WebCore::CSSGroupingRule::cssRules const):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize):
        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::cssRules):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):
        * css/DOMCSSPaintWorklet.cpp:
        (WebCore::DOMCSSPaintWorklet::from):
        * css/DOMCSSRegisterCustomProperty.cpp:
        (WebCore::DOMCSSRegisterCustomProperty::from):
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::DocumentRuleSets):
        (WebCore::DocumentRuleSets::updateUserAgentMediaQueryStyleIfNeeded const):
        (WebCore::DocumentRuleSets::initializeUserStyle):
        (WebCore::makeRuleSet):
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        (WebCore::ensureInvalidationRuleSets):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectSlottedPseudoElementRulesForSlot):
        * css/FontFace.cpp:
        (WebCore::populateFontFaceWithArrayBuffer):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::wrapForDeprecatedCSSOM):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::collectFeatures):
        (WebCore::RuleFeatureSet::add):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTo100PercentMinusLength):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyTextOrBoxShadowValue):
        (WebCore::StyleBuilderCustom::applyInheritTextShadow):
        (WebCore::StyleBuilderCustom::applyInheritBoxShadow):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::ensureCSSStyleDeclaration):
        (WebCore::MutableStyleProperties::ensureInlineCSSStyleDeclaration):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::cascadedPropertiesForRollback):
        * css/makeprop.pl:
        (generateFillLayerPropertyInheritValueSetter):
        (generateFillLayerPropertyValueSetter):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::CSSParserImpl):
        (WebCore::CSSParserImpl::parsePageSelector):
        (WebCore::CSSParserImpl::consumeMediaRule):
        (WebCore::CSSParserImpl::consumeSupportsRule):
        (WebCore::CSSParserImpl::consumeKeyframesRule):
        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::parsePagePseudoSelector):
        (WebCore::CSSParserSelector::parsePseudoElementSelector):
        (WebCore::CSSParserSelector::parsePseudoClassSelector):
        (WebCore::CSSParserSelector::CSSParserSelector):
        (WebCore::CSSParserSelector::adoptSelectorVector):
        (WebCore::CSSParserSelector::prependTagSelector):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapePath):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::ensureBackupQueue):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::items):
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::createForDragStartEvent):
        (WebCore::DataTransfer::setDragImage):
        * dom/DeviceOrientationController.cpp:
        (WebCore::provideDeviceOrientationTo):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::buildAccessKeyCache):
        (WebCore::Document::implementation):
        (WebCore::Document::formController):
        (WebCore::Document::updateTextRenderer):
        (WebCore::Document::userAgentShadowTreeStyleResolver):
        (WebCore::Document::axObjectCache const):
        (WebCore::Document::setParsing):
        (WebCore::Document::accessSVGExtensions):
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::textAutoSizing):
        (WebCore::Document::didAddWheelEventHandler):
        (WebCore::Document::didAddTouchEventHandler):
        (WebCore::Document::didLogMessage):
        (WebCore::Document::registerCSSProperty):
        (WebCore::Document::deviceOrientationAndMotionAccessController):
        (WebCore::Document::contentChangeObserver):
        (WebCore::Document::domTimerHoldingTank):
        * dom/Document.h:
        (WebCore::Document::createParserYieldToken):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::DocumentEventQueue):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::from):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        (WebCore::DocumentStorageAccess::enableTemporaryTimeUserGesture):
        * dom/Element.cpp:
        (WebCore::Element::attributes const):
        (WebCore::Element::setIsDefinedCustomElement):
        (WebCore::Element::enqueueToUpgrade):
        (WebCore::Element::classList):
        (WebCore::Element::dataset):
        (WebCore::Element::ensureIntersectionObserverData):
        (WebCore::Element::ensureResizeObserverData):
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::add):
        * dom/EventNames.h:
        * dom/EventPath.cpp:
        (WebCore::EventPath::buildPath):
        (WebCore::EventPath::EventPath):
        * dom/IdTargetObserverRegistry.cpp:
        (WebCore::IdTargetObserverRegistry::addObserver):
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/MutationObserver.cpp:
        (WebCore::queueMutationObserverCompoundMicrotask):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::createIfNeeded):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::observedSubtreeNodeWillDetach):
        * dom/Node.cpp:
        (WebCore::Node::materializeRareData):
        (WebCore::Node::ensureEventTargetData):
        (WebCore::Node::registerMutationObserver):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::ensureNodeLists):
        (WebCore::NodeRareData::ensureMutationObserverData):
        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroups::addButton):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):
        (WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
        * dom/SelectorQuery.cpp:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::moveShadowRootToNewDocument):
        (WebCore::ShadowRoot::addSlotElementByName):
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::assignToSlot):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::addImageElementByUsemap):
        (WebCore::TreeScope::labelElementForId):
        * editing/Editor.cpp:
        (WebCore::createDataTransferForClipboardEvent):
        (WebCore::Editor::Editor):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ensureReplacementFragment):
        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::clearAndCreateNotifier):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::HTMLConverter):
        (HTMLConverterCaches::computedStylePropertyForElement):
        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent):
        * fileapi/AsyncFileStream.cpp:
        (WebCore::callOnFileThread):
        (WebCore::AsyncFileStream::AsyncFileStream):
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::requestIcon):
        * html/FormAssociatedElement.cpp:
        (WebCore::FormAssociatedElement::resetFormAttributeTargetObserver):
        * html/FormController.cpp:
        (WebCore::SavedFormState::deserialize):
        (WebCore::FormController::createSavedFormStateMap):
        (WebCore::FormController::takeStateForFormElement):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList const):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setImageBuffer const):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::updateNamedElementCache const):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::create):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateVisibleValidationMessage):
        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::addToPastNamesMap):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::sandbox):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::ensureImageLoader):
        (WebCore::HTMLInputElement::resetListAttributeTargetObserver):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::sizes):
        (WebCore::HTMLLinkElement::relList):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishInitialization):
        (WebCore::HTMLMediaElement::seekWithTolerance):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::htmlFor):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateAfterStyleResolution):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::create):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::ValidationMessage::requestToHideMessage):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::DisplayListDrawingContext::DisplayListDrawingContext):
        (WebCore::CanvasRenderingContext2DBase::drawingContext const):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLElementOrFindCustomElementInterface):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::beginDOCTYPE):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        (WebCore::XSSAuditor::decodedHTTPBodySuffixTree):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::resolveCustomStyle):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::parser):
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::parser):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * inspector/CommandLineAPIHost.cpp:
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::clearAllWrappers):
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::insertBefore):
        (WebCore::DOMEditor::removeChild):
        (WebCore::DOMEditor::setAttribute):
        (WebCore::DOMEditor::removeAttribute):
        (WebCore::DOMEditor::setOuterHTML):
        (WebCore::DOMEditor::insertAdjacentHTML):
        (WebCore::DOMEditor::replaceWholeText):
        (WebCore::DOMEditor::replaceChild):
        (WebCore::DOMEditor::setNodeValue):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::createLazyAgents):
        (WebCore::InspectorController::ensureInspectorAgent):
        (WebCore::InspectorController::ensureDOMAgent):
        (WebCore::InspectorController::ensurePageAgent):
        * inspector/InspectorHistory.cpp:
        (WebCore::InspectorHistory::markUndoableState):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::setSourceData):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::resourceCreated):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::createLazyAgents):
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::InspectorCPUProfilerAgent):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::setStyleSheetText):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::highlightRect):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::innerHighlightQuad):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::setInspectedNode):
        (WebCore::InspectorDOMAgent::didInvalidateStyleAttr):
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::InspectorNetworkAgent):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        * inspector/agents/WebHeapAgent.cpp:
        (WebCore::WebHeapAgent::WebHeapAgent):
        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::displayBoxForLayoutBox const):
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::createFormattingContext):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        (WebCore::Layout::Line::appendNonBreakableSpace):
        (WebCore::Layout::Line::appendTextContent):
        (WebCore::Layout::Line::appendNonReplacedInlineBox):
        (WebCore::Layout::Line::appendHardLineBreak):
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        (WebCore::Layout::InlineTextItem::split const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        (WebCore::Layout::Box::ensureRareData):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::createTableStructure):
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::appendCell):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::create):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validatePreflightResponse):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::loadApplicationManifest):
        (WebCore::DocumentLoader::addAllArchiveResources):
        (WebCore::DocumentLoader::addArchiveResource):
        (WebCore::DocumentLoader::loadMainResource):
        (WebCore::DocumentLoader::didGetLoadDecisionForIcon):
        * loader/EmptyClients.cpp:
        (WebCore::pageConfigurationWithEmptyClients):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::initForSynthesizedDocument):
        (WebCore::FrameLoader::detachChildren):
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::schedulePageBlock):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::setBodyDataFrom):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::redirectReceived):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::addClientToSet):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::clearPreloads):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::ensureSessionResourceMap):
        (WebCore::MemoryCache::addImageToCache):
        (WebCore::MemoryCache::lruListFor):
        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader initWithResourceLoader:resourceResponse:]):
        (-[WebPreviewLoader connection:didFailWithError:]):
        (WebCore::PreviewLoader::create):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::maybeCreateContextMenu):
        * page/DebugPageOverlays.cpp:
        (WebCore::MouseWheelRegionOverlay::updateRegion):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        * page/FrameView.cpp:
        (WebCore::FrameView::addEmbeddedObjectToUpdate):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::addViewportConstrainedObject):
        (WebCore::FrameView::addScrollableArea):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::pushLayoutState):
        (WebCore::FrameViewLayoutContext::pushLayoutStateForPaginationIfNeeded):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::serviceWorker):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::initGroup):
        (WebCore::Page::setResourceUsageOverlayVisible):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::messageWithTypeAndLevel):
        (WebCore::PageConsoleClient::screenshot):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferences):
        * page/Performance.cpp:
        (WebCore::Performance::mark):
        (WebCore::Performance::clearMarks):
        (WebCore::Performance::measure):
        (WebCore::Performance::clearMeasures):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::outputLinkedDestinations):
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::startTimer):
        * page/RenderingUpdateScheduler.h:
        (WebCore::RenderingUpdateScheduler::create):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::SettingsBase):
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserScript):
        (WebCore::UserContentController::addUserStyleSheet):
        * page/WheelEventDeltaFilter.cpp:
        (WebCore::WheelEventDeltaFilter::create):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationController::CSSAnimationController):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperVisitedAffectedColor::PropertyWrapperVisitedAffectedColor):
        (WebCore::FillLayersPropertyWrapper::FillLayersPropertyWrapper):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::updateSourceSelf):
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::create):
        (WebCore::ContentSecurityPolicyDirectiveList::setCSPDirective):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * page/mac/PageMac.mm:
        (WebCore::Page::addSchedulePair):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        * page/scrolling/ScrollingMomentumCalculator.cpp:
        (WebCore::ScrollingMomentumCalculator::create):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        (WebCore::ScrollingStateNode::insertChild):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculator::create):
        * platform/Length.cpp:
        (WebCore::convertTo100PercentMinusLength):
        (WebCore::blendMixedTypes):
        * platform/RemoteCommandListener.cpp:
        (WebCore::RemoteCommandListener::create):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scrollAnimator const):
        (WebCore::ScrollableArea::ensureSnapOffsetsInfo):
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::copyWithGainFrom):
        * platform/audio/AudioChannel.h:
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::createInterpolatedFrame):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::load):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::create):
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::AudioSession):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::setInputFormat):
        (WebCore::AudioSampleDataSource::setOutputFormat):
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::AudioSession):
        * platform/cf/KeyedDecoderCF.cpp:
        (WebCore::KeyedDecoder::decoder):
        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoder::encoder):
        * platform/cf/MainThreadSharedTimerCF.cpp:
        (WebCore::setupPowerObserver):
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::create):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::create):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::updateScrollSnapPoints):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMFactoryClearKey::createCDM):
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::deviceAdded):
        * platform/generic/KeyedDecoderGeneric.cpp:
        (WebCore::KeyedDecoderGeneric::Dictionary::add):
        (WebCore::KeyedDecoder::decoder):
        (WebCore::KeyedDecoderGeneric::KeyedDecoderGeneric):
        * platform/generic/KeyedEncoderGeneric.cpp:
        (WebCore::KeyedEncoder::encoder):
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorGeneric::ScrollAnimatorGeneric):
        (WebCore::ScrollAnimatorGeneric::ensureSmoothScrollingAnimation):
        * platform/glib/KeyedDecoderGlib.cpp:
        (WebCore::KeyedDecoder::decoder):
        * platform/glib/KeyedEncoderGlib.cpp:
        (WebCore::KeyedEncoder::encoder):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::startTimer):
        (WebCore::BitmapImage::decode):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::TextLayout::TextLayout):
        * platform/graphics/Font.cpp:
        (WebCore::Font::ensureDerivedFontData const):
        * platform/graphics/Font.h:
        (WebCore::Font::boundsForGlyph const):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontCascade.cpp:
        (WebCore::retrieveOrAddCachedFonts):
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::GlyphPageCacheEntry::setGlyphDataForCharacter):
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::GlyphMetricsMap<T>::locatePageSlowCase):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::setTransform):
        (WebCore::GraphicsLayer::setChildrenTransform):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::startAnimationAsynchronously):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::loadWithNextMediaEngine):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekable const):
        * platform/graphics/PathUtilities.cpp:
        (WebCore::FloatPointGraph::findOrCreateNode):
        * platform/graphics/Region.cpp:
        (WebCore::Region::setShape):
        * platform/graphics/Region.h:
        (WebCore::Region::copyShape const):
        (WebCore::Region::decode):
        * platform/graphics/TextTrackRepresentation.cpp:
        (WebCore::TextTrackRepresentation::create):
        * platform/graphics/angle/GraphicsContext3DANGLE.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::prepare):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMFactoryFairPlayStreaming::createCDM):
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        (WebCore::CDMPrivateMediaSourceAVFObjC::createSession):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::buffered const):
        * platform/graphics/avfoundation/WebMediaSessionManagerMac.cpp:
        (WebCore::WebMediaSessionManagerMac::platformPicker):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationCF::createSession):
        (WebCore::AVFWrapper::notificationCallback):
        (WebCore::AVFWrapper::legibleOutputCallback):
        (WebCore::AVFWrapper::resourceLoaderShouldWaitForLoadingOfRequestedResource):
        (WebCore::AVFWrapper::platformLayer):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
        (WebCore::AudioTrackPrivateAVFObjC::setPlayerItemTrack):
        (WebCore::AudioTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateAVFObjC::setMediaSelectionOption):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::readTrackMetadata):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRotationSession):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::copyVideoTextureToPlatformTexture):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::seekable const):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::buffered const):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
        (WebCore::VideoTrackPrivateAVFObjC::setPlayerItemTrack):
        (WebCore::VideoTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateAVFObjC::setMediaSelectonOption):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::ensureLayerAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setContentsScale):
        (WebCore::TileController::adjustTileCoverageRectForScrolling):
        (WebCore::TileController::tiledScrollingIndicatorLayer):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::commonInit):
        (WebCore::PlatformCALayerCocoa::setShapeRoundedRect):
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        * platform/graphics/ca/win/WebTiledBackingLayerWin.cpp:
        (WebTiledBackingLayerWin::createTileController):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::createFactory):
        (WebCore::m_private):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::swapBuffersIfNeeded):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp:
        (WebCore::FontFamilySpecificationCoreText::fontRanges const):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensureGraphicsContext):
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (TextTrackRepresentation::create):
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::create):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::replay):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::loadExternalDocumentIfNeeded):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamer::buffered const):
        (WebCore::MediaPlayerPrivateGStreamer::ensureAudioSourceProvider):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushNextHolePunchBuffer):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcMakeRequest):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamerMSE::buffered const):
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.cpp:
        (WebCore::MediaPlayerPrivateHolePunch::pushNextHolePunchBuffer):
        (WebCore::MediaPlayerPrivateHolePunch::registerMediaEngine):
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h:
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.cpp:
        (WebCore::ISOProtectionSchemeInfoBox::parse):
        * platform/graphics/iso/ISOSchemeInformationBox.cpp:
        (WebCore::ISOSchemeInformationBox::parse):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/nicosia/NicosiaSceneIntegration.cpp:
        (Nicosia::SceneIntegration::createUpdateScope):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::createCommand):
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::ForPainting::ForPainting):
        (Nicosia::PaintingContextCairo::ForRecording::ForRecording):
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.cpp:
        (Nicosia::BackingStoreTextureMapperImpl::createFactory):
        * platform/graphics/nicosia/texmap/NicosiaCompositionLayerTextureMapperImpl.cpp:
        (Nicosia::CompositionLayerTextureMapperImpl::createFactory):
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.cpp:
        (Nicosia::ContentLayerTextureMapperImpl::createFactory):
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.cpp:
        (Nicosia::GC3DLayer::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.cpp:
        (Nicosia::ImageBackingTextureMapperImpl::createFactory):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        (WebCore::TextureMapperGC3DPlatformLayer::swapBuffersIfNeeded):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapper::platformCreateAccelerated):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::activateOnCompositingThread):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=):
        (WebCore::TransformState::applyTransform):
        (WebCore::TransformState::setLastPlanarSecondaryQuad):
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::setSecondaryQuad):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FullScreenController.cpp:
        (WebCore::FullScreenController::FullScreenController):
        (WebCore::FullScreenController::enterFullScreen):
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        (WebCore::GraphicsContextImplDirect2D::createFactory):
        (WebCore::m_private):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::createWindowsBitmap):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaFoundation::buffered const):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::CustomVideoPresenter):
        * platform/graphics/win/WKCAImageQueue.cpp:
        (WebCore::WKCAImageQueue::WKCAImageQueue):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForGlobalSelection):
        (WebCore::Pasteboard::createForDragAndDrop):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::writeClipboardContents):
        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::RenderThemeGadget::create):
        * platform/gtk/RenderThemeWidget.cpp:
        (WebCore::RenderThemeWidget::getOrCreate):
        (WebCore::RenderThemeScrollbar::RenderThemeScrollbar):
        (WebCore::RenderThemeComboBox::RenderThemeComboBox):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::decodeHelper):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFFrameContext::decode):
        (GIFImageReader::addFrameIfNecessary):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::decode):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::LegacyTileCache):
        (WebCore::LegacyTileCache::commitScaleChange):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::Pasteboard::createForCopyAndPaste):
        * platform/ios/QuickLook.mm:
        (WebCore::registerQLPreviewConverterIfNeeded):
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListener::create):
        * platform/ios/ScrollAnimatorIOS.mm:
        (WebCore::ScrollAnimator::create):
        * platform/libwpe/PasteboardLibWPE.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForDragAndDrop):
        * platform/mac/RemoteCommandListenerMac.mm:
        (WebCore::RemoteCommandListener::create):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimator::create):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::m_capturer):
        (WebCore::GStreamerAudioCaptureSource::GStreamerAudioCaptureSource):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkit_media_stream_src_init):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::GStreamerVideoCaptureSource):
        (WebCore::m_capturer):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoderFactory::CreateVideoEncoder):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::BasicPacketSocketFactory::BasicPacketSocketFactory):
        (WebCore::initializePeerConnectionFactoryAndThreads):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        (WebCore::LibWebRTCProvider::certificateGenerator):
        * platform/mediastream/libwebrtc/LibWebRTCProviderGStreamer.cpp:
        (WebCore::LibWebRTCProviderGStreamer::createDecoderFactory):
        (WebCore::LibWebRTCProviderGStreamer::createEncoderFactory):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::convertToYUV):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::rotatePixelBuffer):
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::RemoteDataChannelNotifier::fire):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):
        (WebCore::MockMediaPlayerMediaSource::buffered const):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::createDecodeTask):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask _restart]):
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::searchCookies):
        (WebCore::CookieJarDB::createPrepareStatement):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::didReceiveResponse):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::CurlContext):
        (WebCore::CurlHandle::willSetupSslCtx):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::getPostData):
        * platform/network/curl/CurlMultipartHandle.cpp:
        (WebCore::CurlMultipartHandle::createIfNeeded):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::runOnMainThread):
        (WebCore::CurlRequest::setupTransfer):
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::workerThread):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::delegate):
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::callOnWorkerThread):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):
        * platform/network/soup/DNSResolveQueueSoup.cpp:
        (WebCore::DNSResolveQueueSoup::resolve):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getCredentialFromPersistentStorage):
        * platform/text/BidiResolver.h:
        (WebCore::DerivedClass>::appendRunInternal):
        * platform/text/LocaleICU.cpp:
        (WebCore::Locale::create):
        (WebCore::LocaleICU::createLabelVector):
        (WebCore::createFallbackMonthLabels):
        (WebCore::createFallbackAMPMLabels):
        * platform/text/LocaleNone.cpp:
        (WebCore::Locale::create):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerCodecs):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::registerCodecs):
        * platform/text/TextCodecReplacement.cpp:
        (WebCore::TextCodecReplacement::registerCodecs):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::registerCodecs):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::registerCodecs):
        * platform/text/TextCodecUserDefined.cpp:
        (WebCore::TextCodecUserDefined::registerCodecs):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::Locale::create):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::Locale::create):
        * platform/text/win/TextCodecWin.cpp:
        (WebCore::newTextCodecWin):
        * platform/vr/openvr/VRPlatformManagerOpenVR.cpp:
        (WebCore::VRPlatformManagerOpenVR::create):
        (WebCore::VRPlatformManagerOpenVR::getVRDisplays):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::createForCopyAndPaste):
        (WebCore::Pasteboard::createForDragAndDrop):
        * platform/win/SearchPopupMenuDB.cpp:
        (WebCore::SearchPopupMenuDB::createPreparedStatement):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::SetData):
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::buildReferenceFilter):
        * rendering/ComplexLineLayout.cpp:
        (WebCore::createRun):
        (WebCore::ComplexLineLayout::createRootInlineBox):
        (WebCore::ComplexLineLayout::handleTrailingSpaces):
        (WebCore::ComplexLineLayout::linkToEndLineIfNeeded):
        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::create):
        (WebCore::FloatingObject::copyToNewContainer const):
        (WebCore::FloatingObject::cloneForNewParent const):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        * rendering/Grid.cpp:
        (WebCore::GridIterator::nextEmptyGridArea):
        * rendering/GridBaselineAlignment.cpp:
        (WebCore::GridBaselineAlignment::updateBaselineAlignmentContext):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::computeFlexFactorUnitSize const):
        (WebCore::GridTrackSizingAlgorithm::setup):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::listBasedTestResult const):
        (WebCore::HitTestResult::mutableListBasedTestResult):
        * rendering/InlineIterator.h:
        (WebCore::addPlaceholderRunForIsolatedInline):
        * rendering/LayerOverlapMap.cpp:
        (WebCore::LayerOverlapMap::pushCompositingContainer):
        * rendering/RenderBlock.cpp:
        (WebCore::insertIntoTrackedRendererMaps):
        (WebCore::PositionedDescendantsMap::addDescendant):
        (WebCore::RenderBlock::beginUpdateScrollInfoAfterLayoutTransaction):
        (WebCore::ensureBlockRareData):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::layoutLineGridBox):
        (WebCore::RenderBlockFlow::createFloatingObjects):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        (WebCore::RenderBlockFlow::materializeRareBlockFlowData):
        * rendering/RenderBox.cpp:
        (WebCore::controlStatesForRenderer):
        (WebCore::RenderBox::createInlineBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::ensureContinuationChainNode):
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::setRenderBoxFragmentInfo):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::containingFragmentMap):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::push):
        (WebCore::RenderGeometryMap::pushView):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const):
        (WebCore::RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::createInlineFlowBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateNormalFlowList):
        (WebCore::RenderLayer::collectLayers):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::updateClipRects):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAncestorClippingStack):
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::notifyFlushBeforeDisplayRefresh):
        (WebCore::LegacyWebKitScrollingLayerCoordinator::registerAllViewportConstrainedLayers):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::createLayer):
        * rendering/RenderLineBreak.cpp:
        (WebCore::RenderLineBreak::createInlineBox):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::RenderMultiColumnFlow):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::ensureRareData):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::createTextBox):
        (WebCore::RenderText::momentarilyRevealLastTypedCharacter):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintViewRectangle const):
        (WebCore::RenderView::compositor):
        (WebCore::RenderView::imageQualityController):
        (WebCore::RenderView::RepaintRegionAccumulator::RepaintRegionAccumulator):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::appendFloat):
        * rendering/SelectionRangeData.cpp:
        (WebCore::collect):
        (WebCore::SelectionRangeData::collectBounds const):
        (WebCore::SelectionRangeData::apply):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Layout::runResolver const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizing::addTextNode):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals const):
        * rendering/shapes/Shape.cpp:
        (WebCore::createInsetShape):
        (WebCore::createCircleShape):
        (WebCore::createEllipseShape):
        (WebCore::createPolygonShape):
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapePath::blend const):
        * rendering/style/ContentData.h:
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::operator=):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::clonePtr):
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::addCustomPaintWatchProperty):
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::accessCounterDirectives):
        (WebCore::RenderStyle::ensureAnimations):
        (WebCore::RenderStyle::ensureTransitions):
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleShadowSVGData::StyleShadowSVGData):
        * rendering/style/ShadowData.cpp:
        (WebCore::ShadowData::ShadowData):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::updateShapeFromElement):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::setClipper):
        (WebCore::SVGResources::setFilter):
        (WebCore::SVGResources::setMarkerStart):
        (WebCore::SVGResources::setMarkerMid):
        (WebCore::SVGResources::setMarkerEnd):
        (WebCore::SVGResources::setMasker):
        (WebCore::SVGResources::setFill):
        (WebCore::SVGResources::setStroke):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderer):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::RenderTreeUpdater):
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::Invalidator):
        * style/StyleRelations.cpp:
        (WebCore::Style::commitRelationsToRenderStyle):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::resolver):
        (WebCore::Style::Scope::activeStyleSheetsContains const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolve):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::ensureSVGRareData):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::supplementalTransform):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::copy const):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::schedule):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):
        * svg/properties/SVGAnimatedDecoratedProperty.h:
        (WebCore::SVGAnimatedDecoratedProperty::create):
        * svg/properties/SVGAnimatedPropertyAnimatorImpl.h:
        * svg/properties/SVGAnimatedPropertyPairAnimatorImpl.h:
        * svg/properties/SVGDecoratedEnumeration.h:
        (WebCore::SVGDecoratedEnumeration::create):
        * svg/properties/SVGPrimitivePropertyAnimator.h:
        (WebCore::SVGPrimitivePropertyAnimator::create):
        * svg/properties/SVGValuePropertyAnimatorImpl.h:
        * svg/properties/SVGValuePropertyListAnimatorImpl.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::from):
        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::InspectorStubFrontend):
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockSpeechSynthesizer):
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::setPrinting):
        (WebCore::Internals::initializeMockCDM):
        (WebCore::Internals::queueMicroTask):
        * testing/LegacyMockCDM.cpp:
        (WebCore::LegacyMockCDM::createSession):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::createCDM):
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::create):
        * testing/MockGamepadProvider.cpp:
        (WebCore::MockGamepadProvider::setMockGamepadDetails):
        * workers/WorkerConsoleClient.cpp:
        (WebCore::WorkerConsoleClient::messageWithTypeAndLevel):
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::enqueueEvent):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::addMessage):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::WorkerRunLoop):
        (WebCore::WorkerRunLoop::postTaskAndTerminate):
        (WebCore::WorkerRunLoop::postTaskForMode):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::WorkerThread):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::createBlobLoader):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        * worklets/WorkletConsoleClient.cpp:
        (WebCore::WorkletConsoleClient::messageWithTypeAndLevel):
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        (WebCore::WorkletGlobalScope::addConsoleMessage):
        * worklets/WorkletScriptController.cpp:
        (WebCore::WorkletScriptController::initScriptWithSubclass):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::upload):
        * xml/XPathFunctions.cpp:
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::evaluatePredicate):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::doEnd):

2019-08-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Compute column min/max widths and table width.
        https://bugs.webkit.org/show_bug.cgi?id=200757
        <rdar://problem/54333148>

        Reviewed by Antti Koivisto.

        For each column, determine a maximum and minimum column width from the cells that span only that column.
        The minimum is that required by the cell with the largest minimum cell width (or the column 'width', whichever is larger).
        The maximum is that required by the cell with the largest maximum cell width (or the column 'width', whichever is larger).

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns const):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::appendCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::columns):
        (WebCore::Layout::TableGrid::rows):

2019-08-17  Darin Adler  <darin@apple.com>

        Tidy up checks to see if a character is in the Latin-1 range by using isLatin1 consistently
        https://bugs.webkit.org/show_bug.cgi?id=200861

        Reviewed by Ross Kirsling.

        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py: Use isLatin1.
        * css/makeSelectorPseudoElementsMap.py: Ditto.
        * editing/TextIterator.cpp:
        (WebCore::isNonLatin1Separator): Ditto.
        (WebCore::isSeparator): Ditto.
        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidReasonPhrase): Ditto.
        (WebCore::isValidHTTPHeaderValue): Ditto.
        (WebCore::isValidAcceptHeaderValue): Ditto.
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode): Ditto.
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::handlePartialSequence): Ditto.
        (WebCore::TextCodecUTF8::decode): Ditto.

2019-08-18  Cathie Chen  <cathiechen@igalia.com>

        Crash in Document::deliverResizeObservations
        https://bugs.webkit.org/show_bug.cgi?id=200635

        Reviewed by Simon Fraser.

        Document::deliverResizeObservations will crash if m_resizeObservers in Document
        is modified in JS callbacks when we are traversing observers in m_resizeObservers.
        This patch copy m_resizeObservers to a new vector, and check null for observers.

        Test: resize-observer/delete-observers-in-callbacks.html

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

2019-08-17  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::flexibleAppend(...) to StringBuilder::append(...)
        https://bugs.webkit.org/show_bug.cgi?id=200756

        Reviewed by Darin Adler.

        Update call sites for rename from StringBuilder::flexibleAppend(...) to 
        StringBuilder::append(...).

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitBuiltInsSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitMangledInputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitMangledOutputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitUnpackResourcesAndNamedBuiltIns):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitSignature):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::declareFunction):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitConstantExpressionString):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Types::appendNameTo):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * testing/Internals.cpp:
        (WebCore::Internals::ongoingLoadsDescriptions const):

2019-08-16  Commit Queue  <commit-queue@webkit.org>

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

        Causes timeouts in some WebGL tests (Requested by anttik on
        #webkit).

        Reverted changeset:

        "Content in <iframe> should override "touch-action" set in
        embedding document"
        https://bugs.webkit.org/show_bug.cgi?id=200204
        https://trac.webkit.org/changeset/248772

2019-08-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [macOS] Emoji with variation selectors are rendered in text style, not emoji style
        https://bugs.webkit.org/show_bug.cgi?id=200830
        <rdar://problem/53076002>

        Reviewed by Simon Fraser.

        When mapping characters to glyphs, Core Text is giving us the deleted glyph ID, which is unexpected.
        We were treating it as a valid glyph ID, but it rather should be treated as an invalid glyph ID.

        Test: fast/text/emoji-variation-selector.html

        * platform/graphics/mac/GlyphPageMac.cpp:
        (WebCore::GlyphPage::fill):

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

        [WHLSL] Make "operator cast" constructors native
        https://bugs.webkit.org/show_bug.cgi?id=200748

        Reviewed by Myles C. Maxfield.

        Tests: webgpu/whlsl/matrix-constructors.html
               webgpu/whlsl/vector-constructors.html

        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-08-16  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Enums should be shadowed by local variables
        https://bugs.webkit.org/show_bug.cgi?id=200847

        Reviewed by Saam Barati.

        Only cause DotExpressions to become EnumerationMemberLiterals if they aren't valid variable names.

        Test: webgpu/whlsl/structure-field-enumeration-element-clash.html

        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):

2019-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Don't use union to store NodeRareData* and RenderObject*
        https://bugs.webkit.org/show_bug.cgi?id=200744

        Reviewed by Antti Koivisto.

        This patch undoes unioning of NodeRareData* and RenderObject* in Node introduced in r133372 in order
        to eliminate any possibility of type confusion bugs. Instead of re-introducing the global map, which
        is known to be slow, this patch simply adds an extra pointer for NodeRareData: Node::m_rareData.

        To compensate for the increased memory usage due to a new pointer type in Node, this patch also packs
        the style related flags in ElementRareData, which is the most common reason for which ElementRareData
        is created, into RenderObject* pointer using CompactPointerTuple as Node::m_rendererWithStyleFlags.

        Unfortunately, there are 9 style related flags and they won't all fit into the single byte provided
        by CompactPointerTuple. Luckily, this patch also eliminates the need for HasRareDataFlag as m_rareData
        knows whether a node has rare data or not so we re-use that bitflag space for the extra one flag.

        No new tests since there should be no observable behavioral change from this.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild): Check the nullity of
        m_rareData directly instead of checking HasRareDataFlag, which has been removed.
        * dom/Element.cpp:
        (WebCore::Element::setStyleAffectedByEmpty): Deleted.
        (WebCore::Element::setStyleAffectedByFocusWithin): Deleted.
        (WebCore::Element::setStyleAffectedByActive): Deleted.
        (WebCore::Element::setChildrenAffectedByDrag): Deleted.
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Deleted.
        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Deleted.
        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Deleted.
        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Deleted.
        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
        (WebCore::Element::resetStyleRelations): Clear the flags in m_rendererWithStyleFlags and m_nodeFlags.
        (WebCore::Element::rareDataStyleAffectedByEmpty const): Deleted.
        (WebCore::Element::rareDataStyleAffectedByFocusWithin const): Deleted.
        (WebCore::Element::rareDataStyleAffectedByActive const): Deleted.
        (WebCore::Element::rareDataChildrenAffectedByDrag const): Deleted.
        (WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules const): Deleted.
        (WebCore::Element::rareDataDescendantsAffectedByForwardPositionalRules const): Deleted.
        (WebCore::Element::rareDataChildrenAffectedByBackwardPositionalRules const): Deleted.
        (WebCore::Element::rareDataDescendantsAffectedByBackwardPositionalRules const): Deleted.
        (WebCore::Element::rareDataChildrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.
        * dom/Element.h:
        (WebCore::Element::styleAffectedByActive const): Now uses m_rendererWithStyleFlags.
        (WebCore::Element::styleAffectedByEmpty const): Ditto.
        (WebCore::Element::styleAffectedByFocusWithin const): Now uses m_nodeFlags.
        (WebCore::Element::childrenAffectedByDrag const): Now uses m_rendererWithStyleFlags.
        (WebCore::Element::childrenAffectedByForwardPositionalRules const): Ditto.
        (WebCore::Element::descendantsAffectedByForwardPositionalRules const): Ditto.
        (WebCore::Element::childrenAffectedByBackwardPositionalRules const): Ditto.
        (WebCore::Element::descendantsAffectedByBackwardPositionalRules const): Ditto.
        (WebCore::Element::childrenAffectedByPropertyBasedBackwardPositionalRules const): Ditto.
        (WebCore::Element::setStyleAffectedByEmpty): Now stores into m_rendererWithStyleFlags.
        (WebCore::Element::setStyleAffectedByFocusWithin): Now uses m_nodeFlags.
        (WebCore::Element::setDescendantsAffectedByPreviousSibling): Removed const qualifier & useless return.
        (WebCore::Element::setStyleAffectedByActive): Now stores into m_rendererWithStyleFlags.
        (WebCore::Element::setChildrenAffectedByDrag): Ditto.
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules): Ditto.
        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules): Ditto.
        (WebCore::Element::setChildrenAffectedByBackwardPositionalRules): Ditto.
        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules): Ditto.
        (WebCore::Element::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Ditto.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::styleAffectedByActive const): Deleted.
        (WebCore::ElementRareData::setStyleAffectedByActive): Deleted.
        (WebCore::ElementRareData::styleAffectedByEmpty const): Deleted.
        (WebCore::ElementRareData::setStyleAffectedByEmpty): Deleted.
        (WebCore::ElementRareData::styleAffectedByFocusWithin const): Deleted.
        (WebCore::ElementRareData::setStyleAffectedByFocusWithin): Deleted.
        (WebCore::ElementRareData::childrenAffectedByDrag const): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByDrag): Deleted.
        (WebCore::ElementRareData::childrenAffectedByLastChildRules const): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByLastChildRules): Deleted.
        (WebCore::ElementRareData::childrenAffectedByForwardPositionalRules const): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules): Deleted.
        (WebCore::ElementRareData::descendantsAffectedByForwardPositionalRules const): Deleted.
        (WebCore::ElementRareData::setDescendantsAffectedByForwardPositionalRules): Deleted.
        (WebCore::ElementRareData::childrenAffectedByBackwardPositionalRules const): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByBackwardPositionalRules): Deleted.
        (WebCore::ElementRareData::descendantsAffectedByBackwardPositionalRules const): Deleted.
        (WebCore::ElementRareData::setDescendantsAffectedByBackwardPositionalRules): Deleted.
        (WebCore::ElementRareData::childrenAffectedByPropertyBasedBackwardPositionalRules const): Deleted.
        (WebCore::ElementRareData::setChildrenAffectedByPropertyBasedBackwardPositionalRules): Deleted.
        (WebCore::ElementRareData::useTypes const): Removed UseType::StyleFlags.
        (WebCore::ElementRareData::ElementRareData): No longer takes RenderElement*.
        (WebCore::ElementRareData::resetStyleRelations): Only re-sets child index now since that's all left.
        * dom/Node.cpp:
        (WebCore::stringForRareDataUseType): Removed UseType::StyleFlags since there is no style related
        flags in ElementRareData.
        (WebCore::Node::materializeRareData): Simplified now that m_rareData is not a union.
        (WebCore::Node::clearRareData): Ditto.
        * dom/Node.h:
        (WebCore::NodeRareDataBase): Deleted.
        (WebCore::Node::renderer const):
        (WebCore::Node::rareDataMemoryOffset):
        (WebCore::Node::flagHasRareData): Deleted.
        (WebCore::Node::NodeFlags): Replaced HasRareDataFlag with StyleAffectedByFocusWithinFlag.
        (WebCore::Node::ElementStyleFlag): Added.
        (WebCore::Node::hasStyleFlag const): Added. Checks a reprense of a flag in m_rendererWithStyleFlags.
        (WebCore::Node::setStyleFlag): Ditto for setting a flag.
        (WebCore::Node::clearStyleFlags): Ditto for clearing all flags.
        (WebCore::Node::hasRareData const): Now checks the nullity of m_rareData directly.
        (WebCore::Node::rareData const):
        * dom/NodeRareData.cpp: The size of NodeRareData is shrunk by one pointer.
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::NodeRareData): No longer inherits from NodeRareDataBase which was needed to
        to store RenderObject*.
        (WebCore::Node::rareData const): Moved to Node.h.
        * rendering/RenderObject.h:
        (WebCore::Node::setRenderer): Moved from Node.h since CompactPointerTuple::setPointer has the
        aforementioned static_assert which requires the definition of RenderObject.

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

        [WHLSL] Add comparison operators for vectors and matrices
        https://bugs.webkit.org/show_bug.cgi?id=200823

        Reviewed by Myles C. Maxfield.

        Tests: webgpu/whlsl/matrix-compare.html
               webgpu/whlsl/vector-compare.html

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        Unreviewed. When I rebased to land r248795, I had a bad merge in 
        WHLSLStandardLibrary.txt where the bool matrix constructors ended
        up in the wrong section of the standard library.

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        [WHLSL] Make operator== native and add bool matrices
        https://bugs.webkit.org/show_bug.cgi?id=200749

        Reviewed by Myles C. Maxfield.

        This patch makes operator== native and implements them the right way
        for vectors and matrices. Previously, we would just return a single
        boolean indicating if all elements were equal. However, to be compatible
        with HLSL, we should return a boolean vector or matrix, indicating which
        elements are equal or not. This patch makes this change, and in the process,
        adds a bool matrix.

        This patch also:
        - Lifts the requirement that all comparison operators in user code must return bool.
        We no longer follow this in the standard library, and don't want to require user
        code to do so. It seems reasonable to have a custom comparison operator
        which returns an enum of the form { LessThan, Equal, GreaterThan, Incomparable }
        - Changes the native operator inliner to no longer assume that operations on
        matrices return the same type as the arguments. This was true for math, but
        is not true for comparison operators.

        Tests: webgpu/whlsl/bool-matrix.html
               webgpu/whlsl/operator-equal-equal.html

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::checkOperatorOverload):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addMatrix):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::WTF_ARRAY_LENGTH):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

2019-08-16  Zalan Bujtas  <zalan@apple.com>

        [ContentChangeObserver] Add ContentChangeObserver::elementDidBecomeHidden
        https://bugs.webkit.org/show_bug.cgi?id=200819

        Reviewed by Simon Fraser.

        r248750 started tracking candidate elements that become hidden through renderer destruction. This patch expands the check for other visibility style changes.
        <rdar://problem/54400223>

        Test: fast/events/touch/ios/content-observation/going-from-hidden-to-visible-and-to-hidden3.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::rendererWillBeDestroyed):
        (WebCore::ContentChangeObserver::elementDidBecomeHidden):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        * page/ios/ContentChangeObserver.h:

2019-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Split tabIndex computation for DOM and the rest of WebCore
        https://bugs.webkit.org/show_bug.cgi?id=200806

        Reviewed by Chris Dumez.

        This patch renames Element::tabIndex to Element::tabIndexForBindings and migrates its usage in
        WebCore outside JS bindings code to: tabIndexSetExplicitly, which now returns Optional<int>,
        and shouldBeIgnoredInSequentialFocusNavigation which returns true whenever the old tabIndex
        function used to return -1.

        Instead of overriding Element::tabIndex, each subclass of element now overrides defaultTabIndex
        corresponding to the concept of the default value of tabIndex IDL attribute defined at:
        https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute

        No new tests since there should be no observable behavior change.

        * dom/Element.cpp:
        (WebCore::Element::tabIndexSetExplicitly const): Now returns Optional<int> instead of bool.
        (WebCore::Element::defaultTabIndex const): Added. Return -1 here. HTMLElement and SVGElement
        manually override tabIndex to implement this behavior. Now MathMLElement overrides this function
        to return 0 instead, which is arguably a bug.
        (WebCore::Element::supportsFocus const): Convert Optional<int> to bool.
        (WebCore::Element::tabIndexForBindings const): Renamed from tabIndex. Migrated the code in
        HTMLElement::tabIndex and SVGElement::tabIndex here. Note all overrides of HTMLElement::tabIndex
        and SVGElement::tabIndex below were skipping supportsFocus check and using 0 as the default value.
        This is now accomplished by having an explicit check defaultTabIndex returning 0. MathMLElement
        overrides defaultTabIndex so it continues to use the old logic. All this complexity should go away
        in webkit.org/b/199606.
        (WebCore::Element::setTabIndexForBindings): Renamed from setTabIndex.
        (WebCore::Element::isKeyboardFocusable const): Checks shouldBeIgnoredInSequentialFocusNavigation
        in lieu of calling Element::tabIndexForBindings.
        * dom/Element.h:
        (WebCore::Element::shouldBeIgnoredInSequentialFocusNavigation const): Added. Returns true if the
        old implementation of Element::tabIndex would have returned -1 due to supportsFocus returning false.
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::tabIndex const): Made this function return Optional<int>. Note that
        ElementRareData continue to store a bit field and int for more efficient packing.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultTabIndex const): Replaced tabIndex.
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::isFocusable const):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::defaultTabIndex const): Replaced tabIndex.
        * html/HTMLFormControlElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::defaultTabIndex const): Replaced tabIndex. This is probably a bug since
        this would put every MathML element in the sequential navigation order regardless of whether it
        has tabIndex set or not.
        * mathml/MathMLElement.h:
        * page/FocusController.cpp:
        (WebCore::tabIndexForElement): Added. Computes the "effective" tab index FocusController uses.
        (WebCore::shadowAdjustedTabIndex):
        (WebCore::nextElementWithGreaterTabIndex): This code should use shadowAdjustedTabIndex instead
        but keeping the old behavior for now.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultTabIndex const): Replaced tabIndex.
        * svg/SVGAElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::tabIndex const): Deleted. The logic is now in Element::tabIndex itself.
        * svg/SVGElement.h:
        (WebCore::SVGElement::hasTagName const):
        * svg/SVGElement.idl:

2019-08-16  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build.

        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * fileapi/ThreadableBlobRegistry.h:
        * loader/SinkDocument.cpp:

2019-08-16  Antti Koivisto  <antti@apple.com>

        Content in <iframe> should override "touch-action" set in embedding document
        https://bugs.webkit.org/show_bug.cgi?id=200204
        <rdar://problem/54355249>

        Reviewed by Antoine Quint.

        Test: pointerevents/ios/touch-action-region-frame.html

        Subframes where content doesn't use any touch-action properties won't generate event region for their main layer.
        As a result the touch-action property gets computed in UI process to the parent frames touch-action (instead of 'auto').

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

        Generate event region for the main layer of subframes.

2019-08-16  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Move TextureMapperAnimation to the nicosia namespace as Nicosia::Animation
        https://bugs.webkit.org/show_bug.cgi?id=200707

        Reviewed by Žan Doberšek.

        Move TextureMapperAnimation to Nicosia::Animation so it can be used by non TextureMapper
        code paths.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaAnimation.cpp: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.cpp.
        (Nicosia::shouldReverseAnimationValue):
        (Nicosia::normalizedAnimationValue):
        (Nicosia::normalizedAnimationValueForFillsForwards):
        (Nicosia::timingFunctionForAnimationValue):
        (Nicosia::Animation::Animation):
        (Nicosia::Animation::apply):
        (Nicosia::Animation::applyKeepingInternalState):
        (Nicosia::Animation::pause):
        (Nicosia::Animation::resume):
        (Nicosia::Animation::computeTotalRunningTime):
        (Nicosia::Animation::isActive const):
        (Nicosia::Animation::applyInternal):
        (Nicosia::Animations::add):
        (Nicosia::Animations::remove):
        (Nicosia::Animations::pause):
        (Nicosia::Animations::suspend):
        (Nicosia::Animations::resume):
        (Nicosia::Animations::apply):
        (Nicosia::Animations::applyKeepingInternalState):
        (Nicosia::Animations::hasActiveAnimationsOfType const):
        (Nicosia::Animations::hasRunningAnimations const):
        (Nicosia::Animations::getActiveAnimations const):
        * platform/graphics/nicosia/NicosiaAnimation.h: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperAnimation.h.
        (Nicosia::Animation::Animation):
        (Nicosia::Animation::keyframes const):
        (Nicosia::Animation::timingFunction const):
        (Nicosia::Animations::animations const):
        (Nicosia::Animations::animations):
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setAnimations):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2019-08-16  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix for WinCairo, part 2
        https://bugs.webkit.org/show_bug.cgi?id=200526

        * Modules/indexeddb/server/IDBSerializationContext.h:

2019-08-16  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix for WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=200526

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

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

        [WTF] Add makeUnique<T>, which ensures T is fast-allocated, WTF_MAKE_FAST_ALLOCATED annotation part
        https://bugs.webkit.org/show_bug.cgi?id=200620

        Reviewed by Geoffrey Garen.

        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        (WebCore::LegacyCDM::keySystem const): Deleted.
        (WebCore::LegacyCDM::client const): Deleted.
        (WebCore::LegacyCDM::setClient): Deleted.
        * Modules/encryptedmedia/legacy/LegacyCDMPrivate.h:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.h:
        * Modules/webaudio/AsyncAudioDecoder.h:
        (WebCore::AsyncAudioDecoder::DecodingTask::audioData): Deleted.
        (WebCore::AsyncAudioDecoder::DecodingTask::sampleRate const): Deleted.
        (WebCore::AsyncAudioDecoder::DecodingTask::successCallback): Deleted.
        (WebCore::AsyncAudioDecoder::DecodingTask::errorCallback): Deleted.
        (WebCore::AsyncAudioDecoder::DecodingTask::audioBuffer): Deleted.
        * Modules/webauthn/AuthenticatorCoordinator.h:
        * Modules/webdatabase/SQLStatement.h:
        (WebCore::SQLStatement::hasStatementCallback const): Deleted.
        (WebCore::SQLStatement::hasStatementErrorCallback const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        * Modules/webgpu/WHLSL/WHLSLResolvingType.h:
        * bindings/js/DOMPromiseProxy.h:
        * bindings/js/GCController.h:
        * bridge/jsc/BridgeJSC.h:
        * contentextensions/ContentExtensionsBackend.h:
        * dom/FullscreenManager.h:
        (WebCore::FullscreenManager::document): Deleted.
        (WebCore::FullscreenManager::document const): Deleted.
        (WebCore::FullscreenManager::topDocument const): Deleted.
        (WebCore::FullscreenManager::page const): Deleted.
        (WebCore::FullscreenManager::frame const): Deleted.
        (WebCore::FullscreenManager::documentElement const): Deleted.
        (WebCore::FullscreenManager::hasLivingRenderTree const): Deleted.
        (WebCore::FullscreenManager::pageCacheState const): Deleted.
        (WebCore::FullscreenManager::scheduleFullStyleRebuild): Deleted.
        (WebCore::FullscreenManager::fullscreenElement const): Deleted.
        (WebCore::FullscreenManager::isFullscreen const): Deleted.
        (WebCore::FullscreenManager::isFullscreenKeyboardInputAllowed const): Deleted.
        (WebCore::FullscreenManager::currentFullscreenElement const): Deleted.
        * dom/Microtasks.h:
        (WebCore::MicrotaskQueue::vm const): Deleted.
        * editing/CompositeEditCommand.h:
        * editing/mac/AlternativeTextUIController.h:
        * html/HTMLMediaElement.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/agents/WebHeapAgent.cpp:
        * layout/displaytree/DisplayRun.h:
        * layout/inlineformatting/InlineItem.h:
        * layout/inlineformatting/InlineLine.h:
        * layout/tableformatting/TableGrid.h:
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::frame const): Deleted.
        (WebCore::FrameLoader::policyChecker const): Deleted.
        (WebCore::FrameLoader::history const): Deleted.
        (WebCore::FrameLoader::notifier const): Deleted.
        (WebCore::FrameLoader::subframeLoader const): Deleted.
        (WebCore::FrameLoader::mixedContentChecker const): Deleted.
        (WebCore::FrameLoader::urlSelected): Deleted.
        (WebCore::FrameLoader::reload): Deleted.
        (WebCore::FrameLoader::requestedHistoryItem const): Deleted.
        (WebCore::FrameLoader::documentLoader const): Deleted.
        (WebCore::FrameLoader::policyDocumentLoader const): Deleted.
        (WebCore::FrameLoader::provisionalDocumentLoader const): Deleted.
        (WebCore::FrameLoader::state const): Deleted.
        (WebCore::FrameLoader::shouldReportResourceTimingToParentFrame const): Deleted.
        (WebCore::FrameLoader::client const): Deleted.
        (WebCore::FrameLoader::forceSandboxFlags): Deleted.
        (WebCore::FrameLoader::hasOpenedFrames const): Deleted.
        (WebCore::FrameLoader::setLoadsSynchronously): Deleted.
        (WebCore::FrameLoader::loadsSynchronously const): Deleted.
        (WebCore::FrameLoader::stateMachine): Deleted.
        (WebCore::FrameLoader::quickRedirectComing const): Deleted.
        (WebCore::FrameLoader::pageDismissalEventBeingDispatched const): Deleted.
        (WebCore::FrameLoader::previousURL const): Deleted.
        (WebCore::FrameLoader::setOverrideCachePolicyForTesting): Deleted.
        (WebCore::FrameLoader::setOverrideResourceLoadPriorityForTesting): Deleted.
        (WebCore::FrameLoader::setStrictRawResourceValidationPolicyDisabledForTesting): Deleted.
        (WebCore::FrameLoader::isStrictRawResourceValidationPolicyDisabledForTesting): Deleted.
        (WebCore::FrameLoader::provisionalLoadErrorBeingHandledURL const): Deleted.
        (WebCore::FrameLoader::setProvisionalLoadErrorBeingHandledURL): Deleted.
        (WebCore::FrameLoader::isReloadingFromOrigin const): Deleted.
        (WebCore::FrameLoader::setAlwaysAllowLocalWebarchive): Deleted.
        (WebCore::FrameLoader::alwaysAllowLocalWebarchive const): Deleted.
        (WebCore::FrameLoader::loadWithDocumentLoader): Deleted.
        (WebCore::FrameLoader::loadWithNavigationAction): Deleted.
        (WebCore::FrameLoader::shouldTreatCurrentLoadAsContinuingLoad const): Deleted.
        * loader/NavigationDisabler.h:
        * loader/NavigationScheduler.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedSVGDocumentReference.h:
        (WebCore::CachedSVGDocumentReference::loadRequested const): Deleted.
        (WebCore::CachedSVGDocumentReference::document): Deleted.
        * loader/ios/PreviewLoader.h:
        * page/CaptionUserPreferences.h:
        * page/PrewarmInformation.h:
        * page/ResizeObserver.h:
        * page/SuspendableTimer.h:
        * page/csp/ContentSecurityPolicyDirective.h:
        * page/ios/ContentChangeObserver.h:
        * page/ios/DOMTimerHoldingTank.h:
        * page/linux/ResourceUsageOverlayLinux.cpp:
        * page/mac/TextIndicatorWindow.h:
        * page/scrolling/ScrollSnapOffsetsInfo.h:
        * page/scrolling/ScrollingMomentumCalculator.h:
        * platform/CPUMonitor.h:
        * platform/FileMonitor.h:
        * platform/ScrollAnimation.h:
        * platform/SuddenTermination.h:
        * platform/audio/AudioBus.h:
        (WebCore::AudioBus::numberOfChannels const): Deleted.
        (WebCore::AudioBus::channel): Deleted.
        (WebCore::AudioBus::channel const): Deleted.
        (WebCore::AudioBus::length const): Deleted.
        (WebCore::AudioBus::sampleRate const): Deleted.
        (WebCore::AudioBus::setSampleRate): Deleted.
        (WebCore::AudioBus::reset): Deleted.
        (WebCore::AudioBus::AudioBus): Deleted.
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::AudioChannel): Deleted.
        (WebCore::AudioChannel::set): Deleted.
        (WebCore::AudioChannel::length const): Deleted.
        (WebCore::AudioChannel::mutableData): Deleted.
        (WebCore::AudioChannel::data const): Deleted.
        (WebCore::AudioChannel::zero): Deleted.
        (WebCore::AudioChannel::clearSilentFlag): Deleted.
        (WebCore::AudioChannel::isSilent const): Deleted.
        * platform/audio/AudioFIFO.h:
        (WebCore::AudioFIFO::framesInFifo const): Deleted.
        (WebCore::AudioFIFO::updateIndex): Deleted.
        * platform/audio/AudioPullFIFO.h:
        * platform/audio/AudioResampler.h:
        (WebCore::AudioResampler::rate const): Deleted.
        * platform/audio/AudioResamplerKernel.h:
        * platform/audio/AudioSession.cpp:
        * platform/audio/AudioSession.h:
        (WebCore::AudioSession::isActive const): Deleted.
        * platform/audio/Biquad.h:
        * platform/audio/Cone.h:
        (WebCore::ConeEffect::setInnerAngle): Deleted.
        (WebCore::ConeEffect::innerAngle const): Deleted.
        (WebCore::ConeEffect::setOuterAngle): Deleted.
        (WebCore::ConeEffect::outerAngle const): Deleted.
        (WebCore::ConeEffect::setOuterGain): Deleted.
        (WebCore::ConeEffect::outerGain const): Deleted.
        * platform/audio/DenormalDisabler.h:
        (WebCore::DenormalDisabler::DenormalDisabler): Deleted.
        (WebCore::DenormalDisabler::~DenormalDisabler): Deleted.
        (WebCore::DenormalDisabler::flushDenormalFloatToZero): Deleted.
        (WebCore::DenormalDisabler::getCSR): Deleted.
        (WebCore::DenormalDisabler::setCSR): Deleted.
        * platform/audio/DirectConvolver.h:
        * platform/audio/Distance.h:
        (WebCore::DistanceEffect::model): Deleted.
        (WebCore::DistanceEffect::setModel): Deleted.
        (WebCore::DistanceEffect::setRefDistance): Deleted.
        (WebCore::DistanceEffect::setMaxDistance): Deleted.
        (WebCore::DistanceEffect::setRolloffFactor): Deleted.
        (WebCore::DistanceEffect::refDistance const): Deleted.
        (WebCore::DistanceEffect::maxDistance const): Deleted.
        (WebCore::DistanceEffect::rolloffFactor const): Deleted.
        * platform/audio/DownSampler.h:
        * platform/audio/DynamicsCompressor.h:
        (WebCore::DynamicsCompressor::sampleRate const): Deleted.
        (WebCore::DynamicsCompressor::nyquist const): Deleted.
        (WebCore::DynamicsCompressor::tailTime const): Deleted.
        (WebCore::DynamicsCompressor::latencyTime const): Deleted.
        * platform/audio/DynamicsCompressorKernel.h:
        (WebCore::DynamicsCompressorKernel::latencyFrames const): Deleted.
        (WebCore::DynamicsCompressorKernel::sampleRate const): Deleted.
        (WebCore::DynamicsCompressorKernel::meteringGain const): Deleted.
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/FFTConvolver.h:
        (WebCore::FFTConvolver::fftSize const): Deleted.
        * platform/audio/HRTFDatabase.h:
        (WebCore::HRTFDatabase::numberOfAzimuths): Deleted.
        (WebCore::HRTFDatabase::sampleRate const): Deleted.
        * platform/audio/HRTFElevation.h:
        (WebCore::HRTFElevation::HRTFElevation): Deleted.
        (WebCore::HRTFElevation::kernelListL): Deleted.
        (WebCore::HRTFElevation::kernelListR): Deleted.
        (WebCore::HRTFElevation::elevationAngle const): Deleted.
        (WebCore::HRTFElevation::numberOfAzimuths const): Deleted.
        (WebCore::HRTFElevation::sampleRate const): Deleted.
        * platform/audio/HRTFPanner.h:
        (WebCore::HRTFPanner::fftSize const): Deleted.
        (WebCore::HRTFPanner::sampleRate const): Deleted.
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/PlatformAudioData.h:
        * platform/audio/Reverb.h:
        (WebCore::Reverb::impulseResponseLength const): Deleted.
        * platform/audio/ReverbAccumulationBuffer.h:
        (WebCore::ReverbAccumulationBuffer::readIndex const): Deleted.
        (WebCore::ReverbAccumulationBuffer::readTimeFrame const): Deleted.
        * platform/audio/ReverbConvolver.h:
        (WebCore::ReverbConvolver::impulseResponseLength const): Deleted.
        (WebCore::ReverbConvolver::inputBuffer): Deleted.
        (WebCore::ReverbConvolver::useBackgroundThreads const): Deleted.
        * platform/audio/ReverbConvolverStage.h:
        (WebCore::ReverbConvolverStage::inputReadIndex const): Deleted.
        * platform/audio/ReverbInputBuffer.h:
        (WebCore::ReverbInputBuffer::writeIndex const): Deleted.
        * platform/audio/SincResampler.h:
        * platform/audio/UpSampler.h:
        * platform/audio/ZeroPole.h:
        (WebCore::ZeroPole::ZeroPole): Deleted.
        (WebCore::ZeroPole::reset): Deleted.
        (WebCore::ZeroPole::setZero): Deleted.
        (WebCore::ZeroPole::setPole): Deleted.
        (WebCore::ZeroPole::zero const): Deleted.
        (WebCore::ZeroPole::pole const): Deleted.
        * platform/audio/cocoa/WebAudioBufferList.h:
        (WebCore::WebAudioBufferList::list const): Deleted.
        (WebCore::WebAudioBufferList::operator AudioBufferList& const): Deleted.
        (WebCore::WebAudioBufferList::kind const): Deleted.
        * platform/audio/ios/AudioSessionIOS.mm:
        * platform/audio/mac/CARingBuffer.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/gamepad/mac/HIDGamepad.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/Font.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/LegacyCDMSession.h:
        * platform/graphics/Region.h:
        * platform/graphics/VelocityData.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.h:
        * platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        * platform/graphics/cv/ImageRotationSessionVT.h:
        (WebCore::ImageRotationSessionVT::RotationProperties::isIdentity const): Deleted.
        (WebCore::ImageRotationSessionVT::transform const): Deleted.
        (WebCore::ImageRotationSessionVT::rotationProperties const): Deleted.
        (WebCore::ImageRotationSessionVT::size): Deleted.
        (WebCore::ImageRotationSessionVT::rotatedSize): Deleted.
        * platform/graphics/cv/PixelBufferConformerCV.h:
        * platform/graphics/cv/TextureCacheCV.h:
        * platform/graphics/cv/VideoTextureCopierCV.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/holepunch/MediaPlayerPrivateHolePunch.h:
        * platform/graphics/iso/ISOBox.h:
        * platform/graphics/iso/ISOOriginalFormatBox.h:
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.h:
        * platform/graphics/iso/ISOSchemeInformationBox.h:
        * platform/graphics/iso/ISOSchemeTypeBox.h:
        * platform/graphics/iso/ISOTrackEncryptionBox.h:
        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOStringBox::contents): Deleted.
        * platform/graphics/iso/ISOVTTCue.h:
        (WebCore::ISOWebVTTCue::boxTypeName): Deleted.
        (WebCore::ISOWebVTTCue::presentationTime const): Deleted.
        (WebCore::ISOWebVTTCue::duration const): Deleted.
        (WebCore::ISOWebVTTCue::sourceID const): Deleted.
        (WebCore::ISOWebVTTCue::id const): Deleted.
        (WebCore::ISOWebVTTCue::originalStartTime const): Deleted.
        (WebCore::ISOWebVTTCue::settings const): Deleted.
        (WebCore::ISOWebVTTCue::cueText const): Deleted.
        * platform/graphics/nicosia/NicosiaPaintingOperation.h:
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.h:
        * platform/graphics/nicosia/texmap/NicosiaCompositionLayerTextureMapperImpl.h:
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.h:
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.h:
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.h:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/coordinated/Tile.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FullScreenController.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/graphics/win/PlatformContextDirect2D.h:
        * platform/graphics/win/WKCAImageQueue.cpp:
        * platform/gtk/PasteboardHelper.cpp:
        * platform/ios/LegacyTileGrid.h:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediastream/gstreamer/GStreamerAudioData.h:
        (WebCore::GStreamerAudioData::GStreamerAudioData): Deleted.
        (WebCore::GStreamerAudioData::getSample): Deleted.
        (WebCore::GStreamerAudioData::getAudioInfo): Deleted.
        (WebCore::GStreamerAudioData::kind const): Deleted.
        * platform/mediastream/gstreamer/GStreamerCapturer.h:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.h:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.h:
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * platform/mock/MediaPlaybackTargetPickerMock.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/network/ResourceErrorBase.h:
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlMultipartHandle.h:
        * platform/network/curl/CurlRequestScheduler.h:
        * platform/network/curl/CurlSSLVerifier.h:
        * platform/network/ios/PreviewConverter.h:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h:
        * platform/vr/openvr/VRPlatformManagerOpenVR.h:
        * rendering/HitTestResult.h:
        * rendering/LayerOverlapMap.cpp:
        * rendering/RenderLayerCompositor.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * replay/UserInputBridge.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        * svg/properties/SVGAttributeAnimator.h:
        * svg/properties/SVGDecoratedProperty.h:
        * svg/properties/SVGPropertyAnimatorFactory.h:
        * testing/InternalSettings.cpp:
        * testing/LegacyMockCDM.cpp:
        * testing/LegacyMockCDM.h:
        * testing/MockCDMFactory.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/service/ServiceWorkerContainer.h:
        * worklets/PaintWorkletGlobalScope.h:
        * xml/XMLErrors.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

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

        [ContentChangeObserver] Rename contentVisibilityDidChange to elementDidBecomeVisible
        https://bugs.webkit.org/show_bug.cgi?id=200780
        <rdar://problem/54358330>

        Reviewed by Simon Fraser.

        "elementDidBecomeVisible" name is more accurate and also we'll probably start tracking changes from visible to hidden soon.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::visibilityChangedFromHiddenToVisible):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::contentVisibilityDidChange): Deleted.
        * page/ios/ContentChangeObserver.h:

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

        [ContentChangeObserver] Keep track of all the visibility candidates.
        https://bugs.webkit.org/show_bug.cgi?id=200777
        <rdar://problem/54356331>

        Reviewed by Simon Fraser.

        In order to find out whether a visible (and actionable) content change happened, we need to keep track of all the candidate elements.

        Test: fast/events/touch/ios/content-observation/going-from-hidden-to-visible-and-to-hidden2.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::reset):
        (WebCore::ContentChangeObserver::rendererWillBeDestroyed):
        (WebCore::ContentChangeObserver::contentVisibilityDidChange):
        (WebCore::ContentChangeObserver::shouldObserveVisibilityChangeForElement):
        * page/ios/ContentChangeObserver.h:

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

        [WHLSL] Add unary plus
        https://bugs.webkit.org/show_bug.cgi?id=200753

        Reviewed by Saam Barati.

        HLSL has these, so we should too.

        Test: webgpu/whlsl/vector-matrix-addition-subtraction.html

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        [WHLSL] Matrices should have constructors that take a flattened list of scalars
        https://bugs.webkit.org/show_bug.cgi?id=200804

        Reviewed by Saam Barati.

        HLSL has them, so we should too.

        Test: webgpu/whlsl/matrix-constructors-list-of-scalars.html

        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:

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

        Use one VM per thread for IDB serialization work in network process
        https://bugs.webkit.org/show_bug.cgi?id=200526

        Reviewed by Geoffrey Garen.

        We had one static VM in UniqueIDBDatabase for serialization/deserialization in MemoryObjectStore. This VM was 
        never destroyed and could be used on different background threads.
 
        We also had one VM per SQLiteIDBBackingStore for serialization/deserialization in SQLiteIDBBackingStore. If 
        there were multiple IndexedDB databases of the same session opened, we would have multiple VMs created
        on the same thread. Each VM has its memory allocator and garbage collector, which takes up memory.
 
        To be more memory efficient and safe, we can use one VM per thread in the network process, and create/destroy
        the VMs on demand.

        * Modules/indexeddb/server/IDBSerializationContext.cpp: Added.
        (WebCore::IDBServer::IDBSerializationContext::getOrCreateIDBSerializationContext):
        (WebCore::IDBServer::IDBSerializationContext::~IDBSerializationContext):
        (WebCore::IDBServer::IDBSerializationContext::initializeVM):
        (WebCore::IDBServer::IDBSerializationContext::vm):
        (WebCore::IDBServer::IDBSerializationContext::execState):
        (WebCore::IDBServer::IDBSerializationContext::IDBSerializationContext):
        * Modules/indexeddb/server/IDBSerializationContext.h: Added.
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::create):
        (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::createObjectStore):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::create):
        (WebCore::IDBServer::MemoryObjectStore::MemoryObjectStore):
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        (WebCore::IDBServer::MemoryObjectStore::populateIndexWithExistingRecords):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::~SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateOneIndexForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::initializeVM): Deleted.
        (WebCore::IDBServer::SQLiteIDBBackingStore::vm): Deleted.
        (WebCore::IDBServer::SQLiteIDBBackingStore::globalObject): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadVM): Deleted.
        (WebCore::IDBServer::UniqueIDBDatabase::databaseThreadExecState): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Sources.txt:

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

        [ContentChangeObserver] Dispatch synthetic click when the visibility candidate element becomes hidden again.
        https://bugs.webkit.org/show_bug.cgi?id=200773
        <rdar://problem/54351728>

        Reviewed by Simon Fraser.

        This patch fixes the case when the candidate element (going from hidden to visible) becomes hidden by the end of the observation window. It essentially means that no visible change has happened
        and we should proceed with dispatching the synthetic click event.
        We now keep track of the candidate element and reset the visiblity state when it loses its renderer.

        Test: fast/events/touch/ios/content-observation/going-from-hidden-to-visible-and-to-hidden.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::didAddTransition):
        (WebCore::ContentChangeObserver::didFinishTransition):
        (WebCore::ContentChangeObserver::didInstallDOMTimer):
        (WebCore::ContentChangeObserver::reset):
        (WebCore::ContentChangeObserver::rendererWillBeDestroyed):
        (WebCore::ContentChangeObserver::contentVisibilityDidChange):
        (WebCore::ContentChangeObserver::touchEventDidStart):
        (WebCore::ContentChangeObserver::touchEventDidFinish):
        (WebCore::ContentChangeObserver::mouseMovedDidStart):
        (WebCore::ContentChangeObserver::mouseMovedDidFinish):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
        (WebCore::ContentChangeObserver::hasDeterminateState const): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::hasObservedTransition const):
        (WebCore::ContentChangeObserver::setTouchEventIsBeingDispatched):
        (WebCore::ContentChangeObserver::isTouchEventBeingDispatched const):
        (WebCore::ContentChangeObserver::setMouseMovedEventIsBeingDispatched):
        (WebCore::ContentChangeObserver::isMouseMovedEventBeingDispatched const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):

2019-08-15  Justin Fan  <justin_fan@apple.com>

        Unreviewed suggested patch follow-up to https://bugs.webkit.org/show_bug.cgi?id=200740.

        * platform/graphics/gpu/GPURequestAdapterOptions.h:
        (): Deleted.

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

        [FTW] Support web fonts
        https://bugs.webkit.org/show_bug.cgi?id=200771
        <rdar://problem/54350291>

        Reviewed by Dean Jackson.

        The current code path for handling web fonts uses 'AddFontMemResourceEx'. Unfortunately, this only updates the font caches used by GDI, and is not exposed to DirectWrite.

        This patch does the following:
        1. Moves some code into a new DirectWriteUtilities file, similar to how Direct2D is handled, so we
           can share code in more places.
        2. After adding the font to GDI, it adds the font information to the DirectWrite font cache.
        3. Add logic to check the overall system DirectWrite fonts, as well as the custom font cache used
           for downloaded fonts.

        * PlatformFTW.cmake: Add DirectWriteUtilities.cpp
        * css/CSSFontFaceSource.cpp:
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedSVGFont.cpp:
        * platform/graphics/Font.cpp:
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameAndActivateFont):
        * platform/graphics/win/DirectWriteUtilities.cpp: Added.
        * platform/graphics/win/DirectWriteUtilities.h: Added.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont):
        * platform/graphics/win/FontCascadeDirect2D.cpp:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataDirect2D.cpp:
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::createFallbackFont):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        (WebCore::Font::systemDWriteFactory): Deleted.
        (WebCore::Font::systemDWriteGdiInterop): Deleted.
        * platform/graphics/win/SimpleFontDataWin.cpp:

2019-08-15  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Adopt -preventDisplaySleepForVideoPlayback
        https://bugs.webkit.org/show_bug.cgi?id=200774

        Reviewed by Eric Carlson.

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

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

        [WHLSL] Don't accept operator&& or operator|| in the Lexer
        https://bugs.webkit.org/show_bug.cgi?id=200785

        Reviewed by Saam Barati.

        Implementing && or || as function calls would lose us short-circuiting.

        2 new tests in LayoutTests/webgpu/whlsl/lexing.html

        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):

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

        Unreviewed. Debug build fix after r248730.

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):

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

        Web Inspector: support `console.screenshot` with detached <canvas>
        https://bugs.webkit.org/show_bug.cgi?id=200723

        Reviewed by Joseph Pecoraro.

        * page/PageConsoleClient.cpp:
        (WebCore::snapshotCanvas): Added.
        (WebCore::PageConsoleClient::screenshot):

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

        Some improvements on web storage
        https://bugs.webkit.org/show_bug.cgi?id=200373

        Reviewed by Geoffrey Garen.

        Remove storage type EphemeralLocalStorage, which is used for localStorage in ephemeral session, and use 
        LocalStorage instead.

        Add SessionID to StorageNamespace to make StorageNamespace session-specific.

        No new test, updating existing tests for new behavior.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyStorageNamespaceProvider::createLocalStorageNamespace):
        (WebCore::EmptyStorageNamespaceProvider::createTransientLocalStorageNamespace):
        (WebCore::EmptyStorageNamespaceProvider::createEphemeralLocalStorageNamespace): Deleted.

        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow const): ephemeral localStorage of different windows will connect to the same 
        StorageArea in network process, so no need to copy from parent window to child window.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::prewarmLocalStorageIfNecessary): localStorage will be prewarmed in network process in the
        initialization of StorageAreaMap.

        * page/Page.cpp:
        (WebCore::m_applicationManifest):
        (WebCore::Page::~Page):
        (WebCore::Page::setSessionID):
        (WebCore::Page::ephemeralLocalStorage): Deleted.
        (WebCore::Page::setEphemeralLocalStorage): Deleted.
        (WebCore::Page::setStorageNamespaceProvider): Deleted.
        * page/Page.h:
        (WebCore::Page::storageNamespaceProvider):
        * storage/Storage.cpp:
        (WebCore::Storage::prewarm): Deleted.
        * storage/Storage.h:
        * storage/StorageArea.h:
        (WebCore::StorageArea::closeDatabaseIfIdle):
        (WebCore::StorageArea::prewarm): Deleted.
        * storage/StorageNamespace.h:
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::~StorageNamespaceProvider):
        (WebCore::StorageNamespaceProvider::localStorageArea):
        (WebCore::StorageNamespaceProvider::localStorageNamespace):
        (WebCore::StorageNamespaceProvider::transientLocalStorageNamespace):
        (WebCore::StorageNamespaceProvider::enableLegacyPrivateBrowsingForTesting): change SessionID of storageNamespace
        and update every StorageArea in this namespace.
        (WebCore::StorageNamespaceProvider::addPage): Deleted.
        (WebCore::StorageNamespaceProvider::removePage): Deleted.
        * storage/StorageNamespaceProvider.h:
        * storage/StorageType.h:
        (WebCore::isLocalStorage):

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

        [WHLSL] Make length, clamp, operator+, operator-, operator*, operator/, operator[], operator[]=, operator.xy, operator.xy=, native
        https://bugs.webkit.org/show_bug.cgi?id=200700

        Reviewed by Robin Morisset.

        This makes us 50% faster in compute_boids.

        Tests: webgpu/whlsl/clamp-stdlib.html
               webgpu/whlsl/length-stdlib.html
               webgpu/whlsl/operator-div.html
               webgpu/whlsl/operator-minus.html
               webgpu/whlsl/operator-plus.html
               webgpu/whlsl/operator-times.html
               webgpu/whlsl/operator-vector-assign.html
               webgpu/whlsl/operator-vector-load.html
               webgpu/whlsl/operator-xy.html

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        (WebCore::WHLSL::includeStandardLibrary):

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

        [WHLSL] Trivial clean-up of the MSL code generated
        https://bugs.webkit.org/show_bug.cgi?id=200525

        Reviewed by Darin Adler.

        Emit simpler code for ternary expressions
        Remove duplicate {} around functions

        No new tests as it is covered by the existing ones.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):

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

        Always create a Document with a valid SessionID
        https://bugs.webkit.org/show_bug.cgi?id=200727

        Reviewed by Alex Christensen.

        Pass a valid SessionID to the Document constructor.
        This allows getting us closer to use SessionID like ObjectIdentifier.
        Add a SessionID getter from Frame and use it when constructing a Document.
        Otherwise, retrieve the SessionID from the corresponding context.
        No change of behavior.

        * dom/DOMImplementation.cpp:
        (WebCore::createXMLDocument):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::m_undoManager):
        (WebCore::Document::create):
        (WebCore::Document::createNonRenderedPlaceholder):
        (WebCore::Document::cloneDocumentWithoutChildren const):
        (WebCore::Document::ensureTemplateDocument):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createNonRenderedPlaceholder): Deleted.
        * dom/XMLDocument.h:
        (WebCore::XMLDocument::create):
        (WebCore::XMLDocument::createXHTML):
        (WebCore::XMLDocument::XMLDocument):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * html/FTPDirectoryDocument.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createSynthesizedDocument):
        (WebCore::HTMLDocument::HTMLDocument):
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren const):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::createSynthesizedDocument): Deleted.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * html/MediaDocument.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * html/PluginDocument.h:
        * html/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * html/TextDocument.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::SinkDocument):
        * loader/SinkDocument.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData):
        * page/Frame.cpp:
        (WebCore::Frame::sessionID const):
        * page/Frame.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        (WebCore::SVGDocument::cloneDocumentWithoutChildren const):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/DOMParser.h:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.cpp:
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2019-08-15  Antti Koivisto  <antti@apple.com>

        Negative size box with border radius causes hang under WebCore::approximateAsRegion
        https://bugs.webkit.org/show_bug.cgi?id=200769
        <rdar://problem/53380674>

        Reviewed by Alex Christensen.

        If a box's width or height computes negative the rounded border rect will also be negative.
        This caused near-infinite loop during rounded border region approximation.

        Test: fast/css/border-radius-negative-size.html

        * platform/graphics/RoundedRect.cpp:
        (WebCore::approximateAsRegion):

        Bail out if the region is empty (which includes negative sizes).
        For safety also limit the number of rectangles we generate for corner arc approximation.

2019-08-15  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Deal with slow buffer consumption in GStreamerMediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=200633

        Refactoring the GStreamerMediaStreamSource factoring out streams specific
        data in a dedicated structure.

        Reviewed by Philippe Normand.

        No new tests, since I do not see how to reproduce that in a test in a simple way,
        this aims at enhancing user experience when running under high load.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::_WebKitMediaStreamSrc::SourceData::reset):
        (WebCore::_WebKitMediaStreamSrc::SourceData::src):
        (WebCore::_WebKitMediaStreamSrc::SourceData::setSrc):
        (WebCore::_WebKitMediaStreamSrc::SourceData::isUsed):
        (WebCore::_WebKitMediaStreamSrc::SourceData::pushSample):
        (WebCore::webkitMediaStreamSrcDispose):
        (WebCore::webkit_media_stream_src_init):
        (WebCore::webkitMediaStreamSrcNeedDataCb):
        (WebCore::webkitMediaStreamSrcEnoughDataCb):
        (WebCore::webkitMediaStreamSrcSetupAppSrc):
        (WebCore::webkitMediaStreamSrcRemoveTrackByType):
        (WebCore::webkitMediaStreamSrcPushVideoSample):
        (WebCore::webkitMediaStreamSrcPushAudioSample):

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

        Make mock libwebrtc tests run with unified plan
        https://bugs.webkit.org/show_bug.cgi?id=200713

        Reviewed by Alex Christensen.

        Update mock endpoint to pass mock webrtc tests with unified plan.
        This requires implementing support for mock transceivers.
        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::useMockRTCPeerConnectionFactory):
        Update assert to mandate unified plan.
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::~MockLibWebRTCPeerConnection):
        (WebCore::MockLibWebRTCPeerConnection::GetTransceivers const):
        (WebCore::MockLibWebRTCPeerConnection::AddTrack):
        (WebCore::MockLibWebRTCPeerConnection::RemoveTrack):
        (WebCore::MockLibWebRTCPeerConnection::CreateOffer):
        (WebCore::MockLibWebRTCPeerConnection::CreateAnswer):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockRtpSender::MockRtpSender):
        (WebCore::MockRtpReceiver::id const):
        (WebCore::MockRtpReceiver::GetParameters const):
        (WebCore::MockRtpReceiver::SetParameters):
        (WebCore::MockRtpReceiver::SetObserver):
        (WebCore::MockRtpTransceiver::MockRtpTransceiver):
        (WebCore::MockLibWebRTCPeerConnection::MockLibWebRTCPeerConnection):
        (WebCore::MockLibWebRTCPeerConnection::gotLocalDescription):

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

        Unreviewed WinCairo build fix after r248713.

        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):

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

        Use ObjectIdentifier<FrameIdentifierType> for frameIDs
        https://bugs.webkit.org/show_bug.cgi?id=199986

        Reviewed by Ryosuke Niwa.

        Use the strongly-typed FrameIdentifier instead of uint64_t as frame identifiers everywhere.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::cookies const):
        (WebCore::CookieJar::setCookies):
        (WebCore::CookieJar::cookieRequestHeaderFieldValue const):
        (WebCore::CookieJar::getRawCookies const):
        * loader/CookieJar.h:
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/NavigationAction.cpp:
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::Requester::frameID const):
        * page/ChromeClient.h:
        * page/GlobalFrameIdentifier.h:
        (WebCore::GlobalFrameIdentifier::decode):
        * platform/network/CookieRequestHeaderFieldProxy.h:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::hasStorageAccess const):
        (WebCore::NetworkStorageSession::grantStorageAccess):
        (WebCore::NetworkStorageSession::removeStorageAccessForFrame):
        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::cookiesForURL):
        (WebCore::cookiesForSession):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):

2019-08-15  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC]: openh264 encoder bitrate is in bits per second
        https://bugs.webkit.org/show_bug.cgi?id=200578

        Reviewed by Philippe Normand.

        Not really testable as is.

        * platform/mediastream/libwebrtc/GStreamerVideoEncoder.cpp:
        (gst_webrtc_video_encoder_class_init):

2019-08-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        Error thrown during "acceptNode" lookup is overridden
        https://bugs.webkit.org/show_bug.cgi?id=200735

        Reviewed by Ross Kirsling.

        Test: imported/w3c/web-platform-tests/dom/traversal/TreeWalker-acceptNode-filter-expected.html

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback): Catch and return exception of callback->get call.

2019-08-14  Myles C. Maxfield  <mmaxfield@apple.com>

        [WHLSL] Variables shouldn't be able to have void type
        https://bugs.webkit.org/show_bug.cgi?id=200751

        Reviewed by Robin Morisset.

        Trivial fix. Found by https://github.com/gpuweb/WHLSL/issues/320.

        Test: webgpu/whlsl/void-variable-parameter.html

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):

2019-08-14  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Use of WebGPU should not force discrete GPU
        https://bugs.webkit.org/show_bug.cgi?id=200740

        Reviewed by Myles C. Maxfield.

        Request a low-power device from Metal by default.

        No change in testable behavior.

        * platform/graphics/gpu/GPURequestAdapterOptions.h:
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::tryCreate):

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

        Potentially non thread-safe usage of WebCore::MediaSample
        https://bugs.webkit.org/show_bug.cgi?id=200734

        Reviewed by Eric Carlson.

        ImageSource is a main thread object but ends up getting passed to a background queue for image
        decoding. In some cases, the background queue ends up being the last one holding a ref to the
        ImageSource which ends up destroying the ImageSource on a background thread. Doing so is not
        safe as shown by the crash.

        To address the issue, have ImageSource subclass ThreadSafeRefCounted<ImageSource, WTF::DestructionThread::Main>
        so that it is always destroyed on the main thread.

        No new tests, currently crashing on the debug bots.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::~ImageSource):
        * platform/graphics/ImageSource.h:

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

        Unreviewed, rolling out r248526.

        Caused two IndexedDB perf tests to fail

        Reverted changeset:

        "Remove IDB-specific quota"
        https://bugs.webkit.org/show_bug.cgi?id=196545
        https://trac.webkit.org/changeset/248526

2019-08-14  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13
        https://bugs.webkit.org/show_bug.cgi?id=200694
        <rdar://problem/54278851>

        Reviewed by Youenn Fablet.

        Update conditionals that reference __MAC_OS_X_VERSION_MIN_REQUIRED and
        __MAC_OS_X_VERSION_MAX_ALLOWED, assuming that they both have values >=
        101300. This means that expressions like
        "__MAC_OS_X_VERSION_MIN_REQUIRED < 101300" are always False and
        "__MAC_OS_X_VERSION_MIN_REQUIRED >= 101300" are always True.

        No new tests -- no added or changed functionality.

        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::subLocality):
        (WebCore::setSubLocality):
        (WebCore::subAdministrativeArea):
        (WebCore::setSubAdministrativeArea):
        * WebCorePrefix.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]):
        * platform/PlatformScreen.h:
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::initialize):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesLastModifiedTime const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::liveUpdateInterval const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::variationCapabilitiesForFontDescriptor):
        (WebCore::FontCache::lastResortFallbackFont):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::setGPUByRegistryID):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::screenDidChange):
        (WebCore::setGPUByDisplayMask): Deleted.
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::isAcceptableDevice):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):
        (WebCore::createDragImageForLink):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        (WebCore::gpuIDForDisplayMask):
        * platform/mac/WebPlaybackControlsManager.h:
        * platform/mac/WebPlaybackControlsManager.mm:
        (toAVTouchBarMediaSelectionOptionType):
        (mediaSelectionOptions):
        (-[WebPlaybackControlsManager generateFunctionBarThumbnailsForTimes:size:completionHandler:]): Deleted.
        (-[WebPlaybackControlsManager generateFunctionBarAudioAmplitudeSamples:completionHandler:]): Deleted.
        (-[WebPlaybackControlsManager canBeginFunctionBarScrubbing]): Deleted.
        (-[WebPlaybackControlsManager beginFunctionBarScrubbing]): Deleted.
        (-[WebPlaybackControlsManager endFunctionBarScrubbing]): Deleted.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const):
        (WebCore::RenderThemeMac::systemColor const):

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

        [ContentChangeObserver] Any previously destroyed renderer should not be considered a candidate for content observation.
        https://bugs.webkit.org/show_bug.cgi?id=200732
        <rdar://problem/54319654>

        Reviewed by Simon Fraser.

        A visible element should not be considered a candidate to content change observation when it loses the visiblity status momentarily.
        This patch extends the check of re-constructed renderers for the duration of the content change observation (as opposed to just a single render tree update cycle)

        Test: fast/events/touch/ios/content-observation/visible-content-gains-new-renderer2.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::reset):
        (WebCore::ContentChangeObserver::rendererWillBeDestroyed):
        (WebCore::ContentChangeObserver::adjustObservedState):
        (WebCore::ContentChangeObserver::renderTreeUpdateDidStart): Deleted.
        (WebCore::ContentChangeObserver::renderTreeUpdateDidFinish): Deleted.
        (WebCore::ContentChangeObserver::stopContentObservation): Deleted.
        (WebCore::ContentChangeObserver::willDestroyRenderer): Deleted.
        (WebCore::ContentChangeObserver::RenderTreeUpdateScope::RenderTreeUpdateScope): Deleted.
        (WebCore::ContentChangeObserver::RenderTreeUpdateScope::~RenderTreeUpdateScope): Deleted.
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateRenderTree):
        (WebCore::RenderTreeUpdater::tearDownRenderers):

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

        [Cocoa] Add some WKA extension points
        https://bugs.webkit.org/show_bug.cgi?id=200506
        <rdar://problem/51682474>

        Reviewed by Tim Horton.

        * Modules/applepay/ApplePayPayment.h:
        * Modules/applepay/ApplePayPaymentMethod.h:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::finishConverting):
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/cocoa/PaymentCocoa.mm:
        (WebCore::convert):
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        (WebCore::finishConverting):
        (WebCore::convert):

2019-08-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: support `console.screenshot` with dataURL strings
        https://bugs.webkit.org/show_bug.cgi?id=199307

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/console-screenshot.html

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

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

        [ContentChangeObserver] Stop content change observation explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=200689
        <rdar://problem/54274887>

        Reviewed by Simon Fraser.

        This helps to clean up some temporary state. There are 2 exit points when content observation needs to stop.
        1. Soon after the synthetic mouseMove event when we decide not to continue with further observation (see WebPage::handleSyntheticClick)
        2. When we asynchronously notify the client about the visible content change after all pending events have been processed.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::stopContentObservation):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::stopContentObservation const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::observedContentChange const): Deleted.

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

        Update Worker::notifyFinished to not use emptySessionID
        https://bugs.webkit.org/show_bug.cgi?id=200710

        Reviewed by Alex Christensen.

        No change of behavior.

        Exit early if context is gone since we should not dispatch events or create worker.
        Make sure to unset pending activity using a ScopeExit.

        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):

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

        [LFC][TFC] Implement TableFormattingContext::computePreferredWidthForColumns
        https://bugs.webkit.org/show_bug.cgi?id=200701
        <rdar://problem/54287828>

        Reviewed by Antti Koivisto.

        Compute cells' min/max width first.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns const):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::slot):
        (WebCore::Layout::TableGrid::appendCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::cells):

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

        ThreadableBlobRegistry::blobSize should take a SessionID as parameter
        https://bugs.webkit.org/show_bug.cgi?id=200671

        Reviewed by Alex Christensen.

        Update FormData to compute its byte size based on a SessionID.
        We keep a WK1 byte length computation for FormDataElement.
        Update FormData call sites accordingly.
        Update CacheStorageConnection to implement a SessionID getter.
        No change of behavior.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::computeRealBodySize):
        (WebCore::computeRealBodySize): Deleted.
        * Modules/cache/CacheStorageConnection.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::sessionID const):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::size const):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::blobSize):
        * fileapi/ThreadableBlobRegistry.h:
        * loader/cache/KeepaliveRequestTracker.cpp:
        (WebCore::KeepaliveRequestTracker::tryRegisterRequest):
        (WebCore::KeepaliveRequestTracker::registerRequest):
        (WebCore::KeepaliveRequestTracker::unregisterRequest):
        * page/CacheStorageProvider.h:
        (WebCore::CacheStorageProvider::createCacheStorageConnection):
        * platform/network/BlobRegistry.h:
        * platform/network/FormData.cpp:
        (WebCore::computeLengthInBytes):
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormData::lengthInBytes const):
        * platform/network/FormData.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::createHTTPBodyCFReadStream):
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::m_sessionID):
        (WebCore::CurlFormDataStream::computeContentLength):
        (WebCore::CurlFormDataStream::CurlFormDataStream): Deleted.
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

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

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

        * dom/Element.cpp:
        (WebCore::Element::nearestScrollingNodeIDUsingTouchOverflowScrolling const): Deleted.

        As a follow-up also remove this now-unused function.

        * dom/Element.h:

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

        Remove SessionID default constructor
        https://bugs.webkit.org/show_bug.cgi?id=200669

        Reviewed by Alex Christensen.

        Remove SessionID default constructor

        Update CookieRequestHeaderFiledProxy decoder to use an Optional<SessionID>.
        Update ServiceWorkerContextData accordingly.
        Update RegistrationStore/RegistrationDatabase to store a map of changed registration as follows:
        - The RegistrationStore map contains an Optional value. In case of removing, the map will contain WTF::nullopt.
        - RegistrationDatabase computes two vectors for removed registrations and updated registrations.

        No change of behavior.

        * dom/Document.cpp:
        * loader/CookieJar.cpp:
        (WebCore::CookieJar::cookieRequestHeaderFieldProxy):
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::decode):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::pushChanges):
        (WebCore::RegistrationDatabase::doPushChanges):
        * workers/service/server/RegistrationDatabase.h:
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::pushChangesToDatabase):
        (WebCore::RegistrationStore::clearAll):
        (WebCore::RegistrationStore::flushChanges):
        (WebCore::RegistrationStore::startSuspension):
        (WebCore::RegistrationStore::removeRegistration):
        * workers/service/server/RegistrationStore.h:

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

        Make privateBrowsingStateDidChange take an explicit SessionID
        https://bugs.webkit.org/show_bug.cgi?id=200666

        Reviewed by Alex Christensen.

        Instead of stating that the page session ID changed and get it from the page,
        pass it directly to privateBrowsingStateDidChange.
        No change of behavior.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange):
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::privateBrowsingStateDidChange):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::privateBrowsingStateDidChange):
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::setSessionID):

2019-08-13  Sam Weinig  <weinig@apple.com>

        Fix the WPE build.

        * platform/libwpe/PlatformKeyboardEventLibWPE.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::singleCharacterString):
        Update for rename from StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32).

2019-08-13  Sam Weinig  <weinig@apple.com>

        Rename StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32) to avoid accidental change in behavior when replacing append with flexibleAppend
        https://bugs.webkit.org/show_bug.cgi?id=200675

        Reviewed by Darin Adler.

        * bindings/js/JSDOMConvertStrings.cpp:
        (WebCore::stringToUSVString):
        * css/CSSMarkup.cpp:
        (WebCore::serializeCharacter):
        (WebCore::serializeIdentifier):
        (WebCore::serializeString):
        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::consumeStringTokenUntil):
        (WebCore::CSSTokenizer::consumeUrlToken):
        (WebCore::CSSTokenizer::consumeName):
        * html/parser/HTMLEntityParser.cpp:
        (WebCore::HTMLEntityParser::consumeNamedEntity):
        * platform/mock/mediasource/MockBox.cpp:
        (WebCore::MockBox::peekType):
        (WebCore::MockTrackBox::MockTrackBox):
        * rendering/RenderText.cpp:
        (WebCore::capitalize):
        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference):
        Update for rename from StringBuilder::append(UChar32) to StringBuilder::appendCharacter(UChar32).

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

        [WHLSL] Make lexing faster
        https://bugs.webkit.org/show_bug.cgi?id=200596

        Reviewed by Myles C. Maxfield.

        Previously, our lexer would just branch on a series of string compares.
        We'd have code like this to match keywords:
        ```
        ...
        if (matchCurrent("false"))
            return FalseToken;
        if (matchCurrent("true"))
            return TrueToken;
        ...
        ```
        
        However, this is extremely inefficient. We now lex using a trie, which means
        we never backtrack in the lexer.
        
        This patch is a 3ms speedup in compute_boids.

        Tests: webgpu/whlsl/lexing.html
               webgpu/whlsl/literals.html

        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::isValidIdentifierStart):
        (WebCore::WHLSL::isValidNonStartingIdentifierChar):
        (WebCore::WHLSL::isHexadecimalCharacter):
        (WebCore::WHLSL::isDigit):
        (WebCore::WHLSL::Lexer::consumeTokenFromStream):
        (WebCore::WHLSL::Lexer::recognizeKeyword): Deleted.
        (WebCore::WHLSL::Lexer::coreDecimalIntLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::decimalIntLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::decimalUintLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::coreHexadecimalIntLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::hexadecimalIntLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::hexadecimalUintLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::intLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::uintLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::digit const): Deleted.
        (WebCore::WHLSL::Lexer::digitStar const): Deleted.
        (WebCore::WHLSL::Lexer::character const): Deleted.
        (WebCore::WHLSL::Lexer::coreFloatLiteralType1 const): Deleted.
        (WebCore::WHLSL::Lexer::coreFloatLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::floatLiteral const): Deleted.
        (WebCore::WHLSL::Lexer::validIdentifier const): Deleted.
        (WebCore::WHLSL::Lexer::identifier const): Deleted.
        (WebCore::WHLSL::Lexer::completeOperatorName const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::Lexer::string const): Deleted.

2019-08-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        shouldRespectImageOrientation should be a value in ImageOrientation
        https://bugs.webkit.org/show_bug.cgi?id=200553

        Reviewed by Simon Fraser.

        This patch is a step towards implementing the css image-orientation.

        Instead of having ImageOrientationEnum, ImageOrientationDescription,
        ImageOrientation and RespectImageOrientationEnum we are going to have a
        single structure named 'ImageOrientation' which is a wrapper for the enum
        type "Orientation".

        This structure will have a constructor and casting operator such that
        assigning an enum value and comparing with an enum value will be done
        implicitly.

        RespectImageOrientation is represented as a new enum value 'FromImage'.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ImageOrientation const):
        (WebCore::CSSPrimitiveValue::operator ImageOrientationEnum const): Deleted.
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createDragImage const):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer const):
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * platform/DragImage.cpp:
        (WebCore::createDragImageFromSnapshot):
        (WebCore::createDragImageFromImage):
        * platform/DragImage.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/CustomPaintImage.cpp:
        (WebCore::CustomPaintImage::draw):
        * platform/graphics/CustomPaintImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingOptions::ImagePaintingOptions):
        * platform/graphics/GraphicsContextImpl.cpp:
        (WebCore::GraphicsContextImpl::drawImageImpl):
        (WebCore::GraphicsContextImpl::drawTiledImageImpl):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageFrame.h:
        * platform/graphics/ImageOrientation.cpp: Removed.
        * platform/graphics/ImageOrientation.h:
        (WebCore::ImageOrientation::ImageOrientation):
        (WebCore::ImageOrientation::fromEXIFValue):
        (WebCore::ImageOrientation::operator Orientation const):
        (WebCore::ImageOrientation::usesWidthAsHeight const):
        (WebCore::ImageOrientation::transformFromDefault const):
        (WebCore::ImageOrientation::isValidOrientation):
        (WebCore::ImageOrientation::isValidEXIFOrientation):
        (WebCore::ImageOrientationDescription::ImageOrientationDescription): Deleted.
        (WebCore::ImageOrientationDescription::setRespectImageOrientation): Deleted.
        (WebCore::ImageOrientationDescription::respectImageOrientation): Deleted.
        (WebCore::ImageOrientationDescription::setImageOrientationEnum): Deleted.
        (WebCore::ImageOrientationDescription::imageOrientation): Deleted.
        (WebCore::ImageOrientation::operator ImageOrientationEnum const): Deleted.
        (WebCore::ImageOrientation::operator== const): Deleted.
        (WebCore::ImageOrientation::operator!= const): Deleted.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::dump):
        * platform/graphics/NamedImageGeneratedImage.cpp:
        (WebCore::NamedImageGeneratedImage::draw):
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::frameOrientationAtIndex const):
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowLayerBuffer):
        (WebCore::Cairo::drawShadowImage):
        (WebCore::Cairo::drawNativeImage):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::drawNativeImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::orientationFromProperties):
        (WebCore::ImageDecoderCG::frameOrientationAtIndex const):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::drawNativeImage):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        (WebCore::MediaPlayerPrivateGStreamerBase::setVideoSourceOrientation):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTextureMapperFlags):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::updateTextureSpaceMatrix):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::drawNativeImage):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::frameOrientationAtIndex const):
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::drawNativeImage):
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageFromImage):
        * platform/image-decoders/ScalableImageDecoderFrame.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readImageOrientation):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageFromImage):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageCGWin.cpp:
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageCairoWin.cpp:
        (WebCore::createDragImageFromImage):
        * platform/win/DragImageDirect2D.cpp:
        (WebCore::createDragImageFromImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::imageOrientation const):
        (WebCore::RenderElement::shouldRespectImageOrientation const): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage const):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setImageOrientation):
        (WebCore::RenderStyle::initialImageOrientation):
        (WebCore::RenderStyle::imageOrientation const):
        * rendering/style/StyleRareInheritedData.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        * svg/graphics/SVGImageForContainer.h:

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

        [WHLSL] Move Qualifiers and Semantic from VariableDeclaration to VariableDeclaration::RareData
        https://bugs.webkit.org/show_bug.cgi?id=200696

        Reviewed by Myles C. Maxfield.

        Shrinking VariableDeclaration by 16 bytes in the common case.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:

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

        [WHLSL] Don't generate empty comma expressions for bare ';'
        https://bugs.webkit.org/show_bug.cgi?id=200681

        Reviewed by Myles C. Maxfield.

        Currently we emit a comma expression with no sub-expression for bare ';', as well as for the initialization of for loops with no initializers.
        This crashes the Checker, as it tries to access the last sub-expression of comma expressions.
        Instead we should generate an empty statement block for that case.

        This problem was found (and originally fixed before the commit was reverted) in https://bugs.webkit.org/show_bug.cgi?id=199726.
        I am just isolating the fix here for easier review and debugging.

        New test: LayoutTests/webgpu/whlsl/for-loop.html

        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        (WebCore::WHLSL::ASTDumper::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseStatement):
        (WebCore::WHLSL::Parser::parseEffectfulExpression):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):

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

        Focus rings are black
        https://bugs.webkit.org/show_bug.cgi?id=200593
        <rdar://problem/54145925>

        Reviewed by Wenson Hsieh.

        Work around <rdar://problem/50838886> and make focus rings a pretty blue.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformFocusRingColor const):

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

        [ContentChangeObserver] adjustStateAndNotifyContentChangeIfNeeded should check isObservationTimeWindowActive()
        https://bugs.webkit.org/show_bug.cgi?id=200687
        <rdar://problem/54271221>

        Reviewed by Simon Fraser.

        Move the check to adjustStateAndNotifyContentChangeIfNeeded.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::adjustObservedState):

2019-08-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Switch NSURLSession on top navigation to prevalent resource with user interaction
        https://bugs.webkit.org/show_bug.cgi?id=200642
        <rdar://problem/53962073>

        Reviewed by Alex Christensen.

        Tests: http/tests/resourceLoadStatistics/do-not-switch-session-on-navigation-to-prevalent-without-interaction.html
               http/tests/resourceLoadStatistics/switch-session-on-navigation-to-prevalent-with-interaction.html

        This patch splits m_registrableDomainsToBlockCookieFor in WebCore:NetworkStorageSession into:
        - m_registrableDomainsToBlockAndDeleteCookiesFor
        - m_registrableDomainsToBlockButKeepCookiesFor
        ... to support different network load policies based on this distinction.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setITPSessionSwitchingEnabled):
        (WebCore::RuntimeEnabledFeatures::itpSessionSwitchingEnabled const):
        * page/Settings.yaml:
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookies const):
        (WebCore::NetworkStorageSession::shouldBlockThirdPartyCookiesButKeepFirstPartyCookiesFor const):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockAndDeleteCookiesFor):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockButKeepCookiesFor):
        (WebCore::NetworkStorageSession::removePrevalentDomains):
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor): Deleted.
        * platform/network/NetworkStorageSession.h:

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

        [ContentChangeObserver] setShouldObserveDOMTimerScheduling and setShouldObserveTransitions are always called in pairs.
        https://bugs.webkit.org/show_bug.cgi?id=200685
        <rdar://problem/54269778>

        Reviewed by Simon Fraser.

        Let's merge these 2 functions.

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::stopObservingPendingActivities):
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/ContentChangeObserver.h:
        (WebCore::ContentChangeObserver::isObservingDOMTimerScheduling const):
        (WebCore::ContentChangeObserver::isObservingContentChanges const):
        (WebCore::ContentChangeObserver::setShouldObserveDOMTimerSchedulingAndTransitions):
        (WebCore::ContentChangeObserver::setShouldObserveDOMTimerScheduling): Deleted.
        (WebCore::ContentChangeObserver::setShouldObserveTransitions): Deleted.

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

        [ContentChangeObserver] Scope events in adjustObservedState
        https://bugs.webkit.org/show_bug.cgi?id=200679
        <rdar://problem/54266172>

        Reviewed by Simon Fraser.

        This is in preparation for simplifying adjustObservedState.

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

2019-08-13  Justin Fan  <justin_fan@apple.com>

        [WebGPU] Improve GPUBindGroup performance using one device-shared argument MTLBuffer
        https://bugs.webkit.org/show_bug.cgi?id=200606

        Reviewed by Myles C. Maxfield.

        Manage all argument buffer storage for GPUBindGroups in one large MTLBuffer for a GPUDevice.
        Vastly improves GPUProgrammablePassEncoder.setBindGroup performance; in alpha MotionMark WebGPU benchmark,
        score improves from ~12000 to ~90000.

        No expected change in WebGPU behavior, though bind-groups.html has been updated to cover more cases.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBindGroup const):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/GPUBindGroup.h: No longer manages one unique MTLBuffer per MTLArgumentEncoder.
        (WebCore::GPUBindGroup::argumentBuffer const): Delegates to GPUBindGroupAllocator for current argument buffer.
        (WebCore::GPUBindGroup::vertexArgsBuffer const): Deleted.
        (WebCore::GPUBindGroup::fragmentArgsBuffer const): Deleted.
        (WebCore::GPUBindGroup::computeArgsBuffer const): Deleted.
        * platform/graphics/gpu/GPUBindGroupAllocator.h: Added. Allocates MTLBuffer for and assigns offsets for argument buffers.
        (WebCore::GPUBindGroupAllocator::argumentBuffer const):
        * platform/graphics/gpu/GPUBindGroupLayout.h:
        * platform/graphics/gpu/GPUBuffer.h: Move MTLResourceUsage calculation to GPUBuffer construction.
        (WebCore::GPUBuffer::platformUsage const):
        * platform/graphics/gpu/GPUComputePassEncoder.h: Prevent any potiential narrowing issues, as offset can be large.
        * platform/graphics/gpu/GPUDevice.cpp: Now owns a GPUBindGroupAllocator for owning all its argument buffer storage.
        (WebCore::GPUDevice::tryCreateBindGroup const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUProgrammablePassEncoder.h:
        (WebCore::GPUProgrammablePassEncoder::setVertexBuffer):
        (WebCore::GPUProgrammablePassEncoder::setFragmentBuffer):
        (WebCore::GPUProgrammablePassEncoder::setComputeBuffer):
        * platform/graphics/gpu/GPURenderPassEncoder.h:
        * platform/graphics/gpu/GPUTexture.h: Move MTLResourceUsage calculation to GPUTexture construction.
        (WebCore::GPUTexture::platformUsage const):
        * platform/graphics/gpu/cocoa/GPUBindGroupAllocatorMetal.mm: Added.
        (WebCore::GPUBindGroupAllocator::create):
        (WebCore::GPUBindGroupAllocator::GPUBindGroupAllocator):
        (WebCore::GPUBindGroupAllocator::allocateAndSetEncoders): Ensures that MTLArgumentEncoders have appropriate allocation for encoding.
        (WebCore::GPUBindGroupAllocator::reallocate): Create new MTLBuffer large enough for new encoder requirement, and copy over old argument buffer data.
        (WebCore::GPUBindGroupAllocator::tryReset): For now, resets argument buffer if all GPUBindGroups created with this allocator are destroyed.
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::tryGetResourceAsBufferBinding): Add size check.
        (WebCore::GPUBindGroup::tryCreate): No longer owns new MTLBuffers. Requests argument buffer space from GPUBindGroupAllocator.
        (WebCore::GPUBindGroup::GPUBindGroup):
        (WebCore::GPUBindGroup::~GPUBindGroup): Remind allocator to check for possible reset.
        (WebCore::tryCreateArgumentBuffer): Deleted.
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::GPUBuffer):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm:
        (WebCore::GPUComputePassEncoder::setComputeBuffer):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::setBindGroup): No need to recalculate usage every time. Set appropriate argument buffer and offsets for new bind group model.
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::setFragmentBuffer):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture):

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

        Event region collection should take clipping into account
        https://bugs.webkit.org/show_bug.cgi?id=200668
        <rdar://problem/53826561>

        Reviewed by Simon Fraser.

        Test: pointerevents/ios/touch-action-region-clip-and-transform.html

        * rendering/EventRegion.cpp:
        (WebCore::EventRegionContext::pushClip):
        (WebCore::EventRegionContext::popClip):

        Maintain clip rect stack.

        (WebCore::EventRegionContext::unite):

        Apply both transforms and clipping.

        * rendering/EventRegion.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):

        Update clip for non-self-painting layers.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):

        Update clip for self-painting layers.

2019-08-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: show @supports CSS groupings
        https://bugs.webkit.org/show_bug.cgi?id=200419
        <rdar://problem/53971948>

        Reviewed by Joseph Pecoraro.

        Test: inspector/css/getMatchedStylesForNode.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildArrayForGroupings): Added.
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::buildMediaObject): Deleted.
        (WebCore::fillMediaListChain): Deleted.

        * css/MediaList.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::MediaQuerySet):
        Remove the `lastLine` as it was never set by anyone and wasn't used by Web Inspector.

2019-08-13  Sihui Liu  <sihui_liu@apple.com>

        Make sure UniqueIDBDatabaseConnection unregister itself from IDBServer
        https://bugs.webkit.org/show_bug.cgi?id=200650
        <rdar://problem/54236010>

        Reviewed by Youenn Fablet.

        We register UniqueIDBDatabaseConnection unconditionally to IDBServer but fail to unregister if UniqueIDBDatabase
        of UniqueIDBDatabaseConnection is gone.

        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::server):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.h:

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

        [LFC][TFC] Introduce TableGrid
        https://bugs.webkit.org/show_bug.cgi?id=200656
        <rdar://problem/54240833>

        Reviewed by Antti Koivisto.

        table grid:
        A matrix containing as many rows and columns as needed to describe the position of all the table-rows
        and table-cells of a table-root, as determined by the grid-dimensioning algorithm.
        Each row of the grid might correspond to a table-row, and each column to a table-column.

        slot of the table grid:
        A slot (r,c) is an available space created by the intersection of a row r and a column c in the table grid.

        https://www.w3.org/TR/css-tables-3/#terminology

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isTableHeader const):
        (WebCore::Layout::Box::isTableBody const):
        (WebCore::Layout::Box::isTableFooter const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layout const):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid const):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns const):
        (WebCore::Layout::TableFormattingContext::computeTableWidth const):
        (WebCore::Layout::TableFormattingContext::distributeAvailabeWidth const):
        (WebCore::Layout::TableFormattingContext::computeTableHeight const):
        (WebCore::Layout::TableFormattingContext::distributeAvailableHeight const):
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::formattingState const):
        * layout/tableformatting/TableFormattingState.h:
        (WebCore::Layout::TableFormattingState::tableGrid):
        * layout/tableformatting/TableGrid.cpp: Added.
        (WebCore::Layout::TableGrid::CellInfo::CellInfo):
        (WebCore::Layout::TableGrid::SlotInfo::SlotInfo):
        (WebCore::Layout::TableGrid::TableGrid):
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::insertCell):
        (WebCore::Layout::TableGrid::removeCell):
        * layout/tableformatting/TableGrid.h: Copied from Source/WebCore/layout/tableformatting/TableFormattingContext.h.

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

        [LFC][TFC] Add rowSpan and colSpan to Box
        https://bugs.webkit.org/show_bug.cgi?id=200654
        <rdar://problem/54239281>

        Reviewed by Antti Koivisto.

        colSpan and rowSpan are not part of the RenderStyle. We eventually need to find a more appropriate place for the "random DOM things".

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::setRowSpan):
        (WebCore::Layout::Box::setColumnSpan):
        (WebCore::Layout::Box::rowSpan const):
        (WebCore::Layout::Box::columnSpan const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):

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

        Blob registries should be keyed by session IDs
        https://bugs.webkit.org/show_bug.cgi?id=200567
        <rdar://problem/54120212>

        Reviewed by Alex Christensen.

        Pass session IDs to all BlobRegistry methods in particular ThreadableLoaderRegistry.
        The only exception is blobSize which should be dealt with a follow-up patch.
        blobSize blob registry is retrieved from the connection -> sessionID map in Network Process.
        Covered by existing tests.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::~FetchLoader):
        (WebCore::FetchLoader::startLoadingBlobURL):
        * Modules/fetch/FetchLoader.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::~FileReaderLoader):
        (WebCore::FileReaderLoader::start):
        * fileapi/FileReaderLoader.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::registerBlobURLOptionallyFileBacked):
        * fileapi/ThreadableBlobRegistry.h:
        * html/PublicURLManager.cpp:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::createBlobResourceHandle):
        (WebCore::loadBlobResourceSynchronously):
        (WebCore::BlobRegistryImpl::filesInBlob const):
        * platform/network/BlobRegistryImpl.h:
        * platform/network/FormData.cpp:
        (WebCore::appendBlobResolved):
        (WebCore::FormData::resolveBlobReferences):
        * platform/network/FormData.h:
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::createHTTPBodyCFReadStream):
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageBody const):
        (WebCore::ResourceRequest::updateSoupMessage const):

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

        User Agent and SessionID should be given to NetworkRTCProvider to set up the correct proxy information
        https://bugs.webkit.org/show_bug.cgi?id=200583

        Reviewed by Eric Carlson.

        Use a socket factory that is specific to the user agent and session ID.
        This factory is stored in the media endpoint.
        Not testable without proxy infrastructure.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2019-08-12  Ryosuke Niwa  <rniwa@webkit.org>

        FrameLoader::open can execute scritps via style recalc in Frame::setDocument
        https://bugs.webkit.org/show_bug.cgi?id=200377

        Reviewed by Antti Koivisto.

        Fixed the bug that FrameLoader::open can execute arbitrary author scripts via post style update callbacks
        by adding PostResolutionCallbackDisabler, WidgetHierarchyUpdatesSuspensionScope, and NavigationDisabler
        to CachedFrameBase::restore and FrameLoader::open.

        This ensures all frames are restored from the page cache before any of them would start running scripts.

        Test: fast/frames/restoring-page-cache-should-not-run-scripts-via-style-update.html

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::open):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout): Fixed the debug assertion. The layout of a document may be
        updated while we're preparing to put a page into the page cache.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers): Ditto.

2019-08-12  Sam Weinig  <weinig@apple.com>

        Replace multiparameter overloads of append() in StringBuilder as a first step toward standardizinging on the flexibleAppend() implementation
        https://bugs.webkit.org/show_bug.cgi?id=200614

        Reviewed by Darin Adler.

        Renames StringBuilder::append(const LChar*, unsigned), StringBuilder::append(const UChar*, unsigned) and 
        StringBuilder::append(const char*, unsigned) to StringBuilder::appendCharacters(...).
        
        Renames StringBuilder::append(const String& string, unsigned offset, unsigned length) to 
        StringBuilder::appendSubstring(...).

        * dom/Range.cpp:
        (WebCore::Range::toString const):
        * editing/Editing.cpp:
        (WebCore::stringWithRebalancedWhitespace):
        * editing/MarkupAccumulator.cpp:
        (WebCore::appendCharactersReplacingEntitiesInternal):
        * editing/TextIterator.cpp:
        (WebCore::TextIteratorCopyableText::appendToStringBuilder const):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks const):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::bufferedCharacters const):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processNativeSamples):
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::Substring::appendTo const):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::writeToStringBuilder):
        Update for renames.

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

        [WPE][GTK] Fix building without unified sources
        https://bugs.webkit.org/show_bug.cgi?id=200641

        Reviewed by Žan Doberšek.

        * CMakeLists.txt: Add WebCore as the list of libraries to link into WebCoreTestSupport, to
        avoid underlinking, which makes it possible to link with LDFLAGS="-Wl,--no-undefined".
        * editing/WebCorePasteboardFileReader.h: Add missing inclusion of the pal/SessionID.h
        header.

2019-08-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF][JSC] Make JSC and WTF aggressively-fast-malloced
        https://bugs.webkit.org/show_bug.cgi?id=200611

        Reviewed by Saam Barati.

        Changed the accessor since we changed std::unique_ptr to Ref for this field.

        No behavior change.

        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::addTimerSetNotification):
        (WebCore::WorkerScriptController::removeTimerSetNotification):

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

        Make Blob::m_size an Optional
        https://bugs.webkit.org/show_bug.cgi?id=200617

        Reviewed by Alex Christensen.

        Use an Optional instead of -1 to know that m_size is initialized or not.
        No change of behavior.

        Refactoring to make all Blob members private.
        Remove one static Blob create method.

        Covered by existing tests.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::size const):
        * fileapi/Blob.h:
        (WebCore::Blob::setInternalURL):
        * fileapi/File.cpp:
        (WebCore::File::create):
        (WebCore::File::File):
        (WebCore::File::computeNameAndContentType):
        * fileapi/File.h:
        * html/FileListCreator.cpp:
        (WebCore::FileListCreator::createFileList):

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

        GPUBuffer seems to be ref'd / deref'd from multiple thread concurrently but is not ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200629

        Reviewed by Geoffrey Garen.

        Make sure GPUBuffer only gets ref'd / deref'd on the main thread, since it is not
        ThreadSafeRefCounted.

        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::commandBufferCommitted):
        (WebCore::GPUBuffer::commandBufferCompleted):

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

        [GStreamer][WebRTC] Handle broken data in the libwebrtc GStreamer decoders
        https://bugs.webkit.org/show_bug.cgi?id=200584

        Reviewed by Philippe Normand.

        Listening to parsers warnings and error messages (synchronously so that we react
        right away) and requesting keyframes from the peer.

        Also simplify the decoder code by trying to make decoding happen
        in one single pass, also hiding away GStreamer threading and allowing
        us to react as soon as the decoder/parser fails.

        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::GStreamerVideoDecoder):
        (WebCore::GStreamerVideoDecoder::pullSample):
        (WebCore::H264Decoder::H264Decoder):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:

2019-08-12  Antti Koivisto  <antti@apple.com>

        Only construct ComplexLineLayout when needed
        https://bugs.webkit.org/show_bug.cgi?id=200625

        Reviewed by Zalan Bujtas.

        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::createInlineBoxForRenderer):
        (WebCore::ComplexLineLayout::createLineBoxes):
        (WebCore::ComplexLineLayout::constructLine):
        (WebCore::ComplexLineLayout::updateLogicalWidthForAlignment):

        Make static so this can be invoked without constructing complex line layout (from startAlignedOffsetForLine).

        (WebCore::ComplexLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::ComplexLineLayout::deleteEllipsisLineBoxes):
        (WebCore::ComplexLineLayout::checkLinesForTextOverflow):
        (WebCore::ComplexLineLayout::startAlignedOffsetForLine): Deleted.

        This is also used in block layout to set static positions of positioned objects.
        Move to RenderBlockFlow where its only caller is.

        * rendering/ComplexLineLayout.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::updateStaticInlinePositionForChild):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::hasLines const):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::firstRootBox const):
        (WebCore::RenderBlockFlow::lastRootBox const):
        (WebCore::RenderBlockFlow::complexLineLayout):
        (WebCore::RenderBlockFlow::lineBoxes): Deleted.
        (WebCore::RenderBlockFlow::lineBoxes const): Deleted.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::generateLineBoxTree):

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

        Remove IDBValue::m_sessionID
        https://bugs.webkit.org/show_bug.cgi?id=199320

        Reviewed by Alex Christensen.

        Remove sessionID from IDBValue.
        This does not seem to be really used in any way.
        No change of behavior.

        * Modules/indexeddb/IDBValue.cpp:
        (WebCore::IDBValue::IDBValue):
        * Modules/indexeddb/IDBValue.h:
        (WebCore::IDBValue::blobURLs const):
        (WebCore::IDBValue::encode const):
        (WebCore::IDBValue::decode):
        (WebCore::IDBValue::sessionID const): Deleted.
        * Modules/indexeddb/shared/IDBRequestData.cpp:
        (WebCore::IDBRequestData::isolatedCopy):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::databaseIdentifier const):
        (WebCore::IDBRequestData::decode):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueToJSValue):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::writeBlobsToDiskForIndexedDB):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::sessionID const): Deleted.

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

        Remove IDB-specific quota
        https://bugs.webkit.org/show_bug.cgi?id=196545

        Reviewed by Alex Christensen.

        No change of behavior as IDB specific quota is no longer used.
        Instead a global quota is used. This quota currently handles IDB and Cache API.

        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        (WebCore::IDBServer::IDBServer::setPerOriginQuota): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        (WebCore::IDBServer::IDBServer::perOriginQuota const): Deleted.
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::quotaForOrigin const): Deleted.
        (WebCore::IDBServer::SQLiteIDBBackingStore::maximumSize const): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::setQuota): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-08-11  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Don't use vorbisparse
        https://bugs.webkit.org/show_bug.cgi?id=200622

        Reviewed by Philippe Normand.

        This patch has been splitted from the original WebKitMediaSrc rework
        patch (https://bugs.webkit.org/show_bug.cgi?id=199719).

        Unlike other parsers, vorbisparse has latency (in the sense that when
        it gets a chain call with a series of complete frames, it may not emit
        the parsed frames until another chain in the future), which makes it
        inappropriate for AppendPipeline, as there is no good way I know to
        flush it.

        But actually vorbisparse is not known to be necessary and it was only
        introduced for consistency with other formats. Parsers are used in
        AppendPipeline to reconstruct information that is lost due to poor
        muxes. There have been no reported cases of this being a problem with
        Vorbis in WebM, so I'm just removing the parser.

        Fixes imported/w3c/web-platform-tests/media-source/mediasource-config-change-webm-a-bitrate.html

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::createOptionalParserForFormat):

2019-08-11  Antti Koivisto  <antti@apple.com>

        Factor complex line layout path out from RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=200612

        Reviewed by Zalan Bujtas.

        This patch factors the line layout code that is currently part of the RenderBlockFlow and lives in RenderBlockLineLayout.cpp
        into a new ComplexLineLayout class. ComplexLineLayout is a member of RenderBlockFlow.

        In the future we can stop constructing ComplexLineLayout at all when using other line layout paths.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/ComplexLineLayout.cpp: Copied from Source/WebCore/rendering/RenderBlockLineLayout.cpp.
        (WebCore::ComplexLineLayout::ComplexLineLayout):
        (WebCore::ComplexLineLayout::appendRunsForObject):
        (WebCore::ComplexLineLayout::createRootInlineBox):
        (WebCore::ComplexLineLayout::createAndAppendRootInlineBox):
        (WebCore::ComplexLineLayout::createInlineBoxForRenderer):
        (WebCore::ComplexLineLayout::createLineBoxes):
        (WebCore::ComplexLineLayout::constructLine):
        (WebCore::ComplexLineLayout::textAlignmentForLine const):
        (WebCore::ComplexLineLayout::setMarginsForRubyRun):
        (WebCore::ComplexLineLayout::updateRubyForJustifiedText):
        (WebCore::ComplexLineLayout::computeExpansionForJustifiedText):
        (WebCore::ComplexLineLayout::updateLogicalWidthForAlignment):
        (WebCore::ComplexLineLayout::computeInlineDirectionPositionsForLine):
        (WebCore::ComplexLineLayout::computeInlineDirectionPositionsForSegment):
        (WebCore::ComplexLineLayout::removeInlineBox const):
        (WebCore::ComplexLineLayout::computeBlockDirectionPositionsForLine):
        (WebCore::ComplexLineLayout::handleTrailingSpaces):
        (WebCore::ComplexLineLayout::appendFloatingObjectToLastLine):
        (WebCore::ComplexLineLayout::createLineBoxesFromBidiRuns):
        (WebCore::ComplexLineLayout::layoutRunsAndFloats):
        (WebCore::ComplexLineLayout::restartLayoutRunsAndFloatsInRange):
        (WebCore::ComplexLineLayout::layoutRunsAndFloatsInRange):
        (WebCore::ComplexLineLayout::reattachCleanLineFloats):
        (WebCore::ComplexLineLayout::linkToEndLineIfNeeded):
        (WebCore::ComplexLineLayout::layoutLineBoxes):
        (WebCore::ComplexLineLayout::checkFloatInCleanLine):
        (WebCore::ComplexLineLayout::determineStartPosition):
        (WebCore::ComplexLineLayout::determineEndPosition):
        (WebCore::ComplexLineLayout::checkPaginationAndFloatsAtEndLine):
        (WebCore::ComplexLineLayout::lineWidthForPaginatedLineChanged const):
        (WebCore::ComplexLineLayout::matchedEndLine):
        (WebCore::ComplexLineLayout::addOverflowFromInlineChildren):
        (WebCore::ComplexLineLayout::deleteEllipsisLineBoxes):
        (WebCore::ComplexLineLayout::checkLinesForTextOverflow):
        (WebCore::ComplexLineLayout::positionNewFloatOnLine):
        (WebCore::ComplexLineLayout::startAlignedOffsetForLine):
        (WebCore::ComplexLineLayout::updateFragmentForLine const):
        (WebCore::ComplexLineLayout::style const):
        (WebCore::ComplexLineLayout::layoutContext const):
        (WebCore::RenderBlockFlow::appendRunsForObject): Deleted.
        (WebCore::RenderBlockFlow::createRootInlineBox): Deleted.
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox): Deleted.
        (WebCore::createInlineBoxForRenderer): Deleted.
        (WebCore::RenderBlockFlow::createLineBoxes): Deleted.
        (WebCore::RenderBlockFlow::constructLine): Deleted.
        (WebCore::RenderBlockFlow::textAlignmentForLine const): Deleted.
        (WebCore::RenderBlockFlow::setMarginsForRubyRun): Deleted.
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText): Deleted.
        (WebCore::RenderBlockFlow::computeExpansionForJustifiedText): Deleted.
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment): Deleted.
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine): Deleted.
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment): Deleted.
        (WebCore::RenderBlockFlow::removeInlineBox const): Deleted.
        (WebCore::RenderBlockFlow::computeBlockDirectionPositionsForLine): Deleted.
        (WebCore::RenderBlockFlow::handleTrailingSpaces): Deleted.
        (WebCore::RenderBlockFlow::appendFloatingObjectToLastLine): Deleted.
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns): Deleted.
        (WebCore::RenderBlockFlow::layoutRunsAndFloats): Deleted.
        (WebCore::RenderBlockFlow::restartLayoutRunsAndFloatsInRange): Deleted.
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange): Deleted.
        (WebCore::RenderBlockFlow::reattachCleanLineFloats): Deleted.
        (WebCore::RenderBlockFlow::linkToEndLineIfNeeded): Deleted.
        (WebCore::RenderBlockFlow::layoutLineBoxes): Deleted.
        (WebCore::RenderBlockFlow::checkFloatInCleanLine): Deleted.
        (WebCore::RenderBlockFlow::determineStartPosition): Deleted.
        (WebCore::RenderBlockFlow::determineEndPosition): Deleted.
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine): Deleted.
        (WebCore::RenderBlockFlow::lineWidthForPaginatedLineChanged const): Deleted.
        (WebCore::RenderBlockFlow::matchedEndLine): Deleted.
        (WebCore::RenderBlock::generatesLineBoxesForInlineChild): Deleted.
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren): Deleted.
        (WebCore::RenderBlockFlow::deleteEllipsisLineBoxes): Deleted.
        (WebCore::RenderBlockFlow::checkLinesForTextOverflow): Deleted.
        (WebCore::RenderBlockFlow::positionNewFloatOnLine): Deleted.
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine): Deleted.
        (WebCore::RenderBlockFlow::updateFragmentForLine const): Deleted.
        * rendering/ComplexLineLayout.h: Added.
        (WebCore::ComplexLineLayout::lineBoxes):
        (WebCore::ComplexLineLayout::lineBoxes const):
        (WebCore::ComplexLineLayout::firstRootBox const):
        (WebCore::ComplexLineLayout::lastRootBox const):
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary):
        (WebCore::InlineBidiResolver::appendRunInternal):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::updateStaticInlinePositionForChild):
        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineBoxes):
        (WebCore::RenderBlockFlow::lineBoxes const):
        (WebCore::RenderBlockFlow::firstRootBox const):
        (WebCore::RenderBlockFlow::lastRootBox const):
        (WebCore::RenderBlockFlow::floatingObjects):
        (WebCore::RenderBlockFlow::complexLineLayout):
        (WebCore::RenderBlockFlow::overrideTextAlignmentForLine const):
        (WebCore::RenderBlockFlow::adjustInlineDirectionLineBounds const):
        * rendering/RenderBlockLineLayout.cpp: Removed.
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::overrideTextAlignmentForLine const):
        (WebCore::RenderRubyBase::textAlignmentForLine const): Deleted.
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::overrideTextAlignmentForLine const):
        (WebCore::RenderRubyText::textAlignmentForLine const): Deleted.
        * rendering/RenderRubyText.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::positionNewFloatOnLine):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::setStaticPositions):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox): Deleted.
        * rendering/svg/RenderSVGText.h:
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::generatesLineBoxesForInlineChild):
        (WebCore::getParentOfFirstLineBox):

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

        REGRESSION (r245974): Missing content on habitburger.com, amazon.com
        https://bugs.webkit.org/show_bug.cgi?id=200618
        rdar://problem/53920224

        Reviewed by Zalan Bujtas.

        In r245974 TileController::adjustTileCoverageRect() started to intersect the coverage
        rect with the bounds of the layer, which is wrong because this coverage rect is passed down
        to descendant layers, and they may project outside the bounds of this tiled layer.
        
        This caused missing dropdowns on amazon.com, and a missing menu on habitburger.com on iPhone.

        The fix is to just not do the intersection with the bounds. TileGrid::getTileIndexRangeForRect()
        already ensures that we never make tiles outside the bounds of a TileController.

        Test: compositing/backing/layer-outside-tiled-parent.html

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::adjustTileCoverageRect):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::ensureTilesForRect):

2019-08-10  Andres Gonzalez  <andresg_22@apple.com>

        Accessibility client cannot navigate to internal links targets on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=200559
        <rdar://problem/45242534>

        Reviewed by Zalan Bujtas.

        The cause of the problem on iOS is that AccessibilityObject::firstAccessibleObjectFromNode
        used in AccessibilityRenderObject::linkedUIElements may return an object
        that is ignored by accessibility clients on iOS, and thus the client
        would not track the target of an internal link. This change ensures that
        accessibilityLinkedElement will return a valid accessibility element to
        the client, if it is exists.
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        (WebCore::firstAccessibleObjectFromNode):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLinkedElement]):

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

        Blob should store its session ID
        https://bugs.webkit.org/show_bug.cgi?id=200572

        Reviewed by Darin Adler.

        Blob at creation time now initializes its session ID.
        This will allow in the future to call blob registry routines with it.
        Update all call sites to provide the session ID.

        No observable change.

        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getFile):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::fromFormData):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::blobFromData):
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::takeAsBlob):
        * Modules/fetch/FetchBodyConsumer.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::blob):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::createRecordingDataBlob):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didReceiveRawData):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::DeferredPromise::sessionID const):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::createForCopyAndPaste):
        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::createForDrag):
        (WebCore::DataTransfer::createForDragStartEvent):
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        * dom/DataTransfer.h:
        * dom/Document.cpp:
        (WebCore::Document::originIdentifierForPasteboard const):
        * dom/Document.h:
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::inputEventDataTransfer const):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::inputEventDataTransfer const):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::inputEventDataTransfer const):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::inputEventDataTransfer const):
        * editing/WebCorePasteboardFileReader.cpp:
        (WebCore::WebCorePasteboardFileReader::readFilename):
        (WebCore::WebCorePasteboardFileReader::readBuffer):
        * editing/WebCorePasteboardFileReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readImage):
        (WebCore::attachmentForFilePath):
        (WebCore::attachmentForData):
        * editing/markup.cpp:
        (WebCore::restoreAttachmentElementsInFragment):
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::deserialize):
        (WebCore::Blob::slice const):
        * fileapi/Blob.idl:
        * fileapi/File.cpp:
        (WebCore::File::createWithRelativePath):
        (WebCore::File::File):
        * fileapi/File.h:
        * fileapi/File.idl:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::filesChosen):
        * html/FileListCreator.cpp:
        (WebCore::appendDirectoryFiles):
        (WebCore::FileListCreator::FileListCreator):
        (WebCore::FileListCreator::createFileList):
        * html/FileListCreator.h:
        (WebCore::FileListCreator::create):
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateEnclosingImageWithData):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toBlob):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        * testing/Internals.cpp:
        (WebCore::Internals::createFile):
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createOpaqueWithBlobBodyResponse):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createResponseBlob):

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

        Disable ContentChangeObserver TouchEvent adjustment on youtube.com on iOS in mobile browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=200609
        <rdar://problem/54015403>

        Reviewed by Maciej Stachowiak.

        When watching a youtube video on iOS with "Autoplay" switched to off,
        upon finishing the video all clicks anywhere on the page are effectively ignored.
        Disabling ContentChangeObserver's TouchEvent adjustment fixes this bug.  I verified this manually.
        This switch was introduced in r242621, and it disables part of a new feature, so there is low risk of fallout.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setAllowContentChangeObserverQuirk):
        (WebCore::DocumentLoader::allowContentChangeObserverQuirk const):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDisableContentChangeObserverTouchEventAdjustment const):
        * page/Quirks.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::touchEventDidStart):

2019-08-10  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] Add a quirk for gmail.com messages on iPhone iOS13
        https://bugs.webkit.org/show_bug.cgi?id=200605

        Reviewed by Maciej Stachowiak.

        Add a quirk which sets the user agent for gmail.com messages on iPhone
        OS 13 to be iPhone OS 12. This is a workaround for a gmail.com bug till
        it is fixed.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldAvoidUsingIOS13ForGmail const):
        * page/Quirks.h:
        * platform/UserAgent.h:
        * platform/ios/UserAgentIOS.mm:
        (WebCore::osNameForUserAgent):
        (WebCore::standardUserAgentWithApplicationName):
        * platform/mac/UserAgentMac.mm:
        (WebCore::standardUserAgentWithApplicationName):

2019-08-10  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer][WebRTC] Remove unused GstAdapter
        https://bugs.webkit.org/show_bug.cgi?id=200585

        Reviewed by Philippe Normand.

        Minor "refactoring"

        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):

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

        Can’t sort videos on a YouTube channel page on iPad
        https://bugs.webkit.org/show_bug.cgi?id=200573
        <rdar://problem/53415195>

        Reviewed by Darin Adler.

        Add a quirk to make touch events non-cancelable (preventDefault() does nothing).

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

2019-08-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248454): WK1 inspector frontend client doesn't queue messages to the frontend before it's loaded
        https://bugs.webkit.org/show_bug.cgi?id=200587

        Reviewed by Joseph Pecoraro.

        WK1 inspector sends messages to the frontend using `WebCore::InspectorClient::doDispatchMessageOnFrontendPage`,
        which does not do any sort of queueing to wait until the frontend is loaded (`InspectorFrontendHost.loaded()`).

        Now that we are sending messages immediately, we should always queue.

        Covered by existing tests (which were failing after r248454, and now won't fail).

        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::startProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::stopProfilingJavaScript):
        (WebCore::InspectorFrontendClientLocal::showConsole):
        (WebCore::InspectorFrontendClientLocal::showResources):
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame):
        (WebCore::InspectorFrontendClientLocal::dispatch): Added.
        (WebCore::InspectorFrontendClientLocal::dispatchMessage): Added.
        (WebCore::InspectorFrontendClientLocal::dispatchMessageAsync): Added.
        (WebCore::InspectorFrontendClientLocal::evaluateOnLoad):
        Provide additional ways for subclasses to call other `InspectorFrontendAPI` methods using
        the "on load" queue.

        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::sendMessageToFrontend):
        (WebCore::InspectorStubFrontend::frontendLoaded): Deleted.
        Leverage the base `InspectorFrontendClientLocal`'s functions for queueing messages.

        * inspector/InspectorClient.h:
        * inspector/InspectorClient.cpp: Removed.
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage): Deleted.

        * inspector/agents/InspectorTimelineAgent.cpp:
        Add missing include.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-08-09  Yusuke Suzuki  <ysuzuki@apple.com>

        Universal XSS in JSObject::putInlineSlow and JSValue::putToPrimitive
        https://bugs.webkit.org/show_bug.cgi?id=199864

        Reviewed by Saam Barati.

        Test: http/tests/security/cross-frame-access-object-put-optimization.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::doPutPropertySecurityCheck):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::doPutPropertySecurityCheck):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:

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

        When I did the devirtualization of the AST in r248488, I needed to
        update the various type checks under the Type class hierarchy
        operate on Type itself, since we now downcast straight from Type
        instead of UnnamedType, ResolvableType, and NamedType.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:

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

        Possible non-thread safe usage of RefCounted in ~VideoFullscreenControllerContext()
        https://bugs.webkit.org/show_bug.cgi?id=200599

        Reviewed by Geoffrey Garen.

        WebVideoFullscreenControllerAVKit's m_playbackModel & m_fullscreenModel data members are
        WebThread objects so we need to make sure we grab the WebThread lock before dereferencing
        them in the WebVideoFullscreenControllerAVKit destructor, when destroyed on the UIThread.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::~VideoFullscreenControllerContext):

2019-08-09  Ali Juma  <ajuma@chromium.org>

        Don't allow cross-origin iframes to autofocus
        https://bugs.webkit.org/show_bug.cgi?id=200515
        <rdar://problem/54092988>

        Reviewed by Ryosuke Niwa.

        According to Step 6 in the WhatWG Spec (https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofocusing-a-form-control:-the-autofocus-attribute),
        the 'autofocus' attribute shouldn't work for cross-origin iframes.

        This change is based on the Blink change (patch by <mustaq@chromium.org>):
        <https://chromium-review.googlesource.com/c/chromium/src/+/1593026>

        Also disallow cross-origin iframes from focusing programmatically without ever having
        had any user interaction.

        * dom/Element.cpp: Check if an invalid frame is trying to grab the focus.
        (WebCore::Element::focus):
        * html/HTMLFormControlElement.cpp: Check if the focus is moving to an invalid frame.
        (WebCore::shouldAutofocus):
        * page/DOMWindow.cpp: Check if an invalid frame is trying to grab the focus.
        (WebCore::DOMWindow::focus):

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

        [WHLSL] Devirtualize the AST
        https://bugs.webkit.org/show_bug.cgi?id=200522

        Reviewed by Robin Morisset.

        This patch devirtualizes the AST for Type, Expression, and Statement.
        We now have an enum which represents all the concrete types in the
        three hierarchies. Doing dynamic dispatch is implemented as a switch
        on that type enum.
        
        The interesting part of this patch is how to handle destruction. We do
        this by defining a custom deleter for all nodes in the AST. This ensures
        that when they're used inside UniqueRef, unique_ptr, Ref, and RefPtr,
        we do dynamic dispatch when we delete the object. This allows each base
        class to define a "destroy" method which does dynamic dispatch on type
        and calls the appropriate delete. We also mark all non-concrete nodes
        in all type hierarchies with a protected destructor, which ensures it's
        never called except from within the concrete child classes. We allow
        all concrete classes to have public destructors, as it's valid for
        their destructors to be called explicitly since there is no need for
        dynamic dispatch in such scenarios. All concrete classes are also marked
        as final.
        
        This is a 3ms speedup on compute_boids, which is about a 10% improvement
        in the WHLSL compiler.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        (WebCore::WHLSL::AST::AssignmentExpression::AssignmentExpression): Deleted.
        (WebCore::WHLSL::AST::AssignmentExpression::left): Deleted.
        (WebCore::WHLSL::AST::AssignmentExpression::right): Deleted.
        (WebCore::WHLSL::AST::AssignmentExpression::takeRight): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h:
        (WebCore::WHLSL::AST::Block::Block): Deleted.
        (WebCore::WHLSL::AST::Block::statements): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        (WebCore::WHLSL::AST::BooleanLiteral::BooleanLiteral): Deleted.
        (WebCore::WHLSL::AST::BooleanLiteral::value const): Deleted.
        (WebCore::WHLSL::AST::BooleanLiteral::clone const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h:
        (WebCore::WHLSL::AST::Break::Break): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        (WebCore::WHLSL::AST::CallExpression::CallExpression): Deleted.
        (WebCore::WHLSL::AST::CallExpression::arguments): Deleted.
        (WebCore::WHLSL::AST::CallExpression::name): Deleted.
        (WebCore::WHLSL::AST::CallExpression::setCastData): Deleted.
        (WebCore::WHLSL::AST::CallExpression::isCast): Deleted.
        (WebCore::WHLSL::AST::CallExpression::castReturnType): Deleted.
        (WebCore::WHLSL::AST::CallExpression::function): Deleted.
        (WebCore::WHLSL::AST::CallExpression::setFunction): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h:
        (WebCore::WHLSL::AST::CommaExpression::CommaExpression): Deleted.
        (WebCore::WHLSL::AST::CommaExpression::list): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h:
        (WebCore::WHLSL::AST::ConstantExpression::ConstantExpression): Deleted.
        (WebCore::WHLSL::AST::ConstantExpression::integerLiteral): Deleted.
        (WebCore::WHLSL::AST::ConstantExpression::visit): Deleted.
        (WebCore::WHLSL::AST::ConstantExpression::visit const): Deleted.
        (WebCore::WHLSL::AST::ConstantExpression::clone const): Deleted.
        (WebCore::WHLSL::AST::ConstantExpression::matches const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h:
        (WebCore::WHLSL::AST::Continue::Continue): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLDefaultDelete.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        (WebCore::WHLSL::AST::DereferenceExpression::DereferenceExpression): Deleted.
        (WebCore::WHLSL::AST::DereferenceExpression::pointer): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        (WebCore::WHLSL::AST::DoWhileLoop::DoWhileLoop): Deleted.
        (WebCore::WHLSL::AST::DoWhileLoop::body): Deleted.
        (WebCore::WHLSL::AST::DoWhileLoop::conditional): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        (WebCore::WHLSL::AST::DotExpression::DotExpression): Deleted.
        (WebCore::WHLSL::AST::DotExpression::fieldName): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::EffectfulExpressionStatement): Deleted.
        (WebCore::WHLSL::AST::EffectfulExpressionStatement::effectfulExpression): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition): Deleted.
        (WebCore::WHLSL::AST::EnumerationDefinition::type): Deleted.
        (WebCore::WHLSL::AST::EnumerationDefinition::add): Deleted.
        (WebCore::WHLSL::AST::EnumerationDefinition::memberByName): Deleted.
        (WebCore::WHLSL::AST::EnumerationDefinition::enumerationMembers): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::EnumerationMemberLiteral): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::wrap): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::left const): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::right const): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::clone const): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationDefinition): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationDefinition const): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationMember): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::enumerationMember const): Deleted.
        (WebCore::WHLSL::AST::EnumerationMemberLiteral::setEnumerationMember): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.cpp: Added.
        (WebCore::WHLSL::AST::Expression::destroy):
        (WebCore::WHLSL::AST::PropertyAccessExpression::getterFunctionName const):
        (WebCore::WHLSL::AST::PropertyAccessExpression::setterFunctionName const):
        (WebCore::WHLSL::AST::PropertyAccessExpression::anderFunctionName const):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::Expression):
        (WebCore::WHLSL::AST::Expression::kind const):
        (WebCore::WHLSL::AST::Expression::isAssignmentExpression const):
        (WebCore::WHLSL::AST::Expression::isBooleanLiteral const):
        (WebCore::WHLSL::AST::Expression::isCallExpression const):
        (WebCore::WHLSL::AST::Expression::isCommaExpression const):
        (WebCore::WHLSL::AST::Expression::isDereferenceExpression const):
        (WebCore::WHLSL::AST::Expression::isDotExpression const):
        (WebCore::WHLSL::AST::Expression::isGlobalVariableReference const):
        (WebCore::WHLSL::AST::Expression::isFloatLiteral const):
        (WebCore::WHLSL::AST::Expression::isIndexExpression const):
        (WebCore::WHLSL::AST::Expression::isIntegerLiteral const):
        (WebCore::WHLSL::AST::Expression::isLogicalExpression const):
        (WebCore::WHLSL::AST::Expression::isLogicalNotExpression const):
        (WebCore::WHLSL::AST::Expression::isMakeArrayReferenceExpression const):
        (WebCore::WHLSL::AST::Expression::isMakePointerExpression const):
        (WebCore::WHLSL::AST::Expression::isNullLiteral const):
        (WebCore::WHLSL::AST::Expression::isPropertyAccessExpression const):
        (WebCore::WHLSL::AST::Expression::isReadModifyWriteExpression const):
        (WebCore::WHLSL::AST::Expression::isTernaryExpression const):
        (WebCore::WHLSL::AST::Expression::isUnsignedIntegerLiteral const):
        (WebCore::WHLSL::AST::Expression::isVariableReference const):
        (WebCore::WHLSL::AST::Expression::isEnumerationMemberLiteral const):
        (WebCore::WHLSL::AST::Expression::codeLocation const):
        (WebCore::WHLSL::AST::Expression::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h:
        (WebCore::WHLSL::AST::Fallthrough::Fallthrough): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        (WebCore::WHLSL::AST::FloatLiteral::FloatLiteral): Deleted.
        (WebCore::WHLSL::AST::FloatLiteral::type): Deleted.
        (WebCore::WHLSL::AST::FloatLiteral::value const): Deleted.
        (WebCore::WHLSL::AST::FloatLiteral::clone const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.cpp:
        (WebCore::WHLSL::AST::FloatLiteralType::FloatLiteralType):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        (WebCore::WHLSL::AST::FloatLiteralType::value const): Deleted.
        (WebCore::WHLSL::AST::FloatLiteralType::preferredType): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        (WebCore::WHLSL::AST::ForLoop::ForLoop): Deleted.
        (WebCore::WHLSL::AST::ForLoop::~ForLoop): Deleted.
        (WebCore::WHLSL::AST::ForLoop::initialization): Deleted.
        (WebCore::WHLSL::AST::ForLoop::condition): Deleted.
        (WebCore::WHLSL::AST::ForLoop::increment): Deleted.
        (WebCore::WHLSL::AST::ForLoop::body): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h:
        (WebCore::WHLSL::AST::GlobalVariableReference::GlobalVariableReference): Deleted.
        (WebCore::WHLSL::AST::GlobalVariableReference::structField): Deleted.
        (WebCore::WHLSL::AST::GlobalVariableReference::base): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        (WebCore::WHLSL::AST::IfStatement::IfStatement): Deleted.
        (WebCore::WHLSL::AST::IfStatement::conditional): Deleted.
        (WebCore::WHLSL::AST::IfStatement::body): Deleted.
        (WebCore::WHLSL::AST::IfStatement::elseBody): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        (WebCore::WHLSL::AST::IndexExpression::IndexExpression): Deleted.
        (WebCore::WHLSL::AST::IndexExpression::indexExpression): Deleted.
        (WebCore::WHLSL::AST::IndexExpression::takeIndex): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        (WebCore::WHLSL::AST::IntegerLiteral::IntegerLiteral): Deleted.
        (WebCore::WHLSL::AST::IntegerLiteral::type): Deleted.
        (WebCore::WHLSL::AST::IntegerLiteral::value const): Deleted.
        (WebCore::WHLSL::AST::IntegerLiteral::clone const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::IntegerLiteralType::IntegerLiteralType):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        (WebCore::WHLSL::AST::IntegerLiteralType::value const): Deleted.
        (WebCore::WHLSL::AST::IntegerLiteralType::preferredType): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        (WebCore::WHLSL::AST::LogicalExpression::LogicalExpression): Deleted.
        (WebCore::WHLSL::AST::LogicalExpression::type const): Deleted.
        (WebCore::WHLSL::AST::LogicalExpression::left): Deleted.
        (WebCore::WHLSL::AST::LogicalExpression::right): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        (WebCore::WHLSL::AST::LogicalNotExpression::LogicalNotExpression): Deleted.
        (WebCore::WHLSL::AST::LogicalNotExpression::operand): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::MakeArrayReferenceExpression): Deleted.
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::leftValue): Deleted.
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::mightEscape const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        (WebCore::WHLSL::AST::MakePointerExpression::MakePointerExpression): Deleted.
        (WebCore::WHLSL::AST::MakePointerExpression::leftValue): Deleted.
        (WebCore::WHLSL::AST::MakePointerExpression::mightEscape const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        (WebCore::WHLSL::AST::NamedType::NamedType):
        (WebCore::WHLSL::AST::NamedType::unifyNodeImpl):
        (): Deleted.
        (WebCore::WHLSL::AST::NamedType::isTypeDefinition const): Deleted.
        (WebCore::WHLSL::AST::NamedType::isStructureDefinition const): Deleted.
        (WebCore::WHLSL::AST::NamedType::isEnumerationDefinition const): Deleted.
        (WebCore::WHLSL::AST::NamedType::isNativeTypeDeclaration const): Deleted.
        (WebCore::WHLSL::AST::NamedType::unifyNode const): Deleted.
        (WebCore::WHLSL::AST::NamedType::unifyNode): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        (WebCore::WHLSL::AST::NativeTypeDeclaration::NativeTypeDeclaration): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::typeArguments): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isInt const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isNumber const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isFloating const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isAtomic const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isVector const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isMatrix const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isOpaqueType const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isTexture const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isTextureArray const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isDepthTexture const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isWritableTexture const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::textureDimension const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::isSigned const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::std::function<bool const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::std::function<int64_t const): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::iterateAllValues): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsInt): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsNumber): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsFloating): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsAtomic): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsVector): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsMatrix): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsOpaqueType): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsTexture): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsTextureArray): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsDepthTexture): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsWritableTexture): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setTextureDimension): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIsSigned): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentInteger): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentUnsignedInteger): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setCanRepresentFloat): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setSuccessor): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setFormatValueFromInteger): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setFormatValueFromUnsignedInteger): Deleted.
        (WebCore::WHLSL::AST::NativeTypeDeclaration::setIterateAllValues): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        (WebCore::WHLSL::AST::NullLiteral::NullLiteral): Deleted.
        (WebCore::WHLSL::AST::NullLiteral::type): Deleted.
        (WebCore::WHLSL::AST::NullLiteral::clone const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        (WebCore::WHLSL::AST::PropertyAccessExpression::PropertyAccessExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::create): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::setNewValueExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::setResultExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::oldVariableReference): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newVariableReference): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::leftValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::oldValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::newValueExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::resultExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::takeLeftValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::takeOldValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::takeNewValue): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::takeNewValueExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::takeResultExpression): Deleted.
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        (WebCore::WHLSL::AST::ReferenceType::ReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h:
        (WebCore::WHLSL::AST::ResolvableType::ResolvableType):
        (): Deleted.
        (WebCore::WHLSL::AST::ResolvableType::isFloatLiteralType const): Deleted.
        (WebCore::WHLSL::AST::ResolvableType::isIntegerLiteralType const): Deleted.
        (WebCore::WHLSL::AST::ResolvableType::isNullLiteralType const): Deleted.
        (WebCore::WHLSL::AST::ResolvableType::isUnsignedIntegerLiteralType const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        (WebCore::WHLSL::AST::Return::Return): Deleted.
        (WebCore::WHLSL::AST::Return::value): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.cpp: Added.
        (WebCore::WHLSL::AST::Statement::destroy):
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::Statement):
        (WebCore::WHLSL::AST::Statement::kind const):
        (WebCore::WHLSL::AST::Statement::isBlock const):
        (WebCore::WHLSL::AST::Statement::isBreak const):
        (WebCore::WHLSL::AST::Statement::isContinue const):
        (WebCore::WHLSL::AST::Statement::isDoWhileLoop const):
        (WebCore::WHLSL::AST::Statement::isEffectfulExpressionStatement const):
        (WebCore::WHLSL::AST::Statement::isFallthrough const):
        (WebCore::WHLSL::AST::Statement::isForLoop const):
        (WebCore::WHLSL::AST::Statement::isIfStatement const):
        (WebCore::WHLSL::AST::Statement::isReturn const):
        (WebCore::WHLSL::AST::Statement::isStatementList const):
        (WebCore::WHLSL::AST::Statement::isSwitchCase const):
        (WebCore::WHLSL::AST::Statement::isSwitchStatement const):
        (WebCore::WHLSL::AST::Statement::isVariableDeclarationsStatement const):
        (WebCore::WHLSL::AST::Statement::isWhileLoop const):
        (WebCore::WHLSL::AST::Statement::codeLocation const):
        (WebCore::WHLSL::AST::Statement::updateCodeLocation):
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h:
        (WebCore::WHLSL::AST::StatementList::StatementList): Deleted.
        (WebCore::WHLSL::AST::StatementList::statements): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        (WebCore::WHLSL::AST::StructureDefinition::StructureDefinition): Deleted.
        (WebCore::WHLSL::AST::StructureDefinition::structureElements): Deleted.
        (WebCore::WHLSL::AST::StructureDefinition::find): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::StructureElement): Deleted.
        (WebCore::WHLSL::AST::StructureElement::codeLocation const): Deleted.
        (WebCore::WHLSL::AST::StructureElement::type): Deleted.
        (WebCore::WHLSL::AST::StructureElement::name): Deleted.
        (WebCore::WHLSL::AST::StructureElement::semantic): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h:
        (WebCore::WHLSL::AST::SwitchCase::SwitchCase): Deleted.
        (WebCore::WHLSL::AST::SwitchCase::value): Deleted.
        (WebCore::WHLSL::AST::SwitchCase::block): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        (WebCore::WHLSL::AST::SwitchStatement::SwitchStatement): Deleted.
        (WebCore::WHLSL::AST::SwitchStatement::value): Deleted.
        (WebCore::WHLSL::AST::SwitchStatement::switchCases): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        (WebCore::WHLSL::AST::TernaryExpression::TernaryExpression): Deleted.
        (WebCore::WHLSL::AST::TernaryExpression::predicate): Deleted.
        (WebCore::WHLSL::AST::TernaryExpression::bodyExpression): Deleted.
        (WebCore::WHLSL::AST::TernaryExpression::elseExpression): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLType.cpp: Added.
        (WebCore::WHLSL::AST::Type::destroy):
        (WebCore::WHLSL::AST::Type::unifyNode):
        (WebCore::WHLSL::AST::ResolvableType::canResolve const):
        (WebCore::WHLSL::AST::ResolvableType::conversionCost const):
        (WebCore::WHLSL::AST::UnnamedType::toString const):
        * Modules/webgpu/WHLSL/AST/WHLSLType.h:
        (WebCore::WHLSL::AST::Type::Type):
        (WebCore::WHLSL::AST::Type::kind const):
        (WebCore::WHLSL::AST::Type::isUnnamedType const):
        (WebCore::WHLSL::AST::Type::isNamedType const):
        (WebCore::WHLSL::AST::Type::isResolvableType const):
        (WebCore::WHLSL::AST::Type::isTypeReference const):
        (WebCore::WHLSL::AST::Type::isPointerType const):
        (WebCore::WHLSL::AST::Type::isArrayReferenceType const):
        (WebCore::WHLSL::AST::Type::isArrayType const):
        (WebCore::WHLSL::AST::Type::isReferenceType const):
        (WebCore::WHLSL::AST::Type::isTypeDefinition const):
        (WebCore::WHLSL::AST::Type::isStructureDefinition const):
        (WebCore::WHLSL::AST::Type::isEnumerationDefinition const):
        (WebCore::WHLSL::AST::Type::isNativeTypeDeclaration const):
        (WebCore::WHLSL::AST::Type::isFloatLiteralType const):
        (WebCore::WHLSL::AST::Type::isIntegerLiteralType const):
        (WebCore::WHLSL::AST::Type::isNullLiteralType const):
        (WebCore::WHLSL::AST::Type::isUnsignedIntegerLiteralType const):
        (WebCore::WHLSL::AST::Type::unifyNode const):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        (WebCore::WHLSL::AST::TypeDefinition::TypeDefinition): Deleted.
        (WebCore::WHLSL::AST::TypeDefinition::type): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.cpp:
        (WebCore::WHLSL::AST::UnnamedType::hash const):
        (WebCore::WHLSL::AST::UnnamedType::operator== const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        (WebCore::WHLSL::AST::UnnamedType::UnnamedType):
        (WebCore::WHLSL::AST::UnnamedType::unifyNodeImpl):
        (): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::kind const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::isTypeReference const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::isPointerType const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::isArrayReferenceType const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::isArrayType const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::isReferenceType const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::unifyNode const): Deleted.
        (WebCore::WHLSL::AST::UnnamedType::unifyNode): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::UnsignedIntegerLiteral): Deleted.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::type): Deleted.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::value const): Deleted.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteral::clone const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.cpp:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::UnsignedIntegerLiteralType):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::value const): Deleted.
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::preferredType): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h:
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::VariableDeclarationsStatement): Deleted.
        (WebCore::WHLSL::AST::VariableDeclarationsStatement::variableDeclarations): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        (WebCore::WHLSL::AST::VariableReference::VariableReference): Deleted.
        (WebCore::WHLSL::AST::VariableReference::wrap): Deleted.
        (WebCore::WHLSL::AST::VariableReference::name): Deleted.
        (WebCore::WHLSL::AST::VariableReference::variable): Deleted.
        (WebCore::WHLSL::AST::VariableReference::setVariable): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        (WebCore::WHLSL::AST::WhileLoop::WhileLoop): Deleted.
        (WebCore::WHLSL::AST::WhileLoop::conditional): Deleted.
        (WebCore::WHLSL::AST::WhileLoop::body): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isPointerTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayReferenceTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayTypeNameNode const):
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode):
        (WebCore::WHLSL::Metal::parent):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::completeAssignment):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/WorkerScriptLoader.h:

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

        Pass a ScriptExecutionContext as input to register/unregister URLRegistry routines
        https://bugs.webkit.org/show_bug.cgi?id=200571

        Reviewed by Darin Adler.

        Passing a ScriptExecutionContext to register/unregister routines will allow
        to have session ID based handling for blobs, in particular to use session partitioned blob registries.
        No change of behavior.

        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registerURL):
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:
        * fileapi/Blob.cpp:
        (WebCore::BlobURLRegistry::registerURL):
        (WebCore::BlobURLRegistry::unregisterURL):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::createPublicURL):
        * html/PublicURLManager.cpp:
        (WebCore::PublicURLManager::registerURL):
        (WebCore::PublicURLManager::revoke):
        (WebCore::PublicURLManager::stop):
        * html/PublicURLManager.h:
        * html/URLRegistry.h:

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

        Disable CSSOM View Scrolling API for IMDb iOS app
        https://bugs.webkit.org/show_bug.cgi?id=200586
        <rdar://problem/53645833>

        Reviewed by Simon Fraser.

        They are calling scrollHeight on the HTML element and it is running new code introduced in r235806
        Disable this new feature until they update their app to use the iOS13 SDK.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isIMDb):

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

        Remove MediaStreamRegistry
        https://bugs.webkit.org/show_bug.cgi?id=200570

        Reviewed by Eric Carlson.

        MediaStream cannot be registered as an URL by JavaScript.
        Remove MediaStreamRegistry and the 'src' loading specific handling in HTMLMediaElement.
        Implement ending of capture track by directly handling MediaStreamTrack which is more accurate.
        No change of behavior.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::stop):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.cpp: Removed.
        * Modules/mediastream/MediaStreamRegistry.h: Removed.
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::endCapture):
        * Modules/mediastream/MediaStreamTrack.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::stopMediaCapture):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):

2019-08-09  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GL][GStreamer] activate wrapped shared context
        https://bugs.webkit.org/show_bug.cgi?id=196966

        Reviewed by Žan Doberšek.

        This patch consists in four parts:

        1\ When the media player is instantiated, and it is intended to
        render textures, it will create a wrapped object of the
        application's GL context, and in order to populate the wrapped
        object with the GL vtable, the context has to be current. Thus,
        this patch makes current the shared WebKit application context,
        and populate the wrapped GstGLContext by activating it and filling
        in it. Afterwards, the wrapped context is deactivated.

        2\ This patch makes GL texture use the RGBA color space, thus the
        color transformation is done in GStreamer, and no further color
        transformation is required in WebKit.

        3\ Since it is not necessary to modify behavior if the decoder is
        imxvpudecoder, its identification and label were removed.

        4\ As only RGBA is used, the old color conversions when rendering
        using Cairo (fallback) were changed to convert the RGBA, as in
        GStreamer's format, to ARGB32, as in Cairo format -which depends
        on endianness.

        No new tests because there is no behavior change.

        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (WebCore::ImageGStreamer::ImageGStreamer): Only convert GStreamer
        RGBA to Cairo RGB32.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Removes
        the IMX VPU identification.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        Intializes the wrapped GL Context.
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTextureMapperFlags):
        Removes frame's color conversion.
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL):
        Instead of parsing a string, the GstCaps are created manually, and
        it is set to appsink, rather than a filtered linking.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Removes ImxVPU enumeration value.
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        Adds NoConvert option to texture copier, setting an identity
        matrix.
        (WebCore::VideoTextureCopierGStreamer::updateColorConversionMatrix):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h: Adds
        NoConvert enumeration value.

2019-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (iOS 13): united.com web forms do not respond to taps
        https://bugs.webkit.org/show_bug.cgi?id=200531

        Reviewed by Antti Koivisto and Wenson Hsieh.

        The bug is caused by the content change observer detecting “Site Feedback” link at the bottom of
        the page (https://www.united.com/ual/en/US/account/enroll/default) constantly getting re-generated
        in every frame via requestAnimationFrame when the page is opened with iPhone UA string.
        Note that the content re-generation can be reproduced even in Chrome if iPhone UA string is used.

        Ignore this constant content change in ContentChangeObserver as a site specific quirk.

        In the future, we should make ContentChangeObserver observe the final location of each element
        being observed so that we can ignore content that like this which is placed outside the viewport,
        and/or far away from where the user tapped.

        * page/Quirks.cpp:
        (WebCore::Quirks::shouldIgnoreContentChange const): Added.
        * page/Quirks.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::shouldObserveVisibilityChangeForElement):

2019-08-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Page: don't allow the domain to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=200109

        Reviewed by Brian Burg.

        The `PageAgent` is relied on by many of the other agents, so much so that it doesn't make
        sense to support the ability to "disable" (as well as "enable") the agent.

        When the first frontend connects, we should treat the `PageAgent` as active and available.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::timestamp):
        (WebCore::InspectorPageAgent::enable): Deleted.
        (WebCore::InspectorPageAgent::disable): Deleted.

        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::createStyleSheet):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightFrame):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::setFrameIdentifier):
        * inspector/agents/page/PageNetworkAgent.cpp:
        (WebCore::PageNetworkAgent::loaderIdentifier):
        (WebCore::PageNetworkAgent::frameIdentifier):
        (WebCore::PageNetworkAgent::scriptExecutionContext):
        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):

        * testing/Internals.cpp:
        (WebCore::InspectorStubFrontend::InspectorStubFrontend):
        (WebCore::InspectorStubFrontend::frontendLoaded): Added.
        (WebCore::InspectorStubFrontend::closeWindow):
        (WebCore::InspectorStubFrontend::sendMessageToFrontend):
        (WebCore::InspectorStubFrontend::frontendPage): Deleted.
        Ensure that the backend always gets notified via `InspectorFrontendHost.loaded` so that
        messages being sent to the frontend are batched.

2019-08-08  Chris Lord  <clord@igalia.com>

        Short-cut WebGLRenderingContext::getParameter() for ALPHA_BITS when alpha channel is disabled
        https://bugs.webkit.org/show_bug.cgi?id=200499

        Reviewed by Darin Adler.

        This patch adds a shortcut when a framebuffer isn't bound on WebGL
        canvases when retrieving ALPHA_BITS.

        No new tests, covered by existing tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        Return 0 for ALPHA_BITS if canvas has no alpha component.
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
        Return 0 for ALPHA_BITS if canvas has no alpha component.

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

        ScrollingStateNode is not ThreadSafeRefCounted but is ref'd / deref'd from several threads
        https://bugs.webkit.org/show_bug.cgi?id=200545

        Reviewed by Antti Koivisto.

        The ScrollingStateTree and its ScrollingStateNodes are being passed to the scrolling thread.
        ScrollingStateNode is not ThreadSafeRefCounted, which is potentially unsafe. Make it
        ThreadSafeRefCounted for safety in this patch given that using RefCounted here is either
        wrong or fragile.

        * page/scrolling/ScrollingStateNode.h:

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

        [FTW] Get WebKit, WebKit2, and MiniBrowser building and executing
        https://bugs.webkit.org/show_bug.cgi?id=200539
        <rdar://problem/54082550>

        Reviewed by Dean Jackson.

        * platform/graphics/win/BackingStoreBackendDirect2D.h:
        (WebCore::BackingStoreBackendDirect2D::renderTarget const):
        (WebCore::BackingStoreBackendDirect2D::surface const):
        (): Deleted.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp:
        (WebCore::BackingStoreBackendDirect2DImpl::~BackingStoreBackendDirect2DImpl):
        (WebCore::BackingStoreBackendDirect2DImpl::scroll):
        (WebCore::createDirect2DImageSurfaceWithFastMalloc): Deleted.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.h:
        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::DIBPixelData):
        * platform/graphics/win/DIBPixelData.h:
        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::fillRectWithRoundedHole):
        (WebCore::Direct2D::fillRectWithGradient):
        (WebCore::Direct2D::drawGlyphs):
        (WebCore::Direct2D::PlatformContextStateSaver::PlatformContextStateSaver): Deleted.
        (WebCore::Direct2D::PlatformContextStateSaver::~PlatformContextStateSaver): Deleted.
        (WebCore::Direct2D::PlatformContextStateSaver::save): Deleted.
        (WebCore::Direct2D::PlatformContextStateSaver::restore): Deleted.
        (WebCore::Direct2D::PlatformContextStateSaver::didSave const): Deleted.
        * platform/graphics/win/Direct2DOperations.h:
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::bitmapSize):
        (WebCore::Direct2D::bitmapResolution):
        (WebCore::Direct2D::createWicBitmap):
        (WebCore::Direct2D::createBitmap):
        (WebCore::Direct2D::createGDIRenderTarget):
        (WebCore::Direct2D::copyRectFromOneSurfaceToAnother):
        * platform/graphics/win/Direct2DUtilities.h:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformContext const):
        (WebCore::GraphicsContextPlatformPrivate::setAlpha):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginDraw):
        (WebCore::GraphicsContextPlatformPrivate::endDraw):
        (WebCore::GraphicsContext::beginDraw):
        (WebCore::GraphicsContext::endDraw):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::isAcceleratedContext const):
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        (WebCore::GraphicsContextImplDirect2D::fillRect):
        (WebCore::GraphicsContextImplDirect2D::fillRectWithRoundedHole):
        (WebCore::GraphicsContextImplDirect2D::drawGlyphs):
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        (WebCore::GraphicsContextPlatformPrivate::platformContext):
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::transform):
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::beginDraw):
        (WebCore::PlatformContextDirect2D::endDraw):
        * platform/graphics/win/PlatformContextDirect2D.h:
        (WebCore::PlatformContextStateSaver::PlatformContextStateSaver):
        (WebCore::PlatformContextStateSaver::~PlatformContextStateSaver):
        (WebCore::PlatformContextStateSaver::save):
        (WebCore::PlatformContextStateSaver::restore):
        (WebCore::PlatformContextStateSaver::didSave const):

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

        Unreviewed, address post-landing review comments for r248431.

        * Modules/indexeddb/IDBRequest.h:

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

        [iOS] Position image information should respect the image orientation
        https://bugs.webkit.org/show_bug.cgi?id=200487

        Reviewed by Simon Fraser.

        Re-factor CachedImage::imageSizeForRenderer() into another overriding
        function which does not scale the imageSize. Therefore the new function
        returns FloatSize while the original function returns LayoutSize.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer const):
        * loader/cache/CachedImage.h:
        * rendering/RenderElement.h:

2019-08-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename `queryObjects` to `queryInstances` for clarity
        https://bugs.webkit.org/show_bug.cgi?id=200520

        Reviewed by Brian Burg.

        Test: inspector/console/queryInstances.html

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPIImpl.prototype.queryInstances): Added.
        (CommandLineAPIImpl.prototype.queryObjects):

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

        Fix thread safety bug in AudioSourceProviderAVFObjC::prepare()
        https://bugs.webkit.org/show_bug.cgi?id=200542

        Reviewed by Jer Noble.

        Fix thread safety bug in AudioSourceProviderAVFObjC::prepare(). It calls callOnMainThread()
        from a background thread and captures makeRef(*this) in the lambda, even though |this| is a
        AudioSourceProviderAVFObjC, which subclasses RefCounted, not ThreadSafeRefCounted.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.h:

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

        Make IDBRequest ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=200540

        Reviewed by Alex Christensen.

        Make IDBRequest ThreadSafeRefCounted, as it looks like it is being ref'd / deref'd
        from several threads, in IDBConnectionProxy::notifyOpenDBRequestBlocked() for
        example.

        * Modules/indexeddb/IDBRequest.h:

2019-08-08  Brady Eidson  <beidson@apple.com>

        Do not allow navigations of frames about to get replaced by the result of evaluating javascript: URLs
        <rdar://problem/53788893> and https://bugs.webkit.org/show_bug.cgi?id=198786

        Reviewed by Geoff Garen.

        Covered by API Test

        Add a "willReplaceWithResultOfExecutingJavascriptURL" flag which is respected inside FrameLoader::isNavigationAllowed

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isNavigationAllowed const):

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

        Add runtime flag for lazy image loading
        https://bugs.webkit.org/show_bug.cgi?id=199794

        Reviewed by Darin Adler.

        Add loading attribute and expose it on HTMLImageElement.

        * html/HTMLAttributeNames.in:
        * html/HTMLImageElement.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setLazyImageLoadingEnabled):
        (WebCore::RuntimeEnabledFeatures::lazyImageLoadingEnabled const):

2019-08-08  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Remove the reference to WebCore::Animation from TextureMapperAnimation
        https://bugs.webkit.org/show_bug.cgi?id=200533

        Reviewed by Žan Doberšek.

        Pass the relevant parameters to TextureMapperAnimation instead of creating a new WebCore::Animation
        inside it.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::timingFunctionForAnimationValue):
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        (WebCore::TextureMapperAnimation::apply):
        (WebCore::TextureMapperAnimation::isActive const):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        (WebCore::TextureMapperAnimation::keyframes const):
        (WebCore::TextureMapperAnimation::timingFunction const):
        (WebCore::TextureMapperAnimation::animation const): Deleted.

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

        [GTK] WebKitWebProcess crashes when viewing an HTML with a <video> element referencing unknown file
        https://bugs.webkit.org/show_bug.cgi?id=200530

        Reviewed by Xabier Rodriguez-Calvar.

        Not amenable to unit testing.

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

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

        [WHLSL] Prune unreachable stdlib functions after the Checker runs
        https://bugs.webkit.org/show_bug.cgi?id=200518

        Reviewed by Robin Morisset.

        We now prune unreachable stdlib functions after the checker runs. We must
        do this after the checker runs because that's when we resolve all remaining
        function calls. While we can't prune unreachable user code, because we must
        still report errors in it, we can prune unreachable standard library code
        because we know a priori that it has no errors. This is a 10ms end-to-end
        speedup in compute_boids.

        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLPruneUnreachableStandardLibraryFunctions.cpp: Added.
        (WebCore::WHLSL::pruneUnreachableStandardLibraryFunctions):
        * Modules/webgpu/WHLSL/WHLSLPruneUnreachableStandardLibraryFunctions.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-08-07  Kate Cheney  <katherine_cheney@apple.com>

        Adopt non-deprecated CGColorSpace API
        https://bugs.webkit.org/show_bug.cgi?id=184358

        Reviewed by Darin Adler.

        * platform/ScreenProperties.h:
        (WebCore::ScreenData::decode):

        We changed the deprecated CGColorSpaceCreateWithICCProfile function to 
        CGColorSpaceCreateWithICCData. 
 
2019-08-07  Sam Weinig  <weinig@apple.com>

        [WHLSL] Metal code generation takes a long time uniquing UnnamedTypes
        https://bugs.webkit.org/show_bug.cgi?id=200512

        Reviewed by Saam Barati.

        Instead of using a trie for unnamed type uniquing, use the same technique used
        in SynthesizeConstructors and use a HashMap of UnnamedTypeKeys. To make this
        profitable, we also need to devirtualize the hash and equality functions on
        UnnamedType, instead using an enum + switch. While this change only devirtualizes
        the UnnamedType subtree, we should probably do it for the entire AST in a future
        change.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.cpp: Added.
        (WebCore::WHLSL::AST::UnnamedType::hash const):
        (WebCore::WHLSL::AST::UnnamedType::operator== const):
         * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        Devirtualize hash, operator== and type predicates.

        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedTypeHash.h: Added.
        (WebCore::WHLSL::UnnamedTypeKey::UnnamedTypeKey):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        (WebCore::WHLSL::UnnamedTypeKey::UnnamedTypeKey): Deleted.
        Moved UnnamedTypeKey into it's own header from WHLSLSynthesizeConstructors.cpp
        
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::BaseTypeNameNode::BaseTypeNameNode):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::kind):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isReferenceTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isPointerTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayReferenceTypeNameNode const):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::isArrayTypeNameNode const):
        Devirtualize BaseTypeNameNode as well. In a future change, we should consider removing
        this class entirely and instead mapping directly to a parent/mangled name pair.
 
        (WebCore::WHLSL::Metal::TypeNamer::visit):
        (WebCore::WHLSL::Metal::TypeNamer::find):
        (WebCore::WHLSL::Metal::TypeNamer::createNameNode):
        (WebCore::WHLSL::Metal::parent):
        (WebCore::WHLSL::Metal::TypeNamer::insert):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypeDefinitions):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForType):
        (WebCore::WHLSL::Metal::findInVector): Deleted.
        (WebCore::WHLSL::Metal::find): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::emitAllUnnamedTypeDefinitions): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        Switch from a Vector based trie to a HashMap for UnnamedType uniquing. Also
        use UnnamedType::Kind where possible with switch statements to clarify code.

        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

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

        Web Inspector: Uncaught Exception: TimelineAgent already enabled
        https://bugs.webkit.org/show_bug.cgi?id=200513

        Reviewed by Joseph Pecoraro.

        Call `disable` when the last frontend disconnects, so that if Web Inspector is reopened the
        `TimelineAgent` is back to being in a disabled state.

        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):

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

        Muted <video> elements can block display from sleeping.
        https://bugs.webkit.org/show_bug.cgi?id=200511

        Reviewed by Eric Carlson.

        Test: media/video-muted-holds-sleep-assertion.html

        Modify the shouldDisableSleep() method to take muting into account.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldDisableSleep const):

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

        [WHLSL] Simplify and eliminate redundant work in WHLSLFunctionWriter.cpp
        https://bugs.webkit.org/show_bug.cgi?id=200460

        Reviewed by Myles Maxfield.

        2 trivial simplifications:
        - Replace FunctionDeclarationWriter by a standalone function, there was no reason to make it a subclass of Visitor
        - Avoid an exponential blow-up in the computation of reachable functions.

        I have way too much noise on my system (swings back and forth between 7 and 12ms for this phase) to measure a performance win,
        but since this patch simplifies things without adding complexity I think it is worth it.

        No new test as there is no functional change intended.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::declareFunction):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::RenderFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::ComputeFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        (WebCore::WHLSL::Metal::metalFunctions):

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

        [WHLSL] checkRecursion, checkTextureReferences, and EscapedVariableCollector should skip stdlib functions
        https://bugs.webkit.org/show_bug.cgi?id=200510

        Reviewed by Myles C. Maxfield.

        We can skip walking the stdlib part of the AST in various semantic checking phases:
        - checkRecursion: the stdlib does not have recursion
        - checkTextureReferences: the stdlib does not have references to textures
        - EscapedVariableCollector: this is used inside preserveVariableLifetimes, and
          the stdlib never escapes any variables.
        
        This patch speeds up checkRecursion, checkTextureReferences, and preserveVariableLifetimes
        by about 1ms each, leading to a 3ms compile time speedup in compute_boids.

        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:
        (WebCore::WHLSL::TextureReferencesChecker::visit):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::preserveVariableLifetimes):
        (WebCore::WHLSL::EscapedVariableCollector::escapeVariableUse): Deleted.
        (WebCore::WHLSL::EscapedVariableCollector::takeEscapedVariables): Deleted.
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:

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

        Add to InteractionInformationAtPosition information about whether the element is in a subscrollable region
        https://bugs.webkit.org/show_bug.cgi?id=200374
        rdar://problem/54095519

        Reviewed by Tim Horton.

        Add to InteractionInformationAtPosition a ScrollingNodeID which represents the enclosing scrolling
        node that affects the targeted element's position. We use this to find a UIScrollView in the UI process.
        
        The entrypoint to finding the enclosing scrolling node is ScrollingCoordinator::scrollableContainerNodeID(),
        which calls RenderLayerCompositor::asyncScrollableContainerNodeID() to look for a scrolling ancestor in
        the current frame, and then looks for an enclosing scrollable frame, or a scrolling ancestor in
        the enclosing frame.
        
        There's a bit of subtlety in RenderLayerCompositor::asyncScrollableContainerNodeID() because if you're asking
        for the node that scrolls the renderer, if the renderer itself has a layer and is scrollable, you want
        its enclosing scroller.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollableContainerNodeID const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::scrollableContainerNodeID const):
        * page/scrolling/ScrollingCoordinator.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::asyncScrollableContainerNodeID):
        * rendering/RenderLayerCompositor.h:

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

        [WHLSL] cache results of argumentTypeForAndOverload inside Checker
        https://bugs.webkit.org/show_bug.cgi?id=200462

        Reviewed by Robin Morisset.

        When I profiled the time we spent in the checker, it turned out that 
        argumentTypeForAndOverload is one of the most expensive functions. If
        we just cache the results of that function, we can avoid 99% of the
        duplicate allocations that function does in compute_boids. This patch
        is a ~4ms speedup in the checker on compute_boids.

        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::AndOverloadTypeKey::AndOverloadTypeKey):
        (WebCore::WHLSL::AndOverloadTypeKey::isEmptyValue const):
        (WebCore::WHLSL::AndOverloadTypeKey::isHashTableDeletedValue const):
        (WebCore::WHLSL::AndOverloadTypeKey::hash const):
        (WebCore::WHLSL::AndOverloadTypeKey::operator== const):
        (WebCore::WHLSL::AndOverloadTypeKey::Hash::hash):
        (WebCore::WHLSL::AndOverloadTypeKey::Hash::equal):
        (WebCore::WHLSL::AndOverloadTypeKey::Traits::isEmptyValue):
        (WebCore::WHLSL::Checker::argumentTypeForAndOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::argumentTypeForAndOverload): Deleted.

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

        Remove IDBDatabaseIdentifier::m_sessionID
        https://bugs.webkit.org/show_bug.cgi?id=200489

        Reviewed by Darin Adler.

        IDBDatabaseIdentifier can be created without a valid session ID.
        Its session ID is only used in NetworkProcess where it can be retrieved from the IDBServer.
        In WebProcess, session ID is also known from the IDB connection.
        Update SQLiteIDBBackingStore to store a session ID which is given from its IDBServer.
        No observable change of behavior.

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash const):
        (WebCore::IDBDatabaseIdentifier::databaseName const):
        (WebCore::IDBDatabaseIdentifier::encode const):
        (WebCore::IDBDatabaseIdentifier::decode):
        (WebCore::IDBDatabaseIdentifier::sessionID const): Deleted.
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::SQLiteIDBBackingStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        (WebCore::IDBServer::SQLiteIDBBackingStore::sessionID const):
        * Modules/indexeddb/server/SQLiteIDBCursor.cpp:
        (WebCore::IDBServer::SQLiteIDBCursor::internalFetchNextRecord):

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

        Fix thread safety issue under JSHistory::visitAdditionalChildren()
        https://bugs.webkit.org/show_bug.cgi?id=200504

        Reviewed by Darin Adler.

        JSHistory::visitAdditionalChildren() is called from a GC thread and was calling
        History::cachedState() whose implementation goes deep into WebCore
        (FrameLoader / HistoryController). Among other things, it null checks m_window
        which is a WeakPtr and then later dereferences it to get the Frame object, which
        is not safe from the non-main thread.

        To address the issue, introduce a simpler cachedStateForGC() getter which is
        thread safe, and use it in JSHistory::visitAdditionalChildren().

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::visitAdditionalChildren):
        * page/History.h:

2019-08-07  Priyanka Agarwal  <pagarwal999@apple.com>

        Allow clients to toggle a text input field between being viewable and having characters hidden while maintaining 
        a yellow auto-filled appearance
        https://bugs.webkit.org/show_bug.cgi?id=200037
        rdar://problem/51900961

        Reviewed by Daniel Bates.

        Tests: fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset.html
               fast/forms/auto-fill-button/input-strong-password-viewable.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        Adding CSSSelector case for new pseudo class of AutofillStrongPasswordViewable.

        * css/CSSSelector.h: Added PseudoClassAutofillStrongPasswordViewable

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const): Added handling for SelectorChecker.cpp

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::isAutofilledStrongPasswordViewable):
        Checking if the element is an input element and considered to be
        AutoFilled and Viewable. Returns a boolean accordingly.

        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        Add -webkit-autofill-strong-password-viewable css class.

        * css/html.css:
        (input:-webkit-autofill, input:-webkit-autofill-strong-password, input:-webkit-autofill-strong-password-viewable):
        (input:-webkit-autofill-strong-password-viewable):
        (input:-webkit-autofill, input:-webkit-autofill-strong-password): Deleted. Updated to include viewable pseudo class.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        Add case handling for PseudoClassAutofillStrongPasswordViewable.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        Add boolean m_isAutoFilledAndViewable for representing if the
        input element is both AutoFilled and should be viewable.
        Don't update the viewable treatment in setValueFromRenderer() because even if the user makes edits to the input field
        the visual treatment should still be applied.

        (WebCore::HTMLInputElement::resignStrongPasswordAppearance):
        Updates boolean representing if input element is autofilled and viewable to false.

        (WebCore::HTMLInputElement::reset):
        Updates boolean representing if input element is autofilled and viewable to false.

        (WebCore::HTMLInputElement::setAutoFilledAndViewable):
        Setter function for the boolean of m_isAutoFilledAndViewable.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isAutoFilledAndViewable const):
        Creating boolean value for m_isAutoFilledAndViewable.

        * testing/Internals.cpp:
        (WebCore::Internals::setAutoFilledAndViewable): Adding for testing purposes.
        * testing/Internals.h: Adding for testing purposes.
        * testing/Internals.idl:

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

        Declarations and implementations of findCaret(Min|Max)imumOffset have inconsistent signatures
        https://bugs.webkit.org/show_bug.cgi?id=200503

        Reviewed by Darin Adler.

        No change in behavior.

        * rendering/SimpleLineLayoutFunctions.h:

        Update these function declarations to take "const RenderText&", which matches the signatures of their inline
        implementations below.

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

        Extra space inserted at start of line when inserting a newline in Mail compose
        https://bugs.webkit.org/show_bug.cgi?id=200490
        <rdar://problem/53501354>

        Reviewed by Antti Koivisto.

        This started happening after r244494, which deferred editor state computation until the next layer tree flush
        when changing selection. After inserting a paragraph, the act of computing an editor state ensured that the text
        node containing the caret drops out of simple line layout, while grabbing the characters near the selection
        (i.e., calling charactersAroundPosition). This meant that when we subsequently ask positionAfterSplit whether it
        isRenderedCharacter() at the end of the command, we are guaranteed to have line boxes, so we get a meaningful
        answer and avoid inserting an extra non-breaking space.

        However, after r244494, we defer the editor state computation until the end of the edit command; this means that
        we may not have line boxes for positionAfterSplit's text node renderer, due to remaining in simple line layout.
        In turn, this means that we end up hitting the assertion in containsRenderedCharacterOffset in debug builds; on
        release builds, we simply return false from containsRenderedCharacterOffset, which causes us to insert an extra
        space.

        To fix this, we educate RenderText::containsRenderedCharacterOffset about simple line layout.

        Test: editing/inserting/insert-paragraph-in-designmode-document.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::containsRenderedCharacterOffset const):
        (WebCore::RenderText::containsCaretOffset const):

        Changed to use SimpleLineLayout::containsOffset.

        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::containsOffset):

        I first contrasted the behavior of RenderTextLineBoxes::containsOffset in the cases where the OffsetType is
        CaretOffset or CharacterOffset, and found that the only interesting differences were:

        1. The caret offset type case has special handling for line breaks.
        2. Both offset types have handling for reversed text.
        3. The end offset of a line box contains a caret offset, but not a character offset.

        For the purposes of OffsetType CharacterOffset, (1) is irrelevant; furthermore, (2) is already not handled by
        logic in containsCaretOffset(). Thus, the only major difference in the CharacterOffset case should be (3), which
        we handle by only allowing the case where the given offset is equal to the very end of a text run for caret
        offsets, and not character offsets.

        (WebCore::SimpleLineLayout::containsCaretOffset): Deleted.

        Renamed to just containsOffset.

2019-08-07  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-08-07  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename FormattingContext::layoutOutOfFlowDescendants to layoutOutOfFlowContent
        https://bugs.webkit.org/show_bug.cgi?id=200502
        <rdar://problem/54032534>

        Reviewed by Antti Koivisto.

        The layoutOutOfFlowDescendants name is not entirely accurate. In a formatting context we only
        lay out the out-of-flow boxes that actually belong to the current formatting context.

        <div style="float: left">
          <div id=outer style="position: absolute">
            <div id=inner style="position: absolute"></div>
          </div>
        </div>

        The float's formatting context only lays out the outer absolutely positioned box. The inner box
        (which is also an out-of-flow descendant of the float box) is taken care of by the outer box.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const): Deleted.
        * layout/FormattingContext.h:
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):

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

        [LFC] Introduce Layout::Phase class
        https://bugs.webkit.org/show_bug.cgi?id=200473
        <rdar://problem/53996061>

        Reviewed by Antti Koivisto.

        It helps to check whether we could run certain actions like layout while constructing the tree.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutState.h:
        * layout/floats/FloatingContext.cpp:
        * layout/inlineformatting/InlineLine.cpp:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesFormattingContext const):
        (WebCore::Layout::Box::containingBlock const):
        (WebCore::Layout::Box::formattingContextRoot const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutTree):

2019-08-07  Chris Lord  <clord@igalia.com>

        context-attributes-alpha-depth-stencil-antialias fails on WPE WebKit
        https://bugs.webkit.org/show_bug.cgi?id=200434

        Reviewed by Žan Doberšek.

        This patch fixes 16-bit surfaces being used for FBOs with no
        alpha component when using the GLES implementation of GraphicsContext3D.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        Use GL_UNSIGNED_BYTE instead of GL_UNSIGNED_SHORT_5_6_5 for surfaces with no alpha.

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

        [WHLSL] Make resolveFunction in Checker faster
        https://bugs.webkit.org/show_bug.cgi?id=200287

        Reviewed by Robin Morisset.

        This patch makes compute_boids faster by making function overload
        resolution faster inside the Checker. It's a ~6ms speedup in the
        checker. The main idea is to limit the number of overloads we need
        to look for by using a hash table that describes a function's type
        instead of just using a hash table keyed by a function's name.
        
        The interesting implementation detail here is we must construct entries
        in the hash table such that they still allow constants to be resolved to
        various types. This means that the key in the hash table must normalize
        the vector of types it uses to express a function's identity. The normalization
        rules are:
        - int => float
        - uint => float
        - T* => float*
        - T[] => float*
        
        The first two rules are because int constants can be matched against
        the float and uint types. The latter two rules are because the null
        literal can be matched against any pointer or any array reference
        (we pick float* arbitrarily). Even though it seems like these
        normalization rules would drastically broaden the efficacy of the hash
        table, we still see a 100x reduction in the number of overloads we must
        resolve inside compute_boids. We go from having to resolve 400,000
        overloads to just resolving 4,000.

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::FunctionKey::FunctionKey):
        (WebCore::WHLSL::FunctionKey::isEmptyValue const):
        (WebCore::WHLSL::FunctionKey::isHashTableDeletedValue const):
        (WebCore::WHLSL::FunctionKey::hash const):
        (WebCore::WHLSL::FunctionKey::operator== const):
        (WebCore::WHLSL::FunctionKey::Hash::hash):
        (WebCore::WHLSL::FunctionKey::Hash::equal):
        (WebCore::WHLSL::FunctionKey::Traits::isEmptyValue):
        (WebCore::WHLSL::Checker::Checker):
        (WebCore::WHLSL::Checker::wrappedFloatType):
        (WebCore::WHLSL::Checker::genericPointerType):
        (WebCore::WHLSL::Checker::normalizedTypeForFunctionKey):
        (WebCore::WHLSL::Checker::resolveFunction):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::resolveFunction): Deleted.

2019-08-06  Loïc Yhuel  <loic.yhuel@softathome.com>

        Fix 32-bit Linux build after r248282
        https://bugs.webkit.org/show_bug.cgi?id=200491

        Reviewed by Youenn Fablet.

        minInterToneGapMs must be a size_t like interToneGap for std::max call.
        The other constants are updated for consistency, even if the compiler
        was able to cast them automatically.

        * Modules/mediastream/RTCDTMFSender.cpp:

2019-08-06  Commit Queue  <commit-queue@webkit.org>

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

        Broke internal builds (Requested by drousso on #webkit).

        Reverted changeset:

        "Web Inspector: Styles: show @supports CSS groupings"
        https://bugs.webkit.org/show_bug.cgi?id=200419
        https://trac.webkit.org/changeset/248289

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

        Fix inefficiency in HTTPHeaderMap::set(CFStringRef, const String&)
        https://bugs.webkit.org/show_bug.cgi?id=200475

        Reviewed by Darin Adler.

        In the case where CFStringGetCStringPtr() succeeds in returning us a pointer
        to the CFStringRef underlying characters but it is not a common header, we
        would fall back to calling HTTPHeaderMap::set(const String&, const String&)
        which would unecessarily call findHTTPHeaderName() again to try and determine
        if it is a common header. Avoid this by introducing a new setUncommonHeader()
        private method and calling this one instead. Also got rid of some code
        duplication at the same time.

        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::set):
        (WebCore::HTTPHeaderMap::setUncommonHeader):
        * platform/network/HTTPHeaderMap.h:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPHeader):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::setServerCertificate):

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

        [WHLSL] Remove the auto initialize variables pass
        https://bugs.webkit.org/show_bug.cgi?id=200472

        Reviewed by Robin Morisset.

        From a separation of concerns perspective, it's a bit nicer to make variables
        without initializers call their default constructors as a transformation over the AST.
        This removes the need for the lowering to need to worry about such things. However,
        changing metal lowering to deal with this is trivial. It means we need to change one
        line of code in Metal code generation, and we get to remove a ~50 LOC AST pass.
        Also, in this case, it saves us from the compile time hit of having to run the
        auto initialize variables phase, which takes ~1.2ms on compute_boids.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp: Removed.
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.h: Removed.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2019-08-06  Sam Weinig  <weinig@apple.com>

        WHLSL Metal code generation unnecessarily does string copies by passing partial results as Strings
        https://bugs.webkit.org/show_bug.cgi?id=200471

        Reviewed by Saam Barati.

        Avoid string copies by passing a single StringBuilder all the way through Metal code
        generation and only converting to a String when passing the constructed shader to Metal
        API.
        
        Where possible, use StringView in lieu of String for temporary strings being passed to
        the StringBuilder to avoid the allocation overhead of StringImpl. 

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:
        (WebCore::WHLSL::AST::toString):
        Switch to StringView.

        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        (WebCore::WHLSL::AST::BuiltInSemantic::toString const):
        Switch to StringView.

        * Modules/webgpu/WHLSL/AST/WHLSLEntryPointType.h:
        (WebCore::WHLSL::AST::toString):
        Switch to StringView.

        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        Remove unnecessary "private:".
    
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        (WebCore::WHLSL::AST::ResourceSemantic::toString):
        Switch to StringView.

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitResourceSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitBuiltInsSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitMangledInputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitMangledOutputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::emitUnpackResourcesAndNamedBuiltIns):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitHelperTypes):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitSignature):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitUnpack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::emitPack):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceSignature): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledInputPath): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledOutputPath): Deleted.
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns): Deleted.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes): Deleted.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::signature): Deleted.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::unpack): Deleted.
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack): Deleted.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes): Deleted.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::signature): Deleted.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::unpack): Deleted.
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack): Deleted.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::helperTypes): Deleted.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature): Deleted.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::unpack): Deleted.
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::pack): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        Rather than have scaffolding return strings, pass in StringBuilders everywhere. 

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitConstantExpressionString):
        (WebCore::WHLSL::Metal::generateMetalFunctionsMapping):
        (WebCore::WHLSL::Metal::emitSharedMetalFunctions):
        (WebCore::WHLSL::Metal::emitMetalFunctions):
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::FunctionDeclarationWriter): Deleted.
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::toString): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::toString): Deleted.
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::constantExpressionString): Deleted.
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::RenderFunctionDefinitionWriter): Deleted.
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::ComputeFunctionDefinitionWriter): Deleted.
        (WebCore::WHLSL::Metal::sharedMetalFunctions): Deleted.
        (WebCore::WHLSL::Metal::metalFunctions): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h:
        Rather than returning Strings from function generation functions, pass in StringBuilders everywhere.

        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.cpp:
        (WebCore::WHLSL::Metal::metalCodeProlog):
        (WebCore::WHLSL::Metal::dumpMetalCodeIfNeeded):
        (WebCore::WHLSL::Metal::generateMetalCode):
        (WebCore::WHLSL::Metal::generateMetalCodeShared): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h:
        Switch RenderMetalCode and ComputeMetalCode to contain StringBuilders to allow
        delaying conversion to String to the latest point possible.
        
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypeDeclarations):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitAllUnnamedTypeDefinitions):
        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypeDefinitions):
        (WebCore::WHLSL::Metal::TypeNamer::emitMetalTypes):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::MetalTypeDeclarationWriter): Deleted.
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::toString): Deleted.
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::visit): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDeclarations): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDefinitions): Deleted.
        (WebCore::WHLSL::Metal::TypeNamer::metalTypes): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        Rather than returning Strings from function generation functions, pass in StringBuilders everywhere.

        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseResourceSemantic):
        Remove use of _str, which allocates a String, and just use a StringView directly.

        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        Switch RenderPrepareResult and ComputePrepareResult to contain StringBuilders to allow
        delaying conversion to String to the latest point possible.

        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetFunctions):
        Convert StringBuilders to String at the last moment necessary. Adds a FIXME to improve
        in the future by adding direct conversion from StringBuilder to NSString to avoid another
        copy.

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

        [WHLSL] Reduce the number of variables that make it into the global struct by skipping stdlib functions and internal uses of MakePointerExpression/MakeArrayReference
        https://bugs.webkit.org/show_bug.cgi?id=200463

        Reviewed by Myles C. Maxfield.

        This patch makes it so that we put fewer variables in the global struct.
        This decreases end-to-end running time in compute_boids by 30% (with p = 0.0001).
        
        We achieve this in two ways:
        1. We track if each function is user code or "standard library" code. We also
        count native functions as the standard library. We know a priori that the
        standard library never escapes any variables. So the preserve variable
        lifetimes phase skips analyzing all standard library functions and also
        skips passing the global struct to any standard library functions.
        
        2. We internally emit MakePointerExpression/MakeArrayReferenceExpression nodes in
        the compiler in various phases. We sometimes emit these nodes in such a way
        that we know that this address-of expression does not cause the variable to
        escape. We now mark each address-of expressions as either:
        - Conservatively escaping. We conservatively do this for all user code.
        - Not escaping. This means that this address-of operation definitely does
        not escape the variable. If a variable never has an escaping use, we will
        omit putting this variable in the struct.

        * Modules/webgpu/WHLSL/AST/WHLSLAddressEscapeMode.h: Added.
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        (WebCore::WHLSL::AST::FunctionDeclaration::parsingMode const):
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::MakeArrayReferenceExpression):
        (WebCore::WHLSL::AST::MakeArrayReferenceExpression::mightEscape const):
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        (WebCore::WHLSL::AST::MakePointerExpression::MakePointerExpression):
        (WebCore::WHLSL::AST::MakePointerExpression::mightEscape const):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::Parser::parseComputeFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseVertexOrFragmentFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
        (WebCore::WHLSL::Parser::parseOperatorFunctionDeclaration):
        (WebCore::WHLSL::Parser::parsePossiblePrefix):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLParsingMode.h: Added.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        (WebCore::WHLSL::includeStandardLibrary):
        * 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):
        * WebCore.xcodeproj/project.pbxproj:

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

        Adopt -expectMinimumUpcomingSampleBufferPresentationTime:
        https://bugs.webkit.org/show_bug.cgi?id=200457
        <rdar://problem/53961130>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-minimumupcomingpresentationtime.html

        Adopt a new API vended by AVSampleBufferDisplayLayer, piped from SourceBuffer down
        through SourceBufferPrivate to SourceBufferPrivateAVFObjC. This value should be
        reset and updated when new samples are appended.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::updateMinimumUpcomingPresentationTime):
        (WebCore::SourceBuffer::resetMinimumUpcomingPresentationTime):
        (WebCore::SourceBuffer::minimumUpcomingPresentationTimeForTrackID):
        (WebCore::SourceBuffer::setMaximumQueueDepthForTrackID):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::canSetMinimumUpcomingPresentationTime const):
        (WebCore::SourceBufferPrivate::setMinimumUpcomingPresentationTime):
        (WebCore::SourceBufferPrivate::clearMinimumUpcomingPresentationTime):
        (WebCore::SourceBufferPrivate::enqueuedSamplesForTrackID):
        (WebCore::SourceBufferPrivate::minimumUpcomingPresentationTimeForTrackID):
        (WebCore::SourceBufferPrivate::setMaximumQueueDepthForTrackID):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const):
        (WebCore::SourceBufferPrivateAVFObjC::setMinimumUpcomingPresentationTime):
        (WebCore::SourceBufferPrivateAVFObjC::clearMinimumUpcomingPresentationTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::minimumUpcomingPresentationTimeForTrackID):
        (WebCore::MockSourceBufferPrivate::setMaximumQueueDepthForTrackID):
        (WebCore::MockSourceBufferPrivate::canSetMinimumUpcomingPresentationTime const):
        (WebCore::MockSourceBufferPrivate::setMinimumUpcomingPresentationTime):
        (WebCore::MockSourceBufferPrivate::clearMinimumUpcomingPresentationTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * testing/Internals.cpp:
        (WebCore::Internals::minimumUpcomingPresentationTimeForTrackID):
        (WebCore::Internals::setMaximumQueueDepthForTrackID):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Add release assert against InvalidationRuleSet mutation during invalidation
        https://bugs.webkit.org/show_bug.cgi?id=200467

        Reviewed by Chris Dumez.

        Try to get a more informative stack for rdar://problem/53413013

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::~DocumentRuleSets):
        (WebCore::DocumentRuleSets::collectFeatures const):
        * css/DocumentRuleSets.h:
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):

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

        REGRESSION: Cannot tap on any buttons on m.naver.com home screen on iPad
        https://bugs.webkit.org/show_bug.cgi?id=200466

        Reviewed by Zalan Bujtas.

        The page calls preventDefault() for a mouse event generated by a site specific quirk.

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

        Disable the quirk for the "m." subdomain. This is a mobile site that don't need or expect them.

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

        [iPadOS] Unable to increase zoom level on Google using the Aa menu
        https://bugs.webkit.org/show_bug.cgi?id=200453
        <rdar://problem/52278579>

        Reviewed by Tim Horton.

        Makes a couple of minor adjustments to how layout size scale factor is handled in ViewportConfiguration, to
        address some scenarios in which adjusting WKWebView's _viewScale does not have any apparent effect on the page.
        See changes below for more detail.

        Tests: fast/viewport/ios/non-responsive-viewport-after-changing-view-scale.html
               fast/viewport/ios/responsive-viewport-with-minimum-width-after-changing-view-scale.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::initialScaleFromSize const):

        When the page is either zoomed in or zoomed out using _viewScale, let the specified initial scale take
        precedence over the scale computed by fitting the content width to the view width, or the scale computed by
        fitting the content height to the view height.

        This avoids a scenario in which nothing happens when increasing view scale in a responsively designed web page
        that has a fixed minimum width. Before this change, when computing the initial scale at a view scale that would
        not allow the entire content width of the page to fit within the viewport, the new initial scale would remain
        unchanged if the initial scale in the meta viewport is not also set to 1, because a new initial scale would be
        computed in ViewportConfiguration::initialScaleFromSize to accomodate for the entire content width.

        Our new behavior allows us to zoom into the page, even if doing so would cause horizontal scrolling.

        (WebCore::ViewportConfiguration::updateConfiguration):

        When the page is either zoomed in or zoomed out using _viewScale and the default viewport configuration has a
        fixed width (e.g. on iPhone), then adjust the width of the default viewport configuration to account for the
        _viewScale. For example, the default width of a viewport-less web page is 980px on iPhone; at a view scale of 2,
        this would become 490px instead, and at 0.5 view scale, it would become 1960px.

        This ensures that on iPhone, for web pages without a meta viewport, changing the view scale still changes the
        layout and initial scale of the web page.

        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::layoutSizeIsExplicitlyScaled const):

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

        [LFC] Remove out-of-flow descendants from Container
        https://bugs.webkit.org/show_bug.cgi?id=200430
        <rdar://problem/53923980>

        Reviewed by Antti Koivisto.

        The out-of-flow descendant list is the last "formatting context type" bit in the layout tree.
        Let's cached them in the FormattingStates instead for now. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::addOutOfFlowBox):
        (WebCore::Layout::FormattingState::outOfFlowBoxes const):
        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::run):
        * layout/LayoutState.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::addOutOfFlowDescendant): Deleted.
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutTree):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        Web Inspector: Styles: show @supports CSS groupings
        https://bugs.webkit.org/show_bug.cgi?id=200419

        Reviewed by Joseph Pecoraro.

        Test: inspector/css/getMatchedStylesForNode.html

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildArrayForGroupings): Added.
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::buildMediaObject): Deleted.
        (WebCore::fillMediaListChain): Deleted.

        * css/MediaList.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::MediaQuerySet):
        Remove the `lastLine` as it was never set by anyone and wasn't used by Web Inspector.

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

        Make Logger::log thread safe so that it can be used from background threads
        https://bugs.webkit.org/show_bug.cgi?id=200448

        Reviewed by Eric Carlson.

        No change of behavior.

        * dom/Document.cpp:
        (WebCore::crossThreadCopy):
        (WebCore::Document::didLogMessage):
        Make sure to hop to the main thread if needed.
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):
        Remove hopping to the main thread.
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        Remove hopping to the main thread.

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

        Can't use $0, $1 etc when inspecting Google Docs pages because the content uses these for function names
        https://bugs.webkit.org/show_bug.cgi?id=195834

        Reviewed by Joseph Pecoraro.

        Allow the user to alias saved results by providing a different prefix (e.g. "$") from within
        Web Inspector. When changing the alias, all existing saved results will update to be
        reference-able from the new alias.

        Test: inspector/runtime/setSavedResultAlias.html

        * inspector/CommandLineAPIModuleSource.js:
        (CommandLineAPI):

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

        Web Inspector: Timelines: disable related agents when the tab is closed
        https://bugs.webkit.org/show_bug.cgi?id=200118

        Reviewed by Joseph Pecoraro.

        Rework how `enable`/`disable` is used for timeline-related agents so that events are not sent
        and data isn't kept alive when the Timelines tab isn't enabled.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::enable):
        (WebCore::InspectorTimelineAgent::disable):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        (WebCore::InspectorTimelineAgent::mainFrameStartedLoading):
        (WebCore::InspectorTimelineAgent::startProgrammaticCapture):
        (WebCore::InspectorTimelineAgent::stopProgrammaticCapture):
        Rename `m_enabled*` to `m_tracking*` to match other timeline-related agents.

        * inspector/agents/InspectorMemoryAgent.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::enable):
        (WebCore::InspectorMemoryAgent::disable):
        (WebCore::InspectorMemoryAgent::didHandleMemoryPressure):

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::trackingInspectorTimelineAgent): Added.
        (WebCore::InstrumentingAgents::setTrackingInspectorTimelineAgent): Added.
        (WebCore::InstrumentingAgents::persistentInspectorTimelineAgent): Added.
        (WebCore::InstrumentingAgents::setPersistentInspectorTimelineAgent): Added.
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::reset):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willCallFunctionImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::willEvaluateScriptImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didInvalidateLayoutImpl):
        (WebCore::InspectorInstrumentation::willLayoutImpl):
        (WebCore::InspectorInstrumentation::willCompositeImpl):
        (WebCore::InspectorInstrumentation::didCompositeImpl):
        (WebCore::InspectorInstrumentation::willPaintImpl):
        (WebCore::InspectorInstrumentation::didPaintImpl):
        (WebCore::InspectorInstrumentation::willRecalculateStyleImpl):
        (WebCore::InspectorInstrumentation::didScheduleStyleRecalculationImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleTimeStampImpl):
        (WebCore::InspectorInstrumentation::startProfilingImpl):
        (WebCore::InspectorInstrumentation::stopProfilingImpl):
        (WebCore::InspectorInstrumentation::timelineAgentTracking): Added.
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireObserverCallbackImpl):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::timelineAgentEnabled): Deleted.
        * bindings/js/JSExecStateInstrumentation.h:
        (WebCore::JSExecState::instrumentFunctionInternal):
        Rename for clarity/correctness:
         - `inspectorTimelineAgent` => `trackingInspectorTimelineAgent`
         - `persistentInspectorTimelineAgent` => `inspectorTimelineAgent`

2019-08-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Specifying huge font-size causes crashing
        https://bugs.webkit.org/show_bug.cgi?id=200340

        Reviewed by Don Olmstead.

        Covered by existing tests.

        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Use GetTextFace to
        get font face names instead of GetOutlineTextMetrics which returns
        null for huge size fonts.

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

        Response constructor doesn't throw on disturbed ReadableStream
        https://bugs.webkit.org/show_bug.cgi?id=200130
        <rdar://problem/53550351>

        Reviewed by Alex Christensen.

        Make FetchBody::extract return an exception in error cases.
        Update call sites accordingly.
        Add the error case as per https://fetch.spec.whatwg.org/#concept-bodyinit-extract, ReadableStream handling.

        Covered by updated and rebased tests.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::extractBody):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        (WebCore::FetchRequest::setBody):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamPipeTo): fix a case where the promise would be unhandled and would show up in
        unhandledrejectionhandler.

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

        Support RTCRtpSender.dtmf
        https://bugs.webkit.org/show_bug.cgi?id=200431

        Reviewed by Eric Carlson.

        Add a new backend interface to RTCDTMFSender and implementation of it using libwebrtc.
        Update RTCDTMFSender to use that new backend and make RTCRtpSender return a RTCDTMFSender
        conditionally on a newly added runtime flag.
        Update RTCDTMFSender implementation based on https://w3c.github.io/webrtc-pc/#peer-to-peer-dtmf.

        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::context const):
        (WebCore::PeerConnectionBackend::transceiverFromSender):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::RTCDTMFSender):
        (WebCore::RTCDTMFSender::canInsertDTMF const):
        (WebCore::RTCDTMFSender::toneBuffer const):
        (WebCore::isToneCharacterInvalid):
        (WebCore::RTCDTMFSender::insertDTMF):
        (WebCore::RTCDTMFSender::playNextTone):
        (WebCore::RTCDTMFSender::onTonePlayed):
        (WebCore::RTCDTMFSender::toneTimerFired):
        (WebCore::RTCDTMFSender::stop):
        (WebCore::RTCDTMFSender::activeDOMObjectName const):
        (WebCore::RTCDTMFSender::canSuspendForDocumentSuspension const):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        * Modules/mediastream/RTCDTMFToneChangeEvent.h:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::dtmf):
        (WebCore::RTCRtpSender::currentTransceiverDirection const):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::createDTMFBackend):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCDTMFEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCDTMFEnabled):
        * platform/mediastream/RTCDTMFSenderBackend.h: Added.
        * platform/mediastream/RTCDTMFSenderHandler.h: Removed.
        * platform/mediastream/RTCDTMFSenderHandlerClient.h: Removed.
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.cpp: Added.
        (WebCore::toWTFString):
        (WebCore::LibWebRTCDTMFSenderBackend::LibWebRTCDTMFSenderBackend):
        (WebCore::LibWebRTCDTMFSenderBackend::~LibWebRTCDTMFSenderBackend):
        (WebCore::LibWebRTCDTMFSenderBackend::canInsertDTMF):
        (WebCore::LibWebRTCDTMFSenderBackend::playTone):
        (WebCore::LibWebRTCDTMFSenderBackend::tones const):
        (WebCore::LibWebRTCDTMFSenderBackend::duration const):
        (WebCore::LibWebRTCDTMFSenderBackend::interToneGap const):
        (WebCore::LibWebRTCDTMFSenderBackend::OnToneChange):
        (WebCore::LibWebRTCDTMFSenderBackend::onTonePlayed):
        * platform/mediastream/libwebrtc/LibWebRTCDTMFSenderBackend.h: Added.

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

        [WHLSL] Inline all native function calls
        https://bugs.webkit.org/show_bug.cgi?id=200350

        Reviewed by Robin Morisset.

        Native functions calls tend to be really small. If we inline in the generated
        Metal code, we end up with faster Metal compile times. On compute_boids, this
        provides a ~10ms improvement.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::inlineNativeFunction):
        (WebCore::WHLSL::Metal::writeNativeFunction): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:

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

        RealtimeOutgoingAudioSource::pullAudioData is no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=200450

        Reviewed by Geoffrey Garen.

        No change of behavior, removing base class method declaration.

        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData): Deleted.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h:
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h:

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

        [WHLSL] Add compile time flag to dump metal compile times
        https://bugs.webkit.org/show_bug.cgi?id=200447

        Reviewed by Myles C. Maxfield.

        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetFunctions):

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

        navigator.geolocation wrapper should not become GC-collectable once its frame is detached
        https://bugs.webkit.org/show_bug.cgi?id=200436

        Reviewed by Darin Adler.

        navigator.geolocation wrapper should not become GC-collectable once its frame is detached, given
        that it can outlive the frame. Instead, tie the navigator.geolocation wrapper's lifetime to its
        Navigator's.

        Test: fast/dom/navigator-property-gc-after-frame-detach.html

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::create):
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::navigator):
        (WebCore::Geolocation::frame const):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::NavigatorGeolocation):
        (WebCore::NavigatorGeolocation::from):
        (WebCore::NavigatorGeolocation::geolocation):
        (WebCore::NavigatorGeolocation::geolocation const):
        * Modules/geolocation/NavigatorGeolocation.h:
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitAdditionalChildren):
        * bindings/js/JSWorkerNavigatorCustom.cpp:
        (WebCore::JSWorkerNavigator::visitAdditionalChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.json:
        * page/Navigator.cpp:
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        * page/NavigatorBase.h:
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::DOMPluginArray):
        * plugins/DOMPluginArray.h:
        * plugins/DOMPluginArray.idl:
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContainer.idl:

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

        [WebIDL] Support partial dictionaries and conditional dictionary members
        https://bugs.webkit.org/show_bug.cgi?id=200441

        Reviewed by Alex Christensen.

        Added new bindings tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/IDLParser.pm:
        (parsePartialDefinition):
        (parsePartialInterface): Deleted.
        (parsePartialDictionary): Deleted.
        * bindings/scripts/generate-bindings.pl:
        (generateBindings):
        * bindings/scripts/preprocess-idls.pl:
        (getPartialNamesFromIDL):
        (getPartialInterfaceNameFromIDL): Deleted.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::convertDictionary<TestEventConstructor::Init>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.h:
        * bindings/scripts/test/TestStandaloneDictionary.idl:
        * bindings/scripts/test/TestSupplemental.idl:

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

        Web Inspector: rename "Stylesheet" to "Style Sheet" to match spec text
        https://bugs.webkit.org/show_bug.cgi?id=200422

        Reviewed by Joseph Pecoraro.

        No observable change in functionality.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJSON):
        (WebCore::InspectorPageAgent::inspectorResourceType):

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

        [Curl] implement CertificateInfo::summaryInfo
        https://bugs.webkit.org/show_bug.cgi?id=191498

        Reviewed by Alex Christensen.

        Implement CertificaeInfo::SummaryInfo.
        This patch makes WebInspector show summary of certificates.

        Tests: http/tests/inspector/network/resource-security-certificate.html
               http/tests/inspector/network/getSerializedCertificate.html

        * platform/Curl.cmake:
        * platform/network/curl/CertificateInfo.h:
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):
        (WebCore::CertificateInfo::summaryInfo const): Deleted.
        * platform/network/curl/CertificateInfoCurl.cpp:
        (WebCore::CertificateInfo::summaryInfo const):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::collectInfo):
        (WebCore::CurlSSLVerifier::verifyCallback):
        (WebCore::StackOfX509::StackOfX509): Deleted.
        (WebCore::StackOfX509::~StackOfX509): Deleted.
        (WebCore::StackOfX509::count): Deleted.
        (WebCore::StackOfX509::item): Deleted.
        (): Deleted.
        (WebCore::BIOHolder::BIOHolder): Deleted.
        (WebCore::BIOHolder::~BIOHolder): Deleted.
        (WebCore::BIOHolder::write): Deleted.
        (WebCore::BIOHolder::asCertificate): Deleted.
        (WebCore::pemDataFromCtx): Deleted.
        * platform/network/curl/CurlSSLVerifier.h:
        * platform/network/curl/OpenSSLHelper.cpp: Added.
        (OpenSSL::deleter<X509>::operator()):
        (OpenSSL::StackOfGeneralName::StackOfGeneralName):
        (OpenSSL::StackOfGeneralName::~StackOfGeneralName):
        (OpenSSL::StackOfGeneralName::operator bool):
        (OpenSSL::StackOfGeneralName::count):
        (OpenSSL::StackOfGeneralName::item):
        (OpenSSL::StackOfX509::StackOfX509):
        (OpenSSL::StackOfX509::~StackOfX509):
        (OpenSSL::StackOfX509::count):
        (OpenSSL::StackOfX509::item):
        (OpenSSL::BIO::BIO):
        (OpenSSL::BIO::~BIO):
        (OpenSSL::BIO::getDataAsVector const):
        (OpenSSL::BIO::getDataAsString const):
        (OpenSSL::BIO::readX509):
        (OpenSSL::BIO::get):
        (OpenSSL::pemDataFromCtx):
        (OpenSSL::createCertificateInfo):
        (OpenSSL::toString):
        (OpenSSL::getCommonName):
        (OpenSSL::getSubjectName):
        (OpenSSL::convertASN1TimeToSeconds):
        (OpenSSL::getSubjectAltName):
        (OpenSSL::createSummaryInfo):
        * platform/network/curl/OpenSSLHelper.h: Copied from Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp.

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

        WebRTC: got incorrect `this` in negotiationneeded event
        https://bugs.webkit.org/show_bug.cgi?id=200427

        Reviewed by Darin Adler.

        Make sure a dom object created through a JS built-in constructor is added to the wrapper cache.

        Test: webrtc/onnegotiationneeded.html

        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::createJSObjectFromWrapper):
        (WebCore::createJSObject):

2019-08-04  Sam Weinig  <weinig@apple.com>

        Mangled WHLSL names don't need to allocate Strings
        https://bugs.webkit.org/show_bug.cgi?id=200429

        Reviewed by Saam Barati.

        To avoid allocating strings for each mangled name used to transform WHLSL to Metal, which we'd
        like to avoid since it is both unnecessarily expensive in time and space, we can instead just
        store the unique integer identifier that was being used to construct the String. 
        
        Since the existing mangled names were all of the form "prefix" + unsigned integer value (where 
        prefix could be "type", "enumerationMember", "structureElement", "variable" or "function") we
        strongly type the integer by storing it in a struct (MangledVariableName, MangledTypeName, etc.)
        When the full name is actually needed, StringTypeAdapter's specialized for the structs are
        used to write directly into the preallocated buffers of StringBuilders or makeString().

        * Modules/webgpu/WHLSL/Metal/WHLSLMangledNames.h: Added.
        (WebCore::WHLSL::Metal::MangledVariableName):
        (WebCore::WHLSL::Metal::MangledTypeName):
        (WebCore::WHLSL::Metal::MangledStructureElementName):
        (WebCore::WHLSL::Metal::MangledEnumerationMemberName):
        (WebCore::WHLSL::Metal::MangledFunctionName):
        Adds structs for each type of mangled name and StringTypeAdapter specializations for
        each to allow their use in StringBuilder.flexibleAppend() or makeString(). 
        
        Additionally, a Variant, MangledOrNativeTypeName, of MangledTypeName and String is 
        declared to allow for the few cases where a native type (e.g. float4) is needed. The
        StringTypeAdapter for MangledOrNativeTypeName could be generalized for any Variant
        in the future, but I left it non-general for now, as it is non-obvious if one would
        want to store Variant<Types...>, and have each member function construct a temporary
        StringTypeAdapter, or store a Variant<StringTypeAdapter<Types>...> and perform conversion
        in the construction.

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::EntryPointScaffolding):
        (WebCore::WHLSL::Metal::internalTypeForSemantic):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledInputPath):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::VertexEntryPointScaffolding):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::FragmentEntryPointScaffolding):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::ComputeEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::pack):
        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.h:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::parameterVariables):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::FunctionDeclarationWriter):
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::generateNextVariableName):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValueWithNullability):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValueAndNullability):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::emitLoop):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::RenderFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::RenderFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::ComputeFunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::ComputeFunctionDefinitionWriter::createEntryPointScaffolding):
        (WebCore::WHLSL::Metal::sharedMetalFunctions):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLMetalCodeGenerator.h:
        * 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::BaseTypeNameNode::BaseTypeNameNode):
        (WebCore::WHLSL::Metal::BaseTypeNameNode::mangledName const):
        (WebCore::WHLSL::Metal::ArrayTypeNameNode::ArrayTypeNameNode):
        (WebCore::WHLSL::Metal::ArrayReferenceTypeNameNode::ArrayReferenceTypeNameNode):
        (WebCore::WHLSL::Metal::PointerTypeNameNode::PointerTypeNameNode):
        (WebCore::WHLSL::Metal::ReferenceTypeNameNode::ReferenceTypeNameNode):
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::MetalTypeDeclarationWriter):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypeDeclarations):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForType):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForEnumerationMember):
        (WebCore::WHLSL::Metal::TypeNamer::mangledNameForStructureElement):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.h:
        (WebCore::WHLSL::Metal::TypeNamer::generateNextTypeName):
        (WebCore::WHLSL::Metal::TypeNamer::generateNextStructureElementName):
        (WebCore::WHLSL::Metal::TypeNamer::generateNextEnumerationMemberName):
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        Replace uses of String with the appropriate mangled name type.

        * WebCore.xcodeproj/project.pbxproj:
        Add WHLSLMangledNames.h

        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetFunctions):
        Convert the mangled names to Strings for passing to Metal API. NOTE: We could avoid having the
        toString() member function on MangledFunctionName if we allowed makeString() to take a single
        argument.

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

        Ping loads should not prevent page caching
        https://bugs.webkit.org/show_bug.cgi?id=200418
        <rdar://problem/53901632>

        Reviewed by Darin Adler.

        We normally prevent page caching if there were any pending subresource loads when navigating,
        to avoid caching partial / broken content. However, this should not apply to Ping / Beacon
        loads since those do not impact page rendering and can outlive the page.

        Tests: http/tests/navigation/page-cache-pending-ping-load-cross-origin.html
               http/tests/navigation/page-cache-pending-ping-load-same-origin.html

        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable):
        After we've fired the 'pagehide' event in each frame, stop all the loads again. This is needed
        since pages are allowed to start ping / beacon loads in their 'pagehide' handlers. If we do not
        stop those loads, then the next call to canCachePage() would fail because the DocumentLoader is
        still loading. Note that we're not actually preventing these ping loads from hitting the server
        since we never cancel page loads and those can outlive their page.

        * loader/DocumentLoader.cpp:
        (WebCore::shouldPendingCachedResourceLoadPreventPageCache):
        (WebCore::areAllLoadersPageCacheAcceptable):
        Make sure that Ping / Beacon / Prefetches / Icon loads do not prevent page caching.

        (WebCore::DocumentLoader::addSubresourceLoader):
        Tweak assertion that was incorrect since we actually allow ping / beacon loads when the
        document is about to enter PageCache (while firing pagehide event).

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

        [LFC][TFC] Create formatting context/state.
        https://bugs.webkit.org/show_bug.cgi?id=200428
        <rdar://problem/53913625>

        Reviewed by Antti Koivisto.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutState::createFormattingContext):

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

        [LFC] Cleanup preferred width computation
        https://bugs.webkit.org/show_bug.cgi?id=200426
        <rdar://problem/53912607>

        Reviewed by Antti Koivisto.

        The intrinsic width for a formatting root box has 2 sets of values now. One set(min/max) is stored in the established formatting context's state
        while the other is in the formatting context's state where the box lives.

        <div style="position: absolute"><div style="float: left; border: 1px solid green">foobar</div></div>

        The float box participates in the formatting context established by the absolutely position box, but it also establishes an inline formatting context.
        The min/max width pair in the established context is the width of the "foobar" (same value for min/max). This set is stored in the inline formatting state.
        However the float box has horizontal border so the "final" min/max width pair is expanded by this border value and stored in the formatting state where
        the box lives (which is different from the one it establishes).

        This and the "remove the formatting context type classes from the tree" changes open up interesting optimization opportunities.
        Here is a very simple case:
        <div style="display: inline-block; width: auto;">
          <div style="float: left">some text</div>
          <div style="float: left">some super long .... text</div>
          <div></div>
        </div>
        In order to lay out this content properly, we
        1. Compute the min/max width of the first float (expensive text measuring)
        2. Compute the min/max width of the second float (some more expensive text measuring)
        3. Compute the min/max width of the inline-block (that is pretty much the 2 float's min/max)
        4. Lay out the 2 floats, the empty div and the inline-block using these min/max width pairs.

        Now if the inline-block box's display value is changed to "block" and the positioning is to absolute (style="display: box; position: absolute;")
        we currently(on trunk) tear down the render tree, build a new one and run all the steps again from #1 to #4.

        In LFC, we start with the following layout tree
        <container> -> block formatting context
          <container> -> inline formatting context
            <anonymous inline box>
          <container> -> inline formatting context
            <anonymous inline box>
          <container> -> inline formatting context
        and when the style change happens, we don't need to tear down the tree at all. Not only that, but since every formatting contexts stay the same
        we can just reuse their states and actually skip all the steps (even the positioning since the absolutely positioned container has static top/bottom/left/right).

        Surprisingly the final layout produces the exact same "display boxes" as the original layout.

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::expand):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::setIntrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::intrinsicWidthConstraints const):
        (WebCore::Layout::FormattingState::setIntrinsicWidthConstraintsForBox):
        (WebCore::Layout::FormattingState::clearIntrinsicWidthConstraints):
        (WebCore::Layout::FormattingState::intrinsicWidthConstraintsForBox const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computedIntrinsicWidthConstraints const):
        (WebCore::Layout::BlockFormattingContext::computeIntrinsicWidthConstraints const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraintsNeedChildrenWidth): Deleted.
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::horizontalMarginBorderAndPadding const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::nextInPreOrder):
        (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFloatBox const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForInlineBlock const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints const):
        * layout/tableformatting/TableFormattingContext.h:

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

        Web Inspector: DOM: add a special breakpoint for "All Events"
        https://bugs.webkit.org/show_bug.cgi?id=200285

        Reviewed by Joseph Pecoraro.

        Similar to the existing "All Requests" breakpoint, there should be a way to set a breakpoint
        that would pause for any DOM event, regardless of the event's name. This is useful for
        situations where the event name isn't known, or where one simply want's to pause on the next
        entry to the event loop.

        Along these lines, make the "requestAnimationFrame", "setTimeout", and "setInterval"
        event breakpoints into special breakpoints that can be added/removed via the create
        breakpoint context menu. This simplifies the process for setting these breakpoints, and also
        makes them more discoverable (most people wouldn't consider them to be "events").

        Tests: inspector/dom/breakpoint-for-event-listener.html
               inspector/dom-debugger/event-animation-frame-breakpoints.html
               inspector/dom-debugger/event-breakpoint-with-navigation.html
               inspector/dom-debugger/event-interval-breakpoints.html
               inspector/dom-debugger/event-listener-breakpoints.html
               inspector/dom-debugger/event-timeout-breakpoints.html

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::frameDocumentUpdated):
        (WebCore::InspectorDOMDebuggerAgent::setEventBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
        (WebCore::InspectorDOMDebuggerAgent::willFireTimer):
        (WebCore::InspectorDOMDebuggerAgent::willFireAnimationFrame):
        (WebCore::InspectorDOMDebuggerAgent::discardBindings): Deleted.
        Make `eventName` optional for `addEventBreakpoint`/`removeEventBreakpoint`. When omitted,
        the corresponding breakpoint that is added/removed is treated as a global breakpoint that
        applies to all events of that type (e.g. a global `listener` breakpoint would pause for any
        event that is fired).

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

        [LFC] Remove formatting context type leaf classes
        https://bugs.webkit.org/show_bug.cgi?id=200224
        <rdar://problem/53661907>

        Reviewed by Antti Koivisto.

        Let's keep the layout tree formatting context type independent.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):
        (WebCore::Layout::InlineFormattingContext::initializeMarginBorderAndPaddingForGenericInlineBox const):
        (WebCore::Layout::InlineFormattingContext::collectInlineContent const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::placeInlineItem):
        * layout/inlineformatting/InlineItem.h:
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::createAndAppendTextItems):
        (WebCore::Layout::InlineTextItem::InlineTextItem):
        (WebCore::Layout::InlineTextItem::split const):
        * layout/inlineformatting/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::inlineBox const): Deleted.
        * layout/inlineformatting/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::width):
        (WebCore::Layout::TextUtil::split):
        * layout/inlineformatting/text/TextUtil.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        (WebCore::Layout::Box::~Box):
        (WebCore::Layout::Box::formattingContextRoot const):
        (WebCore::Layout::Box::setTextContent):
        (WebCore::Layout::Box::hasTextContent const):
        (WebCore::Layout::Box::textContent const):
        (WebCore::Layout::Box::replaced const):
        (WebCore::Layout::Box::replaced):
        (WebCore::Layout::Box::rareDataMap):
        (WebCore::Layout::Box::rareData const):
        (WebCore::Layout::Box::ensureRareData):
        (WebCore::Layout::Box::removeRareData):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isLineBreakBox const):
        (WebCore::Layout::Box::hasRareData const):
        (WebCore::Layout::Box::setHasRareData):
        (WebCore::Layout::Box::isInlineBox const): Deleted.
        (WebCore::Layout::Box::replaced const): Deleted.
        (WebCore::Layout::Box::replaced): Deleted.
        * layout/layouttree/LayoutContainer.h:
        (WebCore::Layout::Container::firstChild const): Deleted.
        (WebCore::Layout::Container::lastChild const): Deleted.
        (WebCore::Layout::Container::hasChild const): Deleted.
        (WebCore::Layout::Container::hasInFlowChild const): Deleted.
        (WebCore::Layout::Container::hasInFlowOrFloatingChild const): Deleted.
        (WebCore::Layout::Container::outOfFlowDescendants const): Deleted.
        * layout/layouttree/LayoutInlineBox.cpp: Removed.
        * layout/layouttree/LayoutInlineBox.h: Removed.
        * layout/layouttree/LayoutLineBreakBox.cpp: Removed.
        * layout/layouttree/LayoutLineBreakBox.h: Removed.
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::outputLayoutBox):

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

        [LFC] Remove formatting context type container classes.
        https://bugs.webkit.org/show_bug.cgi?id=200202

        Reviewed by Antti Koivisto.

        These are formatting context specific classes. Let's try to have a layout tree without such types.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeIntrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeMarginBorderAndPaddingForInlineContainer const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::appendTextContent):
        * layout/layouttree/LayoutBlockContainer.cpp: Removed.
        * layout/layouttree/LayoutBlockContainer.h: Removed.
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesInlineFormattingContext const):
        (WebCore::Layout::Box::establishesInlineFormattingContextOnly const):
        (WebCore::Layout::Box::formattingContextRoot const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isBlockContainer const):
        (WebCore::Layout::Box::isInlineContainer const):
        (WebCore::Layout::Box::isInlineBox const):
        (WebCore::Layout::Box::establishesInlineFormattingContext const): Deleted.
        (WebCore::Layout::Box::establishesInlineFormattingContextOnly const): Deleted.
        * layout/layouttree/LayoutInlineContainer.cpp: Removed.
        * layout/layouttree/LayoutInlineContainer.h: Removed.
        * layout/layouttree/LayoutIterator.h:
        (WebCore::Layout::LayoutBoxTraversal::firstChild):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutTree):
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::createTableStructure):
        (WebCore::Layout::outputLayoutBox):
        * layout/layouttree/LayoutTreeBuilder.h:
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

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

        [WHLSL] Avoid visiting the full AST in computeDimensions
        https://bugs.webkit.org/show_bug.cgi?id=200410

        Reviewed by Myles C. Maxfield.

        Avoid visiting the full AST in computeDimensions
        This cuts the time spent in computeDimensions on compute_boids.html from about 2ms to about 0.002ms.

        No new tests as there is no functional change intended.

        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp:
        (WebCore::WHLSL::computeDimensions):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:

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

        Ref Frame in DOMWindow::screen* functions
        https://bugs.webkit.org/show_bug.cgi?id=200409

        Reviewed by Simon Fraser.

        Ref Frame in the following functions.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight const):
        (WebCore::DOMWindow::innerWidth const):
        (WebCore::DOMWindow::screenX const):
        (WebCore::DOMWindow::screenY const):
        (WebCore::DOMWindow::scrollX const):
        (WebCore::DOMWindow::scrollY const):

2019-08-02  Mark Lam  <mark.lam@apple.com>

        [ARM64E] Harden the diversity of the DOMJIT::Signature::unsafeFunction pointer.
        https://bugs.webkit.org/show_bug.cgi?id=200292
        <rdar://problem/53706881>

        Reviewed by Geoffrey Garen.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        - Update to work with the new DOMJIT::Signature constructor.

        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        - Re-base test results.

2019-08-02  Keith Rollin  <krollin@apple.com>

        Consistently use Obj-C boolean literals
        https://bugs.webkit.org/show_bug.cgi?id=200405
        <rdar://problem/53880043>

        Reviewed by Simon Fraser, Joseph Pecoraro.

        There are places where we use equivalent but different expressions for
        Obj-C boolean objects. For example, we use both [NSNumber
        numberWithBool:YES] and @YES. There are places where both are used in
        the same function, such as -[WebPreferences initialize]. The boolean
        literal is in greater use and is more succinct, so standardize on
        that. Also, change @(YES/NO) to @YES/NO.

        No new tests -- no new or changed functionality.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        (WebCore::ImageTransferSessionVT::ImageTransferSessionVT):
        (WebCore::ImageTransferSessionVT::setSize):
        (WebCore::ImageTransferSessionVT::ioSurfacePixelBufferCreationOptions):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferPool):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesIfNeeded):

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

        Add accessibility object method to determine whether an element is inside a table cell. Needed for iOS accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=200394
        <rdar://problem/52914964>

        Reviewed by Chris Fleizach.

        Explicitly returning BOOL to avoid error in some compiler configurations.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsInTableCell]):

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

        Web Inspector: fix inverted check in InspectorDOMStorageAgent::enable
        Followup to r248179.

        Rubber-stamped by Joseph Pecoraro.

        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::enable):

2019-08-02  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Curl] Crash while destructing a URL in ~SocketStreamHandle due to data race
        https://bugs.webkit.org/show_bug.cgi?id=200378

        Reviewed by Ross Kirsling.

        URL::isolatedCopy() is called in the worker thread. URL is using a
        thread-unsafe ref-counter. It should be called in the main thread.

        Covered by existing tests.

        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl): Call URL::isolatedCopy() in the main thread.
        (WebCore::SocketStreamHandleImpl::threadEntryPoint): Added a URL argument.

2019-08-02  Sihui Liu  <sihui_liu@apple.com>

        API tests using permanent credentials should clear credentials left by previous tests
        https://bugs.webkit.org/show_bug.cgi?id=199729

        Reviewed by Alex Christensen.

        Update existing API tests.

        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::clearSessionCredentials):
        (WebCore::CredentialStorage::clearPermanentCredentialsForProtectionSpace): Deleted.
        * platform/network/CredentialStorage.h:
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::clearPermanentCredentialsForProtectionSpace): Deleted.

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

        Web Inspector: Storage: disable related agents when the tab is closed
        https://bugs.webkit.org/show_bug.cgi?id=200117

        Reviewed by Joseph Pecoraro.

        Rework how `enable`/`disable` is used for storage-related agents so that events are not sent
        and data isn't kept alive when the Storage tab isn't enabled.

        Covered by existing tests.

        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::enable):
        (WebCore::InspectorApplicationCacheAgent::disable): Added.

        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):

        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):

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

        Web Inspector: Timelines: Develop > Start Timeline Recording doesn't work when focused on a detached inspector window
        https://bugs.webkit.org/show_bug.cgi?id=200125
        <rdar://problem/53543008>

        Reviewed by Brian Burg.

        Always show the Timelines tab in Web Inspector whenever timeline recording starts/stops.
        Notify the UIProcess whenever the timeline recording state changes.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::timelineRecordingChanged): Added.

        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::internalStart):
        (WebCore::InspectorTimelineAgent::internalStop):

2019-08-02  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: Crash when interacting with Template Content in Console
        https://bugs.webkit.org/show_bug.cgi?id=196280

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/inspect-template-node.html

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::canAccessDocument): if target element is from a
        <template> use its host document to check the access. Elements
        from the host document always have access to its template elements content.
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::resolveNode): templates are created in
        special template document which doesn't have a frame, in such case get
        the frame from the host document.

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

        Harden NodeRareData::m_connectedFrameCount
        https://bugs.webkit.org/show_bug.cgi?id=200300

        Reviewed by Geoffrey Garen.

        Use unsinged integer type in NodeRareData::m_connectedFrameCount since it's padded anyway.

        * dom/Node.cpp:
        (WebCore::Node::decrementConnectedSubframeCount): Check that hasRareNode() is true in release builds.
        * dom/NodeRareData.h:

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

        Document::resume should delay resetting of form control elements.
        https://bugs.webkit.org/show_bug.cgi?id=200376

        Reviewed by Geoffrey Garen.

        Delay the execution of form control element resets until the next task
        to avoid synchronously mutating DOM during page cache restoration.

        Test: fast/frames/restoring-page-cache-should-not-run-scripts.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::resumeFromDocumentSuspension):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::resumeFromDocumentSuspension):

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

        [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture  state
        https://bugs.webkit.org/show_bug.cgi?id=200368
        <rdar://problem/53191450>

        Unreviewed.
        Build fix by guarding with MEDIA_STREAM in addition to IOS.

        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):

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

        Add accessibility object method to determine whether an element is inside a table cell. Needed for iOS accessibility client.
        https://bugs.webkit.org/show_bug.cgi?id=200394
        <rdar://problem/52914964>

        Reviewed by Chris Fleizach.

        Test: accessibility/ios-simulator/element-in-table-cell.html

        Added _accessibilityIsInTableCell needed for iOS accessibility client.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsInTableCell]):

2019-08-02  Eric Carlson  <eric.carlson@apple.com>

        [macOS, iOS] webaudio/silent-audio-interrupted-in-background.html sometimes crashes
        https://bugs.webkit.org/show_bug.cgi?id=200396
        <rdar://problem/53819720>

        Reviewed by Youenn Fablet.

        No new test, this fixes an existing test.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::~AudioSourceProviderAVFObjC): Drop the
        lock before clearing m_tapStorage. 

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

        [iOS] Directly use RealtimeMediaSourceCenter to compute the media capture  state
        https://bugs.webkit.org/show_bug.cgi?id=200368
        <rdar://problem/53191450>

        Reviewed by Eric Carlson.

        Instead of registering a MediaStreamTrack as a media producer to compute capture state,
        go directly to the sources from the RealtimeMediaSourceCenter.
        Do the same when requested to mute capture tracks.

        No observable change of behavior.
        Covered by manual test on iOS and existing tests.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::mediaState const):
        (WebCore::sourceCaptureState):
        (WebCore::MediaStreamTrack::captureState):
        (WebCore::MediaStreamTrack::muteCapture):
        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::updateIsPlayingMedia):
        (WebCore::Document::pageMutedStateDidChange):

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

        DOMWindow properties may get GC'd before their Window object
        https://bugs.webkit.org/show_bug.cgi?id=200359

        Reviewed by Ryosuke Niwa.

        DOMWindow properties may get GC'd before their Window object once their frame is detached. This
        is unexpected behavior given that these properties persist on the Window after the frame is
        detached. This patch thus updates their bindings so that they live as long as their window, not
        their frame.

        Note that this also fixes a thread-safety issue since DOMWindowProperty::frame() would get called
        from GC threads, although its implementation looks like:
        """
          return m_window ? m_window->frame() : nullptr;
        """

        Because m_window is a WeakPtr<DOMWindow> and because windows get destroyed on the main thread,
        we could in theory crash when dereferencing m_window->frame() from the GC thread.

        Test: fast/dom/dom-window-property-gc-after-frame-detach.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::visitAdditionalChildren):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.json:
        * css/StyleMedia.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/BarProp.idl:
        * page/DOMSelection.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Screen.idl:
        * page/VisualViewport.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:

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

        Remove constructors and operators of FontPlatformData defined only for Freetype
        https://bugs.webkit.org/show_bug.cgi?id=200379

        Reviewed by Carlos Garcia Campos.

        These methods only make maintenance harder, as all data fields are
        trivially copyable. Constructors generated by compiler should be used
        instead.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:

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

        Remove unused constructor declaration from FontPlatformData
        https://bugs.webkit.org/show_bug.cgi?id=200371

        Reviewed by Carlos Garcia Campos.

        It is not implemented by any port.

        * platform/graphics/FontPlatformData.h:

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

        Pages using MessagePorts should be PageCacheable
        https://bugs.webkit.org/show_bug.cgi?id=200366
        <rdar://problem/53837882>

        Reviewed by Geoffrey Garen.

        Allow a page to enter PageCache, even if it has MessagePorts (potentially with
        pending messages). If there are pending messages on the MessagePorts when
        entering PageCache, those will get dispatched upon restoring from PageCache.

        Test: fast/history/page-cache-MessagePort-pending-message.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::messageAvailable):
        (WebCore::MessagePort::dispatchMessages):
        Do not dispatch messages while in PageCache.

        (WebCore::MessagePort::canSuspendForDocumentSuspension const):
        Allow pages with MessagePort objects to enter PageCache.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        Make sure pending messages on MessagePorts get dispatched asynchronously after restoring
        from PageCache.

        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable):
        Make sure only CachedResources that are still loading upon load cancelation prevent
        entering PageCache.

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

        Fix compilation of PageConsoleClient with !ENABLE(VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=200380

        Reviewed by Joseph Pecoraro.

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

2019-08-01  Mark Lam  <mark.lam@apple.com>

        Add crash diagnostics for debugging unexpected zapped cells.
        https://bugs.webkit.org/show_bug.cgi?id=200149
        <rdar://problem/53570112>

        Reviewed by Yusuke Suzuki.

        No new tests because this is a feature for debugging crashes.  It has been tested
        manually by modifying the code to force a crash at the point of interest.

        Added some comments to document the hashes of known subspaces.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):

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

        [WHLSL] Do simple nullptr check elimination using basic data flow analysis when generating metal code
        https://bugs.webkit.org/show_bug.cgi?id=200352

        Reviewed by Myles C. Maxfield.

        When doing metal code generation, we frequently know whether something
        is null or not. This patch does a basic propagation of this information
        to avoid emitting excessive null checks in the generated Metal code.
        This is a 6% speedup (with a p value of 0.0001) in Metal compile times
        on compute_boids.

        An example of a null check we now eliminate is:
        ```
        int x;
        thread int* ptr = &x; // We know that the lvalue for "x" is non-null, so we produce a non-null rvalue here.
        *ptr = 42; // We know that the "ptr" rvalue is non-null, so we omit the null check.
        ```

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValueWithNullability):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendRightValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::appendLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastValueAndNullability):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::takeLastLeftValue):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):

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

        Move FormData zip file generation to NetworkProcess and enable it for all WebKit clients for uploading directories
        https://bugs.webkit.org/show_bug.cgi?id=200102
        <rdar://problem/53275114>

        Reviewed by Darin Adler.

        To enable directory uploading in WebKit2, we extended WebKit1's model of asking the application to generate a file for uploading.
        This means the WebProcess needed access to everything necessary to zip a whole directory, and clients that have not implemented
        the strange WKBundlePageUIClient callbacks won't be able to upload directories.  Safari's implementation had already been copied
        to BlobDataFileReference::generateReplacementFile, so I reused that code to do the zipping.  Instead of a complicated model of
        keeping track of a filename, possibly a generated filename, and whether we think we own the file or not and having nobody clean up,
        we now do the generation, use, and cleaning up in the network process starting with a new function generateFilesForUpload.
        This removes unimplemented SPI in WebUIDelegatePrivate in WebKitLegacy and stops calling the WKBundlePageUIClient related to upload
        file generation and replaces them with automatic behavior equivalent to Safari's implementation of the WKBundlePageUIClient calls.
        Since we no longer need to do these file operations in the WebProcess, I am also reverting r245322 and r246077 which tightens the sandbox.

        Covered by an API test.

        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::extract):
        (WebCore::FetchBody::bodyAsFormData const):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::cleanupForError):
        * page/Chrome.cpp:
        (WebCore::ChromeClient::shouldReplaceWithGeneratedFileForUpload): Deleted.
        (WebCore::ChromeClient::generateReplacementFile): Deleted.
        * page/ChromeClient.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::FormData):
        (WebCore::FormData::~FormData):
        (WebCore::FormData::createMultiPart):
        (WebCore::FormDataElement::lengthInBytes const):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        (WebCore::FormData::appendMultiPartFileValue):
        (WebCore::FormData::appendMultiPartKeyValuePairItems):
        (WebCore::FormData::resolveBlobReferences):
        (WebCore::generateFileForUpload):
        (WebCore::FormData::generateFilesForUpload):
        (WebCore::FormData::generateFiles): Deleted.
        (WebCore::FormData::hasGeneratedFiles const): Deleted.
        (WebCore::FormData::hasOwnedGeneratedFiles const): Deleted.
        (WebCore::FormData::removeGeneratedFilesIfNeeded): Deleted.
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::FormDataElement::EncodedFileData::isolatedCopy const):
        (WebCore::FormDataElement::EncodedFileData::operator== const):
        (WebCore::FormDataElement::EncodedFileData::encode const):
        (WebCore::FormDataElement::EncodedFileData::decode):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        (WebCore::formCreate):
        (WebCore::formFinalize):
        (WebCore::createHTTPBodyCFReadStream):
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        (WebCore::generateFileForUpload):
        (WebCore::BlobDataFileReference::generateReplacementFile):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

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

        [Text autosizing] [iPadOS] Add targeted hacks to address some remaining text autosizing issues
        https://bugs.webkit.org/show_bug.cgi?id=200271
        <rdar://problem/51734741>

        Reviewed by Zalan Bujtas.

        Makes some targeted adjustments to the text autosizing heuristic, to ensure compatibility with several high-
        profile websites. See changes below for more detail.

        Tests:  fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-candidate-special-cases.html
                fast/text-autosizing/ios/idempotentmode/line-height-boosting.html

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

        Avoid clipped sidebar links on sohu.com by not performing line-height boosting in the case where the element
        probably has a small, fixed number of lines. See below for more detail. Additionally, don't attempt to adjust
        the line height using the boosted font size, in the case where the element is not a candidate for idempotent
        text autosizing.

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

        Make various targeted hacks to fix a few websites:

        -   Add a special case for top navigation bar links on yandex.ru, where line height greatly exceeds the
            specified font size.

        -   Avoid boosting some related video links on v.youku.com by considering the line-clamp CSS property when
            determining the maximum number of lines of text an element is expected to contain.

        -   Avoid boosting some front page links on asahi.com, which have non-repeating background images.

        -   Add several other adjustments to more aggressively boost pieces of text on Google search results, such as
            taking the `word-break` CSS property into account.

        The bottom few pixels of sidebar links on naver.com are also no longer clipped after these changes.

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

        Pulls out a piece of the heuristic added to fix sephora.com in r247467 out into a separate helper method. To
        recap, this heuristic identifies elements with both a fixed height and fixed line height, for which the fixed
        height is close to an integer multiple of the line height.

        Also makes several small tweaks in the process: (1) change the max difference between fixed line height and
        font size from 6 to 5 to ensure that some multiline caption text on Google search results is boosted, and (2)
        replace usages of `lineHeight()` with `specifiedLineHeight()`, which current prevents this function from being
        truly idempotent.

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

2019-07-31  Mark Lam  <mark.lam@apple.com>

        Rename DOMJIT safe/unsafeFunction to functionWithTypeChecks and functionWithoutTypeChecks.
        https://bugs.webkit.org/show_bug.cgi?id=200323

        Reviewed by Yusuke Suzuki.

        No new tests.  This is just a refactoring exercise.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GetArgumentTypeForFunctionWithoutTypeCheck):
        (GenerateImplementation):
        (GenerateOperationDefinition):
        (ToNativeForFunctionWithoutTypeCheck):
        (GetUnsafeArgumentType): Deleted.
        (UnsafeToNative): Deleted.
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionItemWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdWithoutTypeCheck):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameWithoutTypeCheck):
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetAttribute): Deleted.
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionItem): Deleted.
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionHasAttribute): Deleted.
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementById): Deleted.
        (WebCore::unsafeJsTestDOMJITPrototypeFunctionGetElementsByName): Deleted.

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

        [SOUP] WebSockets: add support for extensions when using web sockets libsoup API
        https://bugs.webkit.org/show_bug.cgi?id=199943

        Reviewed by Alex Christensen.

        Add SOUP_TYPE_WEBSOCKET_EXTENSION_MANAGER feature to the soup session to enable WebSocket extensions.

        Tests: http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-comp-bit-onoff.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-invalid-parameter.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-parameter.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-set-bfinal.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-split-frames.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-unsolicited-negotiation-response.html
               http/tests/websocket/tests/hybi/imported/blink/permessage-deflate-window-bits.html

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):

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

        [iOS][WK1] Unsafe unsafe of WeakPtr<Document> from UIThread under PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit()
        https://bugs.webkit.org/show_bug.cgi?id=200324

        Reviewed by Ryosuke Niwa.

        The Document is a WebThread object, but a WeakPtr<Document> was dereferenced from the
        UIThread in HTMLMediaElement::supportsSeeking(), from the PlaybackSessionInterfaceAVKit
        constructor. To address the issue we now grab the WebThread lock before constructing
        the PlaybackSessionInterfaceAVKit.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setUpFullscreen):

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

        [SOUP] Switch to use libsoup WebSockets API
        https://bugs.webkit.org/show_bug.cgi?id=200162

        Reviewed by Michael Catanzaro.

        Use the libsoup WebSockets API unconditionally for libsoup based ports.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create): Do not check the env var anymore.
        * platform/SourcesSoup.txt:
        * platform/network/SocketStreamHandleImpl.cpp:
        * platform/network/StorageSessionProvider.h:
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp: Removed.

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

        Web Inspector: Debugger: support emulateUserGesture parameter in Debugger.evaluateOnCallFrame
        https://bugs.webkit.org/show_bug.cgi?id=200272

        Reviewed by Joseph Pecoraro.

        When paused, evaluating in the console should still respect the "Emulate User Gesture" checkbox.

        Tests: inspector/debugger/evaluateOnCallFrame-emulateUserGesture.html
               inspector/debugger/evaluateOnCallFrame-emulateUserGesture-userIsInteracting.html

        * inspector/agents/page/PageDebuggerAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::evaluateOnCallFrame): Added.

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

        [WHLSL] Replace memsetZero function with inline "= { }" code
        https://bugs.webkit.org/show_bug.cgi?id=200328

        Reviewed by Robin Morisset.

        This is a ~20ms metal compile time improvement on compute_boids.

        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeFunction):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.h:

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

        REGRESSION (r240942): first visually non-empty layout milestone is not reached in media documents until after the video finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=200293
        <rdar://problem/52937749>

        Reviewed by Alex Christensen.

        r240942 changed FrameView::qualifiesAsVisuallyNonEmpty() to consider only documents in the
        Interactive or Complete ready states as "finished parsing". Documents considered finished
        parsing can qualify as visually non-empty even without exceeding the visual character or
        pixel thresholds, but documents considered not finished must first exceed one of these
        thresholds in order to qualify as visually non-empty.

        HTMLDocuments are placed in the Interactive ready state by their HTMLDocumentParsers.
        However, HTMLDocument subclasses like ImageDocument and MediaDocument use their own custom
        parsers that never set the Interactive ready state on their documents; these documents go
        from Loading directly to Complete.

        In order for these HTMLDocument subclasses to be considered visually non-empty before they
        finish loading they must render something that exceeds the visual character or pixel
        thresholds. For image documents, rendering the image is usually enough to cross the
        threshold, but for media documents the visual pixel threshold was never crossed because
        videos did not contribute to the visually non-empty pixel count.

        As a result, media documents are not considered visually non-empty until the main resource
        finishes loading. On iOS this means that the layer tree remains frozen until this point,
        even though the media might have started autoplaying with audio long before it finished
        loading.

        Fix this by teaching RenderVideo to contribute the video player's size to FrameView's
        visually non-empty pixel count once the video player has loaded enough data to determine its
        intrinsic size. Videos that render more than 1024 pixels will qualify a media document as
        visually non-empty even when it is still loading its main resource.

        Added a new API test.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::incrementVisuallyNonEmptyPixelCountIfNeeded):
        * rendering/RenderImage.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updateIntrinsicSize):

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

        [WHLSL] Remove UnnamedType copy/move constructors and mark classes as final
        https://bugs.webkit.org/show_bug.cgi?id=200188
        <rdar://problem/53628171>

        Unreviewed followup.

        As Darin pointed out in the bugzilla comments, when defining a copy
        constructor in C++ (either deleted or an implementation), the move
        constructor is implicitly deleted. This match removes the excessive
        use of WTF_MAKE_NONMOVABLE when we're already using WTF_MAKE_NONCOPYABLE.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:

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

        [ContentChangeObserver] twitch.tv video controls do not always respond to taps in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=200309
        <rdar://problem/52964977>

        Reviewed by Simon Fraser.

        Do not consider an element visible if it is not a descendant of the active fullscreen element.

        This patch fixes the cases when the user taps on a button in fullscreen mode while the non-fullscreen content is being mutated and
        the ContentChangeObserver mistakenly registers it as a valid, actionable change and as a result we don't fire the click event (stay at hover).

        Test: fast/events/touch/ios/content-observation/non-visible-content-change-in-fullscreen-mode.html

        * page/ios/ContentChangeObserver.cpp:
        (WebCore::fullscreenElement):
        (WebCore::ContentChangeObserver::isVisuallyHidden):

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

        [WHLSL Remove char/short/half types
        https://bugs.webkit.org/show_bug.cgi?id=200312

        Reviewed by Myles C. Maxfield.

        This patch removes the char/short/half types from WHLSL. Since it's not
        supported by all HW, WebGPU is leaving these types out for now. This is
        also a huge speedup, since it halves the size of the standard library.
        
        In the compute_boids demo, WHLSL::prepare goes from running in ~140ms to
        running in ~60ms.

        Test: webgpu/whlsl/smaller-than-32-bit-types.html

        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addPrimitive):
        (WebCore::WHLSL::Intrinsics::addVector):
        (WebCore::WHLSL::Intrinsics::addMatrix):
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.h:
        (WebCore::WHLSL::Intrinsics::WTF_ARRAY_LENGTH):
        (WebCore::WHLSL::Intrinsics::ucharType const): Deleted.
        (WebCore::WHLSL::Intrinsics::ushortType const): Deleted.
        (WebCore::WHLSL::Intrinsics::charType const): Deleted.
        (WebCore::WHLSL::Intrinsics::shortType const): Deleted.
        (WebCore::WHLSL::Intrinsics::uchar2Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::uchar4Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::ushort2Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::ushort4Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::char2Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::char4Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::short2Type const): Deleted.
        (WebCore::WHLSL::Intrinsics::short4Type const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLPipelineDescriptor.h:
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::isAcceptableFormat):
        * Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::convertTextureFormat):

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

        Use CTFontCreateForCharactersWithLanguageAndOption if available instead of CTFontCreateForCharactersWithLanguage
        https://bugs.webkit.org/show_bug.cgi?id=200241

        Reviewed by Myles C. Maxfield.

        We can use CTFontCreateForCharactersWithLanguageAndOption instead of CTFontCreateForCharactersWithLanguage
        as it allows setting more easily the fallback option.
        This allows us to never fallback to user installed fonts.
        In such a case, we no longer need to wrap the fonts to change the fallback option.
        We also prewarm the fonts with the same SPI and use system fallback as the default value.

        Covered by existing tests.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::lookupFallbackFont):
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::FontCache::prewarm):
        (WebCore::fontFamiliesForPrewarming):

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

        Web Inspector: Overlay: add page width/height display
        https://bugs.webkit.org/show_bug.cgi?id=199369

        Reviewed by Joseph Pecoraro.

        Show `${width}px x ${height}px` in the corner where the horizontal and vertical rulers meet.
        This way, if the rulers shift due to the highlighted content, the page width/height does too.

        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::truncateWithEllipsis):
        (WebCore::InspectorOverlay::drawNodeHighlight):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::drawRulers):
        (WebCore::InspectorOverlay::drawElementTitle):

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

        Owners of MultiChannelResampler should make sure that the output bus given to it has the same number of channels
        https://bugs.webkit.org/show_bug.cgi?id=200248
        <rdar://problem/53411051>

        Reviewed by Eric Carlson.

        When a track's number of channels changes, MediaStreamAudioSourceNode is expected
        to update its MultiChannelResampler and its output number of channels.
        MultiChannelResampler expects to have the same number of channels as the output
        but it is not always the case since the channel numbers are changed in different threads
        and locks do not help there.

        Instead, whenever detecting that the number of channels do not match, render silence
        and wait for the next rendering where the number of channels should again match.

        Add internals API to change the number of channels from 2 to 1 or 1 to 2
        to allow testing that code path (iOS only as MacOS audio capture is in UIProcess).
        Covered by updated test.

        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::process):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::process):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::reconfigure):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::setChannelCount):
        * platform/mock/MockRealtimeAudioSource.h:
        (isType):
        * platform/mock/MockRealtimeVideoSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMockAudioTrackChannelNumber):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Element.outerHTML is missing attribute prefixes in some cases in HTML documents
        https://bugs.webkit.org/show_bug.cgi?id=200283

        Reviewed by Ryosuke Niwa.

        When HTML serializing a prefixed element attribute, we should always serialize the
        prefix as per [1]. However, our code was only serializing the well-known ones (xml,
        xmlns & xlink).

        [1] https://html.spec.whatwg.org/#attribute's-serialised-name

        Test: fast/dom/Element/outerHTML-prefixed-attribute.html

        * editing/MarkupAccumulator.cpp:
        (WebCore::htmlAttributeSerialization):
        (WebCore::MarkupAccumulator::xmlAttributeSerialization):
        (WebCore::MarkupAccumulator::appendAttribute):
        * editing/MarkupAccumulator.h:

2019-07-31  Loïc Yhuel  <loic.yhuel@softathome.com>

        [GStreamer] Fix printf format warnings for 32-bit build in GST traces
        https://bugs.webkit.org/show_bug.cgi?id=200299

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage): %zu for size_t
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered): Ditto
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcCreate): G_GUINT64_FORMAT for uint64_t
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp: G_GINT64_FORMAT for int64_t
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp: Ditto

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

        AX: Re-enable accessibility/set-selected-text-range-after-newline.html test.
        https://bugs.webkit.org/show_bug.cgi?id=199431
        <rdar://problem/52563340>

        Reviewed by Chris Fleizach.

        - Re-enabled LayoutTests/accessibility/set-selected-text-range-after-newline.html.
        - Put back workaround in visiblePositionForIndexUsingCharacterIterator
        that is needed for several accessibility issues.
        - This workaround was rolled back because it was thought the cause of:
        https://bugs.webkit.org/show_bug.cgi?id=199434
        It turned out that the actual cause of that hang was unrelated and was
        fixed in:
        https://bugs.webkit.org/show_bug.cgi?id=199845

        * editing/Editing.cpp:
        (WebCore::visiblePositionForIndexUsingCharacterIterator):

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

        Web Inspector: Second call to setAttributeNS creates non-prefixed attribute
        https://bugs.webkit.org/show_bug.cgi?id=200230
        <rdar://problem/53712672>

        Reviewed by Joseph Pecoraro.

        Original patch by Chris Dumez <cdumez@apple.com>.

        Test: inspector/dom/attributeModified.html

        * dom/Element.cpp:
        (WebCore::Element::didAddAttribute):
        (WebCore::Element::didModifyAttribute):
        (WebCore::Element::didRemoveAttribute):
        Use the fully qualified name, not just the local name, when notifying the inspector frontend
        about changes to attributes.

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

        [GTK] Datalist element support for TextFieldInputType
        https://bugs.webkit.org/show_bug.cgi?id=98934

        Reviewed by Michael Catanzaro.

        Add support for rendering the arrow indicator of text fields having data list.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::adjustListButtonStyle const):
        (WebCore::RenderThemeGtk::paintListButtonForInput):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle const):
        * rendering/RenderThemeGtk.h:

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

        ASSERTion failure under takeSnapshot after r247846

        * page/TextIndicator.cpp:
        (WebCore::takeSnapshots):
        We now sometimes inflate the scale factor; allow this.

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

        [WHLSL] Add a fast path for TypeNamer::insert where we've already seen the type
        https://bugs.webkit.org/show_bug.cgi?id=200284

        Reviewed by Myles C. Maxfield.

        This is a ~27% speedup in the WHLSL::prepare for the compute_boids test.
        This optimization makes sense since my previous patch to make UnnamedType
        ref counted was also a huge speedup. So the TypeNamer is seeing many
        UnnamedTypes which are the same pointer value. On compute_boids, this
        makes generateMetalCode ~40ms faster.

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::insert):

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

        WorkerGlobalScope::wrapCryptoKey/unwrapCryptoKey should use local heap objects for replies
        https://bugs.webkit.org/show_bug.cgi?id=200179
        <rdar://problem/52334658>

        Reviewed by Brent Fulgham.

        Based on the patch by Jiewen Tan.

        WorkerGlobalScope::wrapCryptoKey and WorkerGlobalScope::unwrapCryptoKey had a bug that they could exit
        the function before the main thread had finished writing to the result vector passed in to these functions
        when the worker's runloop receives MessageQueueTerminated before the main thread finishes writing.

        Fixed the bug by creating a new temporary Vector inside a ThreadSafeRefCounted object shared between
        the main thread and the worker thread, which extends the lifetime of the Vector until when the worker thread
        receives the result or when the main thread finishes writing to the Vector, whichever happens last.

        Unfortunately no new tests since there is no reproducible test case, and this crash is highly racy.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::CryptoBufferContainer): Added.
        (WebCore::CryptoBufferContainer::create): Added.
        (WebCore::CryptoBufferContainer::buffer): Added.
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):

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

        [WHLSL] Checker sets wrong type for property access instruction with an ander
        https://bugs.webkit.org/show_bug.cgi?id=200282

        Reviewed by Myles C. Maxfield.

        We were assigning resulting type based on the base value instead of the ander
        of the base value. For example, consider:
        ```
        struct Point { float x; float y; }
        compute main(device Point[] buffer) { buffer[0]; }
        ```
        
        The local variable "buffer" is in the "thread" address space. So we would end up
        trying to use the thread address space for "buffer[0]". This caused us to
        generate invalid Metal code because we would call a "thread" ander with a
        "device" pointer. The fix is to use the "device" address space, which is
        the type of the ander we were already setting on this property access instruction.

        Test: webgpu/whlsl/device-proper-type-checker.html

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::finishVisiting):

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

        [WHLSL] Make ASTDumper dump types and address spaces
        https://bugs.webkit.org/show_bug.cgi?id=200281

        Reviewed by Robin Morisset.

        This makes it much easier to gain insight into what type resolution
        the checker does. I used this logging to debug https://bugs.webkit.org/show_bug.cgi?id=200282

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:
        (WebCore::WHLSL::AST::TypeAnnotation::isAbstractLeftValue const):
        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        (WebCore::WHLSL::ASTDumper::visit):

2019-07-30  Brent Fulgham  <bfulgham@apple.com>

        [FTW] Refactor Direct2D code to follow Cairo's model to support modern WebKit
        https://bugs.webkit.org/show_bug.cgi?id=200270

        Reviewed by Dean Jackson.

        Refactor the Direct2D code in WebCore so that the core routines can be shared
        between GraphicsContext and GraphicsContextImpl. Implement PlatformContext,
        BackingStoreBackend, and GraphicsContextImpl for the Direct2D engine.
       
        This patch effectively just moves code around.

        * PlatformFTW.cmake:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/ImageSource.cpp:
        * platform/graphics/Pattern.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/win/BackingStoreBackendDirect2D.h: Added.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.cpp: Added.
        * platform/graphics/win/BackingStoreBackendDirect2DImpl.h: Added.
        * platform/graphics/win/Direct2DOperations.cpp: Added.
        * platform/graphics/win/Direct2DOperations.h: Added.
        * platform/graphics/win/Direct2DUtilities.cpp: Added.
        * platform/graphics/win/Direct2DUtilities.h: Added.
        * platform/graphics/win/FontCascadeDirect2D.cpp:
        * platform/graphics/win/GradientDirect2D.cpp:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp: Added.
        * platform/graphics/win/GraphicsContextImplDirect2D.h: Added.
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        * platform/graphics/win/NativeImageDirect2D.cpp:
        * platform/graphics/win/PathDirect2D.cpp:
        * platform/graphics/win/PatternDirect2D.cpp:
        * platform/graphics/win/PlatformContextDirect2D.cpp: Added.
        * platform/graphics/win/PlatformContextDirect2D.h: Added.
        * platform/win/DragImageWin.cpp:
        * svg/graphics/SVGImage.cpp:

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

        REGRESSION(r241288): Text on Yahoo Japan mobile looks too bold
        https://bugs.webkit.org/show_bug.cgi?id=200065
        <rdar://problem/50912757>

        Reviewed by Simon Fraser.

        Before r241288, we were mapping Japanese sans-serif to Hiragino Kaku Gothic ProN, which
        has a 300 weight and a 600 weight. However, we can't use that font because it's user-installed,
        so in r241288 we switched to using Hiragino Sans, which has a 300 weight, a 600 weight, and an
        800 weight. According to the CSS font selection algorithm, sites that request a weight of 700
        would get the 800 weight instead of the 600 weight, which caused the text to look too heavy.
        Therefore, the apparent visual change is from a weight change from 600 to 800.

        In general, this is working as intended. However, text on Yahoo Japan looks too heavy in weight
        800. Instead, this patch adds a quirk specific to Yahoo Japan that overwrites any font requests
        to give them a weight of 600 instead of 700. This way, the lighter font will be used.

        No new tests because quirks cannot be tested.

        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        (WebCore::CSSFontSelector::fontRangesForFamily):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldLightenJapaneseBoldSansSerif const):
        * page/Quirks.h:

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

        [iPadOS] Enable simulated mouse events on iqiyi.com to fix the video controls
        https://bugs.webkit.org/show_bug.cgi?id=200322
        rdar://problem/53235709

        Reviewed by Wenson Hsieh.
        
        iqiyi.com needs to get mouseMove events for dragging the video scrubber to work.

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

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

        Unreviewed, fix GTK build after SoupNetworkSession ownership rework.

        * platform/network/soup/SocketStreamHandleImplSoup.cpp:

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

        [GTK] Compilation errors when GL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=200223

        Unreviewed, keep trying to fix build with -DENABLE_OPENGL=OFF.

        The previous commit was sufficient for the 2.24 branch, but on trunk there are more
        problems. This doesn't solve all of them, but it gets us closer.

        * SourcesGTK.txt:
        * platform/graphics/GLContext.h:

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

        [SOUP] Move SoupNetworkSession ownership from NetworkStorageSession to NetworkSession
        https://bugs.webkit.org/show_bug.cgi?id=200076

        Reviewed by Michael Catanzaro.

        Remove the SoupNetworkSession from NetworkStorageSession.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::cookieStorage const): Return the cookie jar.
        * platform/network/StorageSessionProvider.h:
        (WebCore::StorageSessionProvider::soupSession const): Temporary add this virtual method that is required by
        SocketStreamHandleImplSoup. It will be removed once we switch to libsoup WebSockets API soon.
        * platform/network/soup/DNSResolveQueueSoup.cpp:
        (WebCore::globalDefaultSoupSessionAccessor): Rework the accessor to return the SoupSession directly since
        that's what we really want.
        (WebCore::DNSResolveQueueSoup::setGlobalDefaultSoupSessionAccessor):
        (WebCore::DNSResolveQueueSoup::updateIsUsingProxy):
        (WebCore::DNSResolveQueueSoup::platformResolve):
        (WebCore::DNSResolveQueueSoup::resolve):
        * platform/network/soup/DNSResolveQueueSoup.h:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Create and setup the default cookie jar.
        (WebCore::NetworkStorageSession::~NetworkStorageSession): Only disconnect the cookie jar signals.
        (WebCore::NetworkStorageSession::setCookieStorage): Update the cookie jar, now we know it's always a new one.
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::create): Use the new virtual method from StorageSessionProvider to get the SoupSession.
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): Remove the SoupCookieJar parameter.
        * platform/network/soup/SoupNetworkSession.h:

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

        [GTK] Compilation errors when GL is disabled
        https://bugs.webkit.org/show_bug.cgi?id=200223

        Unreviewed, fix build with -DENABLE_OPENGL=OFF.

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

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

        MediaSource.isTypeSupported claims FLAC-in-MP4 support on iOS and macOS, but plays silence
        https://bugs.webkit.org/show_bug.cgi?id=198583
        <rdar://problem/51487853>

        Reviewed by Maciej Stachowiak.

        * platform/graphics/avfoundation/objc/AVStreamDataParserMIMETypeCache.h:
        (WebCore::AVStreamDataParserMIMETypeCache::canDecodeType): Use anParseExtendedMIMEType:
        when it is available.

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

        [LFC][TFC] <table> initiates a principal block container box called table wrapper box.
        https://bugs.webkit.org/show_bug.cgi?id=200198
        <rdar://problem/53623803>

        Reviewed by Antti Koivisto.

        The table wrapper box contains the table box itself and any caption boxes.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isBlockContainerBox const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isTableCaption const):
        (WebCore::Layout::Box::isTableRow const):
        (WebCore::Layout::Box::isTableCell const):
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::appendChild):
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::createTableStructure):
        (WebCore::Layout::TreeBuilder::createSubTree):
        (WebCore::Layout::outputLayoutBox):
        * layout/layouttree/LayoutTreeBuilder.h:

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

        [WebGPU] Replace Vectors with HashSets for tracking resources used by GPUCommandBuffer
        https://bugs.webkit.org/show_bug.cgi?id=200200

        Reviewed by Myles C. Maxfield.

        Resources bound to a command buffer or bind group only need be tracked once rather than once per sub-view. 
        This patch cuts GPUQueue.submit validation from 2-12 ms down to ~0 when drawing 12000 triangles in Animometer.

        Covered by existing tests; no behavior change expected.

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp: Removed unused variable.
        * platform/graphics/gpu/GPUBindGroup.h:
        (WebCore::GPUBindGroup::boundBuffers const):
        (WebCore::GPUBindGroup::boundTextures const):
        * platform/graphics/gpu/GPUCommandBuffer.h:
        (WebCore::GPUCommandBuffer::usedBuffers const):
        (WebCore::GPUCommandBuffer::usedTextures const):
        (WebCore::GPUCommandBuffer::useBuffer):
        (WebCore::GPUCommandBuffer::useTexture):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::GPUBindGroup::tryCreate):
        (WebCore::GPUBindGroup::GPUBindGroup):

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

        [LFC][TFC] Introduce Box::establishesTableFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=200060

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/tables.html

        The table generates a principal block container box called the table wrapper box that contains the table box itself and any caption boxes.
        The table box is a block-level box that contains the table's internal table boxes.
        The table wrapper box is block-level for 'display: table', and inline-level; for 'display: inline-table'. The table wrapper box establishes a block
        formatting context, and the table box establishes a table formatting context."

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesFormattingContext const):
        (WebCore::Layout::Box::establishesTableFormattingContext const):
        (WebCore::Layout::Box::isBlockLevelBox const):
        (WebCore::Layout::Box::isInlineLevelBox const):
        (WebCore::Layout::Box::isBlockContainerBox const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isTableWrapperBox const):
        (WebCore::Layout::Box::isTableBox const):

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

        [ContentChangeObserver] didFinishContentChangeObserving should include the type of content change.
        https://bugs.webkit.org/show_bug.cgi?id=200247
        <rdar://problem/53681149>

        Reviewed by Simon Fraser.

        Now we don't have to query the content change observer for the type of the change in the callback.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):

2019-07-29  Sergei Glazunov  <glazunov@google.com>

        The maximum subframe count check should not be skipped for empty URLs.
        https://bugs.webkit.org/show_bug.cgi?id=200032

        Reviewed by Ryosuke Niwa.

        Move the check closer to the actual frame creation code in `loadSubframe`.

        Test: fast/dom/connected-subframe-counter-overflow.html

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction): Assert that all child frames have been detached.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::canLoad const):
        (WebCore::HTMLFrameElementBase::canLoadURL const):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::canAddSubframe const): Deleted.
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::canLoadURL const):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

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

        [ContentChangeObserver] ChromeClient::observedContentChange() name is misleading
        https://bugs.webkit.org/show_bug.cgi?id=200238
        <rdar://problem/53677038>

        Reviewed by Simon Fraser.

        This function indicates that we've finished observing content changes.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/ios/ContentChangeObserver.cpp:
        (WebCore::ContentChangeObserver::adjustObservedState):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::mouseMoved):

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

        StringBuilder::append(makeString(...)) is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=200034

        Reviewed by Saam Barati.

        Replace uses of StringBuilder::append(makeString(...)) with StringBuilder::flexiblAppend(...).
        Where possible, also merged consecutive calls to StringBuilder::append(...) into a single call
        to StringBuilder::flexiblAppend(...) to avoid unnecessary additional overflow checks and resizes.
        Also where possible, replaced StringBuilder with makeString() if no branching was used during
        construction.
        
        A lot more can be done to improve the efficiency of StringBuilder use in the WHLSL code including:
        - Using StringView more prevelently, especially when passing a substring to the StringBuilder.
        - Passing existing StringBuilders to functions for them to use rather than returning a String and 
          then appending that to another StringBuilder.
        - Using custom StringTypeAdapters for generated names, rather than storing them as Strings. 

        * Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceHelperTypes):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::resourceSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::builtInsSignature):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledInputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::mangledOutputPath):
        (WebCore::WHLSL::Metal::EntryPointScaffolding::unpackResourcesAndNamedBuiltIns):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::VertexEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::helperTypes):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::signature):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::unpack):
        (WebCore::WHLSL::Metal::FragmentEntryPointScaffolding::pack):
        (WebCore::WHLSL::Metal::ComputeEntryPointScaffolding::signature):
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDeclarationWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::FunctionDefinitionWriter):
        (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/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::MetalTypeDeclarationWriter::visit):
        (WebCore::WHLSL::Metal::TypeNamer::emitUnnamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        (WebCore::WHLSL::Metal::TypeNamer::metalTypes):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Types::appendNameTo):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * testing/Internals.cpp:
        (WebCore::Internals::ongoingLoadsDescriptions const):

2019-07-29  Megan Gardner  <megan_gardner@apple.com>

        Force Reveal to always lookup from menu
        https://bugs.webkit.org/show_bug.cgi?id=200186
        <rdar://problem/52967940>

        Reviewed by Tim Horton.

        We currently only have the 'lookup' menu item, so we should always force the 'lookup' action from it.

        Reveal is not currently testable.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):

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

        REGRESSION (r246899): Subtitles show twice when controls show/hide on hulu.com
        https://bugs.webkit.org/show_bug.cgi?id=200187
        rdar://problem/53511121

        Reviewed by Zalan Bujtas.

        When a layer that painted into shared backing moved, we'd fail to repaint its old position
        because the RenderLayer's repaint rects are cleared via BackingSharingState::updateBeforeDescendantTraversal().

        Recomputing repaint rects is expensive, so we only want to do it when necessary, which is for
        layers that start and stop sharing (going into and out of compositing already recomputes them).
        So add logic to RenderLayerBacking::setBackingSharingLayers() that recomputes repaint rects
        on layers that will no longer use shared backing, and those that are newly using shared
        backing.

        Test: compositing/shared-backing/backing-sharing-repaint.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setBackingProviderLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setBackingSharingLayers):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::BackingSharingState::appendSharingLayer):
        (WebCore::RenderLayerCompositor::updateBacking):

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

        The touch-action property was ignored on replaced elements (canvas, img etc)
        https://bugs.webkit.org/show_bug.cgi?id=200205
        rdar://problem/53331224

        Reviewed by Antti Koivisto.

        The event region painting code didn't handle replaced elements correctly,
        causing touch-action to get ignored for <canvas>, <img> etc. Fix by handling
        region painting in RenderReplaced.

        This still doesn't fix <iframe> but I'm not sure what the correct behavior is there
        (webkit.org/b/200204).

        Test: pointerevents/ios/touch-action-region-replaced-elements.html

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        (WebCore::RenderReplaced::shouldPaint):

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

        REGRESSION(r243058): [GStreamer] WebKitWebSrc's internal queue can exhaust the WebProcess memory
        https://bugs.webkit.org/show_bug.cgi?id=199998

        Reviewed by Xabier Rodriguez-Calvar.

        With the webkitwebsrc rewrite the element lost its ability to tell
        the resource loader when to pause and resume downloading because
        we don't use appsrc and its enough-data/need-data signals anymore.
        So new heuristics are introduced with this patch. Downloading of
        resources bigger than 2MiB might pause when the internal adapter
        has enough data (2% of the full resource) and resume when the
        adapter size goes below 20% of those 2%.

        No new tests, the media element spec doesn't clearly mandate how
        the resource loading should behave when the element is paused or
        how aggressively the resource should be downloaded during
        playback.

        This patch was functionally tested with a 1.3GiB resource loaded
        over the local network, the resource was downloaded in ~30MiB
        chunks, stopping and resuming every 20 seconds, approximately.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_class_init):
        (webKitWebSrcCreate):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):

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

        WebSockets: workers never use the platform WebSockets path
        https://bugs.webkit.org/show_bug.cgi?id=200161

        Reviewed by Michael Catanzaro.

        A WebCore::WebSocketChannel is created unconditionally in WorkerThreadableWebSocketChannel::Peer.

        * Modules/websockets/ThreadableWebSocketChannel.cpp:
        (WebCore::ThreadableWebSocketChannel::create): New create method that receives a Document& and creates the
        WebSocket channel checking the runtime enabled features to decide.
        * Modules/websockets/ThreadableWebSocketChannel.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::Peer): Use ThreadableWebSocketChannel::create().

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

        Multiple context menu actions broken for YouTube videos
        https://bugs.webkit.org/show_bug.cgi?id=199999

        Reviewed by Eric Carlson.

        Do not include CopyMediaLinkItem and OpenMediaInNewWindowItem to the context menu when media URL is not
        downloadable or the request can't be handled.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):

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

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

        "Causes PLT5 regression on some machines" (Requested by mlam|a
        on #webkit).

        Reverted changeset:

        "Add crash diagnostics for debugging unexpected zapped cells."
        https://bugs.webkit.org/show_bug.cgi?id=200149
        https://trac.webkit.org/changeset/247886

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

        Fix the release build

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::insert):

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

        [iOS] Touch regions overlay needs to show touch-action:none
        https://bugs.webkit.org/show_bug.cgi?id=200203

        Reviewed by Wenson Hsieh.

        When I added touch-action overlay painting, I didn't realize that touch-action:none
        was an important value to display. But it is, so fix that.

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

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

        [WHLSL] Remove UnnamedType copy/move constructors and mark classes as final
        https://bugs.webkit.org/show_bug.cgi?id=200188

        Reviewed by Myles C. Maxfield.

        Since they are ref counted, you should make taking a ref to them
        instead of moving or copying them. This patch encodes that by deleting
        the relevant copy/move constructors and assignment operators.

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        (WebCore::WHLSL::AST::ArrayType::ArrayType): Deleted.
        (WebCore::WHLSL::AST::ArrayType::create): Deleted.
        (WebCore::WHLSL::AST::ArrayType::type const): Deleted.
        (WebCore::WHLSL::AST::ArrayType::type): Deleted.
        (WebCore::WHLSL::AST::ArrayType::numElements const): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        (WebCore::WHLSL::AST::PointerType::PointerType): Deleted.
        (WebCore::WHLSL::AST::PointerType::create): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        (WebCore::WHLSL::AST::TypeReference::TypeReference): Deleted.
        (WebCore::WHLSL::AST::TypeReference::create): Deleted.
        (WebCore::WHLSL::AST::TypeReference::name): Deleted.
        (WebCore::WHLSL::AST::TypeReference::typeArguments): Deleted.
        (WebCore::WHLSL::AST::TypeReference::maybeResolvedType const): Deleted.
        (WebCore::WHLSL::AST::TypeReference::resolvedType const): Deleted.
        (WebCore::WHLSL::AST::TypeReference::setResolvedType): Deleted.
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:

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

        [WebGPU] Update GPUComputePipeline errors to match GPURenderPipeline implementation
        https://bugs.webkit.org/show_bug.cgi?id=200097

        Reviewed by Myles C. Maxfield.

        Remove passing around a functionName in GPUComputePipeline creation in favor of setting it on the GPUErrorScopes.
        Also, WebGPU objects no longer create new Ref<>s unless object creation succeeds.

        No new tests. Covered by existing tests.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createBuffer const):
        (WebCore::WebGPUDevice::createBufferMapped const):
        (WebCore::WebGPUDevice::createComputePipeline const):
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUComputePipeline.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateBuffer):
        (WebCore::GPUDevice::tryCreateComputePipeline const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUErrorScopes.cpp:
        (WebCore::GPUErrorScopes::generatePrefixedError): Only validaton errors have messages right now.
        * platform/graphics/gpu/GPUErrorScopes.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage):
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::GPUBuffer):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):

        These classes were made RefCounted in a previous patch; remove their move ctors to fix build.
        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:

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

        Expose the aria-label attribute for <video> elements.
        https://bugs.webkit.org/show_bug.cgi?id=200169
        <rdar://problem/51754558>

        Reviewed by Chris Fleizach.

        Tests: accessibility/ios-simulator/media-with-aria-label.html
               accessibility/media-with-aria-label.html

        We now expose the <video> element to accessibility clients as long as auto-play is not enabled.
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIsWebInteractiveVideo]):

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

        Unreviewed. Remove invalid assertion after r247878.
        We were essentially asserting all UnnamedType* were
        unique. But my patch made this no longer the case by
        design to make things faster.

        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::insert):

2019-07-26  Mark Lam  <mark.lam@apple.com>

        Add crash diagnostics for debugging unexpected zapped cells.
        https://bugs.webkit.org/show_bug.cgi?id=200149
        <rdar://problem/53570112>

        Reviewed by Yusuke Suzuki, Saam Barati, and Michael Saboff.

        No new tests because this is a feature for debugging crashes.  It has been tested
        manually by modifying the code to force a crash at the point of interest.

        Added some comments to document the hashes of known subspaces.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):

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

        Moving right by word boundary right before an object element followed by a br element hangs
        https://bugs.webkit.org/show_bug.cgi?id=200144

        Reviewed by Simon Fraser.

        The bug was caused by an infinite loop inside wordBreakIteratorForMinOffsetBoundary when it's trying to
        find the previous word boundary at the beginning of a word after the object element and the br element.
        In this case, previousBox is at the br element after the object element in the preceding line, and
        logicallyPreviousBox ends up returning the same inline box (that of the br element), causing a hang.

        Here's how. In logicallyPreviousBox, previousRootInlineBoxCandidatePosition returns a legacy position
        immediately after the object element. The root inline box for this position (previousRoot) is the one
        that contains the object element and the br element. However, when previousTextOrLineBreakBox is called
        on this root inline box, "box" argument of the function is set to nullptr, and as a result, the function
        finds and returns the same inline box of the br element that was passed to logicallyPreviousBox.

        Fixed the bug by passing the starting inline box to previousRootInlineBoxCandidatePosition when its
        root inline box is the previous root inline box (previousRoot). Also applied the same fix to
        logicallyNextBox even though we don't have a reproduction for that case for now (RTL test case is
        unaffected by nextRootInlineBoxCandidatePosition).

        Tests: editing/selection/move-by-word-visually-across-object-element-1.html
               editing/selection/move-by-word-visually-across-object-element-2.html
               editing/selection/move-by-word-visually-across-object-element-3.html

        * editing/VisibleUnits.cpp:
        (WebCore::logicallyPreviousBox): Fixed the bug.
        (WebCore::logicallyNextBox): Ditto.

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

        Do not fire readystatechange events at documents about to get replaced by javascript URLs.
        <rdar://problem/51665406> and https://bugs.webkit.org/show_bug.cgi?id=198786

        Reviewed by Ryosuke Niwa.

        Test: http/tests/dom/ready-state-on-javascript-replace.html

        We were firing too many readystatechange events, more than other browsers.
        Our behavior on this test with this patch now matches Chrome.

        (There was even an ancient FIXME alluding to this referencing a spec issue, and that issues has long been resolvedv)

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

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

        [iPadOS] wix.com cannot select a template to edit or view
        https://bugs.webkit.org/show_bug.cgi?id=200174
        <rdar://problem/53281296>

        Reviewed by Simon Fraser.

        Opt out of simulated mouse event sending for template selection on wix.com.
        When wix.com receives a simulated mouse event during the touch events, it calls preventDefault() which prevents us from running the hover heuristics -> no click.

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

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

        [WHLSL] UnnamedType should be reference counted
        https://bugs.webkit.org/show_bug.cgi?id=200098

        Reviewed by Dean Jackson.

        This patch makes UnnamedType reference counted. The motivation for doing this
        is I measured how many times we were cloning UnnamedTypes, and I found we were
        doing it ~433,000 times in some of Justin's demos. This is hugely wasteful,
        given that an UnnamedType is immutable in the sense that once the type is
        resolved, it will never change. So instead of repeatedly cloning the same
        type, and having Expression point to a UniqueRef of UnnamedType, we should
        instead make UnnamedType reference counted, and have expressions point to a
        potentially shared UnnamedType.
        
        Doing this is hugely beneficial to WHLSL compile times. On Justin's demos,
        these are the results I'm getting:
        
        hello-triangle: neutral
        hello-cube: 55% faster
        compute-blur: 35% faster
        textured-cube: 49% faster

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        (WebCore::WHLSL::AST::ArrayReferenceType::ArrayReferenceType):
        (WebCore::WHLSL::AST::ArrayReferenceType::create):
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        (WebCore::WHLSL::AST::ArrayType::ArrayType):
        (WebCore::WHLSL::AST::ArrayType::create):
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        (WebCore::WHLSL::AST::EnumerationDefinition::EnumerationDefinition):
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        (WebCore::WHLSL::AST::Expression::setType):
        (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::FloatLiteralType):
        (WebCore::WHLSL::AST::FloatLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        (WebCore::WHLSL::AST::FunctionDeclaration::FunctionDeclaration):
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        (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/WHLSLNullLiteral.h:
        (WebCore::WHLSL::AST::NullLiteral::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        (WebCore::WHLSL::AST::PointerType::PointerType):
        (WebCore::WHLSL::AST::PointerType::create):
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        (WebCore::WHLSL::AST::ReadModifyWriteExpression::ReadModifyWriteExpression):
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        (WebCore::WHLSL::AST::ReferenceType::ReferenceType):
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h:
        (WebCore::WHLSL::AST::ResolvableType::resolve):
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        (WebCore::WHLSL::AST::StructureElement::StructureElement):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.cpp:
        (WebCore::WHLSL::AST::clone):
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.h:
        * 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::create):
        (WebCore::WHLSL::AST::TypeReference::cloneTypeReference const): Deleted.
        * 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::UnsignedIntegerLiteralType):
        (WebCore::WHLSL::AST::UnsignedIntegerLiteralType::clone const):
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::vectorInnerType):
        * Modules/webgpu/WHLSL/Metal/WHLSLNativeTypeWriter.cpp:
        (WebCore::WHLSL::Metal::writeNativeType):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::DuplicateFunctionKey::hash const):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::checkOperatorOverload):
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::commit):
        (WebCore::WHLSL::Checker::assignConcreteType):
        (WebCore::WHLSL::Checker::assignType):
        (WebCore::WHLSL::Checker::forwardType):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::getUnnamedType):
        (WebCore::WHLSL::argumentTypeForAndOverload):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::isBoolType):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:
        (WebCore::WHLSL::matchAndCommit):
        (WebCore::WHLSL::commit):
        (WebCore::WHLSL::inferTypesForTypeArguments):
        (WebCore::WHLSL::inferTypesForCallImpl):
        * Modules/webgpu/WHLSL/WHLSLInferTypes.h:
        * Modules/webgpu/WHLSL/WHLSLIntrinsics.cpp:
        (WebCore::WHLSL::Intrinsics::addVector):
        (WebCore::WHLSL::Intrinsics::addMatrix):
        (WebCore::WHLSL::Intrinsics::addTexture):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseEnumerationDefinition):
        (WebCore::WHLSL::Parser::parseVariableDeclaration):
        (WebCore::WHLSL::Parser::parseVariableDeclarations):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        (WebCore::WHLSL::PreserveLifetimes::PreserveLifetimes):
        (WebCore::WHLSL::PreserveLifetimes::makeStructVariableReference):
        (WebCore::WHLSL::PreserveLifetimes::assignVariableIntoStruct):
        (WebCore::WHLSL::preserveVariableLifetimes):
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::wrapAnderCallArgument):
        (WebCore::WHLSL::anderCallArgument):
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        (WebCore::WHLSL::PropertyResolver::simplifyRightValue):
        (WebCore::WHLSL::LeftValueSimplifier::finishVisiting):
        * Modules/webgpu/WHLSL/WHLSLResolveOverloadImpl.cpp:
        (WebCore::WHLSL::conversionCost):
        * Modules/webgpu/WHLSL/WHLSLResolvingType.h:
        (WebCore::WHLSL::ResolvingType::ResolvingType):
        (WebCore::WHLSL::ResolvingType::getUnnamedType):
        (WebCore::WHLSL::ResolvingType::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):
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):

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

        [curl] Heap corruption in ~CurlResponse
        https://bugs.webkit.org/show_bug.cgi?id=198320

        Reviewed by Fujii Hironori.

        Stop sharing object which was reffered by two threads to fix crash bug.

        No tests needed, no functionality changes.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        * platform/network/curl/CurlRequest.h:

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

        slides.google.com: opening speaker notes while presenting causes a fatal error in the web app on iPad
        https://bugs.webkit.org/show_bug.cgi?id=199933
        <rdar://problem/53034345>

        Reviewed by Darin Adler.

        docs.google.com might sometimes try to window.open an about URL that not about:blank or about:srcdoc.
        In that case, WebKit is opening a window but is considering that the window is cross origin with its opener.
        This breaks docs.google.com as they want to access the website.
        Add a site-specific hack so as to treat all about URLs being opened through window.open as about:blank.

        Manually tested on docs.google.com website.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsYouTubeOverflowScrollQuirk const):
        (WebCore::Quirks::shouldOpenAsAboutBlank const):
        * page/Quirks.h:

2019-07-26  Alexander Mikhaylenko  <exalm7659@gmail.com>

        REGRESSION(r246496): [GTK] Tapping the web view scrolls up a bit
        https://bugs.webkit.org/show_bug.cgi?id=200084

        Reviewed by Carlos Garcia Campos.

        gdk_event_get_scroll_direction() returns false, but also sets direction to GDK_SCROLL_UP if
        the direction was GDK_SCROLL_SMOOTH. Relying on zero deltas in this case is not correct, because
        they can also be zero with GDK_SCROLL_SMOOTH. In this case, set the direction manually to avoid
        that.

        See https://gitlab.gnome.org/GNOME/gtk/issues/2048

        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

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

        Make storing cross-origin top-level prefetches in HTTP cache optional
        https://bugs.webkit.org/show_bug.cgi?id=199499

        Reviewed by Youenn Fablet.

        Add Internals API for adding an event listener to prefetch load.

        Test: http/wpt/prefetch/link-prefetch-skip-disk-cache.html

        * bindings/js/JSEventListener.h:
        * dom/EventTarget.h:
        (WebCore::EventTarget::addEventListener):
        * dom/Node.h:
        * html/HTMLLinkElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::addPrefetchLoadEventListener):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Subpixel fringes around TextIndicator snapshots at non-integral scale factors
        https://bugs.webkit.org/show_bug.cgi?id=200145

        Reviewed by Simon Fraser.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/FrameSnapshotting.h:
        * page/TextIndicator.cpp:
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        Round the scale factor up, and snappily enclose the clip rects.

        TextIndicator doesn't require the use of the precise scale factor that
        the page is painted at, but we want it to be sharp, so we overshoot!

2019-07-25  Brent Fulgham  <bfulgham@apple.com>

        Use IWICBitmap (rather than ID2D1Bitmap) for NativeImagePtr on FTW
        https://bugs.webkit.org/show_bug.cgi?id=200093

        Reviewed by Dean Jackson.

        When I wrote the original Direct2D code, I did not realize that the backing memory for the
        ID2D1Bitmap was inaccessible since it is effectively a representation of GPU memory. There
        is no API to access or modify the pixels.

        Instead, MSDN documentation indicates that we should be using IWICBitmap objects, which are
        converted to ID2D1Bitmap objects when things are ready to be rendered.

        This makes it possible to use the TextureMapper backend to do efficient compositing and tile
        drawing, since the data backing the bitmap can now be accessed and manipulated, allowing us
        to support filters and other effects.

        * PlatformFTW.cmake:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::supportedImageMIMETypesForEncoding):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformLayer const):
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::platformInit):
        (WebCore::GraphicsContextPlatformPrivate::setAlpha):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::drawDeviceBitmap):
        (WebCore::GraphicsContext::releaseWindowsContext):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::beginDraw):
        (WebCore::GraphicsContextPlatformPrivate::endDraw):
        (WebCore::GraphicsContext::drawPattern):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h:
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        (): Deleted.
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::createCroppedImageIfNecessary):
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBuffer::copyImage const):
        (WebCore::ImageBuffer::sinkIntoNativeImage):
        (WebCore::ImageBuffer::copyNativeImage const):
        (WebCore::ImageBuffer::draw):
        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::createFrameImageAtIndex):
        * platform/graphics/win/ImageDirect2D.cpp:
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/NativeImageDirect2D.cpp:
        (WebCore::imagingFactory):
        (WebCore::nativeImageSize):
        (WebCore::nativeImageHasAlpha):
        (WebCore::nativeImageSinglePixelSolidColor):
        (WebCore::drawNativeImage):
        (WebCore::clearNativeImageSubimages):
        * platform/graphics/win/PathDirect2D.cpp:
        (WebCore::Path::strokeContains const):
        * platform/graphics/win/PatternDirect2D.cpp:
        (WebCore::Pattern::createPlatformPattern const):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::read):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::shouldRespectImageOrientation const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImage):

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

        REGRESSION (r243637): Some web fonts fail to load on Google docs
        https://bugs.webkit.org/show_bug.cgi?id=200106

        Reviewed by Geoffrey Garen.

        Prior to r243637, WebKit threw an exception if the font family name didn't parse as a CSS identifier in the setter
        of `family` IDL attribute of FontFace interface because WebKit implemented the old spec faithfully unlike Chrome
        and Firefox which basically treated it as a string and didn't throw any exception. [1]

        To account for this browser behavior difference, Google docs implemented a workaround for Safari which is to wrap
        some identifiers in font family names with quotation marks: `docs-Amatic SC` as `'docs-Amatic SC'` and
        `docs-Playfair Display` as `docs-'Playfair Display'`. Unfortunately, this in turn causes the latest Safari to
        not match these font face family with those that appear in stylesheet since we no longer parse it as a CSS identifier.

        This patch adds a site specific quirk for Google docs to undo this workaround by stripping away single quotation marks.

        [1] See https://github.com/w3c/csswg-drafts/issues/3776 for the context.

        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        (WebCore::FontFace::setFamily):
        * css/FontFace.h:
        * css/FontFace.idl:
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldStripQuotationMarkInFontFaceSetFamily const):
        * page/Quirks.h:

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

        Add helper for ignoring deprecated implementation warnings
        https://bugs.webkit.org/show_bug.cgi?id=200135

        Reviewed by Wenson Hsieh.

        Add ALLOW_DEPRECATED_IMPLEMENTATIONS_BEGIN/END macro which
        is IGNORE_WARNINGS_BEGIN("deprecated-implementations")

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper accessibilityActionDescription:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper IGNORE_WARNINGS_END]): Deleted.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveAuthenticationChallenge:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):

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

        Unreviewed. Speculative build fix for tvOS of missing include.

        * Modules/webgpu/WHLSL/WHLSLLexer.h:

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

        Unreviewed, fix -Wunused-parameter warning

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

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

        [WHLSL] Add descriptive error messages
        https://bugs.webkit.org/show_bug.cgi?id=195682
        <rdar://problem/50746322>

        Reviewed by Myles C. Maxfield.

        This patch adds error messages to the WHLSL compiler. I'm taking a first pass
        at having decent error messages everywhere we set an error. However, we will
        probably refine these messages to be more accurate and descriptive over time.
        
        Passes that can fail no longer return a boolean. Instead, they return Expected<void, Error>.
        From Error, we can generate a descriptive error message. Visitor::setError now
        requires an Error as an argument. So anywhere in Visitor that might fail is
        now required to provide an error message.
        
        In a follow-up to this, we should actually make our checkFail tests test that
        they get the expected error message: https://bugs.webkit.org/show_bug.cgi?id=200049

        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLQualifier.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeArgument.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        (WebCore::WHLSL::AutoInitialize::visit):
        (WebCore::WHLSL::autoInitializeVariables):
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.h:
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.cpp:
        (WebCore::WHLSL::checkDuplicateFunctions):
        * Modules/webgpu/WHLSL/WHLSLCheckDuplicateFunctions.h:
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.cpp:
        (WebCore::WHLSL::TextureReferencesChecker::visit):
        (WebCore::WHLSL::checkTextureReferences):
        * Modules/webgpu/WHLSL/WHLSLCheckTextureReferences.h:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::resolveWithOperatorAnderIndexer):
        (WebCore::WHLSL::resolveWithOperatorLength):
        (WebCore::WHLSL::resolveWithReferenceComparator):
        (WebCore::WHLSL::resolveByInstantiation):
        (WebCore::WHLSL::resolveFunction):
        (WebCore::WHLSL::checkSemantics):
        (WebCore::WHLSL::Checker::assignTypes):
        (WebCore::WHLSL::Checker::visit):
        (WebCore::WHLSL::Checker::recurseAndGetInfo):
        (WebCore::WHLSL::Checker::getInfo):
        (WebCore::WHLSL::Checker::finishVisiting):
        (WebCore::WHLSL::Checker::recurseAndRequireBoolType):
        (WebCore::WHLSL::check):
        * Modules/webgpu/WHLSL/WHLSLChecker.h:
        * Modules/webgpu/WHLSL/WHLSLCodeLocation.h: Added.
        (WebCore::WHLSL::CodeLocation::CodeLocation):
        (WebCore::WHLSL::CodeLocation::startOffset const):
        (WebCore::WHLSL::CodeLocation::endOffset const):
        (WebCore::WHLSL::CodeLocation::operator== const):
        (WebCore::WHLSL::CodeLocation::operator!= const):
        (WebCore::WHLSL::CodeLocation::operator bool const):
        * Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp:
        (WebCore::WHLSL::computeDimensions):
        * Modules/webgpu/WHLSL/WHLSLError.h: Added.
        (WebCore::WHLSL::Error::Error):
        (WebCore::WHLSL::Error::codeLocation const):
        (WebCore::WHLSL::Error::message const):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.cpp:
        (WebCore::WHLSL::checkFunctionStages):
        * Modules/webgpu/WHLSL/WHLSLFunctionStageChecker.h:
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.cpp:
        (WebCore::WHLSL::Gatherer::reset):
        (WebCore::WHLSL::Gatherer::visit):
        (WebCore::WHLSL::gatherEntryPointItems):
        * Modules/webgpu/WHLSL/WHLSLGatherEntryPointItems.h:
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::lineAndColumnNumberFromOffset):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::Lexer::lineNumberFromOffset): Deleted.
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        (WebCore::WHLSL::CodeLocation::CodeLocation):
        (WebCore::WHLSL::Lexer::errorString):
        (WebCore::WHLSL::AST::CodeLocation::CodeLocation): Deleted.
        (WebCore::WHLSL::AST::CodeLocation::startOffset const): Deleted.
        (WebCore::WHLSL::AST::CodeLocation::endOffset const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::~NameResolver):
        (WebCore::WHLSL::NameResolver::visit):
        (WebCore::WHLSL::resolveNamesInTypes):
        (WebCore::WHLSL::resolveTypeNamesInFunctions):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parse):
        (WebCore::WHLSL::intLiteralToInt):
        (WebCore::WHLSL::uintLiteralToUint):
        (WebCore::WHLSL::floatLiteralToFloat):
        (WebCore::WHLSL::recognizeSimpleUnsignedInteger):
        (WebCore::WHLSL::Parser::parseTypeArgument):
        (WebCore::WHLSL::Parser::parseType):
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseWhileLoop):
        (WebCore::WHLSL::Parser::parseEffectfulExpression):
        (WebCore::WHLSL::Parser::parseLimitedSuffixOperator):
        (WebCore::WHLSL::Parser::parseSuffixOperator):
        (WebCore::WHLSL::Parser::parseExpression):
        (WebCore::WHLSL::Parser::completeTernaryConditional):
        (WebCore::WHLSL::Parser::completeAssignment):
        (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):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        (WebCore::WHLSL::Parser::Error::Error): Deleted.
        (WebCore::WHLSL::Parser::Error::dump const): Deleted.
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        (WebCore::WHLSL::prepare):
        * Modules/webgpu/WHLSL/WHLSLPrepare.h:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        (WebCore::WHLSL::setterCall):
        (WebCore::WHLSL::getterCall):
        (WebCore::WHLSL::modify):
        (WebCore::WHLSL::PropertyResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.cpp:
        (WebCore::WHLSL::checkRecursion):
        * Modules/webgpu/WHLSL/WHLSLRecursionChecker.h:
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:
        (WebCore::WHLSL::checkRecursiveTypes):
        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.h:
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        (WebCore::WHLSL::includeStandardLibrary):
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp:
        (WebCore::WHLSL::checkStatementBehavior):
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.h:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.cpp:
        (WebCore::WHLSL::synthesizeArrayOperatorLength):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeArrayOperatorLength.h:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.cpp:
        (WebCore::WHLSL::synthesizeConstructors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeConstructors.h:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.cpp:
        (WebCore::WHLSL::synthesizeEnumerationFunctions):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeEnumerationFunctions.h:
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.cpp:
        (WebCore::WHLSL::synthesizeStructureAccessors):
        * Modules/webgpu/WHLSL/WHLSLSynthesizeStructureAccessors.h:
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:
        (WebCore::WHLSL::Visitor::hasError const):
        (WebCore::WHLSL::Visitor::expectedError):
        (WebCore::WHLSL::Visitor::checkErrorAndVisit):
        (WebCore::WHLSL::Visitor::setError):
        (WebCore::WHLSL::Visitor::error const): Deleted.
        (): Deleted.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetFunctions):

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

        [WHLSL] Add optional logging for phase timings
        https://bugs.webkit.org/show_bug.cgi?id=200099

        Reviewed by Dean Jackson.

        As we're doing WHLSL compiler speedup work, it helps to be able to
        log phase times. I think a few of us have written such patches locally.
        In this patch, I'm adding a way to easily switch this logging on and
        off by flipping a "constexpr bool" and rebuilding.

        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::logPhaseTimes):
        (WebCore::WHLSL::PhaseTimer::PhaseTimer):
        (WebCore::WHLSL::PhaseTimer::~PhaseTimer):
        (WebCore::WHLSL::prepareShared):
        (WebCore::WHLSL::prepare):

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

        Avoid some unnecessary HashMap copies
        https://bugs.webkit.org/show_bug.cgi?id=200129

        Reviewed by Youenn Fablet.

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

2019-07-25  Joshua Watt  <JPEW.hacker@gmail.com>

        [WPE] Draw other button types
        https://bugs.webkit.org/show_bug.cgi?id=199377

        Reviewed by Michael Catanzaro.

        There are other button types that should be drawn with the default style
        besides just push buttons.

        * platform/wpe/ThemeWPE.cpp:
        (WebCore::ThemeWPE::paint):
        (WebCore::ThemeWPE::paintButton):
        * platform/wpe/ThemeWPE.h:

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

        REGRESSION (r244995): Assertion failure when addEventListener to an SVGElement which has an. instance in shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=200083

        Reviewed by Ryosuke Niwa.

        When adding an event listener to an SVGElement, the same event listener
        has to be add to all the instances of SVGElement in the shadow tree. See
        SVGElement::addEventListener().

        In r244995, an assertion was added to ensure if the event listener is
        attached to an event target, the new event target has be the same as the
        attached one. This assertion isn't correct for the event targets which 
        were copied from the targetElement sub tree of an SVGUseElement to the
        shadow tree.

        Test: svg/custom/add-event-listener-shadow-tree-element.html

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::isCloneInShadowTreeOfSVGUseElement):
        (WebCore::JSLazyEventListener::checkValidityForEventTarget):

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

        Unreviewed, rolling out r247821.

        Caused two crashing Layout Tests

        Reverted changeset:

        "Make storing cross-origin top-level prefetches in HTTP cache
        optional"
        https://bugs.webkit.org/show_bug.cgi?id=199499
        https://trac.webkit.org/changeset/247821

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

        Avoid UI Process hangs when the WebContent process is showing JS prompts / alerts
        https://bugs.webkit.org/show_bug.cgi?id=200107
        <rdar://problem/53034592>

        Reviewed by Geoffrey Garen.

        Add testing infrastructure for SendSyncOption::ProcessIncomingSyncMessagesWhenWaitingForSyncReply.

        Test: fast/misc/testProcessIncomingSyncMessagesWhenWaitingForSyncReply.html

        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::testProcessIncomingSyncMessagesWhenWaitingForSyncReply):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Make storing cross-origin top-level prefetches in HTTP cache optional
        https://bugs.webkit.org/show_bug.cgi?id=199499

        Reviewed by Youenn Fablet.

        Add Internals API for adding an event listener to prefetch load.

        Test: http/wpt/prefetch/link-prefetch-skip-disk-cache.html

        * bindings/js/JSEventListener.h:
        * dom/EventTarget.h:
        (WebCore::EventTarget::addEventListener):
        * dom/Node.h:
        * html/HTMLLinkElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::addPrefetchLoadEventListener):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        [bmalloc] Add IsoHeap test to ensure that IsoHeap pages are not allocating too large VA
        https://bugs.webkit.org/show_bug.cgi?id=200103

        Reviewed by Mark Lam.

        No behavior change in WebCore.

        * page/MemoryRelease.cpp:
        * page/ResourceUsageThread.h:
        (WebCore::TagInfo::TagInfo): Deleted.
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::vmPageSize): Deleted.
        (WebCore::logFootprintComparison): Deleted.
        (WebCore::displayNameForVMTag): Deleted.
        (WebCore::pagesPerVMTag): Deleted.

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

        Web Inspector: support `console.screenshot` with detached Nodes that are graphical
        https://bugs.webkit.org/show_bug.cgi?id=199309

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/console-screenshot.html

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

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

        [WHLSL] Use bmalloc instead of system malloc for WHLSL data structures
        https://bugs.webkit.org/show_bug.cgi?id=200063

        Rubber-stamped by Sam Weinig.

        This is a 25-30% WHLSL compile time speedup on Justin's textured-cube demo
        and a ~40% compile time speedup on the hello-cube demo.
        
        The phases that speed up from this are:
        checker
        includeStandardLibrary
        autoInitializeVariables
        resolveProperties

        * Modules/webgpu/WHLSL/AST/WHLSLAddressSpace.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLArrayType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLAssignmentExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseFunctionAttribute.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBaseSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBlock.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBooleanLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBreak.h:
        * Modules/webgpu/WHLSL/AST/WHLSLBuiltInSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLCallExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLCommaExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLConstantExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLContinue.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDereferenceExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDoWhileLoop.h:
        * Modules/webgpu/WHLSL/AST/WHLSLDotExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEffectfulExpressionStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMemberLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFallthrough.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFloatLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLForLoop.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLFunctionDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLGlobalVariableReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIfStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIndexExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLLogicalNotExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLMakeArrayReferenceExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLMakePointerExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNativeFunctionDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNativeTypeDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNullLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLNumThreadsFunctionAttribute.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPointerType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLPropertyAccessExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReadModifyWriteExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReferenceType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLResolvableType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLResourceSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLReturn.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSpecializationConstantSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStageInOutSemantic.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStatementList.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStructureElement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchCase.h:
        * Modules/webgpu/WHLSL/AST/WHLSLSwitchStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTernaryExpression.h:
        * Modules/webgpu/WHLSL/AST/WHLSLType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeDefinition.h:
        * Modules/webgpu/WHLSL/AST/WHLSLTypeReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteral.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnsignedIntegerLiteralType.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclaration.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableDeclarationsStatement.h:
        * Modules/webgpu/WHLSL/AST/WHLSLVariableReference.h:
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h:
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:

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

        Web Inspector: support `console.screenshot` with ImageData and ImageBitmap
        https://bugs.webkit.org/show_bug.cgi?id=199304

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/console-screenshot.html

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

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

        Web Inspector: REGRESSION: Overlay: highlighting a ::before/::after shows the node info of the parent instead
        https://bugs.webkit.org/show_bug.cgi?id=200051

        Reviewed by Joseph Pecoraro.

        When highlighting a pseudo-element, only use the parent node for selector information. All
        rendering data should still come from the pseudo-element itself.

        * inspector/InspectorOverlay.cpp:
        (WebCore::drawShapeHighlight):
        (WebCore::InspectorOverlay::drawElementTitle):

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

        Web Inspector: support `console.screenshot` with subclasses of CanvasRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=199305

        Reviewed by Joseph Pecoraro.

        Test: inspector/console/console-screenshot.html

        * page/PageConsoleClient.cpp:
        (WebCore::canvasRenderingContext):
        (WebCore::PageConsoleClient::record):
        (WebCore::PageConsoleClient::recordEnd):
        (WebCore::PageConsoleClient::screenshot):

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

        Remove MediaPlayerPrivate::supportsMuting()
        https://bugs.webkit.org/show_bug.cgi?id=200005

        Reviewed by Eric Carlson.

        Remove no longer needed interface method.
        No change of behavior.

        * WebCore.order:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setVolume):
        (WebCore::MediaPlayer::setMuted):
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:

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

        Daring Fireball long press highlights are unnecessarily inflated due to false illegibility
        https://bugs.webkit.org/show_bug.cgi?id=200064

        Reviewed by Geoff Garen.

        If we consider text illegible on the given estimated background color,
        we bail from doing a tightly fitted selection-only TextIndicator and
        instead just paint the page without modification into the indicator,
        causing ugly overlap and an excessively inflated indicator.

        Change the mechanism we use to determine illegibility to be based on
        a standard, instead of a constant chosen by hand 13 years ago.

        Test: fast/text-indicator/text-indicator-with-low-contrast-text.html

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::luminance):
        Fix a typo.

        (WebCore::contrastRatio):
        Add a function that computes the contrast ratio given two colors using
        the formula from WCAG.

        * platform/graphics/ColorUtilities.h:
        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        Make use of WCAG's minimum legible contrast ratio instead of an
        arbitrary color difference cutoff for determining whether we consider
        text legible. It seems sensible and also considers the text on DF readable
        (which it seems to be to me!).

        * testing/Internals.cpp:
        (WebCore::Internals::TextIndicatorInfo::TextIndicatorInfo):
        * testing/Internals.h:
        * testing/Internals.idl:
        Expose all of the text rects to Internals, not just the bounding rect.
        Expose some more TextIndicator options to Internals so that we can
        turn on the legibility mechanism.

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

        Web Inspector: print the target of `console.screenshot` last so the target is the closest item to the image
        https://bugs.webkit.org/show_bug.cgi?id=199308

        Reviewed by Joseph Pecoraro.

        Right now, evaluating `console.screenshot(document, "test", 1);` will log a message to the
        console with `#document`, `"test"`, and `1`, all on different lines (togglable by a
        disclosure triangle) since `#document` isn't stringifiable.

        The ideal situation would be to have `"test"` and `1` logged on the same line, and then have
        `#document` be in a disclosure triangle. This way, you can "label" your images using
        additional arguments (e.g. `console.screenshot(document.images[1], "second image");`), as
        well as provide other data.

        If the only argument was the target, it should print as if it was `console.log(target);`.

        If there are no arguments, it should print the text "Viewport"` before the image.

        Test: inspector/console/console-screenshot.html

        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        (WebCore::PageConsoleClient::screenshot):

2019-07-24  Alicia Boya García  <aboya@igalia.com>

        [MSE] Reenqueue after removeCodedFrames()
        https://bugs.webkit.org/show_bug.cgi?id=199749

        Reviewed by Xabier Rodriguez-Calvar.

        Before this patch, SourceBuffer::removeCodedFrames() did not trigger
        an immediate reenqueue, but rather just set the `needsReenqueuing`
        flag, deferring it for the next append... but there may not be another
        append! In that case, the removed frames would still wrongly play.

        This is the case for instance in tests where a single long media
        append is done and then "cropped" with SourceBuffer.erase().

        Test: media/media-source/media-source-erase-after-last-append.html

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::removeCodedFrames):

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

        Add per-document autoplay quirk for netflix.com.
        https://bugs.webkit.org/show_bug.cgi?id=200058

        Reviewed by Eric Carlson.

        Opt netflix.com into the desktop-style per-document autoplay quirk.

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

2019-07-24  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Don't crash with empty video src
        https://bugs.webkit.org/show_bug.cgi?id=200081

        When a <video> element is set to load empty or about:blank, a player is still
        created, but no pipeline is loaded. This patch fixes some assertion errors that
        manifested in that case.

        Reviewed by Philippe Normand.

        Test: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-video-element/video_crash_empty_src.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::loadFull):
        (WebCore::MediaPlayerPrivateGStreamer::platformDuration const):
        (WebCore::MediaPlayerPrivateGStreamer::paused const):

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

        [WebGPU] Implement errors for GPURenderPipeline creation
        https://bugs.webkit.org/show_bug.cgi?id=200046

        Reviewed by Myles C. Maxfield.

        Replacing error logging in GPURenderPipeline creation with GPUError generation. 
        Update GPUErrorScopes to re-use an error message prefix for less boiler-plate.

        Test: webgpu/render-pipeline-errors.html

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createRenderPipeline const):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPURenderPipelineDescriptor::tryCreateGPURenderPipelineDescriptor const):
        * Modules/webgpu/WebGPURenderPipelineDescriptor.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateRenderPipeline const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/GPUErrorScopes.cpp:
        (WebCore::GPUErrorScopes::generatePrefixedError):
        * platform/graphics/gpu/GPUErrorScopes.h:
        (WebCore::GPUErrorScopes::setErrorPrefix):
        * platform/graphics/gpu/GPURenderPipeline.h:
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlDepthStencilState):
        (WebCore::trySetVertexInput):
        (WebCore::trySetColorStates):
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertRenderPipelineDescriptor):
        (WebCore::tryCreateMtlRenderPipelineState):
        (WebCore::GPURenderPipeline::tryCreate):
        (WebCore::GPURenderPipeline::GPURenderPipeline):

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

        ImageDecoderDirect2D::hotSpot() should return WTF::nullopt instead of default constructed value
        https://bugs.webkit.org/show_bug.cgi?id=200055

        Reviewed by Brent Fulgham.

        * platform/graphics/win/ImageDecoderDirect2D.cpp:
        (WebCore::ImageDecoderDirect2D::hotSpot const):

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

        Long press hint has half blue shape in Feedly.com
        https://bugs.webkit.org/show_bug.cgi?id=200053
        <rdar://problem/53323369>

        Reviewed by Simon Fraser.

        No new tests, because TextIndicator snapshots are not yet testable.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintForegroundForFragments):
        Paint ChildBlockBackgrounds when painting selection AND backgrounds;
        only exclude it when doing a selection-only paint.

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

        AX: CrashTracer: com.apple.WebKit.WebContent at WebKit: WebKit::WebSpeechSynthesisClient::speak
        https://bugs.webkit.org/show_bug.cgi?id=199988

        Reviewed by Per Arne Vollan.

        Implement the reset state to cancel current speech jobs.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::cancel):
        * platform/PlatformSpeechSynthesizer.h:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        (WebCore::PlatformSpeechSynthesizer::resetState):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::resetState):

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

        [iOS] Tapping the search field on a search results page on zillow.com shows and immediately dismisses the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=200044
        <rdar://problem/53103732>

        Reviewed by Wenson Hsieh.

        1. The keyboard gets dismissed as the result of scroll event.
        2. The (horizontal)scroll event is initiated by WebKit as we try to re-center the content.
        3. The content gets off-centered as the result of the newly constructed drop-down menu which slightly sticks out of the document to the right (layout overflows).

        It works with shipping version of iOS because _zoomToFocusRect operates on stale viewport information (see r244494 for the progression).
        This patch applies a site specific quirk to restore shipping behavior.

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

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

        CanvasRenderingContext2D.setTransfrom() reads only the aliases attributes of DOMMatrix2DInit
        https://bugs.webkit.org/show_bug.cgi?id=199850

        Reviewed by Simon Fraser.

        The validateAndFixup step of DOMMatrix2DInit sets the matrix attributes 
        (m** fields) from the aliases attributes (a, b, c, d, e, f) if the former
        ones do not exist and the later ones exist. See
        https://www.w3.org/TR/geometry-1/#dommatrixinit-dictionary and
        DOMMatrixReadOnly::validateAndFixup(DOMMatrix2DInit& init).

        Since CanvasRenderingContext2DBase::setTransform() validates and fixes
        the input DOMMatrix2DInit, it should rely on matrix attributes.

        Test: fast/canvas/setTransfrom-aliases-transform.html

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setTransform):

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

        [iOS WK2] A top fixed bar can flicker when scrolling with the keyboard up
        https://bugs.webkit.org/show_bug.cgi?id=200105
        rdar://problem/52871975

        Reviewed by Wenson Hsieh.

        ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition() computes a visual viewport
        from the current scroll position and scrollableAreaSize(). This doesn't know anything about
        the impact of keyboards on the visual viewport, so it computes a too-large visual viewport
        when the keyboard is up, triggering incorrect manipulations of the layout viewport. This
        leads to the top bar flashing to position 0 when it should be hidden off the top.

        Fix by feeding into the scrolling tree the height of the visual viewport which takes
        FrameView::visualViewportOverrideRect() into account. This is stored on ScrollingStateFrameScrollingNode/
        ScrollingTreeFrameScrollingNode.

        Test: scrollingcoordinator/ios/fixed-scrolling-with-keyboard.html

        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setFrameScrollingNodeState):
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp:
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        (WebCore::ScrollingStateFrameScrollingNode::setPropertyChangedBitsAfterReattach):
        (WebCore::ScrollingStateFrameScrollingNode::setOverrideVisualViewportSize):
        (WebCore::ScrollingStateFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingStateFrameScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState): LOG_WITH_STREAM() doesn't evaluate scrollingTreeAsText()
        every time.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp:
        (WebCore::ScrollingTreeFrameScrollingNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFrameScrollingNode::layoutViewportForScrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNode::dumpProperties const):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h:

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

        Long press hint of AirPods buy buttons are tall and narrow during animation
        https://bugs.webkit.org/show_bug.cgi?id=200036
        <rdar://problem/53145697>

        Reviewed by Wenson Hsieh.

        New test: fast/text-indicator/text-indicator-with-tiny-child.html

        * dom/Range.cpp:
        (WebCore::Range::borderAndTextRects const):
        * dom/Range.h:
        Add a BoundingRectBehavior that ignores 1x1 and smaller rects.

        * page/TextIndicator.cpp:
        (WebCore::absoluteBoundingRectForRange):
        Enable IgnoreTinyRects.

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

        [macOS 10.15] Web process crashes when attempting to show the font panel via Font > Show Fonts
        https://bugs.webkit.org/show_bug.cgi?id=200021
        <rdar://problem/53301325>

        Reviewed by Ryosuke Niwa.

        In macOS 10.15, attempting to access ~/Library/FontCollections/ from the web process causes a Sandbox violation
        and a subsequent crash. This can be triggered by trying to show the font panel via Font > Show Fonts in the
        context menu after right clicking.

        In the (near) future, we should fix this by moving logic to show the font panel, color panel and styles panel
        from the Editor in the web process to the UI process in WebKit2. However, for the time being, we can just work
        around this by adding a new EditorClient hook to determine whether to allow the font panel to show; this returns
        true in the legacy macOS WebKit port, and false everywhere else.

        Test: editing/mac/style/do-not-crash-when-showing-font-panel.html

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::showFontPanel):
        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

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

        WebKit should strip away system font names from the pasted content
        https://bugs.webkit.org/show_bug.cgi?id=199975
        <rdar://problem/53336353>

        Reviewed by Darin Adler.

        Cocoa HTML Writer sometimes generate system font names such as ".AppleSystemUIFont", ".SFUI-Regular", and ".SF UI Mono".
        We need to strip away these font names upon paste to avoid these font names falling back to Times New Roman.

        Added the code to strip these font names away in EditingStyle::mergeStyleFromRulesForSerialization, which is used by
        StylizedMarkupAccumulator to generate HTML during copy. This works because WebContentReader::readWebArchive invokes
        sanitizeMarkupWithArchive which inserts the pasteboard content into a temporary document then re-serializes back to HTML
        using StylizedMarkupAccumulator before the actual pasting happens.

        This approach has a few benefits over stripping away these font names in ReplaceSelectionCommand:

        1. It would only affect clients that opts-in to copy & paste sanitization. e.g. it won't affect legacy WebKit clients
        and those that opt out of pasteboard content sanitization.

        2. It preserves font names such as ".SF Blah" that a website may insert as some kind of house keeping purposes if ever.
        While we don't have any evidence that there is any such a website but it's a real risk nonetheless. The copy side fix would
        only affect cross-site and cross-app pasting, which is rare and less likely to affect real user scenarios.

        3. It avoids exposing bogus .Apple* or .SF* font names to websites that directly use event.clipboardData.getData.
        Indeed stripping away bogus markup like this is one of the key features / benefit of using copy & paste sanitization.

        Test: editing/pasteboard/paste-cocoa-writer-markup-with-system-fonts.html

        * editing/EditingStyle.cpp:
        (WebCore::usesForbiddenSystemFontAsOnlyFontFamilyName): Added.
        (WebCore::EditingStyle::mergeStyleFromRulesForSerialization): Added the code to remove font-family property when needed.
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::isSystemFont): Moved.
        (WebCore::FontCache::isSystemFontForbiddenForEditing): Added.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::isSystemFontForbiddenForEditing): Added. Always returns false.
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::isSystemFontForbiddenForEditing): Ditto.

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

        [bmalloc] Each IsoPage gets 1MB VA because VMHeap::tryAllocateLargeChunk rounds up
        https://bugs.webkit.org/show_bug.cgi?id=200024

        Reviewed by Saam Barati.

        Changed how we interpret VM tags. Add IsoHeap VM tag support, and rename WebAssembly tag
        to Gigacage tag.

        * page/ResourceUsageData.h:
        * page/ResourceUsageOverlay.h:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::HistoricResourceUsageData::HistoricResourceUsageData):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::displayNameForVMTag):
        (WebCore::categoryForVMTag):

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

        Fix inspector override conversion in InspectorPageAgent::overrideSetting
        https://bugs.webkit.org/show_bug.cgi?id=200017

        Reviewed by Devin Rousso.

        Covered by inspector/page/overrideSetting-MockCaptureDevicesEnabled.html
        which should not fail on bots not having cameras

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::toOptionalBool):
        (WebCore::InspectorPageAgent::overrideSetting):
        Previously, the conversion for the mock capture value was implicit from a bool pointer to an optional.
        Make an explicit conversion as done for regular settings.

2019-07-22  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fix.

        * Modules/webdatabase/DatabaseContext.h:
        * html/HTMLDialogElement.cpp:
        * html/HTMLScriptElement.cpp:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        * workers/service/server/SWServerWorker.cpp:
        * workers/service/server/SWServerWorker.h:
        * worklets/WorkletGlobalScope.cpp:
        * worklets/WorkletGlobalScope.h:

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

        [iOS] [WK1] UIWebView always jumps to the top left corner when scrolling to reveal the selection
        https://bugs.webkit.org/show_bug.cgi?id=200013
        <rdar://problem/52526901>

        Reviewed by Simon Fraser.

        After <https://trac.webkit.org/r244141>, we no longer attempt to scroll to reveal the text selection in
        UIWebView after changing the selection, due to how we use the legacy document view rect in legacy WebKit when
        computing the visual viewport. This causes the viewRect in RenderLayer::scrollRectToVisible to be the same size
        as the content size, which then causes us to always scroll to the origin when revealing the selection.

        To make selection revealing work again in legacy WebKit, conditionally restore the old behavior of using the
        unobscured content rect as the view rect, only in the case where scrolling is delegated and the platform widget
        is present.

        Test: WebKitLegacy.ScrollToRevealSelection

        * page/FrameView.cpp:
        (WebCore::FrameView::viewRectExpandedByContentInsets const):
        (WebCore::FrameView::visualViewportRectExpandedByContentInsets const): Deleted.

        Additionally rename visualViewportRectExpandedByContentInsets to viewRectExpandedByContentInsets, to reflect the
        fact that this may either be the visual viewport rect or unobscured content rect.

        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):

2019-07-22  Brent Fulgham  <bfulgham@apple.com>

        Correct web audio-related crash in seed reports
        https://bugs.webkit.org/show_bug.cgi?id=200009
        <rdar://problem/51565203>

        Reviewed by Per Arne Vollan.

        Update the 'createMix' method to do proper return value checking so that
        we can clear the result of MTAudioProcessingTapCreate if the create operation
        failed.

        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm:
        (WebCore::AudioSourceProviderAVFObjC::createMix):

2019-07-22  Per Arne Vollan  <pvollan@apple.com>

        Prewarmed font does not find any matches
        https://bugs.webkit.org/show_bug.cgi?id=200007

        Reviewed by Brent Fulgham.

        Prewarming the font name 'SF Pro Text' does not find any matches. The font name ".SF NS Text/Display"
        should be used instead. Also add 'Lucida Grande' to the list of prewarmed font, since it is used as
        fallback font in many cases.

        No new tests, covered by existing tests.

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

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

        Make sure the player underlying volume is correctly set after creating a new player
        https://bugs.webkit.org/show_bug.cgi?id=199974
        <rdar://problem/52762559>

        Reviewed by Eric Carlson.

        When creating a player before starting to play, the volume might not be correctly initialized.
        Fix that by updating the volume like done for rate and muted state.
        A future refactoring should probably move that code in MediaPlayer.

        Add an internal API to query the volume value from the underlying player.

        Test: http/tests/media/audio-volume-zero.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateVolume):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::effectiveVolume const):
        (WebCore::HTMLMediaElement::effectiveMuted const):
        * html/HTMLMediaElement.h:
        * testing/Internals.cpp:
        (WebCore::Internals::privatePlayerVolume):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm:
        (WebCore::Internals::privatePlayerVolume):

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

        Web Inspector: Page: mark any WebCore::Setting inspector override as UNLIKELY
        https://bugs.webkit.org/show_bug.cgi?id=199925

        Reviewed by Joseph Pecoraro.

        * Scripts/SettingsTemplates/Settings.cpp.erb:

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

        Fix crashes in ScrollingStateNode::insertChild()
        https://bugs.webkit.org/show_bug.cgi?id=200023
        rdar://problem/53265378

        Reviewed by Darin Adler.

        Crash data suggest that ScrollingStateNode::insertChild() can be passed an index that
        is larger than the size of the vector, causing crashes.

        Fix defensively by falling back to append() if the passed index is equal to or larger
        than the size of the children vector.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::insertChild):

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

        Make some constructors explicit
        https://bugs.webkit.org/show_bug.cgi?id=199981

        Reviewed by Daniel Bates.

        Make explicit public constructors of objects that take POD or String& arguments,
        to reduce the changes of the compiler doing implicit conversions.

        * Modules/indexeddb/server/IndexValueEntry.h:
        * Modules/indexeddb/server/IndexValueStore.h:
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/webdatabase/ChangeVersionData.h:
        (WebCore::ChangeVersionData::ChangeVersionData):
        * Modules/webdatabase/OriginLock.h:
        * Modules/websockets/WebSocketExtensionParser.h:
        (WebCore::WebSocketExtensionParser::WebSocketExtensionParser):
        * bindings/js/ScriptCachedFrameData.h:
        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::PatternParser):
        * css/parser/CSSTokenizer.h:
        * css/parser/SizesAttributeParser.h:
        * dom/SpaceSplitString.cpp:
        (WebCore::TokenIsEqualToCStringTokenProcessor::TokenIsEqualToCStringTokenProcessor):
        * html/FormController.cpp:
        (WebCore::SavedFormState::appendControlState):
        (WebCore::SavedFormState::takeControlState):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressItem::ProgressItem):
        * page/DragController.cpp:
        (WebCore::DragController::DragController):
        (WebCore::DragController::performDragOperation):
        * page/DragController.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::AnimationPropertyWrapperBase::AnimationPropertyWrapperBase):
        * page/ios/DOMTimerHoldingTank.h:
        (WebCore::DeferDOMTimersForScope::DeferDOMTimersForScope):
        * platform/CountedUserActivity.h:
        (WebCore::CountedUserActivity::CountedUserActivity):
        * platform/audio/DirectConvolver.h:
        * platform/audio/DownSampler.h:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/ReverbAccumulationBuffer.h:
        * platform/audio/ReverbInputBuffer.h:
        * platform/audio/SincResampler.cpp:
        * platform/audio/UpSampler.h:
        * platform/audio/ios/AudioFileReaderIOS.h:
        * platform/audio/mac/AudioFileReaderMac.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSessionPrivate::AudioSessionPrivate):
        * platform/cf/KeyedDecoderCF.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::OriginalAdvancesForCharacterTreatedAsSpace::OriginalAdvancesForCharacterTreatedAsSpace):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        (WebCore::SynthesisPair::SynthesisPair):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawingItem::DrawingItem):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/text/TextCodecICU.h:
        * rendering/RenderTableSection.h:
        (WebCore::CellSpan::CellSpan):
        * rendering/shapes/RasterShape.cpp:
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockLibWebRTCIceCandidate::MockLibWebRTCIceCandidate):

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

        Remove some unneeded code in MathOperator
        https://bugs.webkit.org/show_bug.cgi?id=199935

        Reviewed by Frédéric Wang.

        Remove unused method.

        No new tests, not changing behavior.

        * rendering/mathml/MathOperator.h:

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

        Add DataListButtonElement.cpp to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=199989

        Reviewed by Michael Catanzaro.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Renamed accessibilityInsertText to _accessibilityInsertText.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityInsertText:]):
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityInsertText:]):
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]): Deleted.

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

        [WHLSL] Checker needs to setError() when a property access node can't commit its base type
        https://bugs.webkit.org/show_bug.cgi?id=199978

        Reviewed by Dean Jackson.

        Test: webgpu/whlsl/null-array-property-access.html

        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::finishVisiting):

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

        [WHLSL] Return the zero-value enum in the enum-from-integer constructor when the integer is not a valid enum value
        https://bugs.webkit.org/show_bug.cgi?id=199853

        Reviewed by Dean Jackson.

        Test: webgpu/whlsl/enum-integer-constructor.html

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

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

        [iOS] Fast and complex text codepaths disagree about how to lay out bopomofo with tone marks
        https://bugs.webkit.org/show_bug.cgi?id=199912
        <rdar://problem/52182454>

        Reviewed by Simon Fraser.

        This is because CoreText has special composition rules for CJK languages, which we don't have in our simple
        text codepath. Rather than implementing the composition rules in WebKit, we can simply disable them in
        CoreText.

        Test: fast/text/international/system-language/composition.html

        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes const):

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

        Add accessibilityInsertText for text insertion in edit fields.
        https://bugs.webkit.org/show_bug.cgi?id=199973

        Reviewed by Chris Fleizach.

        Tests: accessibility/insert-newline.html
               accessibility/ios-simulator/insert-newline.html

        Accessibility clients like VoiceOver and Voice Control were entering
        text in text fields by replacing the entire content of the field
        (SetValue) and then setting the insertion point to the appropriate
        offset (SetSelectedTextRange). accessibilityInsertText gives a simpler
        interface to clients to insert text at the insertion point location.
        In addition, this provides a workaround for the issue encountered with
        the previous method when inserting a linebreak.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::insertText):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):

2019-07-20  Alexander Mikhaylenko  <exalm7659@gmail.com>

        REGRESSION(r246033/r246496): [GTK] Kinetic scrolling doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=199322

        Reviewed by Michael Catanzaro.

        Check ENABLE(KINETIC_SCROLLING) instead of ENABLE(ASYNC_SCROLLING) for kinetic scrolling.

        * platform/PlatformWheelEvent.h:
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

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

        [LFC][TFC] Introduce table formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=199979
        <rdar://problem/53346292>

        Reviewed by Antti Koivisto.

        Add the basic class structure for the table formatting context.
        https://www.w3.org/TR/CSS22/tables.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::isTableFormattingState const):
        * layout/tableformatting/TableFormattingContext.cpp: Added.
        (WebCore::Layout::TableFormattingContext::TableFormattingContext):
        (WebCore::Layout::TableFormattingContext::layout const):
        * layout/tableformatting/TableFormattingContext.h: Added.
        * layout/tableformatting/TableFormattingState.cpp: Added.
        (WebCore::Layout::TableFormattingState::TableFormattingState):
        (WebCore::Layout::TableFormattingState::~TableFormattingState):
        * layout/tableformatting/TableFormattingState.h: Added.
        * layout/tableformatting/TableInvalidation.cpp: Added.
        (WebCore::Layout::TableInvalidation::invalidate):
        * layout/tableformatting/TableInvalidation.h: Added.

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

        [LFC][IFC] Add support for mid-word break.
        https://bugs.webkit.org/show_bug.cgi?id=199976
        <rdar://problem/53337349>

        Reviewed by Antti Koivisto.

        Introduce leading and trailing InlineTextItem to support incoming and outgoing partial content.
        TextUtil::split is a straight copy of SimpleLineLayout::split.

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::LineLayout::layout):
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::split const):
        (WebCore::Layout::InlineTextItem::split): Deleted.
        * layout/inlineformatting/InlineTextItem.h:
        (WebCore::Layout::InlineTextItem::inlineBox const):
        * layout/inlineformatting/text/TextUtil.cpp:
        (WebCore::Layout::TextUtil::split):
        * layout/inlineformatting/text/TextUtil.h:

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

        [Text autosizing] Do not nuke the style on dynamicViewportSizeUpdate
        https://bugs.webkit.org/show_bug.cgi?id=199718
        <rdar://problem/53344961>

        Reviewed by Simon Fraser.

        When the page scale changes (e.g. as the result of shink to fit mode) we need to visit all the text content on the page and check whether they need to be boosted.
        Currently we call setNeedsRecalcStyleInAllFrames() to accomplish it. Unfortunatelly setNeedsRecalcStyleInAllFrames destroys all the style information which means that the
        subsequent styleResolve() needs to start from scratch.
        This patch addresses this issue by directly adjusting the computed style information when text boosting is required and schedules layout accordingly. We also trigger this style adjusting
        on a timer so that rapid dynamicViewportSizeUpdate() calls won't trigger redundant layouts.

        * css/StyleResolver.cpp:
        (WebCore::hasTextChild):
        (WebCore::StyleResolver::adjustRenderStyleForTextAutosizing):
        (WebCore::hasTextChildren): Deleted.
        * css/StyleResolver.h:
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::invalidateTextAutoSizeInAllFrames):
        * page/Page.h:

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

        [WHLSL] Make enums work
        https://bugs.webkit.org/show_bug.cgi?id=199634

        Reviewed by Robin Morisset.

        This patch makes enums work. There were a couple changes needed to do this work:
        1. In the metal codegen, we were emitting code like "EnumType.EnumValue"
        instead of "EnumType::EnumValue".
        
        2. Inside the enumeration declaration AST node, we track enums in a HashMap
        because we need to look up names of enum values in that map in parts of the
        compiler. However, HashMap is not ordered but we were relying on the iteration
        order of it to generate the default values of enums. E.g, in: "enum { Foo = 10, Bar }",
        Bar should be 11. However, there was no guarantee that we iterated over Bar
        after Foo. Instead, we just track the default values as we parse an enum
        inside of the parser. This allows us to continue to keep using HashMap without
        also adding an auxiliary data structure (or using more memory in some way) to
        track the order of the enum elements.
        
        I've also filed a patch to do follow-up work on implementing the correct
        operational behavior when constructing an enum from its underlying type when
        the underlying value does not match any enum value:
        https://bugs.webkit.org/show_bug.cgi?id=199853

        Tests: webgpu/whlsl/enums-2.html
               webgpu/whlsl/enums.html

        * Modules/webgpu/WHLSL/AST/WHLSLEnumerationMember.h:
        (WebCore::WHLSL::AST::EnumerationMember::EnumerationMember):
        (WebCore::WHLSL::AST::EnumerationMember::value):
        (WebCore::WHLSL::AST::EnumerationMember::setValue): Deleted.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::constantExpressionString):
        * Modules/webgpu/WHLSL/Metal/WHLSLTypeNamer.cpp:
        (WebCore::WHLSL::Metal::TypeNamer::emitNamedTypeDefinition):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        (WebCore::WHLSL::ASTDumper::visit):
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseEnumerationDefinition):
        (WebCore::WHLSL::Parser::parseEnumerationMember):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):

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

        Remote WebInspector should enable mock capture devices in UIProcess if doing it in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=199924
        <rdar://problem/50552067>

        Reviewed by Devin Rousso.

        Add necessary API to set mock capture devices override.
        In case of desynchronization between webprocess and uiprocess, make sure to return early
        and fail capture instead of crashing.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::setMockCaptureDevicesEnabled):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::overrideSetting):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

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

        [Apple Pay] Log less in PaymentCoordinator::shouldEnableApplePayAPIs()
        https://bugs.webkit.org/show_bug.cgi?id=199958

        Reviewed by Tim Horton.

        Only log when APIs are disabled due to user scripts.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::shouldEnableApplePayAPIs const):

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

        Add a menu item to toggle between showing and hiding link previews
        https://bugs.webkit.org/show_bug.cgi?id=199940
        <rdar://problem/53032288>

        Reviewed by Beth Dakin.

        New strings for Show/Hide Link Previews.

        * en.lproj/Localizable.strings:

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

        Links stop working after long-pressing a link (WK1)
        https://bugs.webkit.org/show_bug.cgi?id=199952
        <rdar://problem/52291860>

        Reviewed by Wenson Hsieh.

        Test: fast/events/touch/ios/click-after-long-press.html

        When EventHandler::tryToBeginDragAtPoint() is called, we must reset m_mousePressed to false so that
        WebChromeClientIOS::observedContentChange() is called by EventHandler::mousePressed() when we would
        process the next tap after a drag interaction.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tryToBeginDragAtPoint):

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

        IndexedDB: error in starting version change transaction may be neglected
        https://bugs.webkit.org/show_bug.cgi?id=199818
        <rdar://problem/52925738>

        Reviewed by Brady Eidson.

        For version change transaction, IDBServer didn't wait the result of beginTransaction on the background thread 
        before giving the IDBClient the result of open request. In this case, beginTransaction may fail to update the 
        DatabaseVersion in database file or set m_originalDatabaseInfoBeforeVersionChange, but the transaction was
        marked as started. When we later set m_databaseInfo with m_originalDatabaseInfoBeforeVersionChange, 
        m_databaseInfo could become nullptr.

        To write a test for this, we will need to simulate an SQLite error. I manually tested this by crafting the 
        SQLiteStatement in beginTransaction, making it an invalid statement, and verified that error event, instead of 
        ungradeneeded event is dispatched to the IDBRequest.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performStartVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformStartVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete):
        (WebCore::IDBServer::UniqueIDBDatabase::beginTransactionInBackingStore): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

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

        [LFC][IFC] Add partial content handling
        https://bugs.webkit.org/show_bug.cgi?id=199930

        Reviewed by Antti Koivisto.

        Move the actual inline item placement to a dedicated functions. This enables us to
        construct a dedicated InlineItem for the partial content and pass it in to this function.

        <span>The quick brown fox jumps over the lazy dog</span> <- inline content
        [The][ ][quick][ ][brown][ ][fox][ ][jumps][ ][over][ ][the][ ][lazy][ ][dog] <- InlineItems

        Line breaking:
        [The][ ][qu]
        [ick] <- Partial InlineItem (position: 6 length: 3) from [quick] (position: 4 length: 5)

        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::placeInlineItem):
        (WebCore::Layout::LineLayout::layout):
        (WebCore::Layout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        * layout/inlineformatting/InlineTextItem.cpp:
        (WebCore::Layout::InlineTextItem::split):
        * layout/inlineformatting/InlineTextItem.h:

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

        [GStreamer] Flush get_range calls during PAUSED->READY in WebKitWebSource
        https://bugs.webkit.org/show_bug.cgi?id=199934

        Reviewed by Xabier Rodriguez-Calvar.

        Unit testing not applicable.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcChangeState): A well-behaved element should unblock streaming threads
        during a PAUSED->READY transition, so do that here.

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

        Remove some unneeded code in MathOperator
        https://bugs.webkit.org/show_bug.cgi?id=199935

        Reviewed by Frédéric Wang.

        The initialize method is unneeded since the member
        variables all use default initialization.

        No new tests, not changing behavior.

        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::MathOperator):
        (WebCore::MathOperator::GlyphAssemblyData::initialize): Deleted.

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

        Enable simulated mouse events quirk for soundcloud.com
        https://bugs.webkit.org/show_bug.cgi?id=199908
        <rdar://problem/52915981>

        Reviewed by Brent Fulgham.

        Scrubbing on soundcloud.com relies on mouse events alone when displaying on iPad with the desktop UA string.
        Opting into the simulated mouse events quirk makes scrubbing work and we also ensure that page scrolling is
        disabled as a result of scrubbing by returning true in shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented().

        Also making a drive-by fix in shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented() to use a reference
        instead of a pointer when downcasting a null-checked pointer.

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

2019-07-18  Per Arne Vollan  <pvollan@apple.com>

        Prewarm font cache with more fonts
        https://bugs.webkit.org/show_bug.cgi?id=199283

        Reviewed by Myles C. Maxfield.

        Initialize the list of families requiring system fallback in the prewarming information struct, since
        this was part of the original, approved patch, and is needed for the performance improvement.

        No new tests, covered by existing tests.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontFamiliesForPrewarming):
        (WebCore::FontCache::prewarmGlobally):

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

        Unreviewed, rolling out r247531.

        Caused multiple IndexedDB layout test crashes.

        Reverted changeset:

        "IndexedDB: error in starting version change transaction may
        be neglected"
        https://bugs.webkit.org/show_bug.cgi?id=199818
        https://trac.webkit.org/changeset/247531

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

        Ensure Quirks::shouldDispatchSimulatedMouseEvents() works for all Google Maps and Amazon domains
        https://bugs.webkit.org/show_bug.cgi?id=199904
        <rdar://problem/53250104>

        Reviewed by Dean Jackson.

        Use topPrivatelyControlledDomain() to determine whether the URL is a Google or Amazon domain so as to apply
        Google Maps and Amazon quirks to all the various domain names used.

        * page/Quirks.cpp:
        (WebCore::Quirks::isAmazon const):
        (WebCore::Quirks::isGoogleMaps const):
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
        * page/Quirks.h:

2019-07-18  Per Arne Vollan  <pvollan@apple.com>

        Crash under WebPage::boundaryEventOccurred
        https://bugs.webkit.org/show_bug.cgi?id=199907

        Reviewed by Chris Fleizach.

        Add null pointer checks.

        No new tests, since I have not been able to reproduce this in a test.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::didStartSpeaking):
        (WebCore::SpeechSynthesis::didFinishSpeaking):
        (WebCore::SpeechSynthesis::didPauseSpeaking):
        (WebCore::SpeechSynthesis::didResumeSpeaking):
        (WebCore::SpeechSynthesis::speakingErrorOccurred):
        (WebCore::SpeechSynthesis::boundaryEventOccurred):

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

        [Pointer Events] The button and buttons properties are incorrect on iOS
        https://bugs.webkit.org/show_bug.cgi?id=199910
        <rdar://problem/52778374>

        Reviewed by Dean Jackson.

        The button and buttons properties were always set to 0 on iOS. We now use the correct values such that
        button is always 0 except for "pointermove" where it's -1, and "buttons" is 1 as long as the pointer is
        in contact with the touch surface.

        Tests: pointerevents/ios/pointer-event-button-and-buttons-pointer-cancel.html
               pointerevents/ios/pointer-event-button-and-buttons.html

        * dom/ios/PointerEventIOS.cpp:
        (WebCore::buttonForType):
        (WebCore::buttonsForType):
        (WebCore::PointerEvent::PointerEvent):

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

        REGRESSION: Unable to enable simulated mouse events using the runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=199909
        <rdar://problem/53254895>

        Reviewed by Dean Jackson.

        The fix for wkb.ug/199508 (r247152) broke the ability enable simulated mouse events using the runtime flag.
        We now add a check for the flag in Quirks::shouldDispatchSimulatedMouseEvents() so that the runtime flag
        overrides the content of that function. This is more practical and allows for a quick override using the flag.

        Additionally, we need only call shouldDispatchSimulatedMouseEvents() in simulatedMouseEventTypeForTarget() since
        that function already calls needsQuirks().

        * dom/EventNames.h:
        (WebCore::EventNames::isTouchRelatedEventType const):
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):

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

        REGRESSION: Panning on an Amazon product image scrolls the page on iPadOS
        https://bugs.webkit.org/show_bug.cgi?id=199905
        <rdar://problem/49124529>

        Reviewed by Dean Jackson.

        Amazon product pages include images that the user can touch and pan to show zoomed details in a side image. This
        currently works on iPadOS thanks to the dispatch of simulated "mousemove" events on the product image, but the site
        doesn't call preventDefault() when handling those events as it wasn't necessary for macOS.

        We add a new quirk that will indicate that a given element is such a product image.

        * page/Quirks.cpp:
        (WebCore::Quirks::isAmazon const):
        (WebCore::Quirks::shouldDispatchSimulatedMouseEvents const):
        (WebCore::Quirks::shouldDispatchedSimulatedMouseEventsAssumeDefaultPrevented const):
        (WebCore::Quirks::simulatedMouseEventTypeForTarget const):
        * page/Quirks.h:

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

        Make sure to set kCTFontFallbackOptionAttribute to kCTFontFallbackOptionSystem for system fonts
        https://bugs.webkit.org/show_bug.cgi?id=199769
        <rdar://problem/49390297>

        Reviewed by Myles C. Maxfield.

        When getting a system font, set the appropriate attribute so that it
        does not fallback to a user initiated font.
        Add an ASSERT that checks that the font in use is not a user font if
        policy is to not use user installed fonts.

        Tests: fast/text/user-installed-fonts/extended-character-with-user-font.html
               fast/text/user-installed-fonts/extended-character.html

        * platform/graphics/Font.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        (WebCore::FontDatabase::singletonAllowingUserInstalledFonts):
        (WebCore::FontDatabase::singletonDisallowingUserInstalledFonts):
        (WebCore::addAttributesForInstalledFonts):
        (WebCore::addAttributesForWebFonts):
        (WebCore::installedFontMandatoryAttributes):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::isUserInstalledFont const):

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

        [LFC][IFC] InlineFormattingContext::LineLayout::placeInlineItems is getting too complex.
        https://bugs.webkit.org/show_bug.cgi?id=199898
        <rdar://problem/53235958>

        Reviewed by Antti Koivisto.

        It's time to restructure LineLayout::placeInlineItems to be able to expand it further.
        Introduce the LineLayout class. This class is responsible to place the inline items on the current line.
        (Rename InlineFormattingContext::lineLayout -> InlineFormattingContext::InlineLayout and
        use Line::InitialConstraints in LineInput)

        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthConstraints const):
        * layout/inlineformatting/InlineFormattingContext.h:
        (WebCore::Layout::InlineFormattingContext::LineLayout::layoutState const): Deleted.
        * layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
        (WebCore::Layout::inlineItemWidth):
        (WebCore::Layout::LineLayout::layoutState const):
        (WebCore::Layout::LineLayout::UncommittedContent::runs):
        (WebCore::Layout::LineLayout::UncommittedContent::isEmpty const):
        (WebCore::Layout::LineLayout::UncommittedContent::size const):
        (WebCore::Layout::LineLayout::UncommittedContent::width const):
        (WebCore::Layout::LineLayout::UncommittedContent::add):
        (WebCore::Layout::LineLayout::UncommittedContent::reset):
        (WebCore::Layout::LineLayout::LineLayout):
        (WebCore::Layout::LineLayout::commitPendingContent):
        (WebCore::Layout::LineLayout::close):
        (WebCore::Layout::LineLayout::layout):
        (WebCore::Layout::LineInput::LineInput):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::InlineLayout):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::layout const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::computedIntrinsicWidth const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::createDisplayRuns const):
        (WebCore::Layout::InlineFormattingContext::InlineLayout::alignRuns const):
        (WebCore::Layout::UncommittedContent::runs): Deleted.
        (WebCore::Layout::UncommittedContent::isEmpty const): Deleted.
        (WebCore::Layout::UncommittedContent::size const): Deleted.
        (WebCore::Layout::UncommittedContent::width const): Deleted.
        (WebCore::Layout::UncommittedContent::add): Deleted.
        (WebCore::Layout::UncommittedContent::reset): Deleted.
        (WebCore::Layout::LineInput::HorizontalConstraint::HorizontalConstraint): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::LineLayout): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::layout const): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const): Deleted.
        (WebCore::Layout::InlineFormattingContext::LineLayout::alignRuns const): Deleted.
        * layout/inlineformatting/InlineLine.cpp:
        (WebCore::Layout::Line::Line):
        * layout/inlineformatting/InlineLine.h:

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

        [GTK] MOUSE_CURSOR_SCALE is not implemented
        https://bugs.webkit.org/show_bug.cgi?id=109469

        Reviewed by Darin Adler.

        Use gdk_cursor_new_from_surface() instead of gdk_cursor_new_from_pixbuf() to avoid the surface to pixbuf
        conversion.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createCustomCursor):

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

        Prewarm local storage in the NetworkProcess to reduce WebContent process hangs
        https://bugs.webkit.org/show_bug.cgi?id=199879
        <rdar://problem/53217757>

        Reviewed by Ryosuke Niwa.

        When JS accesses window.localStorage for the first time, we end up doing a
        synchronous IPC to the network process to pull in all items in the local
        storage for the origin. If the network process does not have this data in
        memory, it has to read it from a database on disk, which may take a significant
        amount of time and hang the WebContent process during this time.

        To alleviate this problem, this patch introduces prewarming on the local storage
        in the network process when loading a given origin in the WebContent process.
        This way, in most cases, when the JS accesses window.localStorage for the first
        time, the synchronous IPC to the network process returns much faster (measured
        50-100ms for a very large database, down from 250-300ms), as it only needs to
        IPC the data over, without the need to fetch it from disk.

        As a safety net to avoid excessive prewarming, we currently prewarm at most 5
        security origins per page load.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::prewarmLocalStorageIfNecessary):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::didPrewarmLocalStorage):
        (WebCore::Frame::mayPrewarmLocalStorage const):
        * page/Frame.h:
        * storage/Storage.cpp:
        (WebCore::Storage::prewarm):
        * storage/Storage.h:
        * storage/StorageArea.h:
        (WebCore::StorageArea::prewarm):

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

        [WHLSL] The lexer should not choke on a single '/'
        https://bugs.webkit.org/show_bug.cgi?id=199886

        Reviewed by Myles Maxfield.

        The bug is trivial: just recognize that a single '/' without a '*' or '/' afterwards is not the beginning of a comment.

        While investigating this bug, I also found that part of the parser fails to properly propagate errors, so I fixed it.

        New test in LayoutTests/webgpu/whlsl/float-math.html
        I also added a new flag to WHLSLPrepare.cpp. It can be used to parse the full standard library (this is how I found this bug in the first place).

        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Lexer::skipWhitespaceAndComments):
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
        * Modules/webgpu/WHLSL/WHLSLPrepare.cpp:
        (WebCore::WHLSL::prepareShared):
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.cpp:
        (WebCore::WHLSL::includeStandardLibrary):
        * Modules/webgpu/WHLSL/WHLSLStandardLibraryUtilities.h:

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

        Unreviewed build fix after r247549.

        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:

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

        [WHLSL] Remove traps from the compiler
        https://bugs.webkit.org/show_bug.cgi?id=195811
        <rdar://problem/50746299>

        Reviewed by Myles Maxfield.

        Remove the Trap statement from the language, see https://github.com/gpuweb/WHLSL/issues/301.

        No new tests, as this part of the language was already untested, and we are removing it, not adding anything.

        * Modules/webgpu/WHLSL/AST/WHLSLAST.h:
        * Modules/webgpu/WHLSL/AST/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::isSwitchStatement const):
        * Modules/webgpu/WHLSL/AST/WHLSLTrap.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h:
        * Modules/webgpu/WHLSL/WHLSLLexer.cpp:
        (WebCore::WHLSL::Token::typeName):
        (WebCore::WHLSL::Lexer::recognizeKeyword):
        * Modules/webgpu/WHLSL/WHLSLLexer.h:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseStatement):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:
        * WebCore.xcodeproj/project.pbxproj:

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

        [WHLSL] checkRecursiveType should not have exponential complexity.
        https://bugs.webkit.org/show_bug.cgi?id=199835

        Reviewed by Myles Maxfield.

        The change is very similar to that in https://bugs.webkit.org/show_bug.cgi?id=199688.
        Just keep track of which types have already been visited, and don't visit them again.

        No new tests as there is no intended functional change.

        * Modules/webgpu/WHLSL/WHLSLRecursiveTypeChecker.cpp:
        (WebCore::WHLSL::RecursiveTypeChecker::visit):
        (WebCore::WHLSL::checkRecursiveTypes):

2019-07-17  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        Add missing #include's
        https://bugs.webkit.org/show_bug.cgi?id=199856

        Reviewed by Simon Fraser.

        The missing headers were found during development when unified sources changed.

        No new tests required. Adding #include's only.

        * Modules/speech/DOMWindowSpeechSynthesis.cpp:
        * Modules/webgpu/WHLSL/WHLSLAutoInitializeVariables.cpp:
        * Modules/webgpu/WHLSL/WHLSLPreserveVariableLifetimes.cpp:
        * Modules/webgpu/WHLSL/WHLSLPropertyResolver.cpp:
        * Modules/webgpu/WebGPUCommandEncoder.cpp:

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

        Add inputmode to the feature status page
        https://bugs.webkit.org/show_bug.cgi?id=199884

        Reviewed by Wenson Hsieh.

        Added as supported.

        * features.json:

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

        Disable Pointer Events prior to watchOS 6
        https://bugs.webkit.org/show_bug.cgi?id=199890
        <rdar://problem/53206113>

        Reviewed by Dean Jackson.

        * Configurations/FeatureDefines.xcconfig:

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

        Unable to bring up custom media controls on iOS for video.sina.cn
        https://bugs.webkit.org/show_bug.cgi?id=199889
        <rdar://problem/51883919>

        Reviewed by Dean Jackson.

        Videos on video.sina.cn by default have the "controls" attribute and are set not to autoplay. This means that the original state
        of the media controls are set to show the built-in media controls and also show the prominent play button to begin playback. The
        display of the play button also requires a tap gesture recognizer, which calls preventDefault() when the "touchend" is received
        to prevent double-tap-to-zoom, but also has the side-effect of preventing a "click" event from being dispatched for a tap.

        The video.sina.cn code would eventually remove the "controls" attribute, which would make the built-in media controls not visible,
        but still participate in hit-testing because we keep the shadow DOM around in order to potentially show the Airplay or picture-in-picture
        placards. Additionally, we wouldn't disable the tap gesture recognizer when the "controls" attribute was removed.

        We now ensure that both gesture recognizers used by iOS inline media controls are only enabled when media controls are visible.

        Test: media/modern-media-controls/media-controller/ios/media-controller-allows-click-over-video-with-no-controls.html

        * Modules/modern-media-controls/controls/ios-inline-media-controls.js:
        (IOSInlineMediaControls.prototype.set showsStartButton):
        (IOSInlineMediaControls.prototype.get visible):
        (IOSInlineMediaControls.prototype.set visible):
        (IOSInlineMediaControls.prototype._updateGestureRecognizers):
        (IOSInlineMediaControls.prototype._tapGestureRecognizerStateDidChange):
        (IOSInlineMediaControls.prototype._pinchGestureRecognizerStateDidChange):

2019-07-17  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * platform/SharedBuffer.cpp:

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

        Unable to tap buttons at top of Wells Fargo app’s Payees screen
        https://bugs.webkit.org/show_bug.cgi?id=199846
        <rdar://problem/48112220>

        Reviewed by Simon Fraser.

        This patch restores the stop-before-reaching-the-body heuristics for the approximate node finding feature only.
        (WebFrame::approximateNodeAtViewportLocation mistakenly relied on this odd quirk of nodeRespondingToClickEvents.)

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

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

        [iOS WK2] Avoid lots of compositing backing store for offscreen position:fixed descendants
        https://bugs.webkit.org/show_bug.cgi?id=199819
        rdar://problem/51977416

        Reviewed by Zalan Bujtas.

        There was code to ensure that position:fixed layers and their descendants don't have their
        backing store detached (thrown away to save memory when offscreen), since that can trigger
        flashing when async scrolling moves layers in and out of the visual viewport.

        However, some pages have many descendant layers of positon:fixed which entrain backing
        store, because, for example, they have a stack of translated-offscreen menu elements inside
        a fixed header, and those elements may composite because of overflow:scroll.

        To avoid using too much memory on such pages, allow backing store detachment for fixed
        layers that are outside the layout viewport. Add a flag to RenderLayer that's set for layers
        which are fixed, or descendants of fixed, and consult that flag in
        updateAllowsBackingStoreDetaching(). The logic there is similar to
        RenderLayerCompositor::requiresCompositingForPosition().
        
        I considered allowing all position:fixed to composite (since this patch would keep most of
        the memory saving), but historically we've avoided compositing out-of-viewport
        position:fixed because it's quite common to have them with negative z-index, and compositing
        those has significant compositing knock-on effects.
        
        GraphicsLayer flushing no longer needs to track the viewport-constrained status of layers,
        so remove that code.
        
        This patch removes backing-store pinning for sticky layers.
        scrolling/ios/reconcile-layer-position-recursive.html then revealed a bug in
        ScrollingStateStickyNode::reconcileLayerPositionForViewportRect(), which was assuming that
        the sticky element was scrolled by the page, causing a bad layer position to get sync'd onto
        the layer. Fixed by copying code from ScrollingTreeStickyNode that is smarter about
        computing layer positions.
        
        This patch fixes jetsams on kmart.com.au in iOS 13 beta.

        Test: compositing/layer-creation/fixed-position-descendants-out-of-view.html

        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::computeLayerPosition const):
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateStickyNode.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setAllowsBackingStoreDetaching):
        (WebCore::GraphicsLayer::allowsBackingStoreDetaching const):
        (WebCore::GraphicsLayer::setIsViewportConstrained): Deleted.
        (WebCore::GraphicsLayer::isViewportConstrained const): Deleted.
        (WebCore::GraphicsLayer::setCanDetachBackingStore): Deleted.
        (WebCore::GraphicsLayer::canDetachBackingStore const): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateCoverage):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::outputPaintOrderTreeLegend):
        (WebCore::outputPaintOrderTreeRecursive):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAllowsBackingStoreDetaching):
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers):
        (WebCore::RenderLayerBacking::setIsScrollCoordinatedWithViewportConstrainedRole): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForLayer):

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

        Avoid unnecessary copy of monitors under DisplayRefreshMonitorManager::displayWasUpdated()
        https://bugs.webkit.org/show_bug.cgi?id=199847

        Reviewed by Said Abou-Hallawa.

        There is always one one monitor in m_monitors for a given displayID so there is
        no need to copy the monitors inside DisplayRefreshMonitorManager::displayWasUpdated()
        and no need to iterate over all of them. This patch also factors a bit differently
        so that it becomes more obvious.

        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::createMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):
        (WebCore::DisplayRefreshMonitorManager::findMonitorForDisplay const):
        (WebCore::DisplayRefreshMonitorManager::monitorForDisplay const):
        * platform/graphics/DisplayRefreshMonitorManager.h:

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

        IndexedDB: error in starting version change transaction may be neglected
        https://bugs.webkit.org/show_bug.cgi?id=199818
        <rdar://problem/52925738>

        Reviewed by Brady Eidson.

        For version change transaction, IDBServer didn't wait the result of beginTransaction on the background thread 
        before giving the IDBClient the result of open request. In this case, beginTransaction may fail to update the 
        DatabaseVersion in database file or set m_originalDatabaseInfoBeforeVersionChange, but the transaction was
        marked as started. When we later set m_databaseInfo with m_originalDatabaseInfoBeforeVersionChange, 
        m_databaseInfo could become nullptr.

        To write a test for this, we will need to simulate an SQLite error. I manually tested this by crafting the 
        SQLiteStatement in beginTransaction, making it an invalid statement, and verified that error event, instead of 
        ungradeneeded event is dispatched to the IDBRequest.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::startVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::performStartVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::didPerformStartVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::beginTransactionInBackingStore): Deleted.
        * Modules/indexeddb/server/UniqueIDBDatabase.h:

2019-07-17  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-17  Darin Adler  <darin@apple.com>

        No need for isURLAllowed function in Frame
        https://bugs.webkit.org/show_bug.cgi?id=120266

        Reviewed by Alex Christensen.

        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesFullScreenPseudoClass): Use is<> instead of
        the isFrameElementBase function. Also updated includes and spacing.

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle): Shortened an old, long comment
        that happened to mention HTMLFrameElementBase::isURLAllowed by name.

        * dom/Element.h: Deleted isFrameElementBase.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget): Tweaked comment.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::insertedIntoAncestor): Moved comment from
        here to didFinishInsertingNode, since the code it's talking about is there.
        Also got rid of unnecessary local variable.
        (WebCore::HTMLBodyElement::didFinishInsertingNode): Moved comment here
        and elaborated a bit. Also changed the code to copy margin attributes in a
        simpler way without requiring special getter functions. There is a slight
        behavior change here, but seems unlikely to affect any websites or tests.
        Would be good to add better test coverage, which I think should be done
        when fixing the problems described in the FIXME.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): allowedToLoadFrameURL -> canLoadURL
        Also Tweaked comments.

        * html/HTMLFrameElement.cpp:
        (WebCore::HTMLFrameElement::rendererIsNeeded): isURLAllowed -> canLoad

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase): Removed initial
        values for no-longer-needed data members.

        (WebCore::HTMLFrameElementBase::canLoadScriptURL const): Renamed from
        isURLAllowed. Also refactored so it now calls canLoadURL.
        (WebCore::HTMLFrameElementBase::canLoad const): Renamed from isURLAllowed.
        Also added FIXME comments about multiple ways that this code incorrectly
        handles the empty string. Might inspire some tests and future fixes.
        (WebCore::HTMLFrameElementBase::canLoadURL const): Renamed from isURLAllowed.
        Added an overload that takes a relative URL string largely to make this
        more parallel with the similar code in HTMLPlugInImageElement. Refactored
        to call canAddSubframe and isProhibitedSelfReference, removing the need
        to call Frame::isURLAllowed.
        (WebCore::HTMLFrameElementBase::openURL): isURLAllowed -> canLoad
        (WebCore::HTMLFrameElementBase::parseAttribute): Removed unneeded code
        to parse marginwidth, marginheight, and scrolling, which are now done
        as needed instead. Might have to add code back if we ever add code to
        make these cause dynamic updates when changed, but that was not the
        behavior of the existing code.
        (WebCore::HTMLFrameElementBase::scrollingMode const): Changed to call
        attributeWithoutSynchronization rather than reading from a data member.

        * html/HTMLFrameElementBase.h: Moved scrollingMode into the .cpp file.
        Removed marginWidth and marginHeight since they are no longer called.
        Made canContainRangeEndPoint override be private. Renamed isURLAllowed
        to canLoad/canLoadScriptURL/canLoadURL. Removed unneeded isFrameElementBase
        since is<HTMLFrameElementBase> already works without it. Removed unneeded
        data members m_scrolling, m_marginWidth, and m_marginHeight.

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement): Moved initialization
        of m_contentFrame and m_sandboxFlags to the header.
        (WebCore::HTMLFrameOwnerElement::clearContentFrame): 0 -> nullptr
        (WebCore::HTMLFrameOwnerElement::canAddSubframe const): Added. Code was moved
        here from multiple functions that enforced the subframe count limit.
        (WebCore::HTMLFrameOwnerElement::isProhibitedSelfReference const): Added.
        Moved code here from Frame::isURLAllowed so it's easy to use as needed.

        * html/HTMLFrameOwnerElement.h: Renamed isURLAllowed to canLoadScriptURL.
        Added protected canAddSubframe and isProhibitedSelfReference functions.
        Initialized the data members here.

        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::sandbox): Added braces for multi-line if statement.
        (WebCore::HTMLIFrameElement::parseAttribute): Removed unneeded storage of the
        allow attribute value. Added missing code to invalidate m_featurePolicy when
        the allow attribute changes. This could change behavior, but unlikely to affect
        any websites of tests. Would be good to add a test for this.
        (WebCore::HTMLIFrameElement::rendererIsNeeded): isURLAllowed -> canLoad. Also
        reordered the code to be more efficient for display: none (why not?).
        (WebCore::HTMLIFrameElement::featurePolicy const): Use attributeWithoutSynchronization
        to read the allow attribute rather than using a data member.

        * html/HTMLIFrameElement.h: Removed the unneeded allow function member and
        m_allow data member since DOM reflection takes care of the function and the
        featurePolicy function can get the attribute without a data member.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): allowedToLoadFrameURL -> canLoadURL
        Also tweaked comments.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::canLoadScriptURL const): Added. Code moved here
        from HTMLFrameOwnerElement::isURLAllowed. Added comment about why this is not
        necessarily correct and might need improvement.

        * html/HTMLPlugInElement.h: Added private override of canLoadScriptURL.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::canLoadURL const): Renamed from
        allowedToLoadFrameURL and refactored into two functions to match the
        structure of the similar function in HTMLFrameElementBase. Also refactored
        to use canAddSubframe and isProhibitedSelfReference rather than Frame::isURLAllowed.
        (WebCore::HTMLPlugInImageElement::canLoadPlugInContent const): Renamed from
        allowedToLoadPluginContent.
        (WebCore::HTMLPlugInImageElement::requestObject): allowedToLoadPluginContent
        -> canLoadPlugInContent

        * html/HTMLPlugInImageElement.h: Renamed functions as mentioned above.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame): isURLAllowed -> canLoadScriptURL

        * page/FocusController.h: Removed unneeded forward declaration of HTMLFrameOwnerElement.

        * page/Frame.cpp:
        (WebCore::Frame::isURLAllowed const): Deleted.
        * page/Frame.h: Ditto.

        * page/FrameView.cpp:
        (WebCore::FrameView::init): Removed code to initialize m_margins, since nothing
        was looking at it after that.
        (WebCore::FrameView::setMarginWidth): Deleted.
        (WebCore::FrameView::setMarginHeight): Deleted.

        * page/FrameView.h: Removed marginWidth, marginHeight, setMarginWidth,
        setMarginHeight, and m_margins because there was no code anywhere calling
        marginWidth or marginHeight, and no other side effects of these functions.

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

        Add a runtime-disabled dialog element skeleton
        https://bugs.webkit.org/show_bug.cgi?id=199839

        Reviewed by Ryosuke Niwa.

        Beginning implementation of https://html.spec.whatwg.org/multipage/interactive-elements.html#the-dialog-element
        Covered by rebaselining WPT tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * html/HTMLDialogElement.cpp: Added.
        (WebCore::HTMLDialogElement::HTMLDialogElement):
        (WebCore::HTMLDialogElement::open):
        (WebCore::HTMLDialogElement::setOpen):
        (WebCore::HTMLDialogElement::returnValue):
        (WebCore::HTMLDialogElement::setReturnValue):
        (WebCore::HTMLDialogElement::show):
        (WebCore::HTMLDialogElement::showModal):
        (WebCore::HTMLDialogElement::close):
        * html/HTMLDialogElement.h: Added.
        * html/HTMLDialogElement.idl: Added.
        * html/HTMLTagNames.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDialogElementEnabled):
        (WebCore::RuntimeEnabledFeatures::dialogElementEnabled const):

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

        Hop to the main thread when doing logging in RealtimeIncomingVideoSourceCocoa
        https://bugs.webkit.org/show_bug.cgi?id=199865

        Reviewed by Darin Adler.

        LoggerHelper routines allow logging messages in system console and inspector console.
        These routines iterate through a Vector of log observers which is not thread safe.
        Document, the main log observer, also expects to be called on the main thread.
        Manually tested (writing a layout test for this would require more than 2 seconds).

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):

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

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

        "Caused failed ASSERT in stress test" (Requested by creid on
        #webkit).

        Reverted changeset:

        "Bytecode cache should use FileSystem"
        https://bugs.webkit.org/show_bug.cgi?id=199759
        https://trac.webkit.org/changeset/247505

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

        Add release logging to AudioSampleDataSource
        https://bugs.webkit.org/show_bug.cgi?id=199814
        <rdar://problem/53128140>

        Reviewed by Eric Carlson.

        Use release logging for AudioSampleDataSource in case of errors.
        This requires passing a logger and a logger identifier.
        For that purpose, pass a MediaStreamTrackPrivate to it constructor
        and reuse its logger and log identifier.

        For each log, hop to the main thread as release logging requires to be done in the main thread.
        Add specific handling for RealtimeOutgoingAudioSource as its MediaStreamTrack can change in case of replaceTrack.
        In that case, we change of logger when changing the MediaStreamTrackPrivate.

        No observable change of behavior, covered by existing tests.

        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::create):
        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
        (WebCore::AudioSampleDataSource::setupConverter):
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::setLogger):
        (WebCore::AudioSampleDataSource::logChannel const):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::setSource):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        (WebCore::RealtimeOutgoingAudioSource::sourceUpdated):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.h:
        Instead of using its own logger/identifier member field, reuse its MediaStreamTrackPrivate.
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::RealtimeOutgoingAudioSourceCocoa):
        (WebCore::RealtimeOutgoingAudioSourceCocoa::sourceUpdated):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):

2019-07-17  Kenneth Russell  <kbr@chromium.org>

        Make ANGLE work inside WebKit2's sandbox
        https://bugs.webkit.org/show_bug.cgi?id=199844

        Reviewed by Alex Christensen.

        Fix missing #import introduced at the last minute while removing
        some debugging code in the last patch.

        Tested with San Angeles WebGL demo and some conformance tests.

        * platform/graphics/cocoa/WebGLLayer.mm:

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

        Hang in WebCore::AccessibilityRenderObject::visiblePositionRangeForLine.
        https://bugs.webkit.org/show_bug.cgi?id=199845
        <rdar://problem/53121017>

        Reviewed by Chris Fleizach.

        - Added check for upper bound NSNotFound for parameter to visiblePositionRangeForLine.
        - Fixed signed/unsigned issue for AXTextMarkerRangeForLine attribute.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine const):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

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

        Add referrerpolicy attribute support for <script> elements
        https://bugs.webkit.org/show_bug.cgi?id=185550

        Reviewed by Youenn Fablet.

        This patch adds 'referrerpolicy' attribute support for script elements.
        If set, the value is restricted to the ReferrerPolicy enum, and
        if valid it is used for the script fetch.
        If not set or invalid, the current behavior is kept.

        Tests: http/tests/referrer-policy-script/no-referrer-when-downgrade/cross-origin-http-http.html
               http/tests/referrer-policy-script/no-referrer-when-downgrade/cross-origin-http.https.html
               http/tests/referrer-policy-script/no-referrer-when-downgrade/same-origin.html
               http/tests/referrer-policy-script/no-referrer/cross-origin-http-http.html
               http/tests/referrer-policy-script/no-referrer/cross-origin-http.https.html
               http/tests/referrer-policy-script/no-referrer/same-origin.html
               http/tests/referrer-policy-script/origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy-script/origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy-script/origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy-script/origin/cross-origin-http-http.html
               http/tests/referrer-policy-script/origin/cross-origin-http.https.html
               http/tests/referrer-policy-script/origin/same-origin.html
               http/tests/referrer-policy-script/same-origin/cross-origin-http-http.html
               http/tests/referrer-policy-script/same-origin/cross-origin-http.https.html
               http/tests/referrer-policy-script/same-origin/same-origin.html
               http/tests/referrer-policy-script/strict-origin-when-cross-origin/cross-origin-http-http.html
               http/tests/referrer-policy-script/strict-origin-when-cross-origin/cross-origin-http.https.html
               http/tests/referrer-policy-script/strict-origin-when-cross-origin/same-origin.html
               http/tests/referrer-policy-script/strict-origin/cross-origin-http-http.html
               http/tests/referrer-policy-script/strict-origin/cross-origin-http.https.html
               http/tests/referrer-policy-script/strict-origin/same-origin.html
               http/tests/referrer-policy-script/unsafe-url/cross-origin-http-http.html
               http/tests/referrer-policy-script/unsafe-url/cross-origin-http.https.html
               http/tests/referrer-policy-script/unsafe-url/same-origin.html

        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache const):
        * bindings/js/CachedScriptFetcher.h:
        (WebCore::CachedScriptFetcher::CachedScriptFetcher):
        * dom/InlineClassicScript.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::create):
        * dom/LoadableClassicScript.h:
        * dom/LoadableModuleScript.cpp:
        (WebCore::LoadableModuleScript::create):
        (WebCore::LoadableModuleScript::LoadableModuleScript):
        * dom/LoadableModuleScript.h:
        * dom/LoadableScript.h:
        (WebCore::LoadableScript::LoadableScript):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestClassicScript):
        (WebCore::ScriptElement::requestModuleScript):
        * dom/ScriptElement.h:
        * dom/ScriptElementCachedScriptFetcher.h:
        (WebCore::ScriptElementCachedScriptFetcher::ScriptElementCachedScriptFetcher):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::referrerPolicyForBindings const):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::setReferrerPolicyForBindings):
        (WebCore::HTMLScriptElement::referrerPolicyForBindings const):
        (WebCore::HTMLScriptElement::referrerPolicy const):
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl:
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * platform/ReferrerPolicy.cpp:
        (WebCore::referrerPolicyToString):
        * platform/ReferrerPolicy.h:
        * svg/SVGScriptElement.h:

2019-07-16  Christopher Reid  <chris.reid@sony.com>

        Bytecode cache should use FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=199759

        Reviewed by Yusuke Suzuki.

        * platform/SharedBuffer.cpp:

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

        Fix includes and make a constructor explicit to avoid unified-sources-triggered test failures
        https://bugs.webkit.org/show_bug.cgi?id=199849

        Reviewed by Wenson Hsieh.
        
        webkit.org/b/199587 triggered some unexpected test failures because of unified sources include
        order. The TextStream operator in ScrollingTreeOverflowScrollingNode::dumpProperties() was invoking
        the implicit constructor of TransformOperations.

        * page/scrolling/ScrollingTreeOverflowScrollingNode.cpp: Include TextStream.h
        * platform/graphics/transforms/TransformOperations.h: Make ctor explicit.

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

        REGRESSION: fast/events/watchos/double-tap-to-zoom* tests crashing in com.apple.WebKit: -[WKContentView(WKInteraction) _singleTapDidReset:]
        https://bugs.webkit.org/show_bug.cgi?id=199840
        <rdar://problem/52856531>

        Reviewed by Wenson Hsieh.

        Fix a build error that occured when building for the watchOS Simulator in the debug configuration.

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

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

        [WebGPU] Convert GPUComputePipeline LOG statements to generate GPUErrors
        https://bugs.webkit.org/show_bug.cgi?id=199773

        Reviewed by Myles C. Maxfield.

        Generate a GPUError if GPUComputePipeline creation fails.
        Rework the WHLSL test harness to take advantage of this.

        Test: webgpu/compute-pipeline-errors.html

        * Modules/webgpu/WebGPUComputePipelineDescriptor.cpp:
        (WebCore::WebGPUComputePipelineDescriptor::tryCreateGPUComputePipelineDescriptor const):
        * Modules/webgpu/WebGPUComputePipelineDescriptor.h:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::createComputePipeline const):
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUComputePipeline.h: 
                Now inherits from GPUObjectBase, though this isn't super useful yet
                since GPUComputePipeline itself does not expose any operations that can error. 
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateComputePipeline const):
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::validateBufferUsage):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        (WebCore::tryCreateMTLComputePipelineState):
        (WebCore::GPUComputePipeline::tryCreate):
        (WebCore::GPUComputePipeline::GPUComputePipeline):

2019-07-11  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-10  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-16  Commit Queue  <commit-queue@webkit.org>

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

        "The new whlsl-for-loop.html test is failing on the bots"
        (Requested by rmorisset on #webkit).

        Reverted changeset:

        "[WHLSL] Desugar for loops and while loops"
        https://bugs.webkit.org/show_bug.cgi?id=199726
        https://trac.webkit.org/changeset/247493

2019-07-16  Per Arne Vollan  <pvollan@apple.com>

        Prewarm font cache with more fonts
        https://bugs.webkit.org/show_bug.cgi?id=199283

        Reviewed by Myles C. Maxfield.

        Use the existing prewarm method in FontCache to prewarm the cache with a set of font family names.
        The font list consists of some of the fonts used by the 10 most popular sites on Alexa top sites.
        This is a confirmed improvement in page load time.

        No new tests, covered by existing tests.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::prewarmGlobally):
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::prewarmGlobally):

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

        [WHLSL] Desugar for loops and while loops
        https://bugs.webkit.org/show_bug.cgi?id=199726

        Reviewed by Myles C. Maxfield.

        This patch makes loops behave a lot more similarly to the spec.
        In particular, while loops are just degenerate for loops, so they can be desugared in the parser.
        And for loops can themselves be heavily desugared, into having no initializer, one condition and one increment
        by putting any initializer in a block around the loop, putting true in the condition if there is none, and putting any litteral in the increment if there is none.

        Debugging this patch revealed an unrelated bug where the parser would generate an empty comma expression on ";", which the checker would then choke on.
        The parser now generates an empty block in that case (as specified in the spec), which fixes the problem.

        Finally, while updating the NameResolver for the new structure of loops I realized that it was needlessly generating extra NameContext.
        They are not expected by the spec, that forbids naked variable declarations outside of blocks anyway.
        So I removed this unnecessary work, and fixed the parser to correctly forbid such naked variable declarations.

        * Modules/webgpu/WHLSL/AST/WHLSLAST.h:
        * 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/WHLSLStatement.h:
        (WebCore::WHLSL::AST::Statement::isVariableDeclarationsStatement const):
        * Modules/webgpu/WHLSL/AST/WHLSLWhileLoop.h: Removed.
        * Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
        (WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.cpp:
        (WebCore::WHLSL::ASTDumper::visit):
        * Modules/webgpu/WHLSL/WHLSLASTDumper.h:
        * Modules/webgpu/WHLSL/WHLSLChecker.cpp:
        (WebCore::WHLSL::Checker::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.cpp:
        (WebCore::WHLSL::NameResolver::visit):
        * Modules/webgpu/WHLSL/WHLSLNameResolver.h:
        * Modules/webgpu/WHLSL/WHLSLParser.cpp:
        (WebCore::WHLSL::Parser::parseBlockBody):
        (WebCore::WHLSL::Parser::parseForLoop):
        (WebCore::WHLSL::Parser::parseWhileLoop):
        (WebCore::WHLSL::Parser::parseStatement):
        (WebCore::WHLSL::Parser::parseEffectfulExpression):
        * Modules/webgpu/WHLSL/WHLSLParser.h:
        * Modules/webgpu/WHLSL/WHLSLStatementBehaviorChecker.cpp:
        * Modules/webgpu/WHLSL/WHLSLVisitor.cpp:
        (WebCore::WHLSL::Visitor::visit):
        * Modules/webgpu/WHLSL/WHLSLVisitor.h:
        * WebCore.xcodeproj/project.pbxproj:

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

        NSTextFinder holes don't scroll with the page
        https://bugs.webkit.org/show_bug.cgi?id=199815
        <rdar://problem/52280514>

        Reviewed by Simon Fraser.

        * rendering/ScrollAlignment.h:

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

        [iOS] Make sure the first camera device in the list is the front camera
        https://bugs.webkit.org/show_bug.cgi?id=199811
        <rdar://problem/53125157>

        Reviewed by Jer Noble.

        Some websites call getUserMedia with a deviceId constraint and theey pick the
        first deviceId in the list provided by enumerateDevices.
        On iOS, this is the back camera which is often not what is expected by WebRTC applications.
        Instead, make sure the first camera device is the front camera.

        Manually tested.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:

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

        Speed up StorageManager::getValues()
        https://bugs.webkit.org/show_bug.cgi?id=199812

        Reviewed by Alex Christensen.

        * storage/StorageMap.cpp:
        (WebCore::StorageMap::importItems):
        * storage/StorageMap.h:

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

        Remove "GraphicsContext 0x7ffd8765f6b0 stack changed by" logging
        https://bugs.webkit.org/show_bug.cgi?id=199834

        Reviewed by Dean Jackson.

        I inadvertently left in a couple of GraphicsContextStateStackChecker (used to detect mismatched
        GraphicsContext save/restore) in r246725, so remove them.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

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

        [Text autosizing] [iPadOS] Paragraph text on the front page of LinkedIn.com is not boosted
        https://bugs.webkit.org/show_bug.cgi?id=199827
        <rdar://problem/53152660>

        Reviewed by Zalan Bujtas.

        After r247467, we try to avoid boosting some text that might cause vertical overflow due to line height
        increasing inside a container that expects a fixed integer number of lines. However, in the case of
        linkedin.com, the line height specified is a fixed value of 26px, which greatly exceeds the specified font size
        of 14px. In this case, it's safe to boost font size, since doing so would not affect the line height at all.

        To handle this case, don't avoid text autosizing due to the "fixed number of lines" heuristic if the line height
        is fixed, and is much larger than the font size.

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

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

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

        [ContentChangeObserver] Cancel ongoing content observation when tap is failed/cancelled
        https://bugs.webkit.org/show_bug.cgi?id=199828
        <rdar://problem/53152696>

        Reviewed by Wenson Hsieh.

        This patch ensures that we stop the content observation (initiated by touch start) when the tap
        is cancelled/failed.

        Not testable.

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

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

        Remove support for beforeload on link=prefetch
        https://bugs.webkit.org/show_bug.cgi?id=199632

        Reviewed by Youenn Fablet.

        Remove support for beforeload on link=prefetch
        by not calling shouldLoadLink for prefetch.
        Also make loadLink return void since it always
        succeeds.

        Tests: http/wpt/prefetch/beforeload-dynamic.html
               http/wpt/prefetch/beforeload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::prefetchIfNeeded):
        (WebCore::LinkLoader::loadLink):
        * loader/LinkLoader.h:

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

        Hop to main thread for release logging in RealtimeIncomingAudioSource
        https://bugs.webkit.org/show_bug.cgi?id=199813

        Reviewed by Eric Carlson.

        LoggerHelper routines allow logging messages in system console and inspector console.
        These routines iterate through a Vector of log observers which is not thread safe.
        Document, the main log observer, also expects to be called on the main thread.
        Manually tested (writing a layout test for this would require more than 2 seconds).

        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):

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

        Unreviewed, rolling out r247444.

        Caused two scrolling tests to fail on iOS Simulator

        Reverted changeset:

        "Typing into a cell in a Google Sheet lags behind by one
        character"
        https://bugs.webkit.org/show_bug.cgi?id=199587
        https://trac.webkit.org/changeset/247444

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