2020-08-12  Chris Dumez  <cdumez@apple.com>

        Unreviewed, address post-landing review comment from Sam Weinig for r265536.

        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):

2020-08-12  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix after r265546.

        The <Ref.h> include should be now in the header now that we've inlined the create() function.

        * Modules/webxr/WebXRInputSourceArray.cpp: Removed include.
        * Modules/webxr/WebXRInputSourceArray.h: Added include

2020-08-12  Youenn Fablet  <youenn@apple.com>

        Refresh WritableStream up to spec
        https://bugs.webkit.org/show_bug.cgi?id=215267

        Reviewed by Geoff Garen.

        Update according latest spec, including WebIDL, controller and writer.
        Covered by rebased tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/streams/StreamInternals.js:
        * Modules/streams/WritableStream.idl:
        * Modules/streams/WritableStream.js:
        * Modules/streams/WritableStreamDefaultController.idl: Added.
        * Modules/streams/WritableStreamDefaultController.js: Added.
        * Modules/streams/WritableStreamDefaultWriter.idl: Added.
        * Modules/streams/WritableStreamDefaultWriter.js: Added.
        * Modules/streams/WritableStreamInternals.js:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2020-08-06  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Update WebXR WPT directory
        https://bugs.webkit.org/show_bug.cgi?id=215224

        Reviewed by Youenn Fablet.

        The update of the WebXR WPT directory helped us to unveil a couple of mistakes in the current code.
        First of all the Events defined in the WebXR spec had to be iso allocated as the Event base class.
        Secondly the WebXRInputSourceArray must have a ::create() method. Finally the m_inputSources attribute
        of the WebXRSession must be a Ref instead of a RefPtr because the specs mention that the initial
        value is an empty array.

        Tests: imported/w3c/web-platform-tests/webxr/anchors/ar_anchor_freefloating_create_move.https.html
               imported/w3c/web-platform-tests/webxr/anchors/ar_anchor_freefloating_delay_creation.https.html
               imported/w3c/web-platform-tests/webxr/anchors/ar_anchor_freefloating_failure.https.html
               imported/w3c/web-platform-tests/webxr/anchors/ar_anchor_freefloating_pause_resume_stop.https.html
               imported/w3c/web-platform-tests/webxr/anchors/ar_anchor_states.https.html
               imported/w3c/web-platform-tests/webxr/anchors/idlharness.https.window.html
               imported/w3c/web-platform-tests/webxr/dom-overlay/ar_dom_overlay_hit_test.https.html
               imported/w3c/web-platform-tests/webxr/dom-overlay/idlharness.https.window.html
               imported/w3c/web-platform-tests/webxr/hit-test/ar_hittest_subscription_inputSources.https.html
               imported/w3c/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states_regular.https.html
               imported/w3c/web-platform-tests/webxr/hit-test/ar_hittest_subscription_states_transient.https.html
               imported/w3c/web-platform-tests/webxr/hit-test/ar_hittest_subscription_transientInputSources.https.html
               imported/w3c/web-platform-tests/webxr/hit-test/idlharness.https.html
               imported/w3c/web-platform-tests/webxr/render_state_update.https.html
               imported/w3c/web-platform-tests/webxr/webGLCanvasContext_makecompatible_reentrant.https.html
               imported/w3c/web-platform-tests/webxr/xrReferenceSpace_relationships.https.html

        * Modules/webxr/WebXRInputSourceArray.cpp:
        (WebCore::WebXRInputSourceArray::create): Added.
        * Modules/webxr/WebXRInputSourceArray.h:
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession): Initialize the m_inputSources.
        (WebCore::WebXRSession::inputSources const): Return a const reference.
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/XRInputSourcesChangeEvent.cpp: Make it iso allocated.
        * Modules/webxr/XRInputSourcesChangeEvent.h: Ditto.
        * Modules/webxr/XRSessionEvent.cpp: Ditto.
        * Modules/webxr/XRSessionEvent.h: Ditto.

2020-08-12  Antti Koivisto  <antti@apple.com>

        REGRESSION (r259805): Not able to scroll vertically after scrolling horizontally without leaving message and coming back
        https://bugs.webkit.org/show_bug.cgi?id=215374
        <rdar://problem/65269837>

        Reviewed by Darin Adler.

        The content has a horizontally scrolling overflow. While rubberbanding it we mark a wheel event unhandled which causes Mail
        to take over event handling and leaves us semi-permanently in stretched state.

        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::handleWheelEvent):

        Dissallowed vertical stretch would mark the event unhandled even though we are rubberbanding in horizontal direction.

        Only mark a wheel event unhandled if it actually concerns the tested direction.

2020-08-12  Chris Lord  <clord@igalia.com>

        Implement Canvas.transferControlToOffscreen and OffscreenCanvasRenderingContext2D.commit
        https://bugs.webkit.org/show_bug.cgi?id=202797

        Reviewed by Dean Jackson.

        Implement HTMLCanvasElement.transferControlToOffscreen and
        OffscreenCanvasRenderingContext2D.commit. This allows for
        (synchronous) display of asynchronously rendered OffscreenCanvas
        content.

        No new tests. Covered by existing tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setHeight):
        (WebCore::HTMLCanvasElement::setWidth):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::transferControlToOffscreen):
        (WebCore::HTMLCanvasElement::setImageBufferAndMarkDirty):
        (WebCore::HTMLCanvasElement::isControlledByOffscreen const):
        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.idl:
        * html/OffscreenCanvas.cpp:
        (WebCore::DetachedOffscreenCanvas::takePlaceholderCanvas):
        (WebCore::OffscreenCanvas::create):
        (WebCore::OffscreenCanvas::getContext):
        (WebCore::OffscreenCanvas::didDraw):
        (WebCore::OffscreenCanvas::detach):
        (WebCore::OffscreenCanvas::setPlaceholderCanvas):
        (WebCore::OffscreenCanvas::pushBufferToPlaceholder):
        (WebCore::OffscreenCanvas::commitToPlaceholderCanvas):
        (WebCore::OffscreenCanvas::scheduleCommitToPlaceholderCanvas):
        (WebCore::OffscreenCanvas::reset):
        * html/OffscreenCanvas.h:
        * html/canvas/OffscreenCanvasRenderingContext2D.cpp:
        (WebCore::OffscreenCanvasRenderingContext2D::commit):
        * html/canvas/OffscreenCanvasRenderingContext2D.h:
        * html/canvas/OffscreenCanvasRenderingContext2D.idl:
        * html/canvas/PlaceholderRenderingContext.cpp:
        (WebCore::PlaceholderRenderingContext::canvas const):
        * html/canvas/PlaceholderRenderingContext.h:

2020-08-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r261570): [GTK] Fails to send drop event to JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=215032

        Reviewed by Darin Adler.

        Add support for custom data in drag and drop operations too.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::write): Se custom data on m_selectionData.
        (WebCore::Pasteboard::read): Initialize the content origin also for drag and drop pasteboards.
        (WebCore::Pasteboard::hasData): For drag and drop pasteboards return true also if m_selectionData has custom data.
        (WebCore::Pasteboard::typesSafeForBindings): Implement this for drag and drop pasteboards.
        (WebCore::Pasteboard::readOrigin): Ditto.
        (WebCore::Pasteboard::readStringInCustomData): Ditto.
        (WebCore::Pasteboard::writeCustomData): Ditto.

2020-08-11  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Depth formats can have mipmaps in WebGL 2
        https://bugs.webkit.org/show_bug.cgi?id=215404

        Reviewed by Kenneth Russell.

        Fixes 150 WebGL 2 conformance tests.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateTexFuncFormatAndType):

2020-08-11  Chris Dumez  <cdumez@apple.com>

        Unreviewed, address post-landing review comment from Darin for r265536.

        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):

2020-08-11  Chris Dumez  <cdumez@apple.com>

        Fix WaveShapperNode's waveshaping curve implementation
        https://bugs.webkit.org/show_bug.cgi?id=215391

        Reviewed by Darin Adler.

        Fix WaveShapperNode's waveshaping curve implementation using the algorithm in the specification:
        - https://www.w3.org/TR/webaudio/#dom-waveshapernode-curve

        No new tests, rebaselined existing tests.

        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):

2020-08-11  Simon Fraser  <simon.fraser@apple.com>

        Have render tree dumps show overflow information
        https://bugs.webkit.org/show_bug.cgi?id=215385

        Reviewed by Zalan Bujtas.

        Add code to RenderObject::outputRenderObject() to show layout/visual overflow, as we do
        for render tree dumps.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::outputRenderObject const):

2020-08-11  Brady Eidson  <beidson@apple.com>

        Add a "use stored credentials" setting to WKWebView.
        <rdar://problem/63308019> and https://bugs.webkit.org/show_bug.cgi?id=215388

        Reviewed by Geoff Garen.

        Covered by Preconnect API tests.
        
        This setting is to allow apps to explicitly deny using the credential storage
        for network operations. (e.g. to make sure the Keychain UI doesn't pop up
        for an offscreen load)

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::shouldUseCredentialStorage):

        * page/Page.h:
        (WebCore::Page::setCanUseCredentialStorage):
        (WebCore::Page::canUseCredentialStorage const):

2020-08-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265502.
        https://bugs.webkit.org/show_bug.cgi?id=215396

        Needs locking to avoid flaky GC-related crashes

        Reverted changeset:

        "[WebGL2] expando-loss and expando-loss-2 conformance tests
        are failing"
        https://bugs.webkit.org/show_bug.cgi?id=214765
        https://trac.webkit.org/changeset/265502

2020-08-11  Jon Davis  <jond@apple.com>

        Add privacy and security keywords to feature status entries
        https://bugs.webkit.org/show_bug.cgi?id=215203

        Reviewed by Youenn Fablet.

        * features.json:

2020-08-11  Chris Dumez  <cdumez@apple.com>

        Fix BiquadFilterNode's lowpass filter
        https://bugs.webkit.org/show_bug.cgi?id=215381

        Reviewed by Darin Adler.

        Fix BiquadFilterNode's lowpass filter as it was causing us to fail a WPT test:
        - https://www.w3.org/TR/webaudio/#dom-biquadfiltertype-lowpass

        No new tests, rebaselined existing test.

        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::setLowpassParams):

2020-08-11  Darin Adler  <darin@apple.com>

        LayoutTest accessibility/mac/select-element-selection-with-optgroups.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=175341

        Reviewed by Chris Fleizach.

        Failures were due to new AX objects being created for HTMLOptionElement.
        Unlike most other AX objects, these were not cached in the AXObjectCache
        and multiple objects could be created for the same underlying option. Fixed this
        by changing it to track the option element in the cache in the conventional way.

        * WebCore.xcodeproj/project.pbxproj: Remove AccessibilityMediaControls.h/cpp.
        The source files were removed back in April.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::getOrCreate): Added code for HTMLOptionElement and
        HTMLOptGroupElement so AccessibilityMenuListOption and AccessibilityListBoxOption
        can be created in this function.
        (WebCore::AXObjectCache::create): Renamed the version of this that takes an
        AccessibilityRole to not claim that it ever gets the value from the cache,
        because it never does. Also removed the cases for ListBoxOption and MenuListOption.
        * accessibility/AXObjectCache.h: Updated for above.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren): Use create.

        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren): Removed super-old comment that mentions
        the long-ago-removed WML.
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject const): Use the
        element to get the list box option rather than creating a new one every time.
        No longer any need to special case <hr> elements since the getOrCreate function
        will return nil for non-option elements that don't have a renderer.

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::AccessibilityListBoxOption): Take the element
        in the constructor instead of using a separate function to associate it.
        (WebCore::AccessibilityListBoxOption::create): Ditto.
        (WebCore::AccessibilityListBoxOption::isEnabled const): Update for WeakPtr.
        (WebCore::AccessibilityListBoxOption::isSelected const): Ditto.
        (WebCore::AccessibilityListBoxOption::canSetSelectedAttribute const): Ditto.
        (WebCore::AccessibilityListBoxOption::actionElement const): Update for WeakPtr.
        (WebCore::AccessibilityListBoxOption::node const): Added. For some reason the
        AccessibilityMenuListOption class had this function and this one did not. They
        should both have it.
        * accessibility/AccessibilityListBoxOption.h: Updated for above. Made most
        functions private and final. Fixed includes and forward declarations.
        Removed the setHTMLElement function. Changed m_optionElement from
        HTMLElement* to WeakPtr<HTMLElement>.

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren): Use create.

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::AccessibilityMenuListOption): Take the
        element in the constructor instead of using a separate function to associate it.
        (WebCore::AccessibilityMenuListOption::create): Ditto.
        (WebCore::AccessibilityMenuListOption::setElement): Deleted.
        (WebCore::AccessibilityMenuListOption::node const): Moved here from the header.
        (WebCore::AccessibilityMenuListOption::isEnabled const): Removed unneeded cast
        now that m_element has a more specific type, and added a null check.
        (WebCore::AccessibilityMenuListOption::isVisible const): Removed dependency
        on m_parent pointer, which does not exist now that we don't derive from
        AccessibilityMockObject.
        (WebCore::AccessibilityMenuListOption::isSelected const): Removed unneeded cast
        now that m_element has a more specific type, and added a null check.
        (WebCore::AccessibilityMenuListOption::setSelected): Ditto, but no null check
        needed because canSetSelectedAttribute takes care of that.
        (WebCore::AccessibilityMenuListOption::stringValue const): Ditto.
        * accessibility/AccessibilityMenuListOption.h: Updated for above. Marked
        functions final instead of override. Changed m_element from RefPtr<HTMLElement>
        to WeakPtr<HTMLOptionElement> to avoid reference cycles that could leak to
        memory leaks. Derive from AccessibilityObject instead of
        AccessibilityMockObject, since the latter class has nothing to offer us.

        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject const):
        Use the element to get the menu list option rather than creating a new one
        every time. No longer any need to check that the type is HTMLOptionElement
        because that's the responsibility of the code in the cache now.
        (WebCore::AccessibilityMenuListPopup::addChildren): Removed unneeded call
        to setParent since the menu list option objects no longer hold parent pointers.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::accessibleNameForNode): Added a special case for HTMLOptionElement
        like the one for HTMLInputElement. The code worked for fairly well for option
        elements before, almost by accident, and the way it worked was perturbed by
        the change to whether we cache those objects. This newer code path works in a
        more straightforward way, keeps our existing tests psasing, and likely gets
        some edge cases handled more correctly (should add new tests for those).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentLinks): Use create.
        (WebCore::AccessibilityRenderObject::addImageMapChildren): Ditto.
        (WebCore::AccessibilityRenderObject::addTextFieldChildren): Ditto.
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren): Ditto.
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren): Ditto.
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren): Ditto.
        (WebCore::AccessibilityTable::headerContainer): Ditto.

        * accessibility/atk/WebKitAccessible.cpp:
        (fallbackObject): Deleted.
        (webkitAccessibleGetName): Added null check.
        (webkitAccessibleGetDescription): Ditto.
        (webkitAccessibleGetParent): Ditto.
        (webkitAccessibleGetNChildren): Ditto.
        (webkitAccessibleRefChild): Ditto.
        (webkitAccessibleGetIndexInParent): Ditto.
        (webkitAccessibleGetAttributes): Ditto.
        (webkitAccessibleGetRole): Ditto.
        (webkitAccessibleRefStateSet): Ditto.
        (webkitAccessibleRefRelationSet): Ditto.
        (webkitAccessibleGetObjectLocale): Ditto.
        (webkitAccessibleGetAccessibilityObject): Ditto.
        (webkitAccessibleDetach): Use nullptr instead of fallbackObject.
        (webkitAccessibleIsDetached): Ditto.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::selected const): Made this const. An earlier
        version of the patch required this; the latest version doesn't, but it's
        more logical and better for it to be const.
        * html/HTMLOptionElement.h: Updated for above.

2020-08-11  Timothy Hatcher  <timothy@apple.com>

        Deferred WKUserScripts are exponentially injected on preloaded pages with frames.
        https://bugs.webkit.org/show_bug.cgi?id=215382
        rdar://problem/66837802

        Reviewed by Sam Weinig.

        When defering a script in a frame it was previously added to a vector per-page.
        Later when notified to inject the defered scripts, the page would iterate over all
        the frames and evaluate the scripts on each frame. Since this vector had all the
        frame's scripts the evaluations would be multiplied by the number of frames.

        Now the defered scripts are stored per-frame and the page asks each frame to
        inject the defered scripts.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        (WebCore::Frame::addUserScriptAwaitingNotification):
        (WebCore::Frame::injectUserScriptsAwaitingNotification):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::notifyToInjectUserScripts):
        (WebCore::Page::addUserScriptAwaitingNotification): Deleted.
        * page/Page.h:
        * page/Quirks.cpp:
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):

2020-08-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text input autocorrect="off" attribute ignored on Mac
        https://bugs.webkit.org/show_bug.cgi?id=151019
        <rdar://problem/65061700>

        Reviewed by Simon Fraser.

        Add support for the `autocorrect` attribute on macOS, by not showing the automatic spell checking popup or
        automatically correcting misspelled words if the root editable element has `autocorrect="off"`.

        Tests:  editing/input/cocoa/autocorrect-off.html
                editing/input/cocoa/autocorrect-on.html

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::isAutomaticSpellingCorrectionEnabled):

2020-08-11  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation crashes when replacing element with img role
        https://bugs.webkit.org/show_bug.cgi?id=215344

        Reviewed by Wenson Hsieh.

        positionInParentAfterNode and positionInParentBeforeNode do not return Position with Nodes that are ignored by 
        editing. Element with img role is one of such Nodes. However, TextManipulationController can manipulate content 
        of children of the ignored Nodes (see the newly added test). Therefore, we'd better not use 
        positionInParentBeforeNode or positionInParentBeforeNode in TextManipulationController::replace, because
        insertion position can be inside a ignored Node.

        API Test: TextManipulation.CompleteTextManipulationShouldReplaceContentIgnoredByEditing

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::replace):

2020-08-11  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] expando-loss and expando-loss-2 conformance tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=214765

        Reviewed by Darin Adler.

        Use JSWebGLRenderingContext's and JSWebGL2RenderingContext's
        existing visitAdditionalChildren hook (via JSCustomMarkFunction in
        their IDL) to add opaque roots for all WebGLObjects latched in to
        the context state, and all WebGLObjects they refer to. (Extensions
        were already previously handled.)

        Add "GenerateIsReachable=Impl" to the IDL files for all such
        objects (WebGLBuffer, WebGLTexture, etc.) so that they pay
        attention to the opaque root state when determining liveness of
        their JavaScript wrappers. Thanks to ysuzuki@ for pointing out the
        need for this.

        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        (WebCore::JSWebGL2RenderingContext::visitAdditionalChildren):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::visitAdditionalChildren):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::visitReferencedJSWrappers):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::visitReferencedJSWrappers):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::visitReferencedJSWrappers):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLQuery.idl:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::visitReferencedJSWrappers):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSampler.idl:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLTransformFeedback.cpp:
        (WebCore::WebGLTransformFeedback::visitReferencedJSWrappers):
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLTransformFeedback.idl:
        * html/canvas/WebGLVertexArrayObject.idl:
        * html/canvas/WebGLVertexArrayObjectBase.cpp:
        (WebCore::WebGLVertexArrayObjectBase::visitReferencedJSWrappers):
        * html/canvas/WebGLVertexArrayObjectBase.h:
        * html/canvas/WebGLVertexArrayObjectOES.idl:

2020-08-11  Youenn Fablet  <youenn@apple.com>

        Add JS console log message in case of capture failure
        https://bugs.webkit.org/show_bug.cgi?id=215370

        Reviewed by Eric Carlson.

        Covered by rebased test.

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

2020-08-11  Zalan Bujtas  <zalan@apple.com>

        [AutoTableLayout] REGRESSION(r263855) Paypal email is rendered right aligned on Safari
        https://bugs.webkit.org/show_bug.cgi?id=215340
        <rdar://problem/66540254>

        Reviewed by Simon Fraser.

        Prior to r263855, these zero-length, non-empty columns had the preferred width value of 1px and the available space got distributed based on this made-up 1px value.
        In this patch, we distribute the available horizontal space evenly among these zero-length, 'width: auto' columns.

        Test: fast/table/zero-length-non-empty-columns-with-auto-width.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::layout):

2020-08-11  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Only update the intrinsic height if we don't have an override height
        https://bugs.webkit.org/show_bug.cgi?id=215369

        Reviewed by Javier Fernandez.

        If we do have an override height, children will size themselves relative to the override height
        (e.g. flexbox flexing/stretching, percentage heights). Because flex intrinsic height is based on
        its children, it would then store an incorrect intrinsic height.

        This is specially problematic with min-height:auto is nested column flexboxes where flexboxes are
        flex items at the same time.

        Based on Blink's https://crrev.com/c/1283482 by <cbiesinger@chromium.org>

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::cacheIntrinsicContentLogicalHeightForFlexItem const): Early return if there
        is an override height.

2020-08-11  Andres Gonzalez  <andresg_22@apple.com>

        Update the isolated tree on element language changes.
        https://bugs.webkit.org/show_bug.cgi?id=215354
        <rdar://problem/65583698>

        Reviewed by Chris Fleizach.

        Test: accessibility/language-attribute-change.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAttributeChange): Added handling of
        AXLanguageChanged notifications.
        (WebCore::AXObjectCache::updateIsolatedTree): Update the isolated tree
        for ASLanguage notifications.
        * accessibility/AXObjectCache.h:

2020-08-11  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove m_sourceBufferPrivateClient checks in SourceBufferPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=215263

        Reviewed by Xabier Rodriguez-Calvar.

        m_sourceBufferPrivateClient is only reset to NULL from SourceBuffer's
        destructor. At this point SourceBufferPrivateGStreamer is about to
        receive its last unref by SourceBuffer and therefore be destroyed.

        Similarly, there is no need to check for m_mediaSource being null.
        m_mediaSource is only reset when the SourceBuffer is removed, and at
        that point SourceBufferPrivate shouldn't receive any calls.

        This is a clean-up and doesn't introduce new behavior. Asserts have
        been added checking the precondition above.

        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveInitializationSegment):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveSample):
        (WebCore::SourceBufferPrivateGStreamer::didReceiveAllPendingSamples):
        (WebCore::SourceBufferPrivateGStreamer::appendParsingFailed):

2020-08-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] gst-full standalone library support
        https://bugs.webkit.org/show_bug.cgi?id=215262

        Reviewed by Xabier Rodriguez-Calvar.

        A new CMake option is introduced to enable gst-full support: USE_GSTREAMER_FULL. By default
        this option is disabled. WebKit distributors might want to enable this if they distribute
        GStreamer through gst-build's gst-full library. In gst-build the following options can be
        used to produce a usable libgstreamer-full-1.0.so:

        -Dpython=disabled -Dges=disabled -Ddevtools=disabled -Dintrospection=disabled -Ddefault_library=static

        Once enabled in our build, the dynamic library libgstreamer-full-1.0.so will be loaded
        instead of all the other GStreamer libraries. Plugins are statically registered in this
        library as well.

        This can be useful when deploying WebKit in controlled embedded platform where disk space is
        limited. One of the goals of gst-full is to enable full customization of the plugins to be
        included in the library. Static registration can also reduce GStreamer initialization time.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Disable missing-plugins handling when
        gst-full is in use. The plugin installer doesn't make much sense for this scenario.

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

        Fix bad merge in r265488
        https://bugs.webkit.org/show_bug.cgi?id=214769

        Unreviewed. This is something that got dropped in a bad merge from r265488.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::layoutSimpleText const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::originAt const):
        (WebCore::GlyphBuffer::expandInitialAdvance):

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

        Spacing of Chinese characters is inconsistent in macOS 11/Safari 14 beta
        https://bugs.webkit.org/show_bug.cgi?id=214769

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=206208..

        In the general case, text shaping is Turing-complete. In order for it to work properly,
        we need to feed the text shaping virtual machine the correct inputs so that it can
        produce correct outputs. The input to text shaping is supposed to be the raw glyph
        advances straight from CTFontGetAdvancesForGlyphs().

        Previously, we were applying letter-spacing, word-spacing, justification, and tab stops
        before shaping. Most fonts don't care about this and still produce the correct results.
        However, Ping Fang on macOS Big Sur and iOS 14 _does_ care about this, and its shaping
        rules operate incorrectly when fed these pre-expanded glyph widths.

        The solution is to apply this extra spacing after shaping occurs. However, because
        shaping is Turing-complete, it is free to add or remove glyphs willy-nilly. This means
        we need some way of tracing back which character in the input string correspond to which
        output glyphs, so we know which glyphs to add additional spacing to. This is what
        https://bugs.webkit.org/show_bug.cgi?id=215059 does: It switches from using
        CTFontTransformGlyphsWithLanguage() to CTFontShapeGlyphs(), which outputs this
        glyph-character tracing info. Then, once we have this tracing info, we can apply spacing
        properly after shaping has completed. That's what this patch does.

        Tests: fast/text/letter-spacing-shaping.html
               fast/text/tab-letter-space.html

        * platform/graphics/FontCascade.cpp: Clients of WidthIterator::advance() need to call
        WidthIterator::finalize() (see below).
        (WebCore::FontCascade::widthOfTextRange const):
        (WebCore::FontCascade::layoutSimpleText const):
        (WebCore::FontCascade::floatWidthForSimpleText const):
        (WebCore::FontCascade::adjustSelectionRectForSimpleText const):
        (WebCore::FontCascade::offsetForPositionForSimpleText const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::expandInitialAdvance):
        (WebCore::GlyphBuffer::expandAdvance):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::hasExtraSpacing const):
        (WebCore::WidthIterator::advanceInternal): Delete the code that used to apply spacing
        before shaping. Instead, it gets moved to applyExtraSpacingAfterShaping().
        (WebCore::WidthIterator::calculateAdditionalWidth const): This is a refactoring of
        the additional space calculation code. This is a const function, and has no side-effects.
        It outputs 4 floats:
        - How much space needs to be added to the left of the current character
        - How much space needs to be added to the right of the current character
        - How much space needs to be added to the left of the current character due to justification
        - How much space needs to be added to the right of the current character due to justification
        We need these last two values because one of the outputs of WidthIterator::advance() is
        a bool which represents whether or not we are ending on a justification space, so that the
        next WidthIterator that gets created for the next thing on the line can forbid/require a
        leading justification appropriately.
        (WebCore::WidthIterator::applyAdditionalWidth): Given the 4 values calculated in
        calculateAdditionalWidth(), apply them. We're operating in logical order, so this function has
        to do some translation from visual order to logical order (hence all the m_run.ltr() calls).
        If we're trying to add size to the left of the first character in LTR, we can't directly do
        that, because advances can only add space to the right side of a character, and there is no
        character to the left of the first character to expand. Therefore, we do this by increasing
        the initial advance of the GlyphBuffer, which is a special advance created just to solve this
        problem. In RTL, the problem is a bit more complicated - we don't know whether advance() will
        be called again, thereby delivering a glyph which we _can_ expand, so we instead store what
        would have been expanded inside m_leftoverJustificationWidth, and wait for the next call to
        advance(). If none comes, clients have to call finalize() instead, which will apply
        m_leftoverJustificationWidth to the GlyphBuffer's initial advance.
        (WebCore::WidthIterator::applyExtraSpacingAfterShaping):
        (WebCore::WidthIterator::finalize):
        (WebCore::WidthIterator::advance):
        * platform/graphics/WidthIterator.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):

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

        [Cocoa] Migrate from CTFontTransformGlyphsWithLanguage() to CTFontShapeGlyphs()
        https://bugs.webkit.org/show_bug.cgi?id=215059

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        The solution for https://bugs.webkit.org/show_bug.cgi?id=214769 requires applying
        letter-spacing after text shaping. Today, we apply letter-spacing before text shaping
        which is wrong. However, if we want to apply letter-spacing after text shaping, we need
        to use CTFontShapeGlyphs(), which returns the glyph -> string mapping, which allows us
        to determine which glyphs to add letter-spacing to.

        Updates existing tests.

        Tests: fast/text/international/kana-voiced-sound-marks-1.html
               fast/text/international/kana-voiced-sound-marks-2.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms const):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):
        (WebCore::FontCascade::characterRangeCodePath):
        (WebCore::FontCascade::layoutSimpleText const):
        * platform/graphics/FontCascade.h:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::consumeSlowCase): Now that we're using
        CTFontShapeGlyphs(), the shaping routine can and does look at the underlying character
        string to perform character composition. This means that the glyph buffer needs to
        match exactly what is in the string. We can't do any shenanigans where we pretend the
        string has characters that aren't actually there.
        * platform/graphics/SurrogatePairAwareTextIterator.h:
        (WebCore::SurrogatePairAwareTextIterator::consume):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::shouldApplyFontTransforms const):
        (WebCore::WidthIterator::applyFontTransforms): Reversing the glyph buffer for rtl
        content needs to be done inside platform-specific code, because its behavior depends on
        which platform shaping routine is being used.
        (WebCore::WidthIterator::commitCurrentFontRange):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::applyTransforms const):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes const):

2020-08-10  Devin Rousso  <drousso@apple.com>

        Add quirk to force touch events on mail.yahoo.com
        https://bugs.webkit.org/show_bug.cgi?id=215329
        <rdar://problem/59824469>

        Reviewed by Darin Adler and Tim Horton.

        <https://mail.yahoo.com/> serves a mobile site even in desktop browsing "mode", meaning
        that certain actions, such as selecting an aufotill contact, expect mobile behaviors,
        such as mouse events being dispatched after touch events rather than instantly (in the
        case of a connected trackpad with an iPad). This quirk ensures always mobile behavior for
        those actions, matching the expectations of <https://mail.yahoo.com/>.

        * page/Quirks.h:
        * page/Quirks.cpp:
        (WebCore::isYahooMail): Added.
        (WebCore::Quirks::shouldSynthesizeTouchEvents const): Added.
        (WebCore::Quirks::shouldAvoidPastingImagesAsWebContent const):

        * loader/DocumentLoader.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mouseEventPolicy const):

2020-08-10  Chris Dumez  <cdumez@apple.com>

        AuxiliaryProcess::didReceiveInvalidMessage() for WebPage::PerformDragControllerAction IPC
        https://bugs.webkit.org/show_bug.cgi?id=215341
        <rdar://problem/59344091>

        Reviewed by Alex Christensen.

        Consistently use OptionSet<DragApplicationFlags> instead of DragApplicationFlags.

        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::isCopyKeyDown):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::isCopyKeyDown):
        (WebCore::DragController::dragOperation):
        * platform/DragData.cpp:
        (WebCore::DragData::DragData):
        * platform/DragData.h:
        (WebCore::DragData::flags const):
        * platform/cocoa/DragDataCocoa.mm:
        (WebCore::DragData::DragData):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::DragData):

2020-08-10  Peng Liu  <peng.liu6@apple.com>

        MobileSafari crashes at WebCore: -[WebAVPlayerController seekToTime:toleranceBefore:toleranceAfter:]
        https://bugs.webkit.org/show_bug.cgi?id=215332

        Reviewed by Eric Carlson.

        Add a NULL pointer check to fix a crash.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController seekToTime:toleranceBefore:toleranceAfter:]):

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

        Shaping can be performed on glyphIDs from the wrong font
        https://bugs.webkit.org/show_bug.cgi?id=215333

        Reviewed by Darin Adler.

        The problem is this line:
        if (font != lastFontData && width)

        This means we will only trigger shaping code if width is non-zero.
        However, even if width is non-zero, we will still happily add glyphs
        to the glyph buffer, and when we do eventually get around to shaping,
        we shape all yet-unshaped glyphs, regardless of which font they came
        from.

        Test: fast/text/zero-width-shaping-font-mismatch.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::commitCurrentFontRange):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:

2020-08-10  Clark Wang  <clark_wang@apple.com>

        Add AudioProcessingEvent Constructor
        https://bugs.webkit.org/show_bug.cgi?id=215237

        Reviewed by Chris Dumez.

        Added constructor according to spec: https://bugs.webkit.org/show_bug.cgi?id=215237.
        Added in AudioProcessingEventInit files.

        Test: webaudio/audioprocessingevent-constructor.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioProcessingEvent.cpp:
        (WebCore::AudioProcessingEvent::create):
        (WebCore::AudioProcessingEvent::AudioProcessingEvent):
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/AudioProcessingEventInit.h: Added.
        * Modules/webaudio/AudioProcessingEventInit.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-10  Chris Dumez  <cdumez@apple.com>

        Align existing AudioParam API with the specification
        https://bugs.webkit.org/show_bug.cgi?id=215301

        Reviewed by Sam Weinig.

        Align existing AudioParam API with the specification:
        - https://www.w3.org/TR/webaudio/#AudioParam

        In particular, the following changes were made:
        - Use float instead of unrestricted float where appropriate, so that we properly throw when
          provided non-finite values.
        - Use double instead of float where appropriate
        - A lot of the operations were previously returning nothing but they should return the
          AudioParam itself to allow chaining.
        - Throw an exceptions when passed invalid values (e.g. negative times)
        - Throw exceptions when events overlap. This part is based on Chromium's implementation here:
          - https://github.com/chromium/chromium/blob/master/third_party/blink/renderer/modules/webaudio/audio_param_timeline.cc#L513
          and is specification is here:
          - https://webaudio.github.io/web-audio-api/#dfn-automation-event

        This allows us to pass some more WPT webaudio tests.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AudioParam.cpp:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::setValueAtTime):
        (WebCore::AudioParamTimeline::linearRampToValueAtTime):
        (WebCore::AudioParamTimeline::exponentialRampToValueAtTime):
        (WebCore::AudioParamTimeline::setTargetAtTime):
        (WebCore::AudioParamTimeline::setValueCurveAtTime):
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        (WebCore::AudioParamTimeline::ParamEvent::ParamEvent):
        (WebCore::AudioParamTimeline::ParamEvent::time const):
        (WebCore::AudioParamTimeline::ParamEvent::duration const):
        (WebCore::AudioParamTimeline::ParamEvent::curve):

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

        r262456 broke sites that expect webkitDisplayingFullscreen to be true almost immediately
        https://bugs.webkit.org/show_bug.cgi?id=215240
        <rdar://problem/66284042>

        Reviewed by Darin Adler.

        Add a quirk for sites that use the Akamai Media Player, which begins polling
        `webkitDisplayingFullscreen` every 100ms immediately after entering video fullscreen
        mode and exits fullscreen as soon as it returns false. r262456 changed the HTMLMediaPlayer
        state machine so `webkitDisplayingFullscreen` doesn't return `true` until the fullscreen
        window has been opened in the UI process. This was done to fix bugs triggered by
        rapidly entering and exiting fullscreen and PiP and make our own fullscreen/PiP tests
        less flakey, so instead of reverting the change universally do it as a quirk for sites
        using the Akamai Media Player.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsAkamaiMediaPlayerQuirk const):
        * page/Quirks.h:

2020-08-10  Antti Koivisto  <antti@apple.com>

        Return values of FontDatabase::collectionForFamily are not thread safe
        https://bugs.webkit.org/show_bug.cgi?id=215320
        <rdar://problem/66502539>

        Reviewed by Anders Carlsson.

        Font prewarming can add new entries to m_familyNameToFontDescriptors while lookups are being made.
        Access to it is protected by a lock.

        However if the hashmap ends up rehashing, the pointer returned from collectionForFamily may end up becoming invalid.
        This can result in a crash later under findClosestFont.

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

        Heap allocate the hashmap values so they stay valid over hashtable mutations.

2020-08-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS] Drag/drop an image of a unsupported format to an file input element should convert it to a supported format
        https://bugs.webkit.org/show_bug.cgi?id=212482
        <rdar://problem/63731672>

        Reviewed by Darin Adler.

        Although the list of the dropped files are sent from the UI process to
        the Web process through the WebPage channel, the file input settings are
        only known by the Web process. So we have to do the image transcoding in
        WebCore.

        Tests: fast/forms/file/entries-api/image-no-transcode-drag-drop.html
               fast/forms/file/entries-api/image-transcode-drag-drop.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::fileChooserSettings const):
        Move filling FileChooserSettings to the function: fileChooserSettings().

        (WebCore::FileInputType::applyFileChooserSettings):
        Call fileChooserSettings() instead of receiving FileChooserSettings as
        an argument.

        (WebCore::FileInputType::filesChosen):
        Add this function which can be called from receiveDroppedFiles() or
        receiveDroppedFilesWithImageTranscoding().        

        (WebCore::FileInputType::receiveDroppedFilesWithImageTranscoding):
        Finds out whether image transcoding is needed for the dropped files. If
        it is needed, it will be done in a WorkQueue and call filesChosen() when
        it is done. Otherwise it will call filesChosen() immediately.

        (WebCore::FileInputType::receiveDroppedFiles):
        * html/FileInputType.h:
        * platform/graphics/ImageUtilities.h: Added.
        * platform/graphics/cg/ImageUtilitiesCG.cpp: Added.
        (WebCore::sharedImageTranscodingQueue):
        Provide a shared WorkQueue which can be used by WebCore and WebKit.

        (WebCore::transcodeImage):
        (WebCore::findImagesForTranscoding):
        (WebCore::transcodeImages):

2020-08-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r260831): Web process crashes under Editor::setComposition() after navigating with marked text
        https://bugs.webkit.org/show_bug.cgi?id=215315
        <rdar://problem/64740092>

        Reviewed by Darin Adler.

        To address a variety of crashes due to frames changing (or otherwise losing) their document while executing
        editing commands, r260831 refactored the Editor class such that it extends the functionality of the Document
        class, rather than the Frame class. In nearly all scenarios, this either leads to no behavior change or prevents
        null pointer crashes, since a document is almost always attached to a frame when applying any editing commands.

        However, there is one scenario where a document that has not yet been attached to its frame (and therefore does
        not have a browsing context) will cause a null deref when trying to confirm an existing IME composition. The
        logic added in <https://trac.webkit.org/r150291> will try and confirm any existing composition range on a
        document right before committing provisional navigation. In the case where we are navigating back to a
        previously visited page, `m_frame`'s document in `FrameLoader::commitProvisionalLoad()` will not be attached
        until the cached page's mainframe is opened underneath `CachedPage::restore()`. Since the call to
        `Editor::confirmComposition()` currently happens before this step, we end up crashing while attempting to create
        a `UserTypingGestureIndicator`. Note that even if we avoid this with a null check, we'll still end up crashing
        shortly thereafter, underneath `Editor::insertTextForConfirmedComposition`. And even if this second crash is
        avoided with another null check, we'll just end up with some version of webkit.org/b/59121, where the
        composition range is present after navigation, but is out of sync with platform UI.

        To fix the crash (and also not bring back bug #59121), we refactor this composition confirmation logic so that
        it lives in Editor, and is also robust against the case where the document is not attached to a frame; we then
        invoke this call after we're done committing the provisional load, so that any frame that is not yet attached
        before commiting the load still has a chance to confirm its composition.

        Test: WKWebViewMacEditingTests.ProcessSwapAfterSettingMarkedText

        * editing/Editor.cpp:
        (WebCore::Editor::confirmCompositionAndNotifyClient):

        Move functionality from `willTransitionToCommitted` to `confirmCompositionAndNotifyClient`, a helper method that
        will bail if the document is not attached, but otherwise confirm the active composition (if it exists).

        * editing/Editor.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

        Add a call to confirm the editor's current composition after we're done committing the load. Note that in the
        case where we had a composition before committing the load, we'll end up confirming the composition earlier (in
        the first call site), rather than confirming after the load has been committed. This means that this second call
        will be a no-op, due to the editor not having any composition.

        (WebCore::FrameLoader::willTransitionToCommitted): Deleted.
        * loader/FrameLoader.h:

2020-08-09  Ben Nham  <nham@apple.com>

        Preload graphics drivers in Mac WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=215183

        Reviewed by Darin Adler.

        In newer versions of Mac OS, graphics drivers are no longer part of the shared cache due to
        size restrictions. This can cause first render to be blocked by ~10 ms when we dlopen those
        drivers. To work around this, we preload the drivers when prewarming the WebProcess.

        * page/ProcessWarming.cpp:
        (WebCore::ProcessWarming::prewarmGlobally):

2020-08-09  Youenn Fablet  <youenn@apple.com>

        Always resolve ReadableStream's tee()'s cancel promise after the stream closes or errors
        https://bugs.webkit.org/show_bug.cgi?id=215197

        Reviewed by Darin Adler.

        Make sure to resolve the cancel promise if the source gets closed or errored.
        Test: imported/w3c/web-platform-tests/streams/queuing-strategies-size-function-per-global.window.html

        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamTee):
        (readableStreamTeePullFunction):

2020-08-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Update OriginalAdvancesForCharacterTreatedAsSpace to work correctly in the presence of inserted or removed glyphs
        https://bugs.webkit.org/show_bug.cgi?id=215302

        Reviewed by Darin Adler.

        OriginalAdvancesForCharacterTreatedAsSpace is trying to make sure that shaping doesn't cause
        spaces to get wider or thinner. However, the way it was doing that is, for all the space
        characters, overwrite that glyph index's advance after shaping to be what it was before shaping.
        However, this is wrong, because shaping can insert or delete glyphs. Instead, now that we have
        explicit string indices for each glyph, we can use those to determine which glyphs come from
        space characters. These glyphs are the ones which should be overwritten.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:

2020-08-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix bad merge in r265241
        https://bugs.webkit.org/show_bug.cgi?id=215051

        Unreviewed. This is something that got dropped in a bad merge from r265241.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):

2020-08-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Make GlyphBuffers required in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=215052

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        Performing shaping affects the width of strings; indeed, that is one of
        its purposes for existence. Shaping can only happen when we have a GlyphBuffer
        to shape. We can't just arbitrarily decide to disable shaping for various
        functions just because those functions don't ever inspect the exact glyphs.

        No new tests. This is a preparation step toward
        https://bugs.webkit.org/show_bug.cgi?id=214769 and
        https://bugs.webkit.org/show_bug.cgi?id=206208, and I couldn't come up with a
        test case that was broken here.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const):
        (WebCore::FontCascade::widthForSimpleText const):
        (WebCore::FontCascade::layoutSimpleText const):
        (WebCore::FontCascade::floatWidthForSimpleText const):
        (WebCore::FontCascade::adjustSelectionRectForSimpleText const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::shouldApplyFontTransforms const):
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText):

2020-08-08  Myles C. Maxfield  <mmaxfield@apple.com>

        WidthIterator::m_finalRoundingWidth is always 0
        https://bugs.webkit.org/show_bug.cgi?id=215307

        Reviewed by Darin Adler.

        There's no reason for it to exist.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::layoutSimpleText const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::runWidthSoFar const):
        (WebCore::WidthIterator::finalRoundingWidth const): Deleted.

2020-08-08  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references instead of pointers for GlyphBuffer::add()'s Font argument
        https://bugs.webkit.org/show_bug.cgi?id=215309

        Reviewed by Darin Adler.

        They're not allowed to be null.

        No new tests because there is no behavior change.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):
        (WebCore::FontCascade::drawGlyphBuffer const):
        (WebCore::offsetToMiddleOfGlyph):
        (WebCore::FontCascade::drawEmphasisMarks const):
        (WebCore::GlyphToPathTranslator::GlyphToPathTranslator):
        (WebCore::GlyphToPathTranslator::advance):
        (WebCore::FontCascade::dashesForIntersectionsWithRect const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::fontAt const):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::generateGlyphBuffer const):
        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paintGlyph):
        (WebCore::MathOperator::paint):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::paint):

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

        AudioContext / OfflineAudioContext should support a wider sample rate range
        https://bugs.webkit.org/show_bug.cgi?id=215289

        Reviewed by Eric Carlson.

        AudioContext / OfflineAudioContext should support a wider sample rate range. We only supported
        sample rates in the [44100, 96000] range, which is much smaller than other browsers and would
        cause us to fail a LOT of web-platform-tests.

        We now support sample rates in the range [3000, 384000], which is the same range as Chromium.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::isSampleRateRangeGood):
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):

        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::fftSizeForSampleRate):
        Update fftSizeForSampleRate() to support wider sample rate range. This implementation is based
        on Chromium's:
        https://github.com/chromium/chromium/blob/master/third_party/blink/renderer/platform/audio/hrtf_panner.cc#L70

        * platform/audio/gstreamer/FFTFrameGStreamer.cpp:
        (WebCore::FFTFrame::minFFTSize):
        (WebCore::FFTFrame::maxFFTSize):
        * platform/audio/mac/FFTFrameMac.cpp:
        (WebCore::FFTFrame::minFFTSize):
        (WebCore::FFTFrame::maxFFTSize):

2020-08-07  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Missing validation for sampler unit index
        https://bugs.webkit.org/show_bug.cgi?id=215303

        Reviewed by Dean Jackson.

        Test: webgl/2.0.0/deqp/functional/gles3/negativeshaderapi.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::bindSampler):

2020-08-07  James Darpinian  <jdarpinian@chromium.org>

        Off by one error in transform feedback buffer binding
        https://bugs.webkit.org/show_bug.cgi?id=215298

        Reviewed by Dean Jackson.

        Caught by conformance test deqp/functional/gles3/negativebufferapi.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::setIndexedBufferBinding):

2020-08-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        {Intersection,Resize,Performance}Observer callbacks get incorrect `this` value
        https://bugs.webkit.org/show_bug.cgi?id=215162

        Reviewed by Geoffrey Garen.

        This change utilizes CallbackThisObject] IDL attribute to invoke a callback of
        IntersectionObserver [1], ResizeObserver [2], and PerformanceObserver [3] with
        correct `this` value of its observer, aligning WebKit with Blink and Gecko.

        Tests: imported/w3c/web-platform-tests/intersection-observer/observer-callback-arguments.html
               imported/w3c/web-platform-tests/resize-observer/observe.html
               imported/w3c/web-platform-tests/performance-timeline/po-observe.any.js

        [1] https://w3c.github.io/IntersectionObserver/#notify-intersection-observers-algo (step 3.4)
        [2] https://github.com/w3c/csswg-drafts/pull/5383
        [3] https://w3c.github.io/performance-timeline/#queue-the-performanceobserver-task (step 3.3.5)

        * html/LazyLoadImageObserver.cpp:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::notify):
        * page/IntersectionObserverCallback.h:
        * page/IntersectionObserverCallback.idl:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::deliver):
        * page/PerformanceObserverCallback.h:
        * page/PerformanceObserverCallback.idl:
        * page/ResizeObserver.cpp:
        (WebCore::ResizeObserver::deliverObservations):
        * page/ResizeObserverCallback.h:
        * page/ResizeObserverCallback.idl:

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

        baseLatency attribute is missing on AudioContext interface
        https://bugs.webkit.org/show_bug.cgi?id=215277

        Reviewed by Eric Carlson.

        baseLatency attribute is missing on AudioContext interface:
        - https://www.w3.org/TR/webaudio/#dom-audiocontext-baselatency

        Test: webaudio/audiocontext-baselatency.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::baseLatency):
        (WebCore::AudioContext::destination):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::framesPerBuffer const):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/cocoa/AudioDestinationCocoa.cpp:
        (WebCore::AudioDestinationCocoa::framesPerBuffer const):
        * platform/audio/cocoa/AudioDestinationCocoa.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::framesPerBuffer const):
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:

2020-08-07  Rob Buis  <rbuis@igalia.com>

        Implement PerfomanceObserverInit.buffered
        https://bugs.webkit.org/show_bug.cgi?id=214883

        Reviewed by Darin Adler.

        Implement PerfomanceObserverInit.buffered IDL and
        functionality [1].

        Behavior matches Chrome and Firefox.

        Tests: imported/w3c/web-platform-tests/resource-timing/buffered-flag.any.html
               imported/w3c/web-platform-tests/resource-timing/buffered-flag.any.worker.html
               imported/w3c/web-platform-tests/user-timing/buffered-flag.any.html
               imported/w3c/web-platform-tests/user-timing/buffered-flag.any.worker.html
               imported/w3c/web-platform-tests/performance-timeline/case-sensitivity.any.html
               imported/w3c/web-platform-tests/performance-timeline/case-sensitivity.any.worker.html

        [1] https://w3c.github.io/performance-timeline/#performanceobserverinit-dictionary

        * page/Performance.cpp:
        (WebCore::Performance::appendBufferedEntriesByType const):
        * page/Performance.h:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:

2020-08-07  John Wilander  <wilander@apple.com>

        Experimental: Cap the expiry of persistent cookies set in 3rd-party CNAME cloaked HTTP responses
        https://bugs.webkit.org/show_bug.cgi?id=215201
        <rdar://problem/57454633>

        Reviewed by Brent Fulgham. Also reviewed and commented on by Chris Dumez, Jiten Mehta, Sam Weinig, and Alex Christensen.

        Tests: http/tests/resourceLoadStatistics/cname-cloaking-top-cname-sub-1p-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-cname-sub-3p-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-cname-sub-matching-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-cname-sub-no-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-no-cname-sub-1p-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-no-cname-sub-3p-cname.html
               http/tests/resourceLoadStatistics/cname-cloaking-top-no-cname-sub-no-cname.html

        * page/Settings.yaml:
            Added the off-by-default flag isCNAMECloakingMitigationEnabled.
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::resourceLoadStatisticsEnabled const):
            New getter for the ITP setting.
        * platform/network/NetworkStorageSession.h:
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::capExpiryOfPersistentCookie):
            Broke this function out so that it can be reused.
        (WebCore::parseDOMCookie):
            Here's from where the function above was broken out.
            The existing functionality has a test case.

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

        length attribute is missing on OfflineAudioContext
        https://bugs.webkit.org/show_bug.cgi?id=215287

        Reviewed by Geoffrey Garen.

        length attribute is missing on OfflineAudioContext:
        - https://www.w3.org/TR/webaudio/#dom-offlineaudiocontext-length

        Test: webaudio/offlineaudiocontext-length.html

        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::renderTarget const):
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::length const):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.idl:

2020-08-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Reduce the amount of custom binding code for JSXPathNSResolver
        https://bugs.webkit.org/show_bug.cgi?id=161030

        Reviewed by Darin Adler.

        This patch introduces CustomXPathNSResolver callback interface,
        cleaning up CodeGeneratorJS.pm and removing custom binding code.

        XPathNSResolver is kept as a wrapper for NativeXPathNSResolver, preserving common
        case performance via IDL interface converter, and because a callback interface
        can't be returned from a function without substantial code generator change.

        Also, improves non-callable method error message and fixes 2 spec incompatibilities:
        a) no "lookupNamespaceURI" method lookup on functions [1];
        b) resolver's "prefix" parameter is required [2].

        Since C++ methods can't be overload based on return type, this patch adds
        [ImplementedAs] IDL attribute support for callback interface methods.

        Because XPathNSResolver wrappers are always temporary (no reference is kept),
        [IsWeakCallback] IDL attribute isn't added, preserving strong reference.

        [1]: https://heycam.github.io/webidl/#call-a-user-objects-operation (step 10.1)
        [2]: https://dom.spec.whatwg.org/#dom-xpathnsresolver-lookupnamespaceuri

        Tests: imported/w3c/web-platform-tests/dom/idlharness.window.js
               imported/w3c/web-platform-tests/domxpath/callback-interface.html        

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/IDLTypes.h:
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp: Removed.
        * bindings/js/JSCustomXPathNSResolver.h: Removed.
        * bindings/js/JSDOMConvertXPathNSResolver.h:
        (WebCore::Converter<IDLInterface<XPathNSResolver>>::convert):
        (WebCore::Converter<IDLXPathNSResolver<T>>::convert): Deleted.
        (WebCore::JSConverter<IDLXPathNSResolver<T>>::convert): Deleted.
        (WebCore::JSConverter<IDLXPathNSResolver<T>>::convertNewlyCreated): Deleted.
        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        (IsWrapperType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GenerateHeader):
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        (GetBaseIDLType):
        (NativeToJSValueDOMConvertNeedsState):
        (NativeToJSValueDOMConvertNeedsGlobalObject):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverBody):
        * xml/CustomXPathNSResolver.cpp: Copied from Source/WebCore/bindings/js/JSXPathNSResolverCustom.cpp.
        (WebCore::CustomXPathNSResolver::lookupNamespaceURI):
        * xml/CustomXPathNSResolver.h: Copied from Source/WebCore/bindings/js/JSXPathNSResolverCustom.cpp.
        * xml/CustomXPathNSResolver.idl: Renamed from Source/WebCore/bindings/js/JSXPathNSResolverCustom.cpp.
        * xml/XPathNSResolver.idl:

2020-08-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r260276): instructure.com custom PDF viewer stops scrolling / loading after switching to another tab then switching back
        https://bugs.webkit.org/show_bug.cgi?id=215215
        <rdar://problem/65743028>

        Reviewed by Simon Fraser.

        Test: scrollingcoordinator/overflow-proxy-reattach.html

        * page/scrolling/ScrollingStateOverflowScrollProxyNode.cpp:
        (WebCore::ScrollingStateOverflowScrollProxyNode::setPropertyChangedBitsAfterReattach):

        We need to reset OverflowScrollingNode after reattach.

        * page/scrolling/ScrollingStateOverflowScrollProxyNode.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setPageIsInWindow):
        * testing/Internals.h:
        * testing/Internals.idl:

        Add direct testing support for background tab state.

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

        Stop storing the sampleRate on AudioNode and get it from the AudioContext instead
        https://bugs.webkit.org/show_bug.cgi?id=215246

        Reviewed by Eric Carlson.

        Stop storing the sampleRate on AudioNode and get it from the AudioContext instead.
        This avoids having to pass the sampleRate everywhere when we construct nodes.

        No new tests, no behavior change.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::sampleRate const):
        (WebCore::AudioNode::processIfNecessary):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createScriptProcessor):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        (WebCore::DefaultAudioDestinationNode::sampleRate const):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/PannerNode.cpp:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createWebKitPanner):
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
        * Modules/webaudio/WebKitAudioPannerNode.h:

2020-08-07  Dean Jackson  <dino@apple.com>

        Pocket City game play area is blank (WebGL is broken in Catalyst)
        https://bugs.webkit.org/show_bug.cgi?id=215251

        Reviewed by Tim Horton.

        Our configuration for WebGL under Catalyst was incorrect. Since
        it uses "desktop" OpenGL, it had to use the normal macOS setup
        (enabling texture rectangle extension, and the correct target).

        * platform/graphics/GraphicsContextGL.h: Add PLATFORM(MACCATALYST).
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm: Ditto.
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):

2020-08-07  Rob Buis  <rbuis@igalia.com>

        Fix warnings related to unsigned >=0 ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=215223

        Reviewed by Sergio Villar Senin.

        Fix warnings related to unsigned >=0 ASSERTs by removing the expressions. Example warning:
        TextCheckingHelper.cpp:425:39: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspelledWordOrUngrammaticalPhrase const):
        (WebCore::TextCheckingHelper::findUngrammaticalPhrases const):
        (WebCore::TextCheckingHelper::guessesForMisspelledWordOrUngrammaticalPhrase const):

2020-08-06  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation: leading and trailing spaces should be ignored when comparing content
        https://bugs.webkit.org/show_bug.cgi?id=214878
        <rdar://problem/63735024>

        Reviewed by Ryosuke Niwa.

        TextIterator does not emit collapsed space if there is no text emitted before or the last emitted character is 
        collapsed space. When TextManipulationController starts observing paragraphs, it iterates the whole document and
        the range of TextIterator is the range of document. For some text node A in the document, if TextIterator emits 
        text for some other text node B before it, the collapsed space at the beginning of A will be emitted, and 
        TextManipulationController would think the emitted space is part of A's content. When TextManipulationController
        replaces content for A, and the range of TextIterator is set to the range of A, the collapsed space is not 
        emitted. The check to ensure A's content is unchanged would fail.
 
        To solve this issue, for first and last token in the paragraph, TextManipulationController checks content after 
        removing leading and trailing spaces.
 
        API test: TextManipulation.CompleteTextManipulationParagraphsContainCollapsedSpaces

        * editing/TextManipulationController.cpp:
        (WebCore::areEqualIgnoringLeadingAndTrailingWhitespaces):
        (WebCore::TextManipulationController::replace):

2020-08-06  Kenneth Russell  <kbr@chromium.org>

        Implement createImageBitmap(ImageData)
        https://bugs.webkit.org/show_bug.cgi?id=183438

        Reviewed by Dean Jackson.

        Implement createImageBitmap(ImageData), including scaling,
        flipping and alpha premultiplication, and fix bugs in
        createImageBitmap(ImageBitmap).

        Support copying unpremultiplied-alpha data to the
        unpremultiplied-alpha format in ImageBuffer::putImageData. Plumb
        this change through all ImageBuffer backends and display lists.

        Handle error cases exposed by W3C WPT tests now that
        createImageBitmap(ImageData) is working.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::readImageBitmap):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create):
        (WebCore::ImageBitmap::detachBitmaps):
        (WebCore::alphaPremultiplicationForPremultiplyAlpha):
        (WebCore::ImageBitmap::resolveWithBlankImageBuffer):
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::createFromBuffer):
        * html/ImageBitmap.h:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::texImageImpl):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/ConcreteImageBuffer.h:
        (WebCore::ConcreteImageBuffer::putImageData):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::putImageData):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::convertToLuminanceMask):
        (WebCore::copyUnpremultipliedToUnpremultiplied):
        (WebCore::ImageBufferBackend::copyImagePixels const):
        (WebCore::ImageBufferBackend::putImageData):
        * platform/graphics/ImageBufferBackend.h:
        * platform/graphics/cairo/GraphicsContextGLCairo.cpp:
        (WebCore::GraphicsContextGLOpenGL::ImageExtractor::extractImage):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoSurfaceBackend::putImageData):
        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.h:
        * platform/graphics/cg/GraphicsContextGLCG.cpp:
        (WebCore::GraphicsContextGLOpenGL::ImageExtractor::extractImage):
        * platform/graphics/cg/ImageBufferCGBackend.cpp:
        (WebCore::copyImagePixelsAccelerated):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.cpp:
        (WebCore::ImageBufferCGBitmapBackend::putImageData):
        * platform/graphics/cg/ImageBufferCGBitmapBackend.h:
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::putImageData):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::PutImageData::PutImageData):
        (WebCore::DisplayList::operator<<):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::PutImageData::create):
        (WebCore::DisplayList::PutImageData::destFormat const):
        (WebCore::DisplayList::PutImageData::encode const):
        (WebCore::DisplayList::PutImageData::decode):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::putImageData):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::ImageExtractor::ImageExtractor):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/win/GraphicsContextGLDirect2D.cpp:
        (WebCore::GraphicsContextGLOpenGL::ImageExtractor::extractImage):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::putImageData):
        * platform/graphics/win/ImageBufferDirect2DBackend.h:

2020-08-06  Simon Fraser  <simon.fraser@apple.com>

        Avoid triggering redundant compositing updates when trying ot run a steps() animation on transform
        https://bugs.webkit.org/show_bug.cgi?id=215241
        <rdar://problem/62737868>

        Reviewed by Zalan Bujtas.

        With a steps() timing function and keyframes animating the transform property, KeyframeEffect::applyPendingAcceleratedActions()
        tries to restart the animation every time because the GraphicsLayer reports that it didn't start an accelerated animation.
        r264856 patched some of this, but we still call animationFinished() every time, and this triggers a compositing update via
        the m_owningLayer.setNeeds* calls in RenderLayerBacking::animationFinished().

        So don't try to remove the animation if wasn't running. This makes those compositing updates a no-op, which is important
        because these animations still invalidate style on every frame (webkit.org/b/215229).

        Test: animations/steps-transform-compositing-updates.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):

2020-08-06  Peng Liu  <peng.liu6@apple.com>

        Web process crashes at WebCore::FullscreenManager::didExitFullscreen
        https://bugs.webkit.org/show_bug.cgi?id=215243

        Reviewed by Eric Carlson.

        No new tests, no functional change.

        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::didExitFullscreen):
        m_fullscreenElement might be nullptr when fullscreenOrPendingElement() is not nullptr.

2020-08-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        WeakPtr threading assertion on editing/undo-manager/undo-manager-delete-stale-undo-items.html
        https://bugs.webkit.org/show_bug.cgi?id=215221
        <rdar://problem/66632111>

        Reviewed by Devin Rousso.

        Refactors `UndoItem` to avoid dereferencing its `m_undoManager` underneath `UndoItem::document`, which is
        consulted when computing its JS wrapper's opaque roots. Instead of going through `m_undoManager` to grab the
        document, store a `WeakPtr` to the `Document` upon setting the `UndoManager` and return its pointer value
        directly in `document()`.

        * page/UndoItem.cpp:
        (WebCore::UndoItem::setUndoManager):
        (WebCore::UndoItem::invalidate):
        (WebCore::UndoItem::document const):
        * page/UndoItem.h:

2020-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Use references instead of pointers for WidthIterator's fonts
        https://bugs.webkit.org/show_bug.cgi?id=215186

        Reviewed by Zalan Bujtas.

        They can never be null.

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const):
        (WebCore::FontCascade::layoutSimpleText const):
        (WebCore::FontCascade::floatWidthForSimpleText const):
        (WebCore::FontCascade::adjustSelectionRectForSimpleText const):
        (WebCore::FontCascade::offsetForPositionForSimpleText const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::applyFontTransforms):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/WidthIterator.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):

2020-08-06  Chris Dumez  <cdumez@apple.com>

        BaseAudioContext.decodeAudioData() should return a Promise
        https://bugs.webkit.org/show_bug.cgi?id=215242

        Reviewed by Eric Carlson.

        BaseAudioContext.decodeAudioData() should return a Promise as per:
        - https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-decodeaudiodata

        Behavior is unchanged for prefixed WebKitAudioContext.decodeAudioData() to ensure
        backward compatibility.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        (WebCore::AsyncAudioDecoder::decodeAsync):
        (WebCore::AsyncAudioDecoder::DecodingTask::DecodingTask):
        (WebCore::AsyncAudioDecoder::DecodingTask::notifyComplete):
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::decodeAudioData):
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/WebKitAudioContext.idl:

2020-08-06  Chris Dumez  <cdumez@apple.com>

        Drop non-standard createBuffer(ArrayBuffer, boolean) overload from AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=215238

        Reviewed by Darin Adler.

        Drop non-standard createBuffer(ArrayBuffer, boolean) overload from AudioContext:
        - https://webaudio.github.io/web-audio-api/#BaseAudioContext

        This overload is kept on WebKitAudioContext for backward-compatibility when the page
        is still using the prefixed API.

        No new tests, rebaselined existing test.

        * Modules/webaudio/BaseAudioContext.cpp:
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createLegacyBuffer):
        * Modules/webaudio/WebKitAudioContext.h:
        * Modules/webaudio/WebKitAudioContext.idl:

2020-08-06  Chris Dumez  <cdumez@apple.com>

        MediaStreamAudioDestinationNode should have a constructor
        https://bugs.webkit.org/show_bug.cgi?id=215233

        Reviewed by Geoffrey Garen.

        MediaStreamAudioDestinationNode should have a constructor:
        - https://webaudio.github.io/web-audio-api/#mediastreamaudiodestinationnode

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        (WebCore::AudioBasicInspectorNode::pullInputs):
        (WebCore::AudioBasicInspectorNode::checkNumberOfChannelsForInput):
        (WebCore::AudioBasicInspectorNode::updatePullStatus):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamDestination):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::create):
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl:
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createMediaStreamDestination):

2020-08-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Avoid creating a sub-image when drawing a small scaled sub-rect from a native image
        https://bugs.webkit.org/show_bug.cgi?id=215015
        <rdar://problem/63845893>

        Reviewed by Simon Fraser.

        The reason for creating the sub-image in GraphicsContext::drawNativeImage()
        is to have a better image interpolation for the scaled sub-rect. For small
        destRect, the interpolation on the original image is almost the same as
        the interpolation on the sub-image. So we should avoid creating the sub-
        image if destRect.area() is less than some minimum value. Creating many
        sub-images can affect the rendering performance.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):

2020-08-06  David Kilzer  <ddkilzer@apple.com>

        WTF::makeString() should handle enum values
        <https://webkit.org/b/214906>

        Reviewed by Sam Weinig.

        * Modules/webgpu/WHLSL/Metal/WHLSLMangledNames.h:
        (WTF::MangledNameAdaptor::length):
        (WTF::MangledNameAdaptor::writeTo):
        - Update for function renames.

2020-08-06  Chris Dumez  <cdumez@apple.com>

        MediaStreamAudioSourceNode should have a constructor
        https://bugs.webkit.org/show_bug.cgi?id=215225

        Reviewed by Eric Carlson.

        MediaStreamAudioSourceNode should have a constructor:
        - https://webaudio.github.io/web-audio-api/#mediastreamaudiosourcenode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceOptions.h: Copied from Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.idl.
        * Modules/webaudio/MediaStreamAudioSourceOptions.idl: Copied from Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.idl.
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createMediaStreamSource):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename LeadingExpansion and TrailingExpansion to LeftExpansion and RightExpansion
        https://bugs.webkit.org/show_bug.cgi?id=215211

        Reviewed by Darin Adler.

        "Leading" and "Trailing" are terms-of-art which represent logical order.
        However, the behavior of these flags operates in visual order.
        Instead, we should rename them to their visual order analogues: left and right.

        No new tests because there is no behavior change.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * layout/inlineformatting/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::justifyRuns):
        (WebCore::Layout::LineBuilder::Run::expand):
        (WebCore::Layout::LineBuilder::Run::visuallyCollapseTrailingWhitespace):
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::expansionLocation):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::expansionOpportunityCountInternal):
        (WebCore::FontCascade::leftExpansionOpportunity):
        (WebCore::FontCascade::rightExpansionOpportunity):
        (WebCore::FontCascade::leadingExpansionOpportunity): Deleted.
        (WebCore::FontCascade::trailingExpansionOpportunity): Deleted.
        * platform/graphics/FontCascade.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::expansionLocation):
        (WebCore::WidthIterator::advanceInternal):
        * platform/text/TextFlags.h:
        * rendering/ComplexLineLayout.cpp:
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::applyExpansionBehavior):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::setCanHaveLeftExpansion):
        (WebCore::InlineBox::setCanHaveRightExpansion):
        (WebCore::InlineBox::setForceRightExpansion):
        (WebCore::InlineBox::setForceLeftExpansion):
        (WebCore::InlineBox::InlineBoxBitfields::InlineBoxBitfields):
        (WebCore::InlineBox::hasSelectedChildren const):
        (WebCore::InlineBox::setHasSelectedChildren):
        (WebCore::InlineBox::canHaveLeftExpansion const):
        (WebCore::InlineBox::canHaveRightExpansion const):
        (WebCore::InlineBox::forceRightExpansion const):
        (WebCore::InlineBox::forceLeftExpansion const):
        (WebCore::InlineBox::setCanHaveLeadingExpansion): Deleted.
        (WebCore::InlineBox::setCanHaveTrailingExpansion): Deleted.
        (WebCore::InlineBox::setForceTrailingExpansion): Deleted.
        (WebCore::InlineBox::setForceLeadingExpansion): Deleted.
        (WebCore::InlineBox::canHaveLeadingExpansion const): Deleted.
        (WebCore::InlineBox::canHaveTrailingExpansion const): Deleted.
        (WebCore::InlineBox::forceTrailingExpansion const): Deleted.
        (WebCore::InlineBox::forceLeadingExpansion const): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::expansionBehavior const):
        * rendering/InlineTextBox.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::getAverageCharWidth):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::expansionBehavior):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::initializeInlineTextBox):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun const):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):

2020-08-06  Chris Dumez  <cdumez@apple.com>

        DynamicsCompressorNode.reduction attribute should be a float, not an AudioParam
        https://bugs.webkit.org/show_bug.cgi?id=215195

        Reviewed by Youenn Fablet.

        DynamicsCompressorNode.reduction attribute should be a float, not an AudioParam:
        - https://webaudio.github.io/web-audio-api/#dynamicscompressornode

        Backward-compatibility is maintained for the prefixed WebAudio API.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::process):
        * Modules/webaudio/DynamicsCompressorNode.h:
        (WebCore::DynamicsCompressorNode::reduction const):
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::setReduction):
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createWebKitDynamicsCompressor):
        * Modules/webaudio/WebKitAudioContext.h:
        * Modules/webaudio/WebKitAudioContext.idl:
        * Modules/webaudio/WebKitDynamicsCompressorNode.h: Copied from Source/WebCore/Modules/webaudio/DynamicsCompressorNode.idl.
        * Modules/webaudio/WebKitDynamicsCompressorNode.idl: Copied from Source/WebCore/Modules/webaudio/DynamicsCompressorNode.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-06  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r265328.

        Broke 17 MediaRecorder tests.

        Reverted changeset:

        "Add support for MediaRecorder bitrate options"
        https://bugs.webkit.org/show_bug.cgi?id=214973
        https://trac.webkit.org/changeset/265328

2020-08-06  Chris Dumez  <cdumez@apple.com>

        MediaElementAudioSourceNode interface should have a constructor
        https://bugs.webkit.org/show_bug.cgi?id=215200

        Reviewed by Youenn Fablet.

        MediaElementAudioSourceNode interface should have a constructor:
        - https://webaudio.github.io/web-audio-api/#mediaelementaudiosourcenode

        Test: webaudio/mediaelementaudiosourcenode-constructor.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaElementSource):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::create):
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaElementAudioSourceOptions.h: Copied from Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.idl.
        * Modules/webaudio/MediaElementAudioSourceOptions.idl: Copied from Source/WebCore/Modules/webaudio/MediaElementAudioSourceNode.idl.
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createMediaElementSource):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-06  Youenn Fablet  <youenn@apple.com>

        Add support for MediaRecorder bitrate options
        https://bugs.webkit.org/show_bug.cgi?id=214973

        Reviewed by Eric Carlson.

        Pipe options to MediaRecorderPrivate constructor.
        For the actual implementation, pass it down to VideoSampleBufferCompressor and AudioSampleBufferCompressor.
        For AudioSampleBufferCompressor, we do not handle well some bit rates, so for now, we limit to specific values.

        Tests: http/wpt/mediarecorder/MediaRecorder-audio-bitrate.html
               http/wpt/mediarecorder/MediaRecorder-video-bitrate.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::createMediaRecorderPrivate):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorderProvider.cpp:
        (WebCore::MediaRecorderProvider::createMediaRecorderPrivate):
        * Modules/mediarecorder/MediaRecorderProvider.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::setBitsPerSecond):
        (WebCore::AudioSampleBufferCompressor::outputBitRate const):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        Do not exit when not able to set bitrate as we still want to set m_maxOutputPacketSize.
        In case of error in setting up the converter, clean it up so that we do not use a partially set up converter.
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::setOptions):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::setBitsPerSecond):
        (WebCore::setCompressionSessionProperty):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        * testing/Internals.cpp:
        (WebCore::createRecorderMockSource):

2020-08-06  Simon Fraser  <simon.fraser@apple.com>

        Scrolling tree nodes sometimes don't match layer z-order
        https://bugs.webkit.org/show_bug.cgi?id=215210

        Reviewed by Antti Koivisto.

        When adding nodes to the scrolling state tree during compositing layer traversal,
        we would sometimes add then in the wrong order. For example, if the composited layer
        tree was:
        
        + Root
          + Stacking context
            Fixed layer 1
          Fixed layer 2
          
        we would build a scrolling tree like:
        
        + Root scrolling node
          Node for layer 2
          Node for layer 1

        This happened because RenderLayerCompositor::updateBackingAndHierarchy() failed to propagate up
        scrollingTreeState.nextChildIndex.
        
        This is generally benign, but inserting node 1 followed by node 2 would be seen as a scrolling tree
        mutation, causing us to re-commit the scrolling tree when it hadn't really changed, triggering
        extra CPU usage.
        
        Part of <rdar://problem/62737868>: higher CPU usage on instagram.com.

        Test: scrollingcoordinator/scrolling-tree/sibling-node-order.html

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

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

        Remove the StyleResolver-specific evaluate function in MediaQueryEvaluator
        https://bugs.webkit.org/show_bug.cgi?id=152089

        Reviewed by Darin Adler.

        The function mentioned in the bug is already gone (see r252736), also remove
        the StyleResolver reference.

        * css/MediaQueryEvaluator.h:

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

        Add some more Animations logging
        https://bugs.webkit.org/show_bug.cgi?id=215181

        Reviewed by Zalan Bujtas.

        Add logging that shows when DeclarativeAnimation::tick() runs and when it invalidates style.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::tick):
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::invalidate):

2020-08-05  Peng Liu  <peng.liu6@apple.com>

        Netflix.com shows a scrubber that doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=215199

        Reviewed by Eric Carlson.

        The "contentDuration" property of WebPlaybackControlsManager needs to be infinite
        when the video is not seekable. Otherwise, AVKit will show a scrubber that doesn't
        work on the Touch Bar.

        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager contentDuration]):
        (-[WebPlaybackControlsManager setContentDuration:]):

2020-08-05  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Upgrade vertexAttribPointer with new supported types
        https://bugs.webkit.org/show_bug.cgi?id=215036

        Reviewed by Dean Jackson.

        Tested by updated WebGL conformance tests webgl/2.0.0/conformance/attribs/gl-vertexattribpointer-offsets.html and webgl/2.0.0/conformance/attribs/gl-vertexattribpointer.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::sizeInBytes):
        (WebCore::WebGLRenderingContextBase::vertexAttribPointer):

2020-08-05  Tim Horton  <timothy_horton@apple.com>

        Remove all references to non-existent 10.16
        https://bugs.webkit.org/show_bug.cgi?id=215202

        Reviewed by Wenson Hsieh.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-08-05  Andres Gonzalez  <andresg_22@apple.com>

        Crash in com.apple.WebKit.WebContent at com.apple.AppKit: _NSAccessibilityRemoveAllObserversAndSendDestroyedNotification
        https://bugs.webkit.org/show_bug.cgi?id=215189
        <rdar://problem/66561167>

        Reviewed by Chris Fleizach.

        AXIsolatedObject::detachPlatformWrapper was calling the wrapper's detach
        method that in turn calls the system NSAccessibilityUnregisterUniqueIdForUIElement
        on the secondary thread. This function is not thread safe and hence the
        random crashes.
        This changes AXIsolatedObject::detachPlatformWrapper to call the
        wrapper's detachIsolatedObject, avoiding the above problem altogether.
        The wrapper's detach remains the same that it was before isolated tree
        mode was introduced, and should only run on the main thread.

        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
        (WebCore::AXIsolatedObject::detachPlatformWrapper):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase detachIsolatedObject:]):
        (-[WebAccessibilityObjectWrapperBase detachAXObject]): Merged back into detach.
        (-[WebAccessibilityObjectWrapperBase detachIsolatedObject]): Deleted.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper unregisterUniqueIdForUIElement]):

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

        Add constructor for DynamicsCompressorNode
        https://bugs.webkit.org/show_bug.cgi?id=215180

        Reviewed by Geoffrey Garen.

        Add constructor for DynamicsCompressorNode:
        - https://webaudio.github.io/web-audio-api/#dynamicscompressornode

        This patch also add a new handleAudioNodeOptions() member function to
        AudioNode to avoid code duplication and every node constructor.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::create):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::initializeDefaultNodeOptions):
        (WebCore::AudioNode::handleAudioNodeOptions):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createDynamicsCompressor):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::create):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::create):
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::create):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::create):
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::setChannelCount):
        (WebCore::DynamicsCompressorNode::setChannelCountMode):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/DynamicsCompressorOptions.h: Copied from Source/WebCore/Modules/webaudio/DynamicsCompressorNode.idl.
        * Modules/webaudio/DynamicsCompressorOptions.idl: Copied from Source/WebCore/Modules/webaudio/DynamicsCompressorNode.idl.
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::create):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::create):
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::create):
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        Add constructor to ConvolverNode
        https://bugs.webkit.org/show_bug.cgi?id=215169

        Reviewed by Eric Carlson.

        Add constructor to ConvolverNode, as per specification:
        - https://webaudio.github.io/web-audio-api/#ConvolverNode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createConvolver):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::create):
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::setBuffer):
        (WebCore::ConvolverNode::setChannelCount):
        (WebCore::ConvolverNode::setChannelCountMode):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/ConvolverOptions.h: Copied from Source/WebCore/Modules/webaudio/ConvolverNode.idl.
        * Modules/webaudio/ConvolverOptions.idl: Copied from Source/WebCore/Modules/webaudio/ConvolverNode.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        REGRESSION (r265266) DumpRenderTree crash at WebKitAudioListener::dopplerFactor
        https://bugs.webkit.org/show_bug.cgi?id=215171
        <rdar://problem/66556999>

        Reviewed by Eric Carlson.

        We were calling the isWebKitAudioContext() virtual function from the BaseAudioContext
        constructor, which was not OK. We now initialize the listener lazily so that we can
        know if we are a WebKitAudioContext or not at the time of creation.

        Also use downcast<> instead of static_cast<> to cast from AudioListener to
        WebKitAudioListener for extra safety. Finally, AudioListener was missing a virtual
        destructor even though we were using polymorphism.

        No new tests, covered by existing tests that are crashing on the bots.

        * Modules/webaudio/AudioListener.h:
        (WebCore::AudioListener::isWebKitAudioListener const):
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::constructCommon):
        (WebCore::WebCore::BaseAudioContext::listener):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::listener): Deleted.
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::listener):
        (WebCore::PannerNode::getAzimuthElevation):
        (WebCore::PannerNode::distanceConeGain):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WebKitAudioContext.h:
        (WebCore::WebKitAudioContext::listener):
        * Modules/webaudio/WebKitAudioListener.h:
        (isType):
        * Modules/webaudio/WebKitAudioListener.idl:
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::listener):
        (WebCore::WebKitAudioPannerNode::getAzimuthElevation):
        (WebCore::WebKitAudioPannerNode::dopplerRate):
        (WebCore::WebKitAudioPannerNode::distanceConeGain):
        * Modules/webaudio/WebKitAudioPannerNode.h:

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

        Align BiquadFilterNode.getFrequencyResponse() with the specification
        https://bugs.webkit.org/show_bug.cgi?id=215148

        Reviewed by Eric Carlson.

        Align BiquadFilterNode.getFrequencyResponse() with the specification:
        - https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-getfrequencyresponse

        In particular, the 3 argument arrays should not be nullable and we should throw
        if they have different lengths.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::getFrequencyResponse):
        * Modules/webaudio/BiquadFilterNode.h:
        * Modules/webaudio/BiquadFilterNode.idl:

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

        Add constructor to BiquadFilterNode
        https://bugs.webkit.org/show_bug.cgi?id=215144

        Reviewed by Eric Carlson.

        Add constructor to BiquadFilterNode:
        - https://webaudio.github.io/web-audio-api/#biquadfilternode

        No new tests, rebaselined existing tests..

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createBiquadFilter):
        * Modules/webaudio/BiquadDSPKernel.cpp:
        (WebCore::BiquadDSPKernel::updateCoefficientsIfNecessary):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::create):
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadFilterNode.h:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/BiquadFilterOptions.h: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.idl.
        * Modules/webaudio/BiquadFilterOptions.idl: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.idl.
        * Modules/webaudio/BiquadFilterType.h: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.idl.
        * Modules/webaudio/BiquadFilterType.idl: Copied from Source/WebCore/Modules/webaudio/BiquadFilterNode.idl.
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        * Modules/webaudio/BiquadProcessor.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-04  Simon Fraser  <simon.fraser@apple.com>

        Update event regions only once per frame
        https://bugs.webkit.org/show_bug.cgi?id=215132
        <rdar://problem/66533779>

        Reviewed by Darin Adler.

        Event regions (for touch-action, editable areas etc) were updated as part of
        compositing updates, but we only need their output once per rendering update, so
        move their computation out of RenderLayerCompositor::updateBackingAndHierarchy() 
        and into a new RenderLayer tree walk that is called from Page::doAfterUpdateRendering().

        RenderLayerBacking stores a dirty bit to track when regions need to be updated.

        Reduces the amount of time spent in rendering updates when scrolling on facebook.com
        on iPad, which has lots of discontiguous touch-action regions.

        * dom/Document.cpp:
        (WebCore::Document::updateEventRegions):
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText const):
        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::maintainsEventRegion const):
        (WebCore::RenderLayerBacking::updateEventRegion):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateEventRegions):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        * rendering/RenderLayerCompositor.h:

2020-08-05  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed non-unified build fix.

        No new tests needed.

        * Modules/webaudio/AudioListener.h: Add forward declaration for BaseAudioSharedUnit.

2020-08-05  Sihui Liu  <sihui_liu@appe.com>

        TextManipulationController should observe newly inserted or displayed text
        https://bugs.webkit.org/show_bug.cgi?id=215157

        Reviewed by Wenson Hsieh.

        TextManipulationController already tracks renderer state of Element, but the case where Text children of an 
        Element is newly inserted and displayed is not covered. Therefore, TextManipulationController also needs to
        know when render of Text is created.

        API test: TextManipulation.CompleteTextManipulationForNewlyDisplayedText

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::didCreateRendererForTextNode):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::removeNode):
        * editing/TextManipulationController.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createTextRenderer):

2020-08-05  Youenn Fablet  <youenn@apple.com>

        RegistrationDatabase::openSQLiteDatabase can spin
        https://bugs.webkit.org/show_bug.cgi?id=215120
        <rdar://problem/64850347>

        Reviewed by Geoffrey Garen.

        In case we fail opening the database when importing, we delete the database, the file and retry.
        We do not need to retry in that case since there is nothing to import. Update the code to proceed with sending an import failure to SWServer.

        In case of pushing changes to the database, it might be useful to retry but it is best to do this asynchronously.
        For instance, there might be a script deleting the files/folders where is stored the database.
        In that case, we check the result of pushing changes.
        If they succeed, we call the completion handler and stop.
        Otherwise, we will retry pushing the changes if changes were not pushed again in the meantime.
        We introduce a push counter for that purpose.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::postTaskToWorkQueue):
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::importRecordsIfNecessary):
        (WebCore::RegistrationDatabase::pushChanges):
        (WebCore::RegistrationDatabase::schedulePushChanges):
        (WebCore::RegistrationDatabase::doPushChanges):
        * workers/service/server/RegistrationDatabase.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registrationStoreDatabaseFailedToOpen):

2020-08-05  Youenn Fablet  <youenn@apple.com>

        SWServerJobQueue::didResolveRegistrationPromise should not assume its registration key relates to an existing worker
        https://bugs.webkit.org/show_bug.cgi?id=215123
        <rdar://problem/65096786>

        Reviewed by Geoffrey Garen.

        We know that in some cases, the registration is null in SWServerJobQueue::didResolveRegistrationPromise.
        This might happen for instance in case a worker gets terminated, thus removing a job and the next job is clearing the registration.
        Also, SWServerJobQueue::didResolveRegistrationPromise is not checking that the job identifier is the same in SWServerJobQueue::install
        and SWServerJobQueue::didResolveRegistrationPromise while other code paths do.

        A future refactoring might allow to call SWServerJobQueue::didResolveRegistrationPromise code synchronously from SWServerJobQueue::install.
        In the meantime, let's add a null check and add release logging for that case.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::install):
        (WebCore::SWServerJobQueue::didResolveRegistrationPromise):

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

        Allow multiple calls to PerformanceObserver.observe with different types
        https://bugs.webkit.org/show_bug.cgi?id=214884

        Reviewed by Darin Adler.

        Allow multiple calls to PerformanceObserver.observe with different type, but
        throw an exception if the observer type is changed [1].

        Behavior matches Firefox and Chrome.

        Test: imported/web-platform-tests/performance-timeline/po-observe-type.any.html

        [1] https://w3c.github.io/performance-timeline/#observe-method

        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/PerformanceObserver.h:

2020-08-05  Youenn Fablet  <youenn@apple.com>

        Update AudioSampleDataSource offset computation
        https://bugs.webkit.org/show_bug.cgi?id=215127
        <rdar://problem/65938265>

        Reviewed by Eric Carlson.

        As per logs, it sometimes happens that the offset is so big that the timestamp is below the start of the window.
        In that case, our logic is not able to catch up and reduce the offset.
        To handle this, we special case if the timestamp is below the start frame and do as if we were starting from scratch.
        Otherwise, we continue our logic to fine tune the offset by slowly making it bigger to not hit the end of the window but still be close to it.
        Updated logging to help further debugging this issue if needed.

        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pushSamplesInternal):
        (WebCore::computeOffsetDelay):
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):

2020-08-05  Eric Liang  <ericliang@apple.com>

        AX: WebCore should provide a way to get raw role for accessibility objects
        https://bugs.webkit.org/show_bug.cgi?id=215149

        Reviewed by Chris Fleizach.

        Added a conversion from WebRole to string for accessibility.
        This allows us to get it in the WebKit bundle.

        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::accessibilityRoleToString):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementCount]):
        (-[WebAccessibilityObjectWrapper _accessibilityWebRoleAsString]):
        (-[WebAccessibilityObjectWrapper accessibilityTraits]):

2020-08-04  Devin Rousso  <drousso@apple.com>

        "DoubleDown Casino" respin button stops working with trackpad
        https://bugs.webkit.org/show_bug.cgi?id=215146
        <rdar://problem/64668138>

        Reviewed by Tim Horton.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isDoubleDown): Added.

2020-08-04  Chris Dumez  <cdumez@apple.com>

        Align AudioListener with the W3C specification
        https://bugs.webkit.org/show_bug.cgi?id=215134

        Reviewed by Geoffrey Garen.

        Align AudioListener with the W3C specification:
        - https://webaudio.github.io/web-audio-api/#audiolistener

        Note that the prefixed API still behaves the way it used to. I have maintained
        the old version of the AudioListener API by moving it to a new
        WebKitAudioListener interface.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioListener.cpp:
        (WebCore::AudioListener::AudioListener):
        (WebCore::AudioListener::setPosition):
        (WebCore::AudioListener::position const):
        (WebCore::AudioListener::setOrientation):
        (WebCore::AudioListener::orientation const):
        (WebCore::AudioListener::upVector const):
        * Modules/webaudio/AudioListener.h:
        (WebCore::AudioListener::create):
        (WebCore::AudioListener::positionX):
        (WebCore::AudioListener::positionY):
        (WebCore::AudioListener::positionZ):
        (WebCore::AudioListener::forwardX):
        (WebCore::AudioListener::forwardY):
        (WebCore::AudioListener::forwardZ):
        (WebCore::AudioListener::upX):
        (WebCore::AudioListener::upY):
        (WebCore::AudioListener::upZ):
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::constructCommon):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::dopplerRate):
        * Modules/webaudio/WebKitAudioContext.h:
        (WebCore::WebKitAudioContext::listener):
        * Modules/webaudio/WebKitAudioContext.idl:
        * Modules/webaudio/WebKitAudioListener.h: Copied from Source/WebCore/Modules/webaudio/AudioListener.h.
        * Modules/webaudio/WebKitAudioListener.idl: Copied from Source/WebCore/Modules/webaudio/AudioListener.idl.
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::listener):
        * Modules/webaudio/WebKitAudioPannerNode.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2020-08-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Add glyph origins member to GlyphBuffer
        https://bugs.webkit.org/show_bug.cgi?id=215057

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        The solution for https://bugs.webkit.org/show_bug.cgi?id=214769 requires applying
        letter-spacing after text shaping. Today, we apply letter-spacing before text
        shaping, which is wrong. However, if we want to apply letter-spacing after text
        shaping, we need to use CTFontShapeGlyphs(), which outputs glyph origins in
        addition to glyph advances. Adding a glyph origins field to GlyphBuffer allows us
        to flatten these origins at the appropriate places.

        This patch is meant to be applied on top of
        https://bugs.webkit.org/show_bug.cgi?id=215051, which decreases the inline sizes
        of these vector members from 2048 to 1024. I measured the median and mean of these
        strings in our Page Load Test to be 6 and 7.4, which indicates we were being wildly
        inefficient with the members of GlyphBuffer. Decreasing these inline sizes means
        we're now using less memory than we were before.

        No new tests becasue there is no behavior change yet. This patch just adds the
        field. The next patch will hook up CTFontShapeGlyphs() itself.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText const):
        (WebCore::FontCascade::drawEmphasisMarks const):
        (WebCore::FontCascade::displayListForTextRun const):
        (WebCore::FontCascade::drawGlyphBuffer const):
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBufferAdvance::GlyphBufferAdvance):
        (WebCore::GlyphBufferOrigin::GlyphBufferOrigin):
        (WebCore::GlyphBufferOrigin::operator FloatPoint):
        (WebCore::GlyphBufferOrigin::setX):
        (WebCore::GlyphBufferOrigin::setY):
        (WebCore::GlyphBufferOrigin::x const):
        (WebCore::GlyphBufferOrigin::y const):
        (WebCore::GlyphBufferOrigin::encode const):
        (WebCore::GlyphBufferOrigin::decode):
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::origins):
        (WebCore::GlyphBuffer::origins const):
        (WebCore::GlyphBuffer::add):
        (WebCore::GlyphBuffer::remove):
        (WebCore::GlyphBuffer::makeHole):
        (WebCore::GlyphBuffer::shrink):
        (WebCore::GlyphBuffer::flatten):
        (WebCore::GlyphBuffer::isFlattened const):
        (WebCore::GlyphBuffer::swap):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawGlyphs):
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::generateGlyphBuffer const):

2020-08-04  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver needs access to font styling at insertion point
        https://bugs.webkit.org/show_bug.cgi?id=215129
        <rdar://problem/65114972>

        Reviewed by Darin Adler.

        Give access to relevant font styling properties at the insertion point so that VoiceOver can speak them
        when text commands alter styling.

        Test: accessibility/mac/resolved-text-editing.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::resolvedEditingStyles const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityResolvedEditingStyles]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::resolvedEditingStyles const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilityResolvedEditingStyles]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper ALLOW_DEPRECATED_IMPLEMENTATIONS_END]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2020-08-04  Peng Liu  <peng.liu6@apple.com>

        REGRESSION (r265019): ASSERTION FAILED: !m_impl || m_impl->wasConstructedOnMainThread() == isMainThread() under WebCore::PlaybackSessionInterfaceAVKit::invalidate()
        https://bugs.webkit.org/show_bug.cgi?id=215118

        Reviewed by Jer Noble.

        Revert the change about using a WeakPtr of PlaybackSessionModel in r265019.
        On WK1, a VideoFullscreenControllerContext (a subclass of PlaybackSessionModel)
        object is created on the main thread, so we cannot use a WeakPtr of it on
        the UI thread.

        No new tests, fix an API test failure: WebKitLegacy.AudioSessionCategoryIOS.

        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):

2020-08-04  Chris Dumez  <cdumez@apple.com>

        Align AudioBufferSourceNode's start() / stop() with the specification
        https://bugs.webkit.org/show_bug.cgi?id=215130

        Reviewed by Darin Adler.

        Align AudioBufferSourceNode's start() / stop() with the specification:
        - https://www.w3.org/TR/webaudio/#dom-audiobuffersourcenode-start
        - https://www.w3.org/TR/webaudio/#dom-audioscheduledsourcenode-stop

        In particular, we should throw a RangeError when the parameters are invalid,
        not an InvalidStateError. Also, we should not return early if there is no
        buffer.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::startPlaying):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::startLater):
        (WebCore::AudioScheduledSourceNode::stopLater):

2020-08-04  Andres Gonzalez  <andresg_22@apple.com>

        Add the ability of comparing the accessibility tree with isolated tree mode on and off.
        https://bugs.webkit.org/show_bug.cgi?id=215000

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/isolated-tree-mode-on-off.html

        Added [WebAccessibilityObjectWrapper isIsolatedObject] for testing
        purposes, so that layout tests can determine whether an object is
        isolated or not. It should not be used by real clients since there
        should be no difference in behavior of a WebAccessibilityObjectWrapper
        from a client point of view, regardless the underlying object being
        isolated or not.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase isIsolatedObject]):

2020-08-04  Chris Dumez  <cdumez@apple.com>

        Move non standard AudioBufferSourceNode API to new WebKitAudioBufferSourceNode interface
        https://bugs.webkit.org/show_bug.cgi?id=215106

        Reviewed by Eric Carlson.

        Move non standard AudioBufferSourceNode API to new WebKitAudioBufferSourceNode interface
        to maintain backward compatibility while having an unprefixed API that matches the
        specification:
        - https://www.w3.org/TR/webaudio/#AudioBufferSourceNode

        In particular the 'playbackState' and 'gain' attributes should not part of the standard.

        Test: webaudio/audiobuffersourcenode-legacy-api.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::reset):
        * Modules/webaudio/AudioBufferSourceNode.h:
        (WebCore::AudioBufferSourceNode::legacyGainValue const):
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/WebKitAudioBufferSourceNode.h: Copied from Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl.
        * Modules/webaudio/WebKitAudioBufferSourceNode.idl: Copied from Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl.
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createWebKitBufferSource):
        * Modules/webaudio/WebKitAudioContext.h:
        * Modules/webaudio/WebKitAudioContext.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2020-08-04  Youenn Fablet  <youenn@apple.com>

        Remove AudioSampleDataSource::setPaused
        https://bugs.webkit.org/show_bug.cgi?id=215125

        Reviewed by Geoffrey Garen.

        m_paused is unused except for setting m_transitioningFromPaused.
        setPaused is only used in AudioMediaStreamTrackRenderCocoa at creation of the source.
        We can remove the call for setPaused(true) and remove setPaused/m_paused.

        * platform/audio/mac/AudioSampleDataSource.h:
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::setPaused): Deleted.
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):

2020-08-04  Rob Buis  <rbuis@igalia.com>

        Performance.getEntriesByName/Type should match case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=214960

        Reviewed by Youenn Fablet.

        Performance.getEntriesByName/Type should match case sensitive [1].

        Behavior matches Firefox and Chrome.

        Tests: imported/w3c/web-platform-tests/performance-timeline/case-sensitivity.any.html
               imported/w3c/web-platform-tests/performance-timeline/case-sensitivity.any.worker.html

        [1] https://w3c.github.io/performance-timeline/#getentriesbytype-method

        * page/Performance.cpp:
        (WebCore::Performance::getEntriesByType const):
        (WebCore::Performance::getEntriesByName const):

2020-08-03  Simon Fraser  <simon.fraser@apple.com>

        m_isEditableRegionEnabled should be reset in didCommitLoad, not didFinishLoad
        https://bugs.webkit.org/show_bug.cgi?id=215115

        Reviewed by Wenson Hsieh.

        Resetting m_isEditableRegionEnabled in didFinishLoad() is too late because
        inline script at the end of the <body> (e.g. in a layout test) will have already
        run before the reset.
        
        Fix by adding Page::didCommitLoad() and resetting m_isEditableRegionEnabled there.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * page/Page.cpp:
        (WebCore::Page::didCommitLoad):
        (WebCore::Page::didFinishLoad):
        * page/Page.h:

2020-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Unconditionally record string offsets in the fast text codepath
        https://bugs.webkit.org/show_bug.cgi?id=215051

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        The solution for https://bugs.webkit.org/show_bug.cgi?id=214769 requires applying
        letter-spacing after text shaping. Today, we apply letter-spacing before text
        shaping, which is wrong. However, if we want to apply letter-spacing after text
        shaping, we will need a way of mapping back which shaped glyphs correspond to
        which characters in the string, so we can apply letter-spacing to the correct
        glyphs. Therefore, we need to record string offsets any time letter-spacing can
        be applied (which is all the time - letter spacing can be applied on any element).

        This also helps on the path toward https://bugs.webkit.org/show_bug.cgi?id=214769.
        When we move off the complex text codepath, we will need these string offsets
        to calculate things like what the text range of a selection is when the user has
        selected some glyphs on the page.

        There is no performance change because these string offsets were already being
        calculated; the difference is just that we're storing them now. Also, we were
        being wildly inefficient with the members of GlyphBuffer, giving them inline
        sizes of 2048. I measured the median and mean of these strings in our Page Load
        Test to be 6 and 7.4. So, I cut down the inline sizes down to 1024, so now we're
        using less memory than we were before.

        No new tests because there is no behavior change. The additional string offsets
        are unused (for now). A subsequent patch will start using them.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::layoutText const):
        (WebCore::FontCascade::drawEmphasisMarks const):
        (WebCore::computeUnderlineType):
        (WebCore::FontCascade::layoutSimpleText const):
        (WebCore::FontCascade::layoutComplexText const):
        (WebCore::FontCascade::dashesForIntersectionsWithRect const):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::fonts):
        (WebCore::GlyphBuffer::offsetsInString):
        (WebCore::GlyphBuffer::fonts const):
        (WebCore::GlyphBuffer::offsetsInString const):
        (WebCore::GlyphBuffer::glyphAt const):
        (WebCore::GlyphBuffer::advanceAt const):
        (WebCore::GlyphBuffer::stringOffsetAt const):
        (WebCore::GlyphBuffer::add):
        (WebCore::GlyphBuffer::remove):
        (WebCore::GlyphBuffer::makeHole):
        (WebCore::GlyphBuffer::expandLastAdvance):
        (WebCore::GlyphBuffer::shrink):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::saveOffsetsInString): Deleted.
        (WebCore::GlyphBuffer::offsetInString const): Deleted.

2020-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename WidthIterator::m_currentCharacter to WidthIterator::m_currentCharacterIndex
        https://bugs.webkit.org/show_bug.cgi?id=215056

        Reviewed by Darin Adler.

        It represents an index, not a character.

        No new tests because there is no behavior change.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::offsetForPositionForSimpleText const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::currentCharacterIndex const):
        (WebCore::WidthIterator::currentCharacter const): Deleted.

2020-08-03  Youenn Fablet  <youenn@apple.com>

        Move user gesture propagation over promise behind a feature flag
        https://bugs.webkit.org/show_bug.cgi?id=215014

        Reviewed by Eric Carlson.

        If runtime flag is false, disable user gesture propagation to the next micro task.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueMicrotaskToEventLoop):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::userGesturePromisePropagationEnabled const):
        (WebCore::RuntimeEnabledFeatures::setUserGesturePromisePropagationEnabled):

2020-08-03  Chris Dumez  <cdumez@apple.com>

        Add constructor for AudioBufferSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=215096

        Reviewed by Darin Adler.

        Add constructor for AudioBufferSourceNode as per:
        - https://www.w3.org/TR/webaudio/#DelayNode

        This patch also adds support for the detune attribute on AudioBufferSourceNode,
        which gets initialized by the constructor.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::create):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::reset):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioBufferSourceOptions.h: Copied from Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl.
        * Modules/webaudio/AudioBufferSourceOptions.idl: Copied from Source/WebCore/Modules/webaudio/AudioBufferSourceNode.idl.
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createBufferSource):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-03  Simon Fraser  <simon.fraser@apple.com>

        Add an EventRegions log channel
        https://bugs.webkit.org/show_bug.cgi?id=215092

        Reviewed by Daniel Bates.

        Add a log channel for EventRegions, add logging in some interesting places.

        * platform/Logging.h:
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::uniteTouchActions):
        (WebCore::EventRegion::uniteEventListeners):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):

2020-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Make FontCascade.drawText() return a FloatSize instead of a float
        https://bugs.webkit.org/show_bug.cgi?id=215055

        Reviewed by Darin Adler.

        Advances are philosophically two-dimensional data structures.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        No new tests because there shouldn't be any behavior change. But in the weird
        rare case where there might be, we should be defensive and handle it correctly.
        I've never seen one of these cases, though.

        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::drawElementTitle):
        * page/DebugPageOverlays.cpp:
        (WebCore::drawRightAlignedText):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText const):
        * platform/graphics/FontCascade.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/GraphicsContext.h:

2020-08-03  Tim Horton  <timothy_horton@apple.com>

        Occasional crashes when running nested runloops while using UIWebView
        https://bugs.webkit.org/show_bug.cgi?id=213067
        <rdar://problem/64239727>

        Reviewed by Darin Adler.

        New test: WebKitLegacy.NestedRunLoopUnderRunLoopObserverDoubleUnlock

        * platform/ios/wak/WebCoreThread.mm:
        (MainRunLoopAutoUnlock):
        (_WebThreadAutoLock):
        Under certain circumstances, a CFRunLoopObserver that is already removed
        can fire again (e.g. when removed in a nested runloop, it can be fired again
        in the main runloop).

        The WebThread code assumes that the auto-unlock observer is called exactly
        once after being installed. If this is not the case, the main thread lock
        count can underflow, wreaking havoc the next time we try to lock.
        Instead of depending on CFRunLoop to do this for us, make it explicit
        with a global boolean.

        This leaves in place the somewhat-odd behavior that running a nested
        runloop can cause the main runloop's WebThread lock to be dropped, because
        a great deal of code (and tests) depend on this behavior (keeping the lock
        held until the outer runloop spins would result in deadlock if the inner
        runloop's loop condition depends on the WebThread being able to execute code).
        However, this is not unique to this underflow case, and appears to be
        extremely long-standing behavior, so maintaining it seems the best course of action.

2020-08-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove the ENABLE_DATA_INTERACTION feature flag
        https://bugs.webkit.org/show_bug.cgi?id=215091

        Reviewed by Megan Gardner.

        `ENABLE(DATA_INTERACTION)` is an alias for `PLATFORM(IOS_FAMILY) && ENABLE(DRAG_SUPPORT)`. It was used early on
        when bringing drag and drop support to iPad in order to hide the feature from open source WebKit code, and has
        not been necessary for several years.

        * page/DragController.cpp:
        (WebCore::DragController::shouldUseCachedImageForDragImage const):
        * page/DragController.h:
        (WebCore::DragController::canLoadDataFromDraggingPasteboard const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragCancelled):
        (WebCore::EventHandler::didStartDrag):
        * page/FocusController.cpp:
        (WebCore::shouldClearSelectionWhenChangingFocusedElement):
        * page/mac/DragControllerMac.mm:
        * platform/DragImage.cpp:
        * platform/ios/WebItemProviderPasteboard.mm:

2020-08-03  Chris Dumez  <cdumez@apple.com>

        Add constructor for GainNode
        https://bugs.webkit.org/show_bug.cgi?id=215093

        Reviewed by Eric Carlson.

        Add constructor for GainNode as per:
        - https://www.w3.org/TR/webaudio/#gainnode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createGain):
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::create):
        (WebCore::GainNode::GainNode):
        (WebCore::GainNode::process):
        (WebCore::GainNode::reset):
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/GainOptions.h: Copied from Source/WebCore/Modules/webaudio/GainNode.idl.
        * Modules/webaudio/GainOptions.idl: Copied from Source/WebCore/Modules/webaudio/GainNode.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-03  Chris Dumez  <cdumez@apple.com>

        Add constructor to DelayNode
        https://bugs.webkit.org/show_bug.cgi?id=215083

        Reviewed by Eric Carlson.

        Add constructor to DelayNode:
        - https://www.w3.org/TR/webaudio/#DelayNode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createDelay):
        * Modules/webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::process):
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        (WebCore::DelayNode::create):
        (WebCore::DelayNode::delayTime):
        * Modules/webaudio/DelayNode.h:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DelayOptions.h: Copied from Source/WebCore/Modules/webaudio/DelayNode.idl.
        * Modules/webaudio/DelayOptions.idl: Copied from Source/WebCore/Modules/webaudio/DelayNode.idl.
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::DelayProcessor):
        * Modules/webaudio/DelayProcessor.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Make WidthIterator::advance() return void
        https://bugs.webkit.org/show_bug.cgi?id=215053

        Reviewed by Darin Adler.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769
        and https://bugs.webkit.org/show_bug.cgi?id=206208.

        This is a small simplification in the fast text codepath. It used to return
        how many characters were consumed. However, this information is already
        exposed by just calling currentCharacter() on the width iterator before and
        after calling advance().

        No new tests because there is no behavior change.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawText const):
        (WebCore::FontCascade::displayListForTextRun const):
        (WebCore::FontCascade::layoutSimpleText const):
        (WebCore::FontCascade::adjustSelectionRectForSimpleText const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advance):
        * platform/graphics/WidthIterator.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::advanceSimpleText):

2020-08-03  Youenn Fablet  <youenn@apple.com>

        MediaRecorderPrivateWriter should ensure its writer input is ready for more data before appending new samples
        https://bugs.webkit.org/show_bug.cgi?id=215081

        Reviewed by Eric Carlson.

        After r265192, we were checking whether the writer input was ready.
        If so, we were pushing pending samples and then the new sample.
        The issue is that pushing pending samples might make the writer input no longer ready.
        Update the code to enqueue the sample if its writer input is not ready.
        Add an ASSERT in appendCompressedVideoSampleBuffer to make sure this is the case.

        Also make sure that we only enqueue the end of segment sample if video writer input is ready.

        Make sure flushCompressedSampleBuffers is called directly by stopRecording only if not already flushing samples.
        If we are not flushing, we proceed with the stop steps.
        If not, we wait for the end of flushCompressedSampleBuffers to proceed with the stop steps.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::appendCompressedAudioSampleBufferIfPossible):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBufferIfPossible):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        (WebCore::MediaRecorderPrivateWriter::finishedFlushingSamples):
        (WebCore::MediaRecorderPrivateWriter::doStopRecording):

2020-08-03  Clark Wang  <clark_wang@apple.com>

        Added AudioBuffer Constructor
        https://bugs.webkit.org/show_bug.cgi?id=214990

        Reviewed by Chris Dumez.

        Added AudioBuffer constructor according to spec: https://www.w3.org/TR/webaudio/#AudioBuffer-constructors.
        Added in AudioBufferOptions files. Updated BaseAudioContext::createBuffer to use new constructor.

        Re-baselined existing tests. Some fail now due to unsupported sampleRate.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::create):
        (WebCore::AudioBuffer::AudioBuffer):
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferOptions.h: Added.
        * Modules/webaudio/AudioBufferOptions.idl: Added.
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createBuffer):
        * Modules/webaudio/BaseAudioContext.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-03  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] webgl/2.0.0/conformance[2]/textures/image_bitmap* failures
        https://bugs.webkit.org/show_bug.cgi?id=211484

        Reviewed by Dean Jackson.

        Implement ImageBitmapOptions' ImageOrientation and
        PremultiplyAlpha settings.

        ImageOrientation="flipY" is supported directly while constructing
        ImageBitmap's representation, ImageBuffer.

        PremultiplyAlpha="premultiply" can not be supported via
        ImageBuffer's graphics operations, so this attribute is stored on
        ImageBitmap, serialized and deserialized when ImageBitmap is
        transferred, and handled in the WebGL implementation.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImageBitmap):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readImageBitmap):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create):
        (WebCore::ImageBitmap::detachBitmaps):
        (WebCore::imageOrientationForOrientation):
        (WebCore::ImageBitmap::createPromise):
        (WebCore::ImageBitmap::createFromBuffer):
        * html/ImageBitmap.h:
        * html/OffscreenCanvas.cpp:
        (WebCore::OffscreenCanvas::transferToImageBitmap):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        * platform/graphics/ImageBuffer.h:

2020-08-03  Brian Burg  <bburg@apple.com>

        [WebDriver] window.print should not invoke native UI
        https://bugs.webkit.org/show_bug.cgi?id=215084

        Reviewed by Devin Rousso.

        This could be handled at a higher level if there is a valid use case to allow printing,
        but I'm not aware of one. For now, this fixes a script evaluation hang on Mac and iOS.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::print):
        Don't call out to print delegates if this is a WebDriver-controlled page.

2020-08-03  Rob Buis  <rbuis@igalia.com>

        Remove unused API in HighlightMap
        https://bugs.webkit.org/show_bug.cgi?id=215078

        Reviewed by Sam Weinig.

        Remove unused API in HighlightMap, this is probably not needed
        anymore since the maplike code changed at some point.

        * Modules/highlight/HighlightMap.cpp:
        (WebCore::HighlightMap::getGroupForKey): Deleted.
        * Modules/highlight/HighlightMap.h:

2020-08-03  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Assert when restoring lost context
        https://bugs.webkit.org/show_bug.cgi?id=214999

        Reviewed by Darin Adler.

        Remove an assert that was wrong when restoring a lost context.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):

2020-08-03  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early August 20202 edition
        https://bugs.webkit.org/show_bug.cgi?id=215082

        Unreviewed build fix.

        No new tests needed.

        * accessibility/AccessibilityRenderObject.cpp: Add missing inclusion of Range.h.
        * dom/RadioButtonGroups.cpp: Ditto.
        * editing/Editing.cpp: Ditto.
        * editing/EditingStyle.cpp: Ditto.
        * editing/EditorCommand.cpp: Ditto.
        * editing/FrameSelection.cpp: Ditto.
        * editing/TypingCommand.cpp: Ditto.
        * editing/VisiblePosition.cpp: Add missing inclusion of SimpleRange.h.
        * rendering/HitTestResult.cpp: Add missing inclusion of Range.h.

2020-08-03  Antti Koivisto  <antti@apple.com>

        REGRESSION(r259585) Text decoration color with value currentColor miscomputed in some cases
        https://bugs.webkit.org/show_bug.cgi?id=215079

        Reviewed by Zalan Bujtas.

        r259585 did some refactoring that broke a special case where text decoration color comes from
        '-webkit-text-fill-color' property.

        Test: fast/text/text-decoration-currentcolor-fill-color.html

        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::decorationColor):

        Move resolving currentColor to RenderStyle.

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

        Handle CSSPropertyTextDecorationColor as a special case here.

        (WebCore::RenderStyle::visitedDependentColor const):

2020-08-03  Clark Wang  <clark_wang@apple.com>

        Added Constructor to AnalyserNode
        https://bugs.webkit.org/show_bug.cgi?id=215040

        Reviewed by Chris Dumez.

        Introduced AnalyserNode constructor and AnalyserOptions according to spec:
        https://www.w3.org/TR/webaudio/#AnalyserNode-constructors.

        Re-baselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::create):
        (WebCore::AnalyserNode::AnalyserNode):
        (WebCore::AnalyserNode::setFftSize):
        (WebCore::AnalyserNode::setMinMaxDecibels):
        (WebCore::AnalyserNode::setMinDecibels):
        (WebCore::AnalyserNode::setMaxDecibels):
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AnalyserOptions.h: Added.
        * Modules/webaudio/AnalyserOptions.idl: Added.
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createAnalyser):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-08-03  Youenn Fablet  <youenn@apple.com>

        MediaRecorderPrivateWriter::appendEndOfVideoSampleDurationIfNeeded should only call requestMediaDataWhenReadyOnQueue once
        https://bugs.webkit.org/show_bug.cgi?id=214972

        Reviewed by Eric Carlson.

        When processing a compressed sample, pass it to the writer if its ready.
        Otherwise buffer it and retry passing it to the writer next time we have a sample.
        When finishing a write, we call requestMediaDataWhenReadyOnQueue to finish passing samples that are still enqueued.

        Covered by existing tests no longer triggering ObjC exception.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::appendCompressedAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBufferIfPossible):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::finishAppendingCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::finishAppendingCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):

2020-08-02  Darin Adler  <darin@apple.com>

        Remove some member functions of Range and many calls to createLiveRange
        https://bugs.webkit.org/show_bug.cgi?id=215070

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::nextBoundary): Remove createLiveRange.
        (WebCore::AXObjectCache::previousBoundary): Ditto.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]): Take SimpleRange.
        (-[WebAccessibilityObjectWrapper positionForTextMarker:]): Remove createLiveRange.
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]): Ditto.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]): Take SimpleRange.
        (-[WebAccessibilityObjectWrapper _indexForTextMarker:]): Remove createLiveRange.
        (-[WebAccessibilityObjectWrapper _textMarkerForIndex:]): Ditto.

        * dom/DocumentMarkerController.cpp:
        (WebCore::updateRenderedRectsForMarker): Renamed range to makeSimpleRange.
        (WebCore::makeSimpleRange): Ditto.
        * dom/DocumentMarkerController.h: Update for the above.

        * dom/Range.cpp:
        (WebCore::Range::text const): Use makeSimpleRange.
        (WebCore::Range::shadowRoot const): Deleted.
        (WebCore::intervalsSufficientlyOverlap): Deleted.
        (WebCore::adjustLineHeightOfSelectionRects): Deleted.
        (WebCore::coalesceSelectionRects): Deleted.
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines const): Deleted.
        (WebCore::Range::collectSelectionRects const): Deleted.
        * dom/Range.h: Update for the above. Also make pastLastNode private since it is
        only used inside the Range class's implementation.

        * dom/SimpleRange.cpp:
        (WebCore::SimpleRange::SimpleRange): Removed overload that takes a Range.
        * dom/SimpleRange.h: Update for the above. Removed both constructor overloads
        that take a Range.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired): Remove createLiveRange.
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Use
        makeSimpleRange.
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        Remove createLiveRange.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart): Remove createLiveRange.
        * editing/Editor.cpp:
        (WebCore::Editor::performCutOrCopy): Ditto.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Ditto.
        (WebCore::Editor::replaceRangeForSpellChecking): Ditto.
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph): Ditto.
        (WebCore::Editor::changeBackToReplacedString): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Ditto.
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Change out
        argument type to SimpleRange.
        * editing/InsertListCommand.h: Update for above.

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::isCheckable const): Rewrite questionable logic
        to use intersectingNodes instead of firstNode.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findUngrammaticalPhrases const): Remove createLiveRange.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Ditto.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/markup.cpp:
        (WebCore::createFragmentFromText): Ditto.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAsChildOfElement): Use makeRangeSelectingNodeContents.

        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard): Remove createLiveRange.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::addRange): Use makeSimpleRange.
        (WebCore::DOMSelection::deleteFromDocument): Remove createLiveRange.

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData): Take SimpleRange.
        (WebCore::DragController::concludeEditDrag): Remove createLiveRange.
        (WebCore::DragController::startDrag): Ditto.

        * page/TextIndicator.cpp:
        (WebCore::selectionRects): Deleted.
        (WebCore::initializeIndicator): Call collectSelectionRects directly here,
        avoiding createLiveRange and using map to convert from Vector<SelectionRect>
        to Vector<FloatRect>.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot const): Use makeSimpleRange.

        * platform/DragImage.cpp:
        (WebCore::createDragImageForRange): Take SimpleRange.
        * platform/DragImage.h: Update createDragImageForRange to take SimpleRange.

        * platform/Pasteboard.h: Updated Windows-only layering-violating functions
        to take SimpleRange.

        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForRange): Take SimpleRange.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeRangeToDataObject): Take SimpleRange.
        (WebCore::Pasteboard::writeSelection): Ditto.
        (WebCore::Pasteboard::documentFragment): Ditto.

        * rendering/RenderObject.cpp:
        (WebCore::intervalsSufficientlyOverlap): Added. Moved from Range. Mostly unchanged
        but uses SimpleRange now instead of a live range, and intersectingNodes instead of
        a loop using firstNode and pastLastNode.
        (WebCore::adjustLineHeightOfSelectionRects): Ditto.
        (WebCore::coalesceSelectionRects): Ditto.
        (WebCore::RenderObject::collectSelectionRectsWithoutUnionInteriorLines): Ditto.
        (WebCore::RenderObject::collectSelectionRectsInternal): Ditto.
        (WebCore::RenderObject::collectSelectionRects): Ditto.
        * rendering/RenderObject.h: Update for above.

        * testing/Internals.cpp:
        (WebCore::Internals::markerRangeForNode): Use makeSimplRange.
        (WebCore::Internals::locationFromRange): Ditto.
        (WebCore::Internals::lengthFromRange): Ditto.
        (WebCore::Internals::rangeAsTextUsingBackwardsTextIterator): Ditto.
        (WebCore::Internals::subrange): Ditto.
        (WebCore::Internals::rangeOfStringNearLocation): Ditto.
        (WebCore::Internals::textIndicatorForRange): Ditto.

2020-08-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Table data is incorrectly translated in some articles on en.wikipedia.org
        https://bugs.webkit.org/show_bug.cgi?id=215071
        <rdar://problem/66354013>

        Reviewed by Darin Adler.

        Text in table cells sometimes end up in adjacent cells after translation, since adjacent cells are currently
        extracted as different tokens in a single item; mitigate this by splitting text in table cells into different
        text manipulation items instead.

        Test: TextManipulation.StartTextManipulationExtractsTableCellsAsSeparateItems

        * editing/TextManipulationController.cpp:
        (WebCore::isEnclosingItemBoundaryElement):

2020-08-01  Rob Buis  <rbuis@igalia.com>

        Remove superfluous ResourceTiming constructor overload
        https://bugs.webkit.org/show_bug.cgi?id=215063

        Reviewed by Sam Weinig.

        Remove superfluous ResourceTiming constructor overload, we
        can just call another overload from ResourceTiming::fromLoad.

        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::fromLoad):
        * loader/ResourceTiming.h:

2020-08-01  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Logitech F310/F710 controllers.
        https://bugs.webkit.org/show_bug.cgi?id=215050

        Reviewed by Tim Horton.

        Covered by API test.

        These two controllers match the standard mapping perfectly. Easy to support.
        
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        
        * platform/gamepad/KnownGamepads.h:
        
        * platform/gamepad/mac/GamepadConstantsMac.h:
        
        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::create):
        
        * platform/gamepad/mac/HIDGamepadElement.cpp:
        (WebCore::HIDGamepadElement::HIDGamepadElement):
        * platform/gamepad/mac/HIDGamepadElement.h:
        (WebCore::HIDGamepadElement::isAxis const):
        
        * platform/gamepad/mac/LogitechGamepad.cpp: Added.
        (WebCore::LogitechGamepadHatswitch::gamepadValueChanged):
        (WebCore::LogitechGamepad::LogitechGamepad):
        * platform/gamepad/mac/LogitechGamepad.h: 

2020-08-01  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warnings below since r265150.
        warning: unused parameter ‘foo’ [-Wunused-parameter]

        No new tests, no new behaviors.

        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::doCertificatesMatch):

2020-08-01  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Google Stadia controller
        https://bugs.webkit.org/show_bug.cgi?id=215061

        Reviewed by Tim Horton.

        New API test coverage.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/gamepad/GamepadConstants.h:
        * platform/gamepad/KnownGamepads.h:
        * platform/gamepad/mac/GamepadConstantsMac.h:

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::create):

        * platform/gamepad/mac/HIDGamepadElement.cpp:
        (WebCore::HIDGamepadElement::HIDGamepadElement):
        (WebCore::HIDGamepadHatswitch::gamepadValueChanged):
        (WebCore::HIDGamepadHatswitch::normalizedValue):
        * platform/gamepad/mac/HIDGamepadElement.h:
        (WebCore::HIDGamepadElement::isAxis const):
        (WebCore::HIDGamepadHatswitch::HIDGamepadHatswitch):

        * platform/gamepad/mac/StadiaHIDGamepad.cpp: Added.
        (WebCore::StadiaHIDGamepad::StadiaHIDGamepad):
        * platform/gamepad/mac/StadiaHIDGamepad.h: 

2020-08-01  Sam Weinig  <weinig@apple.com>

        Convert LinkHeader to use StringParsingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=215017

        Reviewed by Darin Adler.

        Update LinkHeader parsing to use StringParsingBuffer and do some light cleanup.

        * loader/LinkHeader.cpp:
        (WebCore::isSpaceOrTab):
        (WebCore::isNotURLTerminatingChar):
        (WebCore::isValidParameterNameChar):
        (WebCore::isParameterValueEnd):
        (WebCore::isParameterValueChar):
        (WebCore::findURLBoundaries):
        (WebCore::invalidParameterDelimiter):
        (WebCore::validFieldEnd):
        (WebCore::parseParameterDelimiter):
        (WebCore::paramterNameFromString):
        (WebCore::parseParameterName):
        (WebCore::skipQuotesIfNeeded):
        (WebCore::parseParameterValue):
        (WebCore::findNextHeader):
        (WebCore::LinkHeader::LinkHeader):
        (WebCore::LinkHeaderSet::LinkHeaderSet):
        (WebCore::LinkHeaderSet::init): Deleted.
        * loader/LinkHeader.h:

2020-08-01  Darin Adler  <darin@apple.com>

        Remove Range::create and many more uses of live ranges
        https://bugs.webkit.org/show_bug.cgi?id=215004

        Reviewed by Sam Weinig.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForVisiblePositionRange const):
        Use makeSimpleRange.
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): Use SimpleRange.
        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (rangeLengthForObject): Take SimpleRange.
        (webkitAccessibleHyperlinkGetStartIndex): Use makeSimpleRange.
        (webkitAccessibleHyperlinkGetEndIndex): Ditto.
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject): Ditto.
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (objectFocusedAndCaretOffsetUnignored): Ditto.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]):
        Take SimpleRange.
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        Use makeSimpleRange.
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]): Return SimpleRange.
        (-[WebAccessibilityObjectWrapper textMarkerRange]): Remove createLiveRange.
        (-[WebAccessibilityObjectWrapper textMarkerForPosition:]): Use auto.
        (-[WebAccessibilityObjectWrapper misspellingTextMarkerRange:forward:]):
        Remove createLiveRange.
        (-[WebAccessibilityObjectWrapper rangeFromMarkers:withText:]): Return SimpleRange.
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]): Add createLiveRange.
        (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): Return SimpleRange.
        (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForTextMarkers:isStart:]):
        Use auto.
        (-[WebAccessibilityObjectWrapper textMarkerRangeForMarkers:]): Get rid of local.
        (-[WebAccessibilityObjectWrapper textMarkersForRange:]): Take SimpleRange.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilityTextOperationForParameterizedAttribute): Remove makeSimpleRange.
        (accessibilityMisspellingSearchCriteriaForParameterizedAttribute): Return SimpleRange.
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromRange:]): Take SimpleRange.
        (textMarkerRangeFromRange): Ditto.
        (-[WebAccessibilityObjectWrapper startOrEndTextMarkerForRange:isStart:]): Ditto.
        (startOrEndTextmarkerForRange): Return SimpleRange.
        (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): Ditto.
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:spellCheck:]):
        Use auto.
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForRange:]): Remove createLiveRange.
        (-[WebAccessibilityObjectWrapper textMarkerRangeAtTextMarker:forUnit:]): Ditto.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Ditto.

        * dom/DocumentMarkerController.cpp:
        (WebCore::updateRenderedRectsForMarker): Use document marker range function.
        (WebCore::range): Added.
        * dom/DocumentMarkerController.h: Update for above.

        * dom/Position.cpp: Removed unneeded Range.h include.

        * dom/Range.cpp:
        (WebCore::Range::Range): Removed unused overload that takes start/end.
        (WebCore::Range::create): Removed overloads that take start/end.
        (WebCore::Range::setStart): Removed overload that takes Position.
        (WebCore::Range::setEnd): Ditto.
        (WebCore::Range::cloneRange const): Rewrote to use setStart/End since
        that's what the constructor used to do.
        (WebCore::Range::contains const): Use SimpleRange/createLiveRange
        instead of makeRange. Soon this function will be deleted.
        (WebCore::rangeOfContents): Deleted.
        (WebCore::createLiveRange): Rewrote to use setStart/End since that's
        what the constructor used to do.
        * dom/Range.h: Update for above removals.

        * dom/SimpleRange.h: Export commonInclusiveAncestor for use outside WebCore.

        * dom/StaticRange.cpp:
        (WebCore::StaticRange::create): Added overload that copies the SimpleRange.
        * dom/StaticRange.h: Update for above.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Use document
        marker range function.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle): Use makeSimpleRange.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Ditto.
        (WebCore::DeleteSelectionCommand::originalStringForAutocorrectionAtBeginningOfSelection):
        Ditto.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirectionForSelection): Use makeSimpleRange and
        intersectingNodes.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment): Use makeRangeSelectingNodeContents.
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Use makeSimpleRange.
        (WebCore::Editor::transpose): Ditto.
        (WebCore::Editor::rangeOfString): Use makeRangeSelectingNodeContents.
        (WebCore::Editor::handleAcceptedCandidate): Update since rangeForTextCheckingResult
        now returns an Optional<SimpleRange>.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::selectRangeOnElement): Use SimpleRange.

        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::ReplaceRangeWithTextCommand): Take
        SimpleRange.
        (WebCore::ReplaceRangeWithTextCommand::willApplyCommand): Update since
        m_rangeToBeReplaced is a SimpleRange.
        (WebCore::ReplaceRangeWithTextCommand::doApply): Ditto.
        (WebCore::ReplaceRangeWithTextCommand::targetRanges const): Ditto.
        * editing/ReplaceRangeWithTextCommand.h: Update for above.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::insertedContentRange const):
        Return a SimpleRange.
        * editing/ReplaceSelectionCommand.h: Update for above.

        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        Take a SimpleRange.
        (WebCore::SpellingCorrectionCommand::create): Moved here from header.
        * editing/SpellingCorrectionCommand.h: Update for above.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspelledWordOrUngrammaticalPhrase const):
        Use makeSimpleRange.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Use makeSimpleRange.
        (WebCore::TypingCommand::willAddTypingToOpenCommand): Take SimpleRange.
        (WebCore::TypingCommand::deleteKeyPressed): Remove createLiveRange.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        * editing/TypingCommand.h: Update for above.

        * editing/VisiblePosition.cpp:
        (WebCore::makeRange): Deleted.
        (WebCore::startVisiblePosition): Deleted.
        (WebCore::endVisiblePosition): Deleted.
        (WebCore::setStart): Deleted.
        (WebCore::setEnd): Deleted.
        * editing/VisiblePosition.h: Update for above. Also export makeSimpleRange
        for use outside WebCore.

        * editing/VisibleUnits.cpp:
        (WebCore::suffixLengthForRange): Take SimpleRange.
        (WebCore::prefixLengthForRange): Ditto.
        (WebCore::previousBoundary): Use makeSimpleRange.
        (WebCore::nextBoundary): Ditto.
        * editing/VisibleUnits.h: Update for above.

        * editing/cocoa/DataDetection.mm:
        (WebCore::buildQuery): Remove unused local variable.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Use makeRangeSelectingNodeContents.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::getRangeAt): Use createLiveRange.

        * page/DragController.cpp:
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret): Remove makeSimpleRange.

        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint): Return SimpleRange.
        * page/Frame.h: Update for above.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot const): Use makeRangeSelectingNodeContents,
        intersectingNodes, and makeSimpleRange.

        * testing/Internals.cpp:
        (WebCore::Internals::markerRangeForNode): Use createLiveRange and the document
        marker range function.

2020-07-31  Jer Noble  <jer.noble@apple.com>

        [Mac] AudioSessionRoutingArbitrator causes a launch time regression checking for CoreAudio muted state
        https://bugs.webkit.org/show_bug.cgi?id=214993

        Reviewed by Eric Carlson.

        The initial query of isMuted() is only there to tell whether, when we get a notification that the mute state
        changed, whether our internal state is dirty and we need to fire a notification. Instead, replace the bool member
        with an Optional<bool>, so we know we need to fire a changed notification whenever the first mute state change
        comes in.

        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSession::AudioSession):
        (WebCore::AudioSession::handleMutedStateChange):
        (WebCore::AudioSessionPrivate::AudioSessionPrivate): Deleted.

2020-07-31  Jer Noble  <jer.noble@apple.com>

        Unreviewed Windows build fix after r265167; add some missing includes.

        * page/Screen.cpp:

2020-07-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Clean up text layout code a bit
        https://bugs.webkit.org/show_bug.cgi?id=215013

        Reviewed by Zalan Bujtas.

        This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=214769.

        See file-specific ChangeLog entries for more information.

        No tests because there is no behavior change.

        * platform/graphics/Font.h: Remove unnecessary declaration.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::layoutText const): Rename glyphBufferForTextRun() to layoutText().
        Also, make it return a GlyphBuffer instead of taking a GlyphBuffer as an out param.
        Its previous return, the initial advance, is now returned in GlyphBuffer::initialAdvance.
        (WebCore::FontCascade::drawText const): Update to new signature of layoutText().
        (WebCore::FontCascade::drawEmphasisMarks const): Inline drawEmphasisMarksForSimpleText()
        and drawEmphasisMarksForComplexText(), since they're nearly identical. Update to the new
        signature of layoutText().
        (WebCore::FontCascade::displayListForTextRun const): Update to the new signature of
        layoutText().
        (WebCore::FontCascade::layoutSimpleText const): Make this return a new GlyphBuffer, instead
        of taking one as an out param. Also, use accessors of WidthIterator instead of reaching
        into its guts. The previous return value is now returned in GlyphBuffer::initialAdvance.
        (WebCore::FontCascade::layoutComplexText const): Ditto.
        (WebCore::FontCascade::floatWidthForSimpleText const): Use accessors of WidthIterator
        instead of reaching into its guts.
        (WebCore::FontCascade::adjustSelectionRectForSimpleText const): Ditto.
        (WebCore::FontCascade::offsetForPositionForSimpleText const): Ditto.
        (WebCore::FontCascade::dashesForIntersectionsWithRect const): Same as
        FontCascade::drawEmphasisMarks() above.
        (WebCore::FontCascade::glyphBufferForTextRun const): Renamed to layoutText().
        (WebCore::FontCascade::getGlyphsAndAdvancesForSimpleText const): Renamed to
        layoutSimpleText().
        (WebCore::FontCascade::getGlyphsAndAdvancesForComplexText const): Renamed to
        layoutComplexText().
        (WebCore::FontCascade::drawEmphasisMarksForSimpleText const): Inlined into
        drawEmphasisMarks().
        (WebCore::FontCascade::drawEmphasisMarksForComplexText const): Ditto.
        * platform/graphics/FontCascade.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore::GlyphBufferAdvance::GlyphBufferAdvance):
        (WebCore::GlyphBufferAdvance::operator FloatSize):
        * platform/graphics/TextRun.h: Remove unnecessary declaration.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Update for changes to WidthIterator.h
        * platform/graphics/WidthIterator.h: Rearrange the class members to sort them by size,
        to get better packing. Also, make all member variables private, and initialize them
        all with { } syntax.
        (WebCore::WidthIterator::finalRoundingWidth const):
        (WebCore::WidthIterator::currentCharacter const):
        * rendering/svg/SVGTextMetrics.cpp: Remove unnecessary include.

2020-07-31  Chris Dumez  <cdumez@apple.com>

        Add OfflineAudioCompletionEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=214994

        Reviewed by Eric Carlson.

        Add OfflineAudioCompletionEvent constructor, as per:
        - https://www.w3.org/TR/webaudio/#OfflineAudioCompletionEvent

        Test: webaudio/OfflineAudioCompletionEvent-constructor.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::finishedRendering):
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp:
        (WebCore::OfflineAudioCompletionEvent::create):
        (WebCore::OfflineAudioCompletionEvent::OfflineAudioCompletionEvent):
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.idl:
        * Modules/webaudio/OfflineAudioCompletionEventInit.h: Copied from Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.idl.
        * Modules/webaudio/OfflineAudioCompletionEventInit.idl: Copied from Source/WebCore/Modules/webaudio/OfflineAudioCompletionEvent.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-31  Jer Noble  <jer.noble@apple.com>

        [Mac] YouTube does not offer HDR variants to devices which support HDR
        https://bugs.webkit.org/show_bug.cgi?id=215022

        Reviewed by Eric Carlson.

        Test: platform/mac/media/media-source/is-type-supported-vp9-codec-check.html

        There are three separate issues which block YouTube from offering HDR:

        1) YouTube checks both valid and invalid VP9 strings through MediaSource.isTypeSupported(), and UAs
           which answer `true` to even invalid VP9 strings are blocked from HDR. To solve this, we will now
           send isTypeSupported() through the same code path as Media Capabilities.

        2) YouTube's standard valid and invalid VP9 strings do not include the fullRangeVideoFlag field, which
           would normally be tossed as invalid. We shouldn't relax our requirements globally, so we will
           add a Quirk which relaxes the requriement that VP9 strings contain a fullRangeVideoFlag.

        3) YouTube's HDR query checks that window.screen.pixelDepth is > 24. We obviously don't want to change
           the value of this field globally, so we will add separate Quirk which sets window.screen.pixelDepth
           to 25 (a totally nonsensical value) when HDR is available.

        Each of these Quirks has a path towards removal for YouTube. The fullRangeVideoFlag field involves
        YouTube updating their compatibility check to inculde the fullRangeVideoFlag. The pixelDepth check
        can be replaced by the `dynamic-range:high` Media Query.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::addVP9FullRangeVideoFlagToContentType):
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        (WebCore::MediaSource::onReadyStateChange):
        (WebCore::MediaSource::activeRanges const):
        * Modules/mediasource/MediaSource.h:
        * page/Quirks.cpp:
        (WebCore::Quirks::needsVP9FullRangeFlagQuirk const):
        (WebCore::Quirks::needsHDRPixelDepthQuirk const):
        * page/Quirks.h:
        * page/Screen.cpp:
        (WebCore::Screen::pixelDepth const):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::isContentTypeSupported):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::isVPCodecConfigurationRecordSupported):
        (WebCore::validateVPParameters):

2020-07-31  Chris Dumez  <cdumez@apple.com>

        Add linked-on-after check to keep WebSQL working in UIWebView until apps are rebuilt with iOS 14 SDK
        https://bugs.webkit.org/show_bug.cgi?id=215035
        <rdar://problem/65003342>

        Reviewed by Tim Horton.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isJesusCalling): Deleted.
        (WebCore::IOSApplication::isFudget): Deleted.
        (WebCore::IOSApplication::isFamilyHealthApp): Deleted.
        Drop code that is no longer needed.

2020-07-31  Brady Eidson  <beidson@apple.com>

        Log a warning to the dev console when gamepads are accessed from an insecure context.
        https://bugs.webkit.org/show_bug.cgi?id=214995

        Reviewed by Tim Horton.

        Test: http/tests/misc/gamepads-insecure.html

        * Modules/gamepad/NavigatorGamepad.cpp:
        (WebCore::NavigatorGamepad::getGamepads): Insecure contexts should log that getGamepads() will
          be going away in a future release. Just do it once, because getGamepads() is called frequently.

2020-07-31  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Date/time input types should have a textfield appearance
        https://bugs.webkit.org/show_bug.cgi?id=214978

        Reviewed by Wenson Hsieh.

        On iOS, date/time input types have a menulist-button appearance. However, this appearance
        does not match the style of native date controls on macOS. The textfield appearance
        with no focus ring brings us closer to a natively styled control.

        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::dateInputStyleSheet const):
        (WebCore::RenderThemeMac::dateTimeLocalInputStyleSheet const):
        (WebCore::RenderThemeMac::monthInputStyleSheet const):
        (WebCore::RenderThemeMac::timeInputStyleSheet const):
        (WebCore::RenderThemeMac::weekInputStyleSheet const):

2020-07-31  Brady Eidson  <beidson@apple.com>

        Special HID mapping for the Dualshock 3 controller
        <rdar://problem/66255198> and https://bugs.webkit.org/show_bug.cgi?id=214911

        Reviewed by Tim Horton.

        Covered by API tests.

        - Move GamepadButtons into a GamepadConstants header
        - Add a "KnownGamepads" header to hold all vendor/product pairs that WebKit knows about
        - Add a Dualshock3 controller mapping based on its HID report
        - Add a basic DS3 test based on the HID report
        
        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/gamepad/GamepadConstants.cpp: Copied from Source/WebCore/platform/gamepad/mac/GenericHIDGamepad.h.
        (WebCore::standardGamepadMappingString):
        * platform/gamepad/GamepadConstants.h: Added.

        * platform/gamepad/KnownGamepads.h: Copied from Source/WebCore/platform/gamepad/mac/GenericHIDGamepad.h.

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):

        * platform/gamepad/mac/Dualshock3HIDGamepad.cpp: Added.
        (WebCore::Dualshock3HIDGamepad::Dualshock3HIDGamepad):
        * platform/gamepad/mac/Dualshock3HIDGamepad.h: Copied from Source/WebCore/platform/gamepad/mac/GenericHIDGamepad.h.

        * platform/gamepad/mac/GenericHIDGamepad.cpp:
        (WebCore::GenericHIDGamepad::GenericHIDGamepad):
        (WebCore::GenericHIDGamepad::id): Deleted.
        * platform/gamepad/mac/GenericHIDGamepad.h:

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::create):
        (WebCore::HIDGamepad::HIDGamepad):
        (WebCore::HIDGamepad::initialize):
        * platform/gamepad/mac/HIDGamepad.h:

        * platform/mac/HIDDevice.h:
        (WebCore::HIDDevice::fullProductIdentifier const):
        * platform/mac/HIDElement.h:
        (WebCore::HIDElement::fullUsage const):

2020-07-31  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=214988

        * platform/network/cf/CertificateInfo.h:
        * platform/network/cf/CertificateInfoCFNet.cpp:

2020-07-31  Chris Dumez  <cdumez@apple.com>

        Add constructor for WaveShaperNode
        https://bugs.webkit.org/show_bug.cgi?id=214989

        Reviewed by Youenn Fablet.

        Add constructor for WaveShaperNode:
        - https://www.w3.org/TR/webaudio/#waveshapernode

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createWaveShaper):
        * Modules/webaudio/OverSampleType.h: Copied from Source/WebCore/Modules/webaudio/WaveShaperNode.idl.
        * Modules/webaudio/OverSampleType.idl: Copied from Source/WebCore/Modules/webaudio/WaveShaperNode.idl.
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::create):
        (WebCore::WaveShaperNode::setCurve):
        (WebCore::processorType):
        * Modules/webaudio/WaveShaperNode.h:
        (WTF::LogArgument<WebCore::OverSampleType>::toString):
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveShaperOptions.h: Copied from Source/WebCore/Modules/webaudio/WaveShaperNode.idl.
        * Modules/webaudio/WaveShaperOptions.idl: Copied from Source/WebCore/Modules/webaudio/WaveShaperNode.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-31  Youenn Fablet  <youenn@apple.com>

        Update service worker if certificate info does not match when soft updating
        https://bugs.webkit.org/show_bug.cgi?id=214988

        Reviewed by Alex Christensen.

        In case service worker certificate info does not match, treat it as if the script changed.
        This is a convenient way to update the service worker and the stored registration database.
        Covered by API test.

        * platform/network/cf/CertificateInfo.h:
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::certificatesMatch):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::doCertificatesMatch):
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::certificateInfo const):

2020-07-31  Sihui Liu  <sihui_liu@appe.com>

        -[WKWebsiteDataStore _renameOrigin:] needs to support IndexedDB renames
        https://bugs.webkit.org/show_bug.cgi?id=214905
        <rdar://problem/66247978>

        Reviewed by Alex Christensen.

        To do the renaming, we close all existing databases whose top origin is old origin, and move all files in 
        directory of old origin to that of new origin.

        API test: WebKit.WebsiteDataStoreRenameOriginForIndexedDatabase

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins):
        (WebCore::IDBServer::IDBServer::renameOrigin):
        * Modules/indexeddb/server/IDBServer.h:

2020-07-31  Chris Fleizach  <cfleizach@apple.com>

        AX: Inteterminate progressbar reading as 50% with Voiceover
        https://bugs.webkit.org/show_bug.cgi?id=214330
        <rdar://problem/65570800>

        Reviewed by Zalan Bujtas.

        Expose indeterminate status to iOS API.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityIsIndeterminate]):
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListTerm]):
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListDefinition]):
          - Drive by style fix.

2020-07-31  Peng Liu  <peng.liu6@apple.com>

        PIP on netflix.com shows only a gray window and spinner
        https://bugs.webkit.org/show_bug.cgi?id=214899

        Reviewed by Jer Noble.

        Use an empty "seekableRanges" instead of a special "duration" value (NaN) to indicate
        that seeking is not supported. With this change, the "duration" will always have a meaningful
        value, so that WebAVPlayerController can work properly in the picture-in-picture mode.
        Related change: https://trac.webkit.org/changeset/217858.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::supportsSeeking const):
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::duration const):
        (WebCore::PlaybackSessionModelMediaElement::seekableRanges const):
        * platform/mac/WebPlaybackControlsManager.mm:
        (-[WebPlaybackControlsManager canBeginTouchBarScrubbing]):

2020-07-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mouse wheel events on horizontal scrollbar not correctly handled when AC mode is forced
        https://bugs.webkit.org/show_bug.cgi?id=207113

        Reviewed by Adrian Perez de Castro.

        Remove GTK specific code to invert scroll direction of wheel events.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::shouldSwapScrollDirection const): Deleted.
        * platform/SourcesGLib.txt:
        * platform/glib/EventHandlerGLib.cpp: Removed.

2020-07-10  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Retrieve supported reference spaces from actual XR systems
        https://bugs.webkit.org/show_bug.cgi?id=214187

        Reviewed by Carlos Garcia Campos.

        Each XR system supports a set of reference spaces which are used by WebXR to stablish
        a spatial relationship with user's physical environment. The list of supported reference
        spaces determine whether or not a session request succeeds or not, as it will refuse to
        start a session with an unsupported reference space.

        So far, no reference spaces were retrieved from the actual devices. This patch adds the
        required OpenXR machinery to retrieve them. In particular, we have to create a XrSession
        (although we don't have to start it) in order to retrieve the reference spaces. Since we
        don't need it to show content to the user we can create it in headless mode and then discard
        it afterwards when no longer needed.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession): Clarify a comment. Also s/TODO/FIXME/g.
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::isExtensionSupported): New method to check whether a specific extension
        is supported.
        (PlatformXR::Instance::Impl::checkInstanceExtensionProperties const): renamed from
        enumerateInstanceExtensionProperties(). Returns whether or not the call succeeded.
        (PlatformXR::Instance::Impl::Impl): Pass the list of enabled extensions to the instance.
        (PlatformXR::Instance::enumerateImmersiveXRDevices): Log the systems found.
        (PlatformXR::OpenXRDevice::OpenXRDevice):
        (PlatformXR::OpenXRDevice::enumerateReferenceSpaces const): New method to list the
        supported reference spaces by the XR system.
        (PlatformXR::OpenXRDevice::collectSupportedSessionModes): Store reference spaces as
        enabled features for supported modes.
        (PlatformXR::OpenXRDevice::collectConfigurationViews): Renamed from
        enumerateConfigurationViews().
        (PlatformXR::Instance::Impl::enumerateInstanceExtensionProperties const): Deleted.
        (PlatformXR::OpenXRDevice::enumerateConfigurationViews): Deleted.
        * platform/xr/openxr/PlatformXROpenXR.h:

2020-07-31  Youenn Fablet  <youenn@apple.com>

        Add LibWebRTCAudioModule logging
        https://bugs.webkit.org/show_bug.cgi?id=214987

        Reviewed by Eric Carlson.

        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::RegisterAudioCallback):
        (WebCore::LibWebRTCAudioModule::StartPlayout):
        (WebCore::LibWebRTCAudioModule::StopPlayout):

2020-07-30  Simon Fraser  <simon.fraser@apple.com>

        Minor RenderLayerCompositor::updateBackingAndHierarchy() cleanup
        https://bugs.webkit.org/show_bug.cgi?id=215008

        Reviewed by Zalan Bujtas.

        Instead of setting child layers, and then adding another child (overflowControlLayer),
        append overflowControlLayer to the vector and then set children.

        No behavior change.

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

2020-07-30  Sam Weinig  <weinig@apple.com>

        It would be nice if the predicate taking functions in ParsingUtilities.h didn't require specifying the character type
        https://bugs.webkit.org/show_bug.cgi?id=215002

        Reviewed by Darin Adler.

        Remove the need for specifying the character type by providing overloads for LChar and UChar
        explicitly.

        * html/parser/HTMLSrcsetParser.cpp:
        (WebCore::parseImageCandidatesFromSrcsetAttribute):
        * html/parser/ParsingUtilities.h:
        (WebCore::characterPredicate):
        * html/track/VTTScanner.h:
        (WebCore::characterPredicate):
        * loader/LinkHeader.cpp:
        (WebCore::findURLBoundaries):
        (WebCore::invalidParameterDelimiter):
        (WebCore::parseParameterDelimiter):
        (WebCore::parseParameterName):
        (WebCore::skipQuotesIfNeeded):
        (WebCore::parseParameterValue):
        (WebCore::findNextHeader):
        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::parseCryptographicDigestImpl):
        (WebCore::parseEncodedCryptographicDigestImpl):
        * loader/SubresourceIntegrity.cpp:
        (WebCore::splitOnSpaces):
        * loader/appcache/ApplicationCacheManifestParser.cpp:
        (WebCore::parseApplicationCacheManifest):
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::parseDirective):
        (WebCore::ContentSecurityPolicyDirectiveList::parseReportURI):
        * page/csp/ContentSecurityPolicyMediaListDirective.cpp:
        (WebCore::ContentSecurityPolicyMediaListDirective::parse):
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::isSourceListNone):
        (WebCore::ContentSecurityPolicySourceList::parse):
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        (WebCore::ContentSecurityPolicySourceList::parseScheme):
        (WebCore::ContentSecurityPolicySourceList::parseHost):
        (WebCore::ContentSecurityPolicySourceList::parsePath):
        (WebCore::ContentSecurityPolicySourceList::parsePort):
        (WebCore::ContentSecurityPolicySourceList::parseNonceSource):
        * platform/DateComponents.cpp:
        (WebCore::countDigits):
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber):
        * svg/SVGParserUtilities.h:
        (WebCore::skipOptionalSVGSpaces):

2020-07-30  Sam Weinig  <weinig@apple.com>

        Convert DateComponents to use StringParsingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=213929

        Reviewed by Darin Adler.

        - Switches string parsing in DateComponents to using StringParsingBuffer,
          making use of ParsingUtilities to streamline / simplify the code.
        - Moves a few constant values only used in DateComponents.cpp to DateComponents.cpp
        - Rename toInt in DateComponents.cpp to parseInt, and have use an Optional return
          value rather than bool + out-parameter.
        - Add new parseIntWithinLimits that also checks that parsed value is within specfied
          limits, as this is what almost all of the int parsing in DateComponents needs.

        * platform/DateComponents.cpp:
        (WebCore::countDigits):
        (WebCore::parseInt):
        (WebCore::parseIntWithinLimits):
        (WebCore::DateComponents::parseYear):
        (WebCore::withinHTMLDateLimits):
        (WebCore::createFromString):
        (WebCore::DateComponents::fromParsingMonth):
        (WebCore::DateComponents::fromParsingDate):
        (WebCore::DateComponents::fromParsingWeek):
        (WebCore::DateComponents::fromParsingTime):
        (WebCore::DateComponents::fromParsingDateTimeLocal):
        (WebCore::DateComponents::fromParsingDateTime):
        (WebCore::DateComponents::parseTimeZone):
        (WebCore::DateComponents::parseMonth):
        (WebCore::DateComponents::parseDate):
        (WebCore::DateComponents::parseWeek):
        (WebCore::DateComponents::parseTime):
        (WebCore::DateComponents::parseDateTimeLocal):
        (WebCore::DateComponents::parseDateTime):
        (WebCore::DateComponents::setMonthsSinceEpoch):
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek):
        (WebCore::toInt): Deleted.
        * platform/DateComponents.h:
        (WebCore::DateComponents::minimumYear): Deleted.
        (WebCore::DateComponents::maximumYear): Deleted.

2020-07-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed attempt to fix Catalyst build after r265084.

        * editing/cocoa/DictionaryLookup.mm:

2020-07-30  Dean Jackson  <dino@apple.com>

        [WebGL] Safari snapshots of WebGL content in the tab picker don't work
        https://bugs.webkit.org/show_bug.cgi?id=214452
        <rdar://problem/21243082>

        Original patch by Justin Fan. Reviewed by Darin Adler.

        Test is in TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSnapshot.mm.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint): Will properly request a paint when a snapshot is requested.
        * html/HTMLCanvasElement.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::paintRenderingResultsToCanvas): Only clear the last snapshot if readPixels will succeed.
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):

2020-07-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Adopt -[AVContentKeyRequest willOutputBeObscuredDueToInsufficientExternalProtectionForDisplays:]
        https://bugs.webkit.org/show_bug.cgi?id=214659
        <rdar://problem/63555006>

        Reviewed by Darin Adler.

        Use the new WTF::Observer object as the listener type for notifying clients of display changes. When a displayChanged
        event is observed, use the new AVContentKeyRequest -willOutputBeObscuredDueToInsufficientExternalProtectionForDisplays:
        to set the keyStatus for that request appropriately.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::displayID):
        (WebCore::MediaKeySession::displayChanged):
        * Modules/encryptedmedia/MediaKeySession.h:
        * dom/Document.cpp:
        (WebCore::Document::windowScreenDidChange):
        (WebCore::Document::addDisplayChangedObserver):
        * dom/Document.h:
        * platform/encryptedmedia/CDMInstanceSession.h:
        (WebCore::CDMInstanceSession::displayChanged):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:externalProtectionStatusDidChangeForContentKeyRequest:]):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::externalProtectionStatusDidChangeForContentKeyRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::displayChanged):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::externalProtectionStatusDidChangeForContentKeyRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateProtectionStatusForDisplayID):

2020-07-30  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Buffer updates
        https://bugs.webkit.org/show_bug.cgi?id=209511

        Reviewed by Dean Jackson.

        Various fixes in bufferData, bufferSubData, and getBufferSubData. Passes all WebGL conformance tests in conformance/buffers/* and conformance2/buffers/*.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::sliceArrayBufferView):
        (WebCore::WebGL2RenderingContext::getBufferSubData):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::bufferData):
        (WebCore::WebGLRenderingContextBase::bufferSubData):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.idl:

2020-07-30  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Make DecoderTest run against .mp4 files; add rate-limiting.
        https://bugs.webkit.org/show_bug.cgi?id=214807

        Reviewed by Darin Adler.

        Export registerWebKitVP9Decoder() from VP9UtilitiesCocoa instead of LibWebRTCProvider to make it easier
        for DecodeTest to import, as LibWebRTCProvider also pulls in a bunch of libwebrtc headers. Also, export
        SourceBufferParser.h so DecoderTest can create parsers for fMP4 files.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::registerWebKitVP9Decoder):

2020-07-30  Ryosuke Niwa  <rniwa@webkit.org>

        Clicking on a shadow DOM does not move the selection to the focused element when delegatesFocus is set to true
        https://bugs.webkit.org/show_bug.cgi?id=214859
        <rdar://problem/66192901>

        Reviewed by Wenson Hsieh.

        The bug was caused by EventHandler moving the selection to where the user had clicked, not to where the focus
        had been delegated, which is a uniquely WebKit behavior. Fixed the bug by revealing the focused element as done
        in Element::focus in EventHandler::dispatchMouseEvent and avoid updating the selection to the clicked point
        later in EventHandler::handleMousePressEventSingleClick by adding an early exit.

        Test: fast/shadow-dom/delegates-focus-and-types-into-input.html

        * dom/Element.cpp:
        (WebCore::Element::focus):
        (WebCore::Element::revealFocusedElement): Extracted from Element::focus.
        * dom/Element.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick): Added an early exit when dispatchMouseEvent had
        delegated the focus to an element different from the one the user had clicked.
        (WebCore::EventHandler::dispatchMouseEvent): Added a code to reveal the newly focused element when the focus
        had been delegated.
        * page/EventHandler.h:

2020-07-30  Tim Horton  <timothy_horton@apple.com>

        Web content gets stuck in an inactive state (no cursor updates or text insertion caret) when activating a tab with a thumbnail visible
        https://bugs.webkit.org/show_bug.cgi?id=214962
        <rdar://problem/65670984>

        Reviewed by Wenson Hsieh.

        New API test: WebKit.WKThumbnailViewResetsViewStateWhenUnparented

        * testing/Internals.cpp:
        (WebCore::Internals::isPageActive const):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a "view window is active" getter.

2020-07-30  Antoine Quint  <graouts@webkit.org>

        [iOS] Unable to swipe on IMDB.com after long press on image
        https://bugs.webkit.org/show_bug.cgi?id=214968
        <rdar://problem/66234421>

        Reviewed by Wenson Hsieh.

        When a long press occurs on an <img>, a system drag interaction is initiated on iOS. In WebCore,
        EventHandler::tryToBeginDragAtPoint() is called and a synthetic mouse event is produced, causing
        handleMousePressEvent() to be called. Further down the call chain, dispatchPointerEventIfNeeded()
        is called and a valid PointerEvent is generated in PointerCaptureController::pointerEventForMouseEvent()
        with "pointerType" set to "mouse", even though there is already a touch interaction initiated.

        We now check whether there are known touches before generating a PointerEvent for a MouseEvent.

        In the case of IMDb, the page would keep track of "pointerdown" events to track whether a multi-touch
        user gesture is in progress so that their slide shows can support two-finger zooming as well as
        single-finger swiping. In the case of a long press, the second "pointerdown" event would trick
        the code in thinking a zoom gesture was initiated and it never recovered.

        Test: pointerevents/ios/long-press-yields-single-pointerdown-event.html

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

2020-07-30  Chris Dumez  <cdumez@apple.com>

        OfflineAudioContext.startRendering() should return a Promise
        https://bugs.webkit.org/show_bug.cgi?id=214940

        Reviewed by Eric Carlson.

        OfflineAudioContext.startRendering() should return a Promise:
        - https://www.w3.org/TR/webaudio/#dom-offlineaudiocontext-startrendering

        This is important as it was preventing a lot of web-platform-tests from running
        properly and our test coverage was therefore really poor.

        No new tests, rebaselined existing tests.

        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::finishedRendering):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::didFinishOfflineRendering):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::startRendering):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::startOfflineRendering):
        (WebCore::OfflineAudioContext::didFinishOfflineRendering):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::startRendering):
        * Modules/webaudio/OfflineAudioDestinationNode.h:

2020-07-30  Darin Adler  <darin@apple.com>

        Further reduction in the use of live ranges, particularly in headers
        https://bugs.webkit.org/show_bug.cgi?id=214793

        Reviewed by Sam Weinig.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::performTextOperation): Do not call createLiveRange.
        (WebCore::AccessibilityObject::replaceTextInRange): Ditto.

        * dom/SimpleRange.cpp: Moved makeSimpleRange functions to the header.
        * dom/SimpleRange.h: Reworked the makeSimpleRange implementation to avoid a mistake
        which made template expansion infinitely recurse while compiling and crash the compiler.
        Ended up moving all the code to the header. Should be a good thing; I expect it will
        optimize well inlined.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Use makeSimpleRange.

        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithText): Do not call createLiveRange.
        (WebCore::Editor::setComposition): Use SimpleRange.
        (WebCore::Editor::stringForCandidateRequest const): Do not call createLiveRange.
        (WebCore::Editor::handleAcceptedCandidate): Use auto intead of RefPtr<Range>.

        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity): Do not call createLiveRange.
        (WebCore::executeDeleteToMark): Ditto.
        (WebCore::executeSelectToMark): Ditto.
        (WebCore::valueFormatBlock): Ditto.

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): Use makeSimpleRange.
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand): Take a
        SimpleRange.
        * editing/FormatBlockCommand.h: Updated for above.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveTo): Deleted overload taking a live range.
        (WebCore::FrameSelection::setSelectedRange): Take a SimpleRange.
        * editing/FrameSelection.h: Updated for above.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Do not call
        createLiveRange.

        * editing/VisibleUnits.cpp:
        (WebCore::enclosingTextUnitOfGranularity): Return SimpleRange.
        (WebCore::wordRangeFromPosition): Ditto.
        (WebCore::closestWordBoundaryForPosition): Use SimpleRange.
        (WebCore::rangeExpandedByCharactersInDirectionAtWordBoundary): Return
        a SimpleRange.
        (WebCore::rangeExpandedAroundPositionByCharacters): Ditto.
        (WebCore::wordBoundaryForPositionWithoutCrossingLine): Use SimpleRange.
        * editing/VisibleUnits.h: Updated for above.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        Use SimpleRange.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Use SimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):
        Do not call createLiveRange.
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readPlainText): Ditto.
        * editing/gtk/WebContentReaderGtk.cpp:
        (WebCore::WebContentReader::readPlainText): Ditto.
        * editing/libwpe/EditorLibWPE.cpp:
        (WebCore::createFragmentFromPasteboardData): Ditto.

        * editing/mac/DictionaryLookupLegacy.mm:
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Use SimpleRange.

        * editing/markup.cpp:
        (WebCore::serializePreservingVisualAppearance): Take SimpleRange.
        (WebCore::contextPreservesNewline): Ditto.
        (WebCore::createFragmentFromText): Ditto.
        * editing/markup.h: Updated for above.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Take SimpleRange.
        * loader/archive/cf/LegacyWebArchive.h: Updated for above.

        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation): Use SimpleRange.
        (WebCore::DragController::concludeEditDrag): Do not call createLiveRange.
        (WebCore::selectElement): Use SimpleRange.
        (WebCore::DragController::removeAllDroppedImagePlaceholders): Ditto.
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret): Ditto.

        * page/DragController.h: Use SimpleRange.

        * page/Page.cpp:
        (WebCore::Page::findTextMatches): Return vector of SimpleRange, in
        structure so we have one return value instead of two out arguments.
        Also renamed from findStringMatchingRanges.
        (WebCore::Page::rangeOfString): Return SimpleRange.
        (WebCore::replaceRanges): Do not call createLiveRange.
        (WebCore::Page::replaceRangesWithText): Take SimpleRange.
        * page/Page.h: Updated for above.

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::wordsInCurrentParagraph const): Use SimpleRange.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isOverTextInsideFormControlElement const):
        Use SimpleRange, and also use hasAnyPlainText instead of computing
        the plain text string and checking if it's empty.

2020-07-30  Brady Eidson  <beidson@apple.com>

        Refactor HID gamepad code to be much less fragile and much easier to hack on.
        https://bugs.webkit.org/show_bug.cgi?id=214910

        Reviewed by Darin Adler.

        Covered by API tests.
                
        Currently - for HID device gamepads - we throw all buttons and axes against the wall and see what sticks.
        Instead, for specific popular devices, we'd like to have device-specific mappings so the representation makes sense.
        
        To support that work, this is a major refactoring of the HID gamepad code. It does the following:

        - Breaks out logic specific to IOHIDDeviceRef into HIDDevice
        
        - Breaks out logic specific to IOHIDElementRef into HIDElement
        
        - Moves responsibities of managing things to the right places (e.g. HIDElement manages its own current value directly)
        
        - Makes HIDGamepadElement derive from HIDElement directly
          
        - Moves device specific logic from HIDGamepad into a subclass of HID gamepad. Currently the only subclass is "generic"
          which encompasses HIDGamepad's old behavior

        - Changes button/value vectors from Vector<double> to Vector<SharedGamepadValue> so multiple objects can reference
          the value at once.
          e.g. HIDGamepadButton can simply update it's own SharedGamepadValue without knowing which HIDGamepad owns it or which index
          into the gamepad's value vector it should be mutating.

          This will be critical in the "specific device mapping" work as some types of HIDElements actually drive more than one
          gamepad button value.
          e.g. a "direction pad axis" actually manages 2 button values, or a "hat-switch" direction pad manages 4 button values
          
        This patch doesn't change any current behavior.

        * Modules/gamepad/Gamepad.cpp:
        (WebCore::Gamepad::updateFromPlatformGamepad):

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

        * platform/Logging.h:

        * platform/gamepad/PlatformGamepad.h:

        * platform/gamepad/SharedGamepadValue.h: Copied from Source/WebKit/UIProcess/Gamepad/UIGamepad.h.
        (WebCore::SharedGamepadValue::SharedGamepadValue):
        (WebCore::SharedGamepadValue::setValue):
        (WebCore::SharedGamepadValue::value const):
        (WebCore::SharedGamepadValue::Data::Data):

        * platform/gamepad/cocoa/GameControllerGamepad.h:
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):
        (WebCore::GameControllerGamepad::setupAsGamepad):

        * platform/gamepad/mac/GenericHIDGamepad.cpp: Added.
        (WebCore::GenericHIDGamepad::GenericHIDGamepad):
        (WebCore::GenericHIDGamepad::id):
        (WebCore::GenericHIDGamepad::maybeAddGenericDesktopElement):
        (WebCore::GenericHIDGamepad::maybeAddButtonElement):
        * platform/gamepad/mac/GenericHIDGamepad.h: Copied from Source/WebKit/WebProcess/Gamepad/WebGamepad.h.

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::create):
        (WebCore::HIDGamepad::HIDGamepad):
        (WebCore::HIDGamepad::initialize):
        (WebCore::HIDGamepad::valueChanged):
        (WebCore::HIDGamepad::getCurrentValueForElement): Deleted.
        (WebCore::HIDGamepad::initElements): Deleted.
        (WebCore::HIDGamepad::initElementsFromArray): Deleted.
        (WebCore::HIDGamepad::maybeAddButton): Deleted.
        (WebCore::HIDGamepad::maybeAddAxis): Deleted.
        * platform/gamepad/mac/HIDGamepad.h:
        (WebCore::HIDGamepad::hidDevice const):
        (WebCore::HIDGamepadElement::HIDGamepadElement): Deleted.
        (WebCore::HIDGamepadElement::~HIDGamepadElement): Deleted.
        (WebCore::HIDGamepadElement::isButton const): Deleted.
        (WebCore::HIDGamepadElement::isAxis const): Deleted.
        (WebCore::HIDGamepadButton::HIDGamepadButton): Deleted.
        (WebCore::HIDGamepadAxis::HIDGamepadAxis): Deleted.

        * platform/gamepad/mac/HIDGamepadElement.cpp: Added.
        (WebCore::HIDGamepadElement::HIDGamepadElement):
        (WebCore::HIDGamepadElement::refreshCurrentValue):
        (WebCore::HIDGamepadElement::normalizedValue):
        (WebCore::HIDGamepadButton::gamepadValueChanged):
        (WebCore::HIDGamepadAxis::gamepadValueChanged):
        (WebCore::HIDGamepadAxis::normalizedValue):
        * platform/gamepad/mac/HIDGamepadElement.h: Copied from Source/WebCore/platform/gamepad/PlatformGamepad.h.
        (WebCore::HIDGamepadElement::~HIDGamepadElement):
        (WebCore::HIDGamepadElement::isButton const):
        (WebCore::HIDGamepadElement::isAxis const):

        * platform/gamepad/mac/HIDGamepadProvider.mm:
        (WebCore::HIDGamepadProvider::deviceAdded):
        * platform/gamepad/mac/MultiGamepadProvider.h:

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:

        * platform/mac/HIDDevice.cpp: Added.
        (WebCore::HIDDevice::HIDDevice):
        (WebCore::HIDDevice::uniqueInputElementsInDeviceTreeOrder const):
        * platform/mac/HIDDevice.h: Copied from Source/WebCore/platform/gamepad/PlatformGamepad.h.
        (WebCore::HIDDevice::rawElement const):
        (WebCore::HIDDevice::vendorID const):
        (WebCore::HIDDevice::productID const):
        (WebCore::HIDDevice::productName const):

        * platform/mac/HIDElement.cpp: Copied from Source/WebKit/UIProcess/Gamepad/UIGamepad.h.
        (WebCore::HIDElement::HIDElement):
        (WebCore::HIDElement::valueChanged):
        * platform/mac/HIDElement.h: Copied from Source/WebKit/UIProcess/Gamepad/UIGamepad.h.
        (WebCore::HIDElement::rawElement const):
        (WebCore::HIDElement::physicalMin const):
        (WebCore::HIDElement::physicalMax const):
        (WebCore::HIDElement::physicalValue const):
        (WebCore::HIDElement::usage const):
        (WebCore::HIDElement::usagePage const):
        (WebCore::HIDElement::cookie const):

        * testing/MockGamepad.cpp:
        (WebCore::MockGamepad::updateDetails):
        (WebCore::MockGamepad::setAxisValue):
        (WebCore::MockGamepad::setButtonValue):
        * testing/MockGamepad.h:

2020-07-29  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r265062.
        warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]

        No new tests, no new behaviors.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::copyFromChannel):
        (WebCore::AudioBuffer::copyToChannel):

2020-07-29  Jer Noble  <jer.noble@apple.com>

        Support HDR decode in SW VP9
        https://bugs.webkit.org/show_bug.cgi?id=214928

        Reviewed by Eric Carlson.

        Convert the incoming properties parsed from the VP9 header into extensions to our
        CMFormatDescription attached to each incoming video fram.

        Drive-by fix: Files in the wild will have incorrect values for whether a given
        frame is a keyframe or not. Trust the VP9 header parser rather than the container
        in this situations.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::convertToCMColorPrimaries):
        (WebCore::convertToCMTransferFunction):
        (WebCore::convertToCMYCbCRMatrix):
        (WebCore::createFormatDescriptionFromVP9HeaderParser):
        (WebCore::SourceBufferParserWebM::OnFrame):

2020-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Custom dropdown menu dismisses immediately on account.nhl.com
        https://bugs.webkit.org/show_bug.cgi?id=214944
        <rdar://problem/66248506>

        Reviewed by Jer Noble.

        Exempt account.nhl.com from site-specific "simulated mouse events" behavior, since it is incompatible with some
        custom dropdown menus that appear on this website.

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

2020-07-29  Clark Wang  <clark_wang@apple.com>

        Added constructor methods to ChannelMergerNode, ChannelSplitterNode
        https://bugs.webkit.org/show_bug.cgi?id=214851
        <rdar://problem/66233763>

        Reviewed by Chris Dumez.

        Added constructors for ChannelMergerNode, ChannelSplitterNode according to spec:
        https://www.w3.org/TR/webaudio/#ChannelMergerNode-constructors. Added new files
        for ChannelMergerOptions and ChannelSplitterOptions. This patch also ensures that
        BaseAudioContext::create*() and *Node::create() methods behave the same.

        Re-baselined existing tests that now pass, or fail further along.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createChannelSplitter):
        (WebCore::BaseAudioContext::createChannelMerger):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        (WebCore::ChannelMergerNode::setChannelCount):
        (WebCore::ChannelMergerNode::setChannelCountMode):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelMergerOptions.h: Added.
        * Modules/webaudio/ChannelMergerOptions.idl: Added.
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        (WebCore::ChannelSplitterNode::setChannelCount):
        (WebCore::ChannelSplitterNode::setChannelCountMode):
        (WebCore::ChannelSplitterNode::setChannelInterpretation):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ChannelSplitterOptions.h: Added.
        * Modules/webaudio/ChannelSplitterOptions.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-29  Clark Wang  <clark_wang@apple.com>

        Added copyFromChannel, copyToChannel to AudioBuffer
        https://bugs.webkit.org/show_bug.cgi?id=214926

        Reviewed by Chris Dumez.

        Added copyFromChannel, copyToChannel methods according to spec: 
        https://www.w3.org/TR/webaudio/#dom-audiobuffer-copyfromchannel-destination.
        Used Chromium implementation for reference:
        https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/webaudio/audio_buffer.cc.

        Re-baselined existing tests. Fails on catching sharedBuffer being passed in, but currently
        WebKit does not support sharedBuffer implementation.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::getChannelData):
        (WebCore::AudioBuffer::copyFromChannel):
        (WebCore::AudioBuffer::copyToChannel):
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioBuffer.idl:

2020-07-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Inspector bar in Mail compose shows incorrect text alignment style for ranged selections
        https://bugs.webkit.org/show_bug.cgi?id=214930
        <rdar://problem/66185224>

        Reviewed by Tim Horton.

        When a range of text is selected, AppKit consults `-attributedSubstringForProposedRange:completionHandler:` (or
        just `-attributedSubstringFromRange:` in WebKitLegacy) to update the inspector bar with new style information.
        Among this information is the paragraph style (an `NSParagraphStyle` corresponding to the attribute key
        `NSParagraphStyleAttributeName`), which AppKit uses to select either the left, center or right text alignment
        segmented control.

        However, in both WebKitLegacy and modern WebKit, we don't include this information at all in HTMLConverter,
        so AppKit just defaults to using `-[NSParagraphStyle defaultParagraphStyle]`, with a default text alignment of
        `NSTextAlignmentNatural`.

        To fix this, include a new paragraph style object in the case where the text alignment is not equal to natural
        (in other words, either a direction has been explicitly specified, or the text alignment style is not equal to
        "start"). This paragraph style matches the default paragraph style, except for the `alignment` property which
        is set to the corresponding `NSTextAlignment` value.

        Tests:  AttributedSubstringForProposedRange.TextAlignmentParagraphStyles
                FontAttributes.FontAttributesAfterChangingSelection

        * editing/Editor.cpp:
        (WebCore::Editor::fontAttributesAtSelectionStart const):

        Also fixes an existing bug in `Editor::fontAttributesAtSelectionStart`, where `NSTextAlignmentNatural` is
        currently always used for `text-align: start;`, even if the direction is specified as RTL. Instead, change this
        so that we only fall back to "natural" if no direction is specified; otherwise, go with the explicit "left" or
        "right" values.

        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedString):

2020-07-29  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r264476): Calling systemHasAC() regresses launch time performance
        https://bugs.webkit.org/show_bug.cgi?id=214907
        <rdar://problem/66191430>

        Reviewed by Eric Carlson.

        Because calling into IOPS can block, delay queries about AC state during WebProcessPool creation until
        the next run-loop.

        Simultaneously, we don't need to check HDR state in the UI process for IOS, so send a default value
        there as well.

        * platform/cocoa/PowerSourceNotifier.h:
        * platform/cocoa/PowerSourceNotifier.mm:
        (WebCore::PowerSourceNotifier::PowerSourceNotifier):
        * platform/cocoa/SystemBattery.h:
        * platform/cocoa/SystemBattery.mm:
        (WebCore::cachedSystemHasAC):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::collectScreenProperties):

2020-07-29  Don Olmstead  <don.olmstead@sony.com>

        Remove USE(ZLIB)
        https://bugs.webkit.org/show_bug.cgi?id=214929

        Reviewed by Darin Adler.

        Remove USE(ZLIB) guards in WebSocket code. Since WebSocketDeflateFramer::canDeflate
        is always true remove it and the callsite checking it in WebSocketChannel.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::connect):
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        (WebCore::WebSocketDeflateFramer::enableDeflate):
        (WebCore::WebSocketDeflateFramer::deflate):
        (WebCore::WebSocketDeflateFramer::resetDeflateContext):
        (WebCore::WebSocketDeflateFramer::inflate):
        (WebCore::WebSocketDeflateFramer::resetInflateContext):
        (WebCore::WebSocketDeflateFramer::canDeflate const): Deleted.
        * Modules/websockets/WebSocketDeflateFramer.h:
        * Modules/websockets/WebSocketDeflater.cpp:

2020-07-29  Chris Dumez  <cdumez@apple.com>

        Calling AudioNode constructors should have identical behavior to using create*() function on BaseAudioContext
        https://bugs.webkit.org/show_bug.cgi?id=214931

        Reviewed by Eric Carlson.

        Calling AudioNode constructors should have identical behavior to using create*() function on BaseAudioContext.
        Otherwise, this leads to assertion hits on the bots like we saw for Bug 214851.

        We need to make sure that the AudioContext gets initialized when an AudioNode constructor gets called. We also
        need to make sure refNode() gets called if necessary.

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createPanner):
        (WebCore::BaseAudioContext::createOscillator):
        (WebCore::BaseAudioContext::createPeriodicWave):
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::create):
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::create):

2020-07-29  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION: ASSERTION FAILED: !needsLayout() on tiled-drawing/scrolling/fast-scroll-mainframe-zoom.html flakily
        https://bugs.webkit.org/show_bug.cgi?id=214651
        <rdar://problem/65952371>

        Reviewed by Zalan Bujtas.

        Page::doAfterUpdateRendering() is expected to only call functions that can't trigger layout. However,
        it could cause the firing of the "monitorWheelEvent" callback which can run arbitrary JS, so move that
        earlier in the rendering update, before we do the final layout.

        Also assert that the main frame doesn't need layout at the end of Page::doAfterUpdateRendering();
        we were only checking subframes.

        Tested by lots of existing tests.

        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::Page::doAfterUpdateRendering):

2020-07-29  Chris Dumez  <cdumez@apple.com>

        Make sure playback state constants remain on OscillatorNode for backward compatibility
        https://bugs.webkit.org/show_bug.cgi?id=214925

        Reviewed by Eric Carlson.

        Make sure playback state constants remain on OscillatorNode for backward compatibility,
        while we keep supporting the prefixed Web Audio API.

        No new tests, updated existing test.

        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/WebKitOscillatorNode.idl:

2020-07-29  Chris Dumez  <cdumez@apple.com>

        http/tests/cookies/document-cookie-multiple-cookies.html is failing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=214880

        Reviewed by Darin Adler.

        Fix same bug as in r264943 but on Windows.

        No new tests, covered by http/tests/cookies/document-cookie-multiple-cookies.html.

        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp:
        (WebCore::parseDOMCookie):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2020-07-29  Youenn Fablet  <youenn@apple.com>

        scaleResolutionDownBy has no effect on RTCRtpSender
        https://bugs.webkit.org/show_bug.cgi?id=214783
        <rdar://problem/66108346>

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::updateRTCRtpSendParameters):
        Allow to change scaleResolutionDownBy.

2020-07-29  Mark Lam  <mark.lam@apple.com>

        CodeGeneratorJS should release the throwScope before doing a void call at end of a function.
        https://bugs.webkit.org/show_bug.cgi?id=214924

        Reviewed by Chris Dumez.

        It is necessary to release the throwScope because the void call at the end of the
        function may throw an exception.  Releasing the throwScope here says that this
        function is releasing the responsibility to handle the exception, and will allow
        the potential exception from the trailing void call to propagate to its caller.
        The responsibility to handle the exception is passed to this function's caller (or
        some earlier caller in the stack).  It is ok to release the throwScope here
        because the trailing void call will effectively be the last thing that this
        function does before returning.

        Covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementationFunctionCall):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::jsMapLikePrototypeFunctionClearBody):
        * bindings/scripts/test/JS/JSSetLike.cpp:
        (WebCore::jsSetLikePrototypeFunctionClearBody):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessageBody):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethod1Body):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethod2Body):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsBody):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsNotNeededBody):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterfaceBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecifiedBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArgumentsBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgumentBody):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::jsTestEnabledBySettingPrototypeFunctionEnabledBySettingOperationBody):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectInstanceFunctionRegularOperationBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Body):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Body):
        (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabledBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunctionBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1Body):
        (WebCore::jsTestInterfaceConstructorFunctionImplementsMethod4Body):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1Body):
        (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4Body):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionNamedSetterBody):
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::jsTestNamedDeleterWithIdentifierPrototypeFunctionNamedDeleterBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedSetterWithIdentifierPrototypeFunctionNamedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionNamedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionNamedSetterBody):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter1Body):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperationBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperationBody):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodePrototypeFunctionTestWorkerPromiseBody):
        (WebCore::jsTestNodePrototypeFunctionCalculateSecretResultBody):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::callJSTestObj1):
        (WebCore::callJSTestObj3):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Body):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Body):
        (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody):
        (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethodBody):
        (WebCore::jsTestObjPrototypeFunctionCalculateSecretResultBody):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableByteStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionSerializedValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithRecordBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionAddEventListenerBody):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListenerBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateBody):
        (WebCore::jsTestObjPrototypeFunctionWithDocumentArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAnyBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalObjectBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecordBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromiseBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgBody):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArgBody):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod13Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter2Body):
        (WebCore::jsTestObjConstructorFunctionClassMethodBody):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11Body):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12Body):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptionalBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptionalBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionOperationWithOptionalUnionParameterBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionConvert1Body):
        (WebCore::jsTestObjPrototypeFunctionConvert2Body):
        (WebCore::jsTestObjPrototypeFunctionConvert3Body):
        (WebCore::jsTestObjPrototypeFunctionConvert4Body):
        (WebCore::jsTestObjPrototypeFunctionOrangeBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethodBody):
        (WebCore::jsTestObjPrototypeFunctionAnyBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Body):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Body):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionBody):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverload1Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverload2Body):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload1Body):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload2Body):
        (WebCore::jsTestObjPrototypeFunctionAttachShadowRootBody):
        (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterBody):
        (WebCore::jsTestObjPrototypeFunctionBufferSourceParameterBody):
        (WebCore::jsTestObjPrototypeFunctionLegacyCallerNamedBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWorkerFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowAndWorkerFunctionBody):
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::jsTestOperationConditionalPrototypeFunctionNonConditionalOperationBody):
        (WebCore::jsTestOperationConditionalPrototypeFunctionConditionalOperationBody):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionBody):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionFuncBody):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadowBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfUnionsArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionUnionArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampBody):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedefBody):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithExceptionBody):

2020-07-29  Darin Adler  <darin@apple.com>

        Improve range idioms and other changes to prepare the way for more reduction in live range use
        https://bugs.webkit.org/show_bug.cgi?id=214882

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AccessibilityReplacedText::AccessibilityReplacedText): Call the
        VisiblePosition versions of start and end instead of converting to Position
        and then back to VisiblePosition.
        (WebCore::AXObjectCache::rangeMatchesTextNearRange): Simplify with makeSimpleRange.
        (WebCore::AXObjectCache::characterOffsetForPoint): Ditto.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions const):
        Update idiom for creating VisiblePositionRange since it's just a struct now
        without explicit constructors.
        (WebCore::AccessibilityObject::positionOfLeftWord const): Ditto.
        (WebCore::AccessibilityObject::positionOfRightWord const): Ditto.
        (WebCore::AccessibilityObject::leftLineVisiblePositionRange const): Ditto.
        (WebCore::AccessibilityObject::rightLineVisiblePositionRange const): Ditto.
        (WebCore::AccessibilityObject::sentenceForPosition const): Ditto.
        (WebCore::AccessibilityObject::paragraphForPosition const): Ditto.
        (WebCore::AccessibilityObject::styleRangeForPosition const): Ditto.
        (WebCore::AccessibilityObject::visiblePositionRangeForRange const): Ditto.
        (WebCore::AccessibilityObject::lineRangeForPosition const): Ditto.
        (WebCore::AccessibilityObject::stringForVisiblePositionRange): Ditto.
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange const): Ditto.
        (WebCore::AccessibilityObject::nextSentenceEndPosition const): Ditto.
        (WebCore::AccessibilityObject::previousSentenceStartPosition const): Ditto.

        * accessibility/AccessibilityObjectInterface.h: Moved VisiblePositionRange
        to VisiblePosition.h for wider use. Also removed constructors.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const): Simplify with
        makeSimpleRange.
        (WebCore::AccessibilityRenderObject::linkClickPoint): Ditto.
        (WebCore::AccessibilityRenderObject::clickPoint): Ditto.
        (WebCore::AccessibilityRenderObject::visiblePositionRange const): Updated
        for removal of VisiblePositionRange constructor.
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine const):
        Remove unnecessary explicit conversion to VisiblePositionRange.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (visiblePositionRangeForTextMarkerRange): Added, replacing separate functions
        for start and end.
        (-[WebAccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        Simplify using visiblePositionRangeForTextMarkerRange.

        * dom/Document.cpp: Added include of "Range.h", may not be needed right now,
        but highly likely to be needed after future live range work.
        * dom/Node.cpp: Removed include of "Range.h".

        * dom/Position.h: Added PositionRange. This will be a more efficient
        alternative to SimpleRange that can avoid computing node offets for positions
        before and after anchor nodes in some cases. Not used yet.

        * dom/RadioButtonGroups.cpp: Removed include of "Range.h".

        * dom/Range.h: Export makeSimpleRange overload now used outside WebCore.

        * dom/SimpleRange.cpp:
        (WebCore::makeSimpleRange): Added overloads for ranges that consist of just
        a single boundary point, so the argument does not have to be passed twice.
        (WebCore::commonInclusiveAncestor): Added overload so caller can just pass
        a simple range rather than passing two boundary point container nodes.

        * dom/SimpleRange.h: Added makeSimpleRange overloads that take one or more
        argument that can be passed to makeBoundaryPoint or actual boundary points.

        * dom/StaticRange.cpp: Removed include of "Range.h".

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand):
        Simplify with makeSimpleRange.
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        Ditto.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Ditto.

        * editing/CompositeEditCommand.cpp:
        (WebCore::stringForVisiblePositionIndexRange): Updated for removal of
        VisiblePositionRange constructor; also use move to reduce reference count
        churn a tiny bit.
        (WebCore::CompositeEditCommand::moveParagraphs): Simplify with makeSimpleRange.

        * editing/DeleteSelectionCommand.cpp: Added include of "Range.h", may not be needed now,
        but highly likely to be needed after future live range work.

        * editing/Editing.cpp:
        (WebCore::indexForVisiblePosition): Simplify using makeSimpleRange and
        makeBoundaryPointBeforeNodeContents.

        * editing/Editor.cpp:
        (WebCore::Editor::selectedText const): Simplify using VisibleSelection::firstRange.
        (WebCore::extendSelection): Simplify using makeSimpleRange.
        (WebCore::Editor::contextRangeForCandidateRequest const): Ditto.
        (WebCore::Editor::adjustedSelectionRange): Simplify with the new overload
        of commonInclusiveAncestor.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::wordOffsetInRange const): Deleted. Moved the code
        into the iOS-specific part of WebKitLegacy WebFrame.
        (WebCore::FrameSelection::spaceFollowsWordInRange const): Deleted. Moved the
        code into the iOS-specific part of WebKitLegacy WebFrame.
        (WebCore::FrameSelection::selectionAtSentenceStart const): Merged in with
        actualSelectionAtSentenceStart.
        (WebCore::FrameSelection::actualSelectionAtSentenceStart const): Deleted.
        * editing/FrameSelection.h: Updated for the above deletion.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::offsetTo const): Simplify with makeSimpleRange.

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::ParagraphContentIterator): Simplify with
        makeSimpleRange.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::postTextStateChangeNotificationForDeletion): Pass
        visibleStart/End instead of converting to Position and back to VisiblePosition.

        * editing/VisiblePosition.cpp:
        (WebCore::makeSimpleRange): Added. Converts a VisiblePositionRange into
        a SimpleRange.
        * editing/VisiblePosition.h: Moved VisiblePositionRange here.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::firstRange const): Simplify using makeSimpleRange.
        (WebCore::VisibleSelection::toNormalizedRange const): Ditto.
        (WebCore::makeSearchRange): Deleted. This was confusingly named given that
        it was only used in appendTrailingWhitespace.
        (WebCore::VisibleSelection::appendTrailingWhitespace): Merged makeSearchRange
        in here and simplified using makeSimpleRange.

        * editing/VisibleSelection.h: Added conversion to VisiblePositionRange.
        Previously this was implemented as a constructor for VisiblePositionRange,
        but that was a layering inversion since this is built on top of VisiblePosition.

        * editing/VisibleUnits.cpp:
        (WebCore::distanceBetweenPositions): Simplified using makeSimpleRange.
        (WebCore::charactersAroundPosition): Ditto.
        (WebCore::wordRangeFromPosition): Removed an unhelpful comment.
        (WebCore::closestWordBoundaryForPosition): Ditto.

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItem): Simplify using makeSimpleRange.
        (WebCore::searchForLinkRemovingExistingDDLinks): Removed out argument
        about modifying the DOM. This was used to work around a problem caused by
        using live ranges. The problem no longer exists because the code does not
        use live ranges any more.
        (WebCore::DataDetection::detectContentInRange): Removed the workaround.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Simplify using makeSimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.

        * editing/cocoa/WebContentReaderCocoa.mm: Added include of "Range.h", may
        not be needed now, but highly likely to be needed after future live range work.

        * editing/ios/DictationCommandIOS.cpp: Removed include of "Range.h".

        * editing/mac/DictionaryLookupLegacy.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Simplify using makeSimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.

        * editing/mac/EditorMac.mm: Removed include of "Range.h".

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::renderedTextRespectingRange): Simplify
        using makeSimpleRange.

        * editing/win/EditorWin.cpp: Added include of "Range.h", may not be needed now,
        but highly likely to be needed after future live range work.

        * html/shadow/mac/ImageControlsButtonElementMac.cpp: Removed include of "Range.h".

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::addRange): Call setSelection instead of moveTo.
        No need to have two functions that do the same thing.

        * page/EventHandler.cpp:
        (WebCore::textDistance): Simplify using makeSimpleRange.

        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint): Simplify using makeSimpleRange.

        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange): Simplify using the
        commonInclusiveAncestor overload that takes a range.
        (WebCore::initializeIndicator): Ditto.

2020-07-29  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late July 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=214918

        Unreviewed build fix.

        No new tests needed.

        * Modules/webaudio/WebKitOscillatorNode.h: Add missing WebKitAudioContext.h header to make
        the constructor of WebKitOscillatorNode that WebKitAudioContext inherits from the base
        context, otherwise the compiler does not know which base class constructor to invoke.
        * bindings/js/JSDOMConvertDate.h: Add missing JSGlobalObject.h header.
        * bindings/js/ReadableStreamDefaultController.cpp: Sprinkle missing JSC:: namespace
        prefixes where needed.
        (WebCore::invokeReadableStreamDefaultControllerFunction):
        (WebCore::ReadableStreamDefaultController::close):
        (WebCore::ReadableStreamDefaultController::error):
        (WebCore::ReadableStreamDefaultController::enqueue):
        * editing/SpellChecker.cpp: Add missing inclusion of TextIterator.h.
        * editing/SpellChecker.h: Add missing inclusion of SimpleRange.h.
        * editing/TextCheckingHelper.h: Forward declare Frame and VisibleSelection.
        * editing/TextIterator.cpp: Add missing inclusion of Range.h.
        * workers/WorkerScriptLoader.h: Add missing inclusion of CertificateInfo.h.

2020-07-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265002.
        https://bugs.webkit.org/show_bug.cgi?id=214919

        Broke imported/w3c/web-platform-tests/webaudio/the-audio-api
        /the-scriptprocessornode-interface/simple-input-output.html

        Reverted changeset:

        "Added constructor methods to ChannelMergerNode,
        ChannelSplitterNode"
        https://bugs.webkit.org/show_bug.cgi?id=214851
        https://trac.webkit.org/changeset/265002

2020-07-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] REGRESSION(r264986) Unreviewed crash fix
        https://bugs.webkit.org/show_bug.cgi?id=201507

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext): Initialize a variable 'surface' as EGL_NO_SURFACE for WinCairo.

2020-07-28  Chris Dumez  <cdumez@apple.com>

        Move non standard OscillatorNode API to new webKitOscillatorNode interface
        https://bugs.webkit.org/show_bug.cgi?id=214902

        Reviewed by Darin Adler.

        Move non standard OscillatorNode API to new webKitOscillatorNode interface:
        https://webaudio.github.io/web-audio-api/#oscillatornode

        Namely, the playbackState attribute and its associated constants are now exposed
        on the prefixed webKitOscillatorNode interface instead of the unprefixed
        OscillatorNode. This way, this API is still available to apps using the prefixed
        API but we do not support this legacy API if the app is using the modern unprefixed
        API.

        Test: webaudio/oscillatornode-legacy-api.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        (WebCore::OscillatorNode::setType):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createWebKitOscillator):
        * Modules/webaudio/WebKitAudioContext.h:
        * Modules/webaudio/WebKitAudioContext.idl:
        * Modules/webaudio/WebKitOscillatorNode.h: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl.
        (WebCore::WebKitOscillatorNode::create):
        (WebCore::WebKitOscillatorNode::setWebKitPeriodicWave):
        (WebCore::WebKitOscillatorNode::WebKitOscillatorNode):
        * Modules/webaudio/WebKitOscillatorNode.idl: Copied from Source/WebCore/Modules/webaudio/OscillatorNode.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2020-07-28  Karl Rackler  <rackler@apple.com>

        Unreviewed, reverting r264930.

        Reverting Pre-Submission Testing

        Reverted changeset:

        "scaleResolutionDownBy has no effect on RTCRtpSender"
        https://bugs.webkit.org/show_bug.cgi?id=214783
        https://trac.webkit.org/changeset/264930

2020-07-28  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Fix 'align-content' in grid containers with small content area
        https://bugs.webkit.org/show_bug.cgi?id=214370

        Reviewed by Darin Adler.

        In order to properly obey 'align-content', grid containers need to know
        the available grid space for the block axis. But there was a bug when
        the sum of border and padding sizes in the block axis were bigger than
        the content area. Then the available space was considered to be that sum.

        This patch fixes it so that the available grid space is the size of its
        content box when that is definite.

        Tests: imported/w3c/web-platform-tests/css/css-grid/alignment/grid-place-content-001.html
               imported/w3c/web-platform-tests/css/css-sizing/available-height-for-replaced-content-001.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalHeight const):

2020-07-28  Peng Liu  <peng.liu6@apple.com>

        Clean up PlaybackSessionInterface[Mac|AVKit]
        https://bugs.webkit.org/show_bug.cgi?id=214895

        Reviewed by Eric Carlson.

        No new tests, no functional change.

        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::PlaybackSessionInterfaceAVKit):
        (WebCore::PlaybackSessionInterfaceAVKit::playbackSessionModel const):
        Remove unnecessary WEBCORE_EXPORT.
        Include the correct header for Ref.
        Replace "protected" with "private".
        Use WeakPtr of PlaybackSessionModel instead of a raw pointer.

        * platform/mac/PlaybackSessionInterfaceMac.h:
        Add "final" to ensureControlsManager().
        Some small cleanup.

2020-07-28  Chris Dumez  <cdumez@apple.com>

        [EventSource] WebKit fails to UTF-8 encode the Last-Event-ID HTTP header value
        https://bugs.webkit.org/show_bug.cgi?id=214860

        Reviewed by Alex Christensen and Darin Adler.

        WebKit fails to UTF-8 encode the Last-Event-ID HTTP header value for EventSource.

        The specification is here:
        https://html.spec.whatwg.org/multipage/server-sent-events.html#reestablish-the-connection (step 5.3.)

        This is causing us to fail a couple of EventSource web-platform-tests which are passing in both Chrome & Firefox.

        No new tests, rebaselined existing tests.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::httpHeaderValueUsingSuitableEncoding):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2020-07-28  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] ANGLE D3D renderer can crash when PlatformDisplayWin is destructed in IPC thread
        https://bugs.webkit.org/show_bug.cgi?id=214241

        Reviewed by Don Olmstead.

        Web process calls _exit() in IPC thread when the IPC connection is
        closed. PlatformDisplay::sharedDisplay has a static variable of
        std::unique_ptr<PlatformDisplay> to ensure it will be destructed
        on the process termination. This rarely causes crashes in ANGLE
        because ANGLE D3D renderer isn't thread-safe at the moment.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::sharedDisplay): Don't destruct
        PlatformDisplay for PLATFORM(WIN). Use unique_ptr::release to leak it.

2020-07-28  Clark Wang  <clark_wang@apple.com>

        Added constructor methods to ChannelMergerNode, ChannelSplitterNode
        https://bugs.webkit.org/show_bug.cgi?id=214851

        Reviewed by Chris Dumez.

        Added constructors for ChannelMergerNode, ChannelSplitterNode according to spec: 
        https://www.w3.org/TR/webaudio/#ChannelMergerNode-constructors. Added new files
        for ChannelMergerOptions and ChannelSplitterOptions.

        Re-baselined existing tests that now pass, or fail due to a different interface.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createChannelSplitter):
        (WebCore::BaseAudioContext::createChannelMerger):
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        (WebCore::ChannelMergerNode::setChannelCount):
        (WebCore::ChannelMergerNode::setChannelCountMode):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelMergerOptions.h: Added.
        * Modules/webaudio/ChannelMergerOptions.idl: Added.
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        (WebCore::ChannelSplitterNode::setChannelCount):
        (WebCore::ChannelSplitterNode::setChannelCountMode):
        (WebCore::ChannelSplitterNode::setChannelInterpretation):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ChannelSplitterOptions.h: Added.
        * Modules/webaudio/ChannelSplitterOptions.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-28  Rob Buis  <rbuis@igalia.com>

        PerformanceObserver should work with 'type' and not just `entryTypes`
        https://bugs.webkit.org/show_bug.cgi?id=209216

        Reviewed by Youenn Fablet.

        Add support for 'type' attribute as specified here [1].

        Tests: imported/w3c/web-platform-tests/performance-timeline/po-observe-type.any.html
               imported/w3c/web-platform-tests/performance-timeline/po-observe-type.any.worker.html

        [1] https://w3c.github.io/performance-timeline/#dom-performanceobserverinit

        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:

2020-07-28  Karl Rackler  <rackler@apple.com>

        Unreviewed, reverting r264955.

        Reverting because this commit may have caused issues with
        tests.

        Reverted changeset:

        "WebCoreResourceHandleAsOperationQueueDelegate can use
        RunLoop::dispatch"
        https://bugs.webkit.org/show_bug.cgi?id=214771
        https://trac.webkit.org/changeset/264955

2020-07-28  Saam Barati  <sbarati@apple.com>

        JSPromise::reject might throw more than an unterminated exception
        https://bugs.webkit.org/show_bug.cgi?id=214854
        <rdar://problem/66152648>

        Reviewed by Yusuke Suzuki.

        Before, we were assuming the only exception that could be thrown
        was an early termination exception. However, it's tenuous to assume
        the types of exceptions that can be thrown. This particular test was
        throwing a stack overflow exception. It's better form to just propagate
        the exception upwards instead of attempting to enumerate the list of
        valid exceptions.

        Test: js/dom/promise-rejection-might-stack-overflow.html

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):

2020-07-28  Alex Christensen  <achristensen@webkit.org>

        Add null checks in ResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=214786
        <rdar://problem/61106685>

        Reviewed by Youenn Fablet.

        We had added some iOS-only checks based on crash tracer data.
        It turns out these code paths are indeed reachable.  Let's make ResourceLoader less platform-dependent.

        The original patch for this has a test that would reach this code, but it never finishes loading.
        Rather than add a test that always times out or not committing the fix, I commit the fix without the test.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::cancel):

2020-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        IndexedDB binding utilities miss exception checks
        https://bugs.webkit.org/show_bug.cgi?id=214820
        <rdar://problem/66152374>

        Reviewed by Mark Lam.

        Test: js/dom/indexed-db-operations-exception-checks.html

        This patch appropriately inserts exception checking code into IndexedDB binding utilities.

        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        (WebCore::IDBKeyRange::includes):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::get):
        (WebCore::set):
        (WebCore::toJS):
        (WebCore::createIDBKeyFromValue):
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::ensureNthValueOnKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::maybeCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMConvertDate.cpp:
        (WebCore::valueToDate):
        * bindings/js/JSDOMConvertDate.h:
        (WebCore::Converter<IDLDate>::convert):
        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::JSConverter<IDLDOMString>::convert):
        (WebCore::JSConverter<IDLByteString>::convert):
        (WebCore::JSConverter<IDLUSVString>::convert):
        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateEnumerationImplementationContent):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertEnumerationToJS):
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        (WebCore::convertEnumerationToJS):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertNPVariantToValue):

2020-07-28  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Crash in Nicosia::GC3DLayer::makeContextCurrent due to failure in EGL display creation
        https://bugs.webkit.org/show_bug.cgi?id=201507

        Reviewed by Carlos Garcia Campos.

        Ensure that EGL context and display creation failures are always
        logged using RELEASE_LOG_INFO(), even for intermediate failures for
        which a fallback will be tried next, in order to ease diagnosis of
        related issues. Failure to create contexts at the end of the public
        methods ::createContext() and ::createSharingContext() is still
        logged with WTFLogAlways() to write a notice to standard error, and
        let users/developers know that something failed and checking the
        complete logs (e.g. with "journalctl" on Linux) may reveal more
        information.

        This also replaces the chains of "if" statements with a single
        "switch" on the PlatformDisplay::Type enum, which makes the code
        easier to follow and should be more robust as well.

        No new tests needed.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::getEGLConfig):
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createSurfacelessContext):
        (WebCore::GLContextEGL::createContext):
        (WebCore::GLContextEGL::createSharingContext):

2020-07-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Use GST_PLUGIN_FEATURE_RANK env var to have Thunder ranked higher in runtime instead of current custom one
        https://bugs.webkit.org/show_bug.cgi?id=214826

        * platform/graphics/gstreamer/GStreamerCommon.cpp: Unreviewed,
        added comment about delaying because of the dependency on
        GStreamer 1.16.

2020-07-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] media/vp9.html failing since check-in in r263894
        https://bugs.webkit.org/show_bug.cgi?id=213947

        Reviewed by Philippe Normand.

        Test: media/vp9.html.

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

2020-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Support for backdrop-filter
        https://bugs.webkit.org/show_bug.cgi?id=169988

        Reviewed by Adrian Perez de Castro.

        Add initial support for backdrop filters to coordinated graphics.

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::flushState): Update the backdrop layer.
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive): Call it on backdrop layer too.
        (WebCore::TextureMapperLayer::paintSelfAndChildren): Paint the backdrop layer before current layer to apply
        backdrop filters on previous contents, then the layer is painted on top.
        (WebCore::TextureMapperLayer::paintIntoSurface): In case of backdrop layer paint the root layer up to the target
        layer into the intermediate surface.
        (WebCore::TextureMapperLayer::setBackdropLayer): Set the bakdrop layer and mark it as such.
        (WebCore::TextureMapperLayer::applyAnimationsRecursively): Also call syncAnimations on backdrop layer to get the
        filters updated.
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeBackdropFilters):
        (WebCore::CoordinatedGraphicsLayer::didChangeBackdropFiltersRect):
        (WebCore::CoordinatedGraphicsLayer::setShouldUpdateVisibleRect): Also call it for backdrop layer.
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible): Ditto.
        (WebCore::CoordinatedGraphicsLayer::setBackdropFilters):
        (WebCore::CoordinatedGraphicsLayer::setBackdropFiltersRect):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingState): Also call it for backdrop layer.
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly): Handle the changes in backdrop
        filters and the rect, creating the backdrop layer or updating it.
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers): Also call it for backdrop layer.
        (WebCore::CoordinatedGraphicsLayer::addAnimation): Handle AnimatedPropertyWebkitBackdropFilter property.
        (WebCore::dumpInnerLayer): Dump internal layer info.
        (WebCore::CoordinatedGraphicsLayer::dumpAdditionalProperties const): Dump backdrop layer.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2020-07-28  Youenn Fablet  <youenn@apple.com>

        ReadableStreamDefaultController should use private JS built-in methods
        https://bugs.webkit.org/show_bug.cgi?id=214819

        Reviewed by Darin Adler.

        Call directly private buitl-in methods instead of getting close/error/enqueue methods from the controller.
        Test: http/wpt/fetch/readableStreamDefaultController-overwriting.html

        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::invokeReadableStreamDefaultControllerFunction):
        (WebCore::ReadableStreamDefaultController::close):
        (WebCore::ReadableStreamDefaultController::error):
        (WebCore::ReadableStreamDefaultController::enqueue):
        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::enqueue):
        (WebCore::ReadableStreamDefaultController::error):

2020-07-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r230479): [TextureMapper] replica layer is not rendered
        https://bugs.webkit.org/show_bug.cgi?id=214827

        Reviewed by Adrian Perez de Castro.

        Since r230479 the replica layer transform is not applied because m_layerTransforms.localTransform is never set
        for the replica layer. We need to call applyAnimationsRecursively() on the replica layer to initialize the
        localTransform (even when we know the replica layer won't have animations).

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::applyAnimationsRecursively):

2020-07-27  Alex Christensen  <achristensen@webkit.org>

        Null check inlineStyle in StyledElement::invalidateStyleAttribute
        https://bugs.webkit.org/show_bug.cgi?id=214782
        <rdar://problem/66052987>

        Reviewed by Geoffrey Garen.

        This fixes a reachable crash.

        Test: fast/dom/null-inline-style.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::invalidateStyleAttribute):

2020-07-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Drag and drop does not preserve file names that contain periods
        https://bugs.webkit.org/show_bug.cgi?id=214701
        <rdar://problem/66014009>

        Reviewed by Tim Horton.

        Cocoa documentation does not make it clear whether the `-suggestedName` property on `NSItemProvider` should or
        should not include the file extension. To avoid adding a redundant file extension, logic in
        `WebItemProviderPasteboard` attempts to deduce whether the suggested name already contains an extension, and
        only appends a file extension (taken from name of the original file) if the suggested name does not have one.

        Unfortunately, since this logic only checks whether or not there is a period in the filename, it will
        incorrectly avoid adding a file extension when the suggested name contains a period. To fix this, instead of
        checking for the presence of a period, check to see whether the file extension of the suggested name is the
        same, and append the extension if it isn't.

        Test: DragAndDropTests.SuggestedNameContainsDot

        * platform/ios/WebItemProviderPasteboard.mm:
        (linkTemporaryItemProviderFilesToDropStagingDirectory):

2020-07-27  Zalan Bujtas  <zalan@apple.com>

        Extension is sized incorrectly, content is cut off.
        https://bugs.webkit.org/show_bug.cgi?id=214858
        <rdar://problem/64135680>

        Reviewed by Simon Fraser.

        Autosizing uses an 1px tall viewport to layout the content initially. When the document renderer's height is set to a percent value, this
        1px tall viewport will drive the available height for the descendants and we pretty much end up with overflow content.
        Autosizing takes the overflow into account when computing the final content size, however this overflow depends on the type of the layout context (e.g. flex vs. block).

        Let's replace percent height values on the document renderer with the initial "height: auto".

        Test: fast/dynamic/size-to-content-autosize-with-percent-document-height.html

        * page/FrameView.cpp:
        (WebCore::FrameView::performSizeToContentAutoSize):

2020-07-27  Chris Dumez  <cdumez@apple.com>

        Update release*() functions on ExceptionOr() to always release the member
        https://bugs.webkit.org/show_bug.cgi?id=214835

        Reviewed by Darin Adler.

        Update release*() functions on ExceptionOr() to always release the member instead of
        simply doing a cast to an rvalue reference and leaving it up to the caller.

        Also add assertions to make sure we don't release those members more than once and to
        make sure we don't try to access the member after releasing it.

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::doOpenCursor):
        (WebCore::IDBIndex::doOpenKeyCursor):
        (WebCore::IDBIndex::doGetAll):
        (WebCore::IDBIndex::doGetAllKeys):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::doOpenCursor):
        (WebCore::IDBObjectStore::doOpenKeyCursor):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::doGetAll):
        (WebCore::IDBObjectStore::doGetAllKeys):
        Fix issues found in existing code by new assertions.

        * dom/ExceptionOr.h:
        (WebCore::ExceptionOr<ReturnType>::exception const):
        (WebCore::ExceptionOr<ReturnType>::releaseException):
        (WebCore::ExceptionOr<ReturnType>::returnValue const):
        (WebCore::ExceptionOr<ReturnType>::releaseReturnValue):
        (WebCore::>::releaseException):
        (WebCore::ExceptionOr<void>::exception const):
        (WebCore::ExceptionOr<void>::releaseException):

        * dom/TreeWalker.cpp:
        Fix issues found in existing code by new assertions.

2020-07-27  Geoffrey Garen  <ggaren@apple.com>

        WebCoreResourceHandleAsOperationQueueDelegate can use RunLoop::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=214771

        Reviewed by Darin Adler.

        Use the new helper function for consistency, and to remove a bit of code.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (scheduledWithCustomRunLoopMode): Deleted.
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]): Deleted.

2020-07-27  Chris Dumez  <cdumez@apple.com>

        thisValue is not always set correctly when calling JS callbacks
        https://bugs.webkit.org/show_bug.cgi?id=214847

        Reviewed by Darin Adler.

        thisValue was not always set correctly when calling JS callbacks.

        This was causing us to fail the last subtest on:
        http://w3c-test.org/dom/traversal/TreeWalker-acceptNode-filter.html

        The specification for TreeWalker is here:
        - https://dom.spec.whatwg.org/#concept-node-filter

        Step 6 refers to [call a user object’s operation] in the WebIDL specification:
         - https://heycam.github.io/webidl/#call-a-user-objects-operation

        Step 10.5 says:
        "Set thisArg to O (overriding the provided value)."

        We were missing this step in our implementation so thisValue ended up being undefined
        (as per earlier step 2).

        No new tests, resync'd existing test.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):

2020-07-27  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation should not extract non-breaking spaces
        https://bugs.webkit.org/show_bug.cgi?id=214839
        <rdar://problem/64113531>

        Reviewed by Wenson Hsieh.

        Spaces are very likely to be dropped during translation. And non-breaking space, if dropped, is likely to affect
        layout of web page.

        API test: TextManipulation.StartTextManipulationIgnoresSpaces

        * editing/TextManipulationController.cpp:
        (WebCore::isNotSpace):
        (WebCore::TextManipulationController::parse):

2020-07-27  Chris Dumez  <cdumez@apple.com>

        ASSERT([filteredCookies.get() count] <= 1) on  imported/w3c/web-platform-tests/websockets/cookies/third-party-cookie-accepted.https.html
        https://bugs.webkit.org/show_bug.cgi?id=214222
        <rdar://problem/65587120>

        Reviewed by Alex Christensen.

        Per the HTML specification [1], upon setting document.cookie, we should act as we would when receiving a Set-Cookie string [2].
        This means that you can only set one cookie at a time (you cannot comma-separate several cookies).

        We were behaving correctly on macOS because we were using the [NSHTTPCookie _parsedCookiesWithResponseHeaderFields] SPI that was
        made specifically for this purpose. However, we would set multiple cookies (in release), and crash in debug on iOS because iOS
        was using a different API to parse the cookies ([NSHTTPCookie cookiesWithResponseHeaderFields:).

        Note that [NSHTTPCookie _parsedCookiesWithResponseHeaderFields] was deprecated in CFNetwork, in favor of
        [NSHTTPCookie _cookieForSetCookieString:]. As a result, I updated both macOS and iOS to use the same new CFNetwork SPI, which
        gives us the standard behavior.

        [1] https://html.spec.whatwg.org/#dom-document-cookie
        [2] https://tools.ietf.org/html/rfc6265#section-4.1

        Test: http/tests/cookies/document-cookie-multiple-cookies.html

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::parseDOMCookie):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):

2020-07-27  Clark Wang  <clark_wang@apple.com>

        Added Constructor method to OscillatorNode
        https://bugs.webkit.org/show_bug.cgi?id=214746

        Reviewed by Chris Dumez.

        Re-baselined existing tests that now pass, or fail further along.

        Added ctor to OscillatorNode, added OscillatorOptions, OscillatorType files all according to spec:
        https://www.w3.org/TR/webaudio/#OscillatorNode-constructors. Updated createOscillator() method in 
        BaseAudioContext.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioContextOptions.h:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createOscillator):
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        (WebCore::OscillatorNode::OscillatorNode):
        (WebCore::OscillatorNode::setType):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        (WTF::LogArgument<WebCore::OscillatorType>::toString):
        (WTF::LogArgument<WebCore::OscillatorNode::Type>::toString): Deleted.
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/OscillatorOptions.h: Copied from Source/WebCore/Modules/webaudio/PeriodicWaveConstraints.h.
        * Modules/webaudio/OscillatorOptions.idl: Copied from Source/WebCore/Modules/webaudio/PeriodicWaveConstraints.h.
        * Modules/webaudio/OscillatorType.h: Copied from Source/WebCore/Modules/webaudio/PeriodicWaveConstraints.h.
        * Modules/webaudio/OscillatorType.idl: Copied from Source/WebCore/Modules/webaudio/PeriodicWaveConstraints.h.
        * Modules/webaudio/PannerOptions.h:
        * Modules/webaudio/PeriodicWave.cpp:
        * Modules/webaudio/PeriodicWaveConstraints.h:
        * Modules/webaudio/PeriodicWaveOptions.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-27  Mark Lam  <mark.lam@apple.com>

        DisallowVMEntry needs a copy assignment operator, detected by gcc's -Wdeprecated-copy warning
        https://bugs.webkit.org/show_bug.cgi?id=214809

        Reviewed by Yusuke Suzuki.

        Added handling of a possible VMInquiry failure in JSDOMWindow::getOwnPropertySlot()
        after returning from Base::getOwnPropertySlot().  If a VMInquiry is requested and
        Base::getOwnPropertySlot() returns false with slot.isTaintedByOpaqueObject() set,
        then it means that Base::getOwnPropertySlot() failed to execute the VMInquiry,
        not that it successfully determined that the property doesn't exist.

        This issue was noticed while studying how JSDOMWindow::getOwnPropertySlot() uses
        copy assignment of JSC::PropertySlots.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2020-07-27  Dean Jackson  <dino@apple.com>

        Repeatable WebContent crash: WebCore::jsWebGLRenderingContextPrototypeFunctionGetError
        https://bugs.webkit.org/show_bug.cgi?id=214814
        rdar://59290537

        Reviewed by Anders Carlsson.

        If a WebGL context was killed due to too many contexts
        in the page, we would get a null pointer crash if
        the page called getError() more than once on it.
        This is an edge case not covered by the WebGL conformance
        suite since the recyling behaviour is specific to our
        implementation.

        Test: fast/canvas/webgl/recycle-contexts.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getError): Add a null check.

2020-07-27  Youenn Fablet  <youenn@apple.com>

        scaleResolutionDownBy has no effect on RTCRtpSender
        https://bugs.webkit.org/show_bug.cgi?id=214783
        <rdar://problem/66108346>

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::updateRTCRtpSendParameters):
        Allow to change scaleResolutionDownBy.

2020-07-25  Simon Fraser  <simon.fraser@apple.com>

        Scroll Snap broken when using RTL layout
        https://bugs.webkit.org/show_bug.cgi?id=193671
        <rdar://problem/47457471>

        Reviewed by Wenson Hsieh.

        There were various places in the scroll snapping code which confused scroll offsets (zero-based)
        with scroll positions (relative to scroll origin, can be negative). This broke snapping in
        `direction: rtl` content.
        
        The computation of snap locations in updateSnapOffsetsForScrollableArea() was also broken
        in RTL; we need to snap the right edge of boxes to the right edge of the scroller for the 'start'
        alignment. (Snapping for LTR boxes in an RTL scroller is poorly defined; for now, follow Gecko.)

        Tests: css3/scroll-snap/scroll-snap-2d-change-axis-type-rtl.html
               css3/scroll-snap/scroll-snap-2d-offsets-computed-independently.rtl.html
               css3/scroll-snap/scroll-snap-elements-container-larger-than-children-rtl.html
               css3/scroll-snap/scroll-snap-iframe-rtl.html
               css3/scroll-snap/scroll-snap-offsets-mixed-rtl.html
               css3/scroll-snap/scroll-snap-offsets-rtl.html

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::computeScrollSnapAlignOffset):
        (WebCore::updateSnapOffsetsForScrollableArea):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::scrollOffset const):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset):
        (WebCore::ScrollAnimator::scrollOffset const):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::updateScrollSnapPoints):

2020-07-26  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wunused-parameter in FilterEffectRenderer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=214808

        Unreviewed.

        * platform/graphics/filters/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::tryCreate):

2020-07-22  Darin Adler  <darin@apple.com>

        Stop using live ranges in SpellChecker.h and TextCheckingHelper.h
        https://bugs.webkit.org/show_bug.cgi?id=214648

        Reviewed by Sam Weinig.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        Removed unneeded include of TextCheckingHelper.h.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers): Updated for change
        to the argument type name.
        (WebCore::DocumentMarkerController::filterMarkers): Ditto.
        (WebCore::addMarker): Added. Convenience so call doesn't have to get
        the document to call this.
        (WebCore::removeMarkers): Ditto.

        * dom/DocumentMarkerController.h: Moved RemovePartiallyOverlappingMarker
        out of the DocumentMarkerController class, tweaked its name and changed
        it into an enum class. Added conveniences functions for add/removeMarker.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        Use convenience versions of removeMarkers and addMarker.
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult): Ditto.
        (WebCore::AlternativeTextController::respondToUnappliedEditing): Ditto.
        (WebCore::AlternativeTextController::markReversed): Ditto.
        (WebCore::AlternativeTextController::markCorrection): Ditto.
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection): Ditto.
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand): Ditto.
        (WebCore::AlternativeTextController::applyAlternativeTextToRange): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Ditto.
        (WebCore::Editor::learnSpelling): Ditto.
        (WebCore::Editor::advanceToNextMisspelling): Rewrote to not use a live
        range and for the changes to the TextCheckingHelper.
        (WebCore::Editor::isSelectionUngrammatical): Deleted.
        (WebCore::Editor::guessesForMisspelledOrUngrammatical): Changed to use a
        return value instead of out arguments.
        (WebCore::Editor::clearMisspellingsAndBadGrammar): Use convenience
        versions of removeMarkers.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Ditto.
        (WebCore::Editor::markMisspellingsOrBadGrammar): Updated for change to
        TextCheckingHelper.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Do not use
        live ranges.
        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph): Take a
        range that isn't a live range.
        (WebCore::Editor::markAndReplaceFor): Tweak for changes to text checking
        and to use convenience version of addMarker.
        (WebCore::Editor::changeBackToReplacedString): Use convenience versions of
        removeMarkers and addMarker.
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Ditto.
        (WebCore::Editor::editorUIUpdateTimerFired): Ditto.
        (WebCore::Editor::handleAcceptedCandidate): Ditto.
        * editing/Editor.h: Update for the above.

        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest): No longer take live ranges.
        (WebCore::SpellCheckRequest::create): Ditto.
        (WebCore::SpellChecker::canCheckAsynchronously const): Ditto.
        (WebCore::SpellChecker::isCheckable const): Ditto.
        (WebCore::SpellChecker::didCheckSucceed): Use convenience versions of
        removeMarkers.
        * editing/SpellChecker.h: Remove the use of live ranges. Removed many
        unneeded includes and forward declarations.

        * editing/TextCheckingHelper.cpp:
        (WebCore::expandToParagraphBoundary): Take and return non-live ranges.
        (WebCore::TextCheckingParagraph::TextCheckingParagraph): Ditto.
        (WebCore::TextCheckingParagraph::expandRangeToNextEnd): Updated to use
        non-live ranges.
        (WebCore::TextCheckingParagraph::invalidateParagraphRangeValues): Ditto.
        (WebCore::TextCheckingParagraph::paragraphRange const): Ditto.
        (WebCore::TextCheckingParagraph::subrange const): Ditto.
        (WebCore::TextCheckingParagraph::offsetTo const): Ditto.
        (WebCore::TextCheckingParagraph::offsetAsRange const): Ditto.
        (WebCore::TextCheckingParagraph::automaticReplacementStart const): Ditto.
        (WebCore::TextCheckingParagraph::automaticReplacementLength const): Ditto.
        (WebCore::TextCheckingHelper::~TextCheckingHelper): Deleted.
        (WebCore::TextCheckingHelper::findMispelledWords const): Renamed from
        findFirstMispelling, and made this private function since it has confusing
        argument and return types. Reimplemented to use non-live ranges and to use
        return values and the addMarker convenience function. Also changed this to
        not mark when called just to find the first mispelled word. The old version
        always marked, which didn't make logical sense, but was harmless because
        the caller always marked the same way. Now this does what it says.
        (WebCore::TextCheckingHelper::findFirstMisspelledWord const): Added.
        Replaces findFirstMispelling as a public function, and returns a structure
        instead of using out arguments.
        (WebCore::TextCheckingHelper::findFirstMisspelledWordOrUngrammaticalPhrase const):
        Renamed from findFirstMisspellingOrBadGrammar and changed to return a structure
        instead of using out arguments.
        (WebCore::TextCheckingHelper::findUngrammaticalPhrases const): Renamed from
        findFirstGrammarDetail and findFirstBadGrammar. Both functions are now private
        and use the new Operation enum class to distinguish the "find first" from
        "mark all" usage. Also use the convience version of addMarker and return results
        in a structure instead of using out arguments.
        (WebCore::TextCheckingHelper::findFirstUngrammaticalPhrase const): Added.
        Replaces findFirstBadGrammar as a public function, returns a structure
        instead of using out arguments.
        (WebCore::TextCheckingHelper::guessesForMisspelledWordOrUngrammaticalPhrase const):
        Renamed from guessesForMisspelledOrUngrammaticalRange and changed to return
        a structure instead of out arguments.
        (WebCore::TextCheckingHelper::markAllMisspelledWords const): Renamed from
        markAllMisspellings and changed to use a return value instead of an out argument.
        (WebCore::TextCheckingHelper::markAllUngrammaticalPhrases const): Renamed
        from markAllBadGrammar.

        * editing/TextCheckingHelper.h: Removed unneed include of "EditorClient.h".
        Use non-live ranges. Updated for the other changes above.

        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::doApply): Use the convenience version of addMarker.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setDictationPhrasesAsChildOfElement): Ditto.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate): Updated for the change to
        Editor::guessesForMisspelledOrUngrammatical.

        * platform/text/TextChecking.h: Added a TextCheckingGuesses structure here
        used both by Editor and TextCheckingHelper.

2020-07-26  Youenn Fablet  <youenn@apple.com>

        Update capture MediaStreamTrack frameRate and aspectRatio capabilities
        https://bugs.webkit.org/show_bug.cgi?id=214741

        Reviewed by Eric Carlson.

        We support frame decimation to decrease the frame rate.
        This allows to get a frame rate down to 1.
        We support resizing up to max width/height resolution.
        This allows very wide aspect ratios.
        Covered by updated tests.

        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::updateCapabilities):

2020-07-24  Mark Lam  <mark.lam@apple.com>

        pluginElementCustomGetOwnPropertySlot() should support VMInquiry requests.
        https://bugs.webkit.org/show_bug.cgi?id=214555
        <rdar://problem/65855400>

        Reviewed by Yusuke Suzuki.

        1. Add handling for VMInquiry failure in CodeGeneratorJS.

        2. Fix pluginElementCustomGetOwnPropertySlot() to setIsTaintedByOpaqueObject().

        3. Fix pluginElementCustomGetOwnPropertySlot() handle a VMInquiry failure case
           and if so, to initialize the PropertySlot to a jsUndefined() value.  The client
           shouldn't be reading the value if the VMInquiry failed, but as a defensive
           action, we'll initialize the slot to effectively return an undefined value.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetOwnPropertySlot):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlot):
        (GenerateGetOwnPropertySlotByIndex):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::getOwnPropertySlot):
        (WebCore::JSTestPluginInterface::getOwnPropertySlotByIndex):

2020-07-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Crash under ValidationBubble::setAnchorRect when showing form validation UI in unparented view
        https://bugs.webkit.org/show_bug.cgi?id=214789
        <rdar://problem/66104012>

        Reviewed by Tim Horton.

        On iOS, in the case where `WKWebView` is unparented (or is otherwise missing a root view controller, or the
        private WKUIDelegate method `-_presentingViewControllerForWebView:` returns `nil`), we end up crashing under
        `ValidationBubble::setAnchorRect` while attempting to add `presentingViewController.view` (which is `nil`) to an
        array of passthrough views.

        Since `fallbackViewController` is not guaranteed to successfully find a view controller anyways, make this
        scenario fail gracefully with a null check, instead of crashing the app.

        Test: FormValidation.PresentingFormValidationUIWithoutViewControllerDoesNotCrash

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::setAnchorRect):

2020-07-25  Simon Fraser  <simon.fraser@apple.com>

        Some scroll snap cleanup
        https://bugs.webkit.org/show_bug.cgi?id=214788

        Reviewed by Wenson Hsieh.

        Mostly cleanup in updateSnapOffsetsForScrollableArea() related to getting the scroll limits,
        which changes behavior.
        
        updateSnapOffsetsForScrollableArea() was manually computing the scroll limits with
        scrollingElementBox.scrollWidth() - scrollingElementBox.contentWidth(), but needs to use
        the same computation that scrolling uses, namely scrollableArea.maximumScrollOffset().
        This changes results, since the old code could compute offsets outside of the scroll limits.
        It can also get the scrollPosition from the scrollableArea, instead of going via Element.
        
        When computing scroll offsets, explicitly round now (which changes some test results).

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::updateSnapOffsetsForScrollableArea):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::updateActiveScrollSnapIndexForOffset): Explicitly round.
        * platform/ScrollTypes.h:
        * platform/ScrollableArea.h:
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset): Use ScrollOffset instead
        of x,y.

2020-07-25  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Context state updates
        https://bugs.webkit.org/show_bug.cgi?id=209513

        Reviewed by Dean Jackson.

        Refactor a few methods related to context state to reduce
        duplicated code between WebGL 1.0 and 2.0. No behavioral changes.

        Covered by existing WebGL conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateCapability):
        (WebCore::WebGL2RenderingContext::clear): Deleted.
        (WebCore::WebGL2RenderingContext::hint): Deleted.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::hint): Deleted.
        (WebCore::WebGLRenderingContext::clear): Deleted.
        (WebCore::WebGLRenderingContext::validateCapability): Deleted.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::clear):
        (WebCore::WebGLRenderingContextBase::hint):
        (WebCore::WebGLRenderingContextBase::validateCapability):
        * html/canvas/WebGLRenderingContextBase.h:

2020-07-24  Brady Eidson  <beidson@apple.com>

        Throw another one on the pile take 2.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect): Back to the NSString* trick now
          we know the function is declared.

2020-07-24  Brady Eidson  <beidson@apple.com>

        Throw another one on the pile.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm: (Actually include the SPI header)

2020-07-24  Brady Eidson  <beidson@apple.com>

        Maybe the last build fix after r264874

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:

2020-07-24  Brady Eidson  <beidson@apple.com>

        Yet another (bizarre?) attempted build fix after r264874

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect): The last attempt revealed the real
          problem - missing declaration for this function. *sigh*

2020-07-24  Brady Eidson  <beidson@apple.com>

        Another (bizarre?) attempted build fix after r264874

        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect): The CFSTR macro was wonky
          for unknown reasons...? Let's try it this way.

2020-07-24  Brady Eidson  <beidson@apple.com>

        Build fix after r264874

        Remove all nullability specifiers because just having one goes viral.

        * platform/gamepad/cocoa/GameControllerSPI.h:

2020-07-24  Alex Christensen  <achristensen@webkit.org>

        Null check frame in Document::dispatchDisabledAdaptationsDidChangeForMainFrame and a few other places
        https://bugs.webkit.org/show_bug.cgi?id=214715
        <rdar://problem/65467702>

        Reviewed by Geoffrey Garen.

        Test: security/mutation-observer-frame-detach.html

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::initContentSecurityPolicy):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        Add some null checks and early returns if the frame detaches.
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::loadSubframe):
        Balance the call to incrementLoadEventDelayCount in the early return case or this test never finishes loading.

2020-07-24  Alex Christensen  <achristensen@webkit.org>

        Fix assertion when highlighting in detached frames and make loads complete
        https://bugs.webkit.org/show_bug.cgi?id=214770

        Reviewed by Geoffrey Garen.

        There's an assertion added in r53218 I think should be an early return.
        It can be triggered by an interesting test I found while looking into rdar://problem/65467702
        I also needed to balance the call to incrementLoadEventDelayCount in an early return in order to get the test to finish loading.

        Test: fast/editing/frame-selection-is-not-caret.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::loadSubframe):

2020-07-24  Michael Saboff  <msaboff@apple.com>

        Fixed exception check handling below ScheduledAction::executeFunctionInContext()
        https://bugs.webkit.org/show_bug.cgi?id=214774

        Reviewed by Mark Lam.

        Test: js/dom/scheduled-action-exception-checks.html

        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):

2020-07-24  Brady Eidson  <beidson@apple.com>

        Hard code some MFi controller devices instead of dynamically managing HID vs GameController.framework.
        rdar://problem/65961406 and https://bugs.webkit.org/show_bug.cgi?id=214664

        Reviewed by Tim Horton.

        Covered by API tests.
        
        I'd added code to dynamically tell whether a device would be handled by GameController.framework or IOHID.
        On macOS Big Sur, it works flawlessly.
        On Catalina, it doesn't.
        
        The key problem being that GameController.framework will try to handle some controllers it should not.
        
        Instead, we can use a hard coded list of the controllers that are most important to support using GCF.
        
        The GCF provider and HID provider coordinate on that list when deciding if they should handle a new device.
        
        The worst case scenario for that list missing an important controller is that it would be handled in HID
        instead of GCF, so some features may be missing.

        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::makeGamepadVisible):

        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        (WebCore::GameControllerGamepadProvider::numberOfConnectedGamepads const):
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::willHandleVendorAndProduct):
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):

        * platform/gamepad/cocoa/GameControllerSPI.h:

        * platform/gamepad/mac/HIDGamepadProvider.h:
        (WebCore::HIDGamepadProvider::numberOfConnectedGamepads const):
        * platform/gamepad/mac/HIDGamepadProvider.mm:
        (WebCore::deviceAddedCallback):
        (WebCore::gameControllerFrameworkWillHandleHIDDevice):
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):
        (WebCore::HIDGamepadProvider::waitForManagementDecisionForDevice): Deleted.
        (WebCore::HIDGamepadProvider::removeDeviceWaitingForManagementDecision): Deleted.
        (WebCore::HIDGamepadProvider::gamePadServiceWasPublished): Deleted.

2020-07-24  Mark Lam  <mark.lam@apple.com>

        Fix exception check handling below postMessage().
        https://bugs.webkit.org/show_bug.cgi?id=214761
        <rdar://problem/65932136>

        Reviewed by Yusuke Suzuki and Keith Miller.

        Test: js/dom/missing-exception-check-below-postMessage.html

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::SequenceConverter::convertArray):
        (WebCore::Detail::SequenceConverter::convert):

2020-07-24  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Tell AVAssetResourceLoadingContentInformationRequest that asset size is available immediately
        https://bugs.webkit.org/show_bug.cgi?id=214759
        <rdar://problem/63751958>

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):

2020-07-23  Simon Fraser  <simon.fraser@apple.com>

        steps() timing function on a transform animation triggers a render every frame
        https://bugs.webkit.org/show_bug.cgi?id=214712
        <rdar://problem/62737868>

        Reviewed by Tim Horton.

        An animation of transform, with a steps() timing function, would schedule a rendering
        update on every frame. This happened because KeyframeEffect::updateAcceleratedActions()
        would keep trying, and failing to start the accelerated animation every frame, since
        GraphicsLayerCA refuses to run accelerated animations with steps timing functions.

        Fix by making m_isRunningAccelerated a tri-state enum, which gets a new value once we've tried
        to run the animation the first time. Also ensure that we re-try if the timing
        function changes, via animationDidChangeTimingProperties().

        Test: animations/steps-transform-rendering-updates.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::isRunningAcceleratedAnimationForProperty const):
        (WebCore::KeyframeEffect::updateAcceleratedActions):
        (WebCore::KeyframeEffect::animationDidChangeTimingProperties):
        (WebCore::KeyframeEffect::animationWasCanceled):
        (WebCore::KeyframeEffect::willChangeRenderer):
        (WebCore::KeyframeEffect::animationSuspensionStateDidChange):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        * animation/KeyframeEffect.h:
        (WebCore::KeyframeEffect::isRunningAccelerated const):
        * page/Page.cpp:
        (WebCore::Page::startTrackingRenderingUpdates):
        (WebCore::Page::renderingUpdateCount const):
        (WebCore::Page::updateRendering):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::startTrackingRenderingUpdates):
        (WebCore::Internals::renderingUpdateCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-07-24  Mark Lam  <mark.lam@apple.com>

        Fix JS bindings code to DECLARE_THROW_SCOPE in the functions that can throw instead of passing a ThrowScope around.
        https://bugs.webkit.org/show_bug.cgi?id=214695
        <rdar://problem/65927049>

        Reviewed by Yusuke Suzuki.

        There are a few exceptions where it makes sense to pass a ThrowScope&, but those
        are rare. Unless one has a very good reason to do so, the best practice is to
        always DECLARE_THROW_SCOPE in the functions that can throw.

        Test: js/dom/missing-exception-check-below-queueMicrotask.html

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::set):
        (WebCore::IDLAttribute::setStatic):
        (WebCore::IDLAttribute::get):
        (WebCore::IDLAttribute::getStatic):
        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorForEach):
        * bindings/js/JSDOMOperation.h:
        (WebCore::IDLOperation::call):
        (WebCore::IDLOperation::callStatic):
        * bindings/js/JSDOMOperationReturningPromise.h:
        (WebCore::IDLOperationReturningPromise::call):
        (WebCore::IDLOperationReturningPromise::callReturningOwnPromise):
        (WebCore::IDLOperationReturningPromise::callStatic):
        (WebCore::IDLOperationReturningPromise::callStaticReturningOwnPromise):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunctionOpenDatabaseBody):
        * bindings/js/JSEventTargetCustom.h:
        (WebCore::IDLOperation<JSEventTarget>::call):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        (GenerateSerializerDefinition):
        (GenerateWriteBarriersForArguments):
        (GenerateImplementationCustomFunctionCall):
        (GenerateIterableDefinition):
        (NativeToJSValueMayThrow):
        (NativeToJSValue):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::jsMapLikeSizeGetter):
        (WebCore::jsMapLikePrototypeFunctionGetBody):
        (WebCore::jsMapLikePrototypeFunctionHasBody):
        (WebCore::jsMapLikePrototypeFunctionEntriesBody):
        (WebCore::jsMapLikePrototypeFunctionKeysBody):
        (WebCore::jsMapLikePrototypeFunctionValuesBody):
        (WebCore::jsMapLikePrototypeFunctionForEachBody):
        (WebCore::jsMapLikePrototypeFunctionSetBody):
        (WebCore::jsMapLikePrototypeFunctionClearBody):
        (WebCore::jsMapLikePrototypeFunctionDeleteBody):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::jsReadOnlyMapLikeSizeGetter):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionGetBody):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionHasBody):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionEntriesBody):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionKeysBody):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionValuesBody):
        (WebCore::jsReadOnlyMapLikePrototypeFunctionForEachBody):
        * bindings/scripts/test/JS/JSReadOnlySetLike.cpp:
        (WebCore::jsReadOnlySetLikeSizeGetter):
        (WebCore::jsReadOnlySetLikePrototypeFunctionHasBody):
        (WebCore::jsReadOnlySetLikePrototypeFunctionEntriesBody):
        (WebCore::jsReadOnlySetLikePrototypeFunctionKeysBody):
        (WebCore::jsReadOnlySetLikePrototypeFunctionValuesBody):
        (WebCore::jsReadOnlySetLikePrototypeFunctionForEachBody):
        * bindings/scripts/test/JS/JSSetLike.cpp:
        (WebCore::jsSetLikeSizeGetter):
        (WebCore::jsSetLikePrototypeFunctionHasBody):
        (WebCore::jsSetLikePrototypeFunctionEntriesBody):
        (WebCore::jsSetLikePrototypeFunctionKeysBody):
        (WebCore::jsSetLikePrototypeFunctionValuesBody):
        (WebCore::jsSetLikePrototypeFunctionForEachBody):
        (WebCore::jsSetLikePrototypeFunctionAddBody):
        (WebCore::jsSetLikePrototypeFunctionClearBody):
        (WebCore::jsSetLikePrototypeFunctionDeleteBody):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttrGetter):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionPostMessageBody):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethod1Body):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethod2Body):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethodOverloadDispatcher):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::jsTestCEReactionsAttributeWithCEReactionsGetter):
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsSetter):
        (WebCore::jsTestCEReactionsReflectAttributeWithCEReactionsGetter):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsSetter):
        (WebCore::jsTestCEReactionsStringifierAttributeGetter):
        (WebCore::setJSTestCEReactionsStringifierAttributeSetter):
        (WebCore::jsTestCEReactionsAttributeWithCEReactionsNotNeededGetter):
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsNotNeededSetter):
        (WebCore::jsTestCEReactionsReflectAttributeWithCEReactionsNotNeededGetter):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsNotNeededSetter):
        (WebCore::jsTestCEReactionsStringifierAttributeNotNeededGetter):
        (WebCore::setJSTestCEReactionsStringifierAttributeNotNeededSetter):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsBody):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsNotNeededBody):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::jsTestCEReactionsStringifierValueGetter):
        (WebCore::setJSTestCEReactionsStringifierValueSetter):
        (WebCore::jsTestCEReactionsStringifierValueWithoutReactionsGetter):
        (WebCore::setJSTestCEReactionsStringifierValueWithoutReactionsSetter):
        (WebCore::jsTestCEReactionsStringifierPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::jsTestCallTracerTestAttributeInterfaceGetter):
        (WebCore::setJSTestCallTracerTestAttributeInterfaceSetter):
        (WebCore::jsTestCallTracerTestAttributeSpecifiedGetter):
        (WebCore::setJSTestCallTracerTestAttributeSpecifiedSetter):
        (WebCore::jsTestCallTracerTestAttributeWithVariantGetter):
        (WebCore::setJSTestCallTracerTestAttributeWithVariantSetter):
        (WebCore::jsTestCallTracerTestReadonlyAttributeGetter):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterfaceBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecifiedBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArgumentsBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgumentBody):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::jsTestDOMJITAnyAttrGetter):
        (WebCore::jsTestDOMJITBooleanAttrGetter):
        (WebCore::jsTestDOMJITByteAttrGetter):
        (WebCore::jsTestDOMJITOctetAttrGetter):
        (WebCore::jsTestDOMJITShortAttrGetter):
        (WebCore::jsTestDOMJITUnsignedShortAttrGetter):
        (WebCore::jsTestDOMJITLongAttrGetter):
        (WebCore::jsTestDOMJITUnsignedLongAttrGetter):
        (WebCore::jsTestDOMJITLongLongAttrGetter):
        (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
        (WebCore::jsTestDOMJITFloatAttrGetter):
        (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
        (WebCore::jsTestDOMJITDoubleAttrGetter):
        (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
        (WebCore::jsTestDOMJITDomStringAttrGetter):
        (WebCore::jsTestDOMJITByteStringAttrGetter):
        (WebCore::jsTestDOMJITUsvStringAttrGetter):
        (WebCore::jsTestDOMJITNodeAttrGetter):
        (WebCore::jsTestDOMJITBooleanNullableAttrGetter):
        (WebCore::jsTestDOMJITByteNullableAttrGetter):
        (WebCore::jsTestDOMJITOctetNullableAttrGetter):
        (WebCore::jsTestDOMJITShortNullableAttrGetter):
        (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
        (WebCore::jsTestDOMJITLongNullableAttrGetter):
        (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
        (WebCore::jsTestDOMJITLongLongNullableAttrGetter):
        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
        (WebCore::jsTestDOMJITFloatNullableAttrGetter):
        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
        (WebCore::jsTestDOMJITDoubleNullableAttrGetter):
        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
        (WebCore::jsTestDOMJITDomStringNullableAttrGetter):
        (WebCore::jsTestDOMJITByteStringNullableAttrGetter):
        (WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
        (WebCore::jsTestDOMJITNodeNullableAttrGetter):
        (WebCore::jsTestDOMJITPrototypeFunctionGetAttributeBody):
        (WebCore::jsTestDOMJITPrototypeFunctionItemBody):
        (WebCore::jsTestDOMJITPrototypeFunctionHasAttributeBody):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementByIdBody):
        (WebCore::jsTestDOMJITPrototypeFunctionGetElementsByNameBody):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::jsTestEnabledBySettingTestSubObjEnabledBySettingConstructorGetter):
        (WebCore::setJSTestEnabledBySettingTestSubObjEnabledBySettingConstructorSetter):
        (WebCore::jsTestEnabledBySettingEnabledBySettingAttributeGetter):
        (WebCore::setJSTestEnabledBySettingEnabledBySettingAttributeSetter):
        (WebCore::jsTestEnabledBySettingPrototypeFunctionEnabledBySettingOperationBody):
        * bindings/scripts/test/JS/JSTestEnabledForContext.cpp:
        (WebCore::jsTestEnabledForContextTestSubObjEnabledForContextConstructorGetter):
        (WebCore::setJSTestEnabledForContextTestSubObjEnabledForContextConstructorSetter):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1Getter):
        (WebCore::jsTestEventConstructorAttr2Getter):
        (WebCore::jsTestEventConstructorAttr3Getter):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetPrototypeFunctionItemBody):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionNameGetter):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableASecretAttributeGetter):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectRegularAttributeGetter):
        (WebCore::setJSTestGlobalObjectRegularAttributeSetter):
        (WebCore::jsTestGlobalObjectPublicAndPrivateAttributeGetter):
        (WebCore::setJSTestGlobalObjectPublicAndPrivateAttributeSetter):
        (WebCore::jsTestGlobalObjectPublicAndPrivateConditionalAttributeGetter):
        (WebCore::setJSTestGlobalObjectPublicAndPrivateConditionalAttributeSetter):
        (WebCore::jsTestGlobalObjectEnabledAtRuntimeAttributeGetter):
        (WebCore::setJSTestGlobalObjectEnabledAtRuntimeAttributeSetter):
        (WebCore::jsTestGlobalObjectTestCEReactionsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestCEReactionsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestCEReactionsStringifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestCEReactionsStringifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestCallTracerConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestCallTracerConstructorSetter):
        (WebCore::jsTestGlobalObjectTestCallbackInterfaceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestCallbackInterfaceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestClassWithJSBuiltinConstructorConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestClassWithJSBuiltinConstructorConstructorSetter):
        (WebCore::jsTestGlobalObjectTestDOMJITConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestDOMJITConstructorSetter):
        (WebCore::jsTestGlobalObjectTestDomainSecurityConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestDomainSecurityConstructorSetter):
        (WebCore::jsTestGlobalObjectTestEnabledBySettingConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestEnabledBySettingConstructorSetter):
        (WebCore::jsTestGlobalObjectTestEnabledForContextConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestEnabledForContextConstructorSetter):
        (WebCore::jsTestGlobalObjectTestEventConstructorConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestEventConstructorConstructorSetter):
        (WebCore::jsTestGlobalObjectTestEventTargetConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestEventTargetConstructorSetter):
        (WebCore::jsTestGlobalObjectTestExceptionConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestExceptionConstructorSetter):
        (WebCore::jsTestGlobalObjectTestGenerateIsReachableConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestGenerateIsReachableConstructorSetter):
        (WebCore::jsTestGlobalObjectTestGlobalObjectConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestGlobalObjectConstructorSetter):
        (WebCore::jsTestGlobalObjectTestIndexedSetterNoIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterNoIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestIndexedSetterThrowingExceptionConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterThrowingExceptionConstructorSetter):
        (WebCore::jsTestGlobalObjectTestIndexedSetterWithIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestIndexedSetterWithIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestInterfaceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestInterfaceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestInterfaceLeadingUnderscoreConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestInterfaceLeadingUnderscoreConstructorSetter):
        (WebCore::jsTestGlobalObjectTestIterableConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestIterableConstructorSetter):
        (WebCore::jsTestGlobalObjectTestJSBuiltinConstructorConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestJSBuiltinConstructorConstructorSetter):
        (WebCore::jsTestGlobalObjectTestMapLikeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestMapLikeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterNoIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterThrowingExceptionConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedAndIndexedSetterWithIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedConstructorConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedConstructorConstructorSetter):
        (WebCore::jsTestGlobalObjectAudioConstructorGetter):
        (WebCore::setJSTestGlobalObjectAudioConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedDeleterNoIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterNoIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedDeleterThrowingExceptionConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterThrowingExceptionConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedDeleterWithIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedDeleterWithIndexedGetterConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedGetterCallWithConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterCallWithConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedGetterNoIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterNoIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedGetterWithIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedGetterWithIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterNoIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterNoIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterThrowingExceptionConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterThrowingExceptionConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithIdentifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIdentifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithIndexedGetterAndSetterConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithOverrideBuiltinsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesConstructorSetter):
        (WebCore::jsTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestOperationConditionalConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestOperationConditionalConstructorSetter):
        (WebCore::jsTestGlobalObjectTestOverloadedConstructorsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestOverloadedConstructorsWithSequenceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestOverrideBuiltinsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestOverrideBuiltinsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestPluginInterfaceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestPluginInterfaceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestReadOnlyMapLikeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestReadOnlyMapLikeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestReadOnlySetLikeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestReadOnlySetLikeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestReportExtraMemoryCostConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestReportExtraMemoryCostConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSerializationConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSerializationConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSerializationIndirectInheritanceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSerializationIndirectInheritanceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSerializationInheritConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSerializationInheritConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSerializationInheritFinalConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSerializationInheritFinalConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSerializedScriptValueInterfaceConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSerializedScriptValueInterfaceConstructorSetter):
        (WebCore::jsTestGlobalObjectTestSetLikeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestSetLikeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierAnonymousOperationConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierAnonymousOperationConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierNamedOperationConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierNamedOperationConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierOperationImplementedAsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierOperationImplementedAsConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierOperationNamedToStringConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierOperationNamedToStringConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierReadOnlyAttributeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierReadOnlyAttributeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestStringifierReadWriteAttributeConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestStringifierReadWriteAttributeConstructorSetter):
        (WebCore::jsTestGlobalObjectTestTypedefsConstructorGetter):
        (WebCore::setJSTestGlobalObjectTestTypedefsConstructorSetter):
        (WebCore::jsTestGlobalObjectInstanceFunctionRegularOperationBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Body):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Body):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperationOverloadDispatcher):
        (WebCore::jsTestGlobalObjectConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionEnabledInSpecificWorldWhenRuntimeFeaturesEnabledBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestPrivateFunctionBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionCalculateSecretResultBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionGetSecretBooleanBody):
        (WebCore::jsTestGlobalObjectInstanceFunctionTestFeatureGetSecretBooleanBody):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter):
        (WebCore::jsTestInterfaceConstructorImplementsStaticAttrGetter):
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttrSetter):
        (WebCore::jsTestInterfaceImplementsStr1Getter):
        (WebCore::jsTestInterfaceImplementsStr2Getter):
        (WebCore::setJSTestInterfaceImplementsStr2Setter):
        (WebCore::jsTestInterfaceImplementsStr3Getter):
        (WebCore::setJSTestInterfaceImplementsStr3Setter):
        (WebCore::jsTestInterfaceImplementsNodeGetter):
        (WebCore::setJSTestInterfaceImplementsNodeSetter):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttrGetter):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticAttrGetter):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttrSetter):
        (WebCore::jsTestInterfaceSupplementalStr1Getter):
        (WebCore::jsTestInterfaceSupplementalStr2Getter):
        (WebCore::setJSTestInterfaceSupplementalStr2Setter):
        (WebCore::jsTestInterfaceSupplementalStr3Getter):
        (WebCore::setJSTestInterfaceSupplementalStr3Setter):
        (WebCore::jsTestInterfaceSupplementalNodeGetter):
        (WebCore::setJSTestInterfaceSupplementalNodeSetter):
        (WebCore::jsTestInterfaceReflectAttributeGetter):
        (WebCore::setJSTestInterfaceReflectAttributeSetter):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod1Body):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod2Body):
        (WebCore::jsTestInterfacePrototypeFunctionImplementsMethod3Body):
        (WebCore::jsTestInterfaceConstructorFunctionImplementsMethod4Body):
        (WebCore::jsTestInterfacePrototypeFunctionTakeNodesBody):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod1Body):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod2Body):
        (WebCore::jsTestInterfacePrototypeFunctionSupplementalMethod3Body):
        (WebCore::jsTestInterfaceConstructorFunctionSupplementalMethod4Body):
        (WebCore::jsTestInterfacePrototypeFunctionEntriesCaller):
        (WebCore::jsTestInterfacePrototypeFunctionKeysCaller):
        (WebCore::jsTestInterfacePrototypeFunctionValuesCaller):
        (WebCore::jsTestInterfacePrototypeFunctionForEachCaller):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::jsTestInterfaceLeadingUnderscoreReadonlyGetter):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::jsTestIterablePrototypeFunctionEntriesCaller):
        (WebCore::jsTestIterablePrototypeFunctionKeysCaller):
        (WebCore::jsTestIterablePrototypeFunctionValuesCaller):
        (WebCore::jsTestIterablePrototypeFunctionForEachCaller):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::jsTestJSBuiltinConstructorTestAttributeCustomGetter):
        (WebCore::jsTestJSBuiltinConstructorTestAttributeRWCustomGetter):
        (WebCore::setJSTestJSBuiltinConstructorTestAttributeRWCustomSetter):
        (WebCore::jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunctionBody):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionNamedSetterBody):
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierPrototypeFunctionIndexedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::jsTestNamedDeleterWithIdentifierPrototypeFunctionNamedDeleterBody):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::jsTestNamedGetterWithIdentifierPrototypeFunctionGetterNameBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::jsTestNamedSetterWithIdentifierPrototypeFunctionNamedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionNamedSetterBody):
        (WebCore::jsTestNamedSetterWithIndexedGetterPrototypeFunctionIndexedSetterBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionNamedSetterBody):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter1Body):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetter2Body):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterPrototypeFunctionIndexedSetterOverloadDispatcher):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesUnforgeableAttributeGetter):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesInstanceFunctionUnforgeableOperationBody):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsUnforgeableAttributeGetter):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsInstanceFunctionUnforgeableOperationBody):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeNameGetter):
        (WebCore::setJSTestNodeNameSetter):
        (WebCore::jsTestNodePrototypeFunctionTestWorkerPromiseBody):
        (WebCore::jsTestNodePrototypeFunctionCalculateSecretResultBody):
        (WebCore::jsTestNodePrototypeFunctionGetSecretBooleanBody):
        (WebCore::jsTestNodePrototypeFunctionTestFeatureGetSecretBooleanBody):
        (WebCore::jsTestNodePrototypeFunctionEntriesCaller):
        (WebCore::jsTestNodePrototypeFunctionKeysCaller):
        (WebCore::jsTestNodePrototypeFunctionValuesCaller):
        (WebCore::jsTestNodePrototypeFunctionForEachCaller):
        (WebCore::JSTestNode::serialize):
        (WebCore::jsTestNodePrototypeFunctionToJSONBody):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttrGetter):
        (WebCore::jsTestObjReadOnlyStringAttrGetter):
        (WebCore::jsTestObjReadOnlyTestObjAttrGetter):
        (WebCore::jsTestObjConstructorStaticReadOnlyLongAttrGetter):
        (WebCore::jsTestObjConstructorStaticStringAttrGetter):
        (WebCore::setJSTestObjConstructorStaticStringAttrSetter):
        (WebCore::jsTestObjConstructorTestSubObjGetter):
        (WebCore::jsTestObjConstructorTestStaticReadonlyObjGetter):
        (WebCore::jsTestObjEnumAttrGetter):
        (WebCore::setJSTestObjEnumAttrSetter):
        (WebCore::jsTestObjByteAttrGetter):
        (WebCore::setJSTestObjByteAttrSetter):
        (WebCore::jsTestObjOctetAttrGetter):
        (WebCore::setJSTestObjOctetAttrSetter):
        (WebCore::jsTestObjShortAttrGetter):
        (WebCore::setJSTestObjShortAttrSetter):
        (WebCore::jsTestObjClampedShortAttrGetter):
        (WebCore::setJSTestObjClampedShortAttrSetter):
        (WebCore::jsTestObjEnforceRangeShortAttrGetter):
        (WebCore::setJSTestObjEnforceRangeShortAttrSetter):
        (WebCore::jsTestObjUnsignedShortAttrGetter):
        (WebCore::setJSTestObjUnsignedShortAttrSetter):
        (WebCore::jsTestObjLongAttrGetter):
        (WebCore::setJSTestObjLongAttrSetter):
        (WebCore::jsTestObjLongLongAttrGetter):
        (WebCore::setJSTestObjLongLongAttrSetter):
        (WebCore::jsTestObjUnsignedLongLongAttrGetter):
        (WebCore::setJSTestObjUnsignedLongLongAttrSetter):
        (WebCore::jsTestObjStringAttrGetter):
        (WebCore::setJSTestObjStringAttrSetter):
        (WebCore::jsTestObjUsvstringAttrGetter):
        (WebCore::setJSTestObjUsvstringAttrSetter):
        (WebCore::jsTestObjTestObjAttrGetter):
        (WebCore::setJSTestObjTestObjAttrSetter):
        (WebCore::jsTestObjTestNullableObjAttrGetter):
        (WebCore::setJSTestObjTestNullableObjAttrSetter):
        (WebCore::jsTestObjLenientTestObjAttrGetter):
        (WebCore::setJSTestObjLenientTestObjAttrSetter):
        (WebCore::jsTestObjUnforgeableAttrGetter):
        (WebCore::jsTestObjStringAttrTreatingNullAsEmptyStringGetter):
        (WebCore::setJSTestObjStringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter):
        (WebCore::setJSTestObjUsvstringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::jsTestObjByteStringAttrTreatingNullAsEmptyStringGetter):
        (WebCore::setJSTestObjByteStringAttrTreatingNullAsEmptyStringSetter):
        (WebCore::jsTestObjStringLongRecordAttrGetter):
        (WebCore::setJSTestObjStringLongRecordAttrSetter):
        (WebCore::jsTestObjUsvstringLongRecordAttrGetter):
        (WebCore::setJSTestObjUsvstringLongRecordAttrSetter):
        (WebCore::jsTestObjStringObjRecordAttrGetter):
        (WebCore::setJSTestObjStringObjRecordAttrSetter):
        (WebCore::jsTestObjStringNullableObjRecordAttrGetter):
        (WebCore::setJSTestObjStringNullableObjRecordAttrSetter):
        (WebCore::jsTestObjStringVoidCallbackRecordAttrGetter):
        (WebCore::setJSTestObjStringVoidCallbackRecordAttrSetter):
        (WebCore::jsTestObjDictionaryAttrGetter):
        (WebCore::setJSTestObjDictionaryAttrSetter):
        (WebCore::jsTestObjNullableDictionaryAttrGetter):
        (WebCore::setJSTestObjNullableDictionaryAttrSetter):
        (WebCore::jsTestObjAnnotatedTypeInUnionAttrGetter):
        (WebCore::setJSTestObjAnnotatedTypeInUnionAttrSetter):
        (WebCore::jsTestObjAnnotatedTypeInSequenceAttrGetter):
        (WebCore::setJSTestObjAnnotatedTypeInSequenceAttrSetter):
        (WebCore::jsTestObjImplementationEnumAttrGetter):
        (WebCore::setJSTestObjImplementationEnumAttrSetter):
        (WebCore::jsTestObjMediaDevicesGetter):
        (WebCore::jsTestObjXMLObjAttrGetter):
        (WebCore::setJSTestObjXMLObjAttrSetter):
        (WebCore::jsTestObjCreateGetter):
        (WebCore::setJSTestObjCreateSetter):
        (WebCore::jsTestObjReflectedStringAttrGetter):
        (WebCore::setJSTestObjReflectedStringAttrSetter):
        (WebCore::jsTestObjReflectedUSVStringAttrGetter):
        (WebCore::setJSTestObjReflectedUSVStringAttrSetter):
        (WebCore::jsTestObjReflectedIntegralAttrGetter):
        (WebCore::setJSTestObjReflectedIntegralAttrSetter):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttrGetter):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttrSetter):
        (WebCore::jsTestObjReflectedBooleanAttrGetter):
        (WebCore::setJSTestObjReflectedBooleanAttrSetter):
        (WebCore::jsTestObjReflectedURLAttrGetter):
        (WebCore::setJSTestObjReflectedURLAttrSetter):
        (WebCore::jsTestObjReflectedUSVURLAttrGetter):
        (WebCore::setJSTestObjReflectedUSVURLAttrSetter):
        (WebCore::jsTestObjReflectedCustomIntegralAttrGetter):
        (WebCore::setJSTestObjReflectedCustomIntegralAttrSetter):
        (WebCore::jsTestObjReflectedCustomBooleanAttrGetter):
        (WebCore::setJSTestObjReflectedCustomBooleanAttrSetter):
        (WebCore::jsTestObjReflectedCustomURLAttrGetter):
        (WebCore::setJSTestObjReflectedCustomURLAttrSetter):
        (WebCore::jsTestObjEnabledAtRuntimeAttributeGetter):
        (WebCore::setJSTestObjEnabledAtRuntimeAttributeSetter):
        (WebCore::jsTestObjConstructorEnabledAtRuntimeAttributeStaticGetter):
        (WebCore::setJSTestObjConstructorEnabledAtRuntimeAttributeStaticSetter):
        (WebCore::jsTestObjTypedArrayAttrGetter):
        (WebCore::setJSTestObjTypedArrayAttrSetter):
        (WebCore::jsTestObjCustomAttrGetter):
        (WebCore::setJSTestObjCustomAttrSetter):
        (WebCore::jsTestObjOnfooGetter):
        (WebCore::setJSTestObjOnfooSetter):
        (WebCore::jsTestObjOnwebkitfooGetter):
        (WebCore::setJSTestObjOnwebkitfooSetter):
        (WebCore::jsTestObjWithExecStateAttributeGetter):
        (WebCore::setJSTestObjWithExecStateAttributeSetter):
        (WebCore::jsTestObjWithCallWithAndSetterCallWithAttributeGetter):
        (WebCore::setJSTestObjWithCallWithAndSetterCallWithAttributeSetter):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeGetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeSetter):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateAttributeGetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateAttributeSetter):
        (WebCore::jsTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeGetter):
        (WebCore::setJSTestObjWithScriptExecutionContextAndExecStateWithSpacesAttributeSetter):
        (WebCore::jsTestObjConditionalAttr1Getter):
        (WebCore::setJSTestObjConditionalAttr1Setter):
        (WebCore::jsTestObjConditionalAttr2Getter):
        (WebCore::setJSTestObjConditionalAttr2Setter):
        (WebCore::jsTestObjConditionalAttr3Getter):
        (WebCore::setJSTestObjConditionalAttr3Setter):
        (WebCore::jsTestObjConditionalAttr4ConstructorGetter):
        (WebCore::setJSTestObjConditionalAttr4ConstructorSetter):
        (WebCore::jsTestObjConditionalAttr5ConstructorGetter):
        (WebCore::setJSTestObjConditionalAttr5ConstructorSetter):
        (WebCore::jsTestObjConditionalAttr6ConstructorGetter):
        (WebCore::setJSTestObjConditionalAttr6ConstructorSetter):
        (WebCore::jsTestObjCachedAttribute1Getter):
        (WebCore::jsTestObjCachedAttribute2Getter):
        (WebCore::jsTestObjCachedAttribute3Getter):
        (WebCore::jsTestObjAnyAttributeGetter):
        (WebCore::setJSTestObjAnyAttributeSetter):
        (WebCore::jsTestObjObjectAttributeGetter):
        (WebCore::setJSTestObjObjectAttributeSetter):
        (WebCore::jsTestObjContentDocumentGetter):
        (WebCore::jsTestObjMutablePointGetter):
        (WebCore::setJSTestObjMutablePointSetter):
        (WebCore::jsTestObjStrawberryGetter):
        (WebCore::setJSTestObjStrawberrySetter):
        (WebCore::jsTestObjDescriptionGetter):
        (WebCore::jsTestObjIdGetter):
        (WebCore::setJSTestObjIdSetter):
        (WebCore::jsTestObjHashGetter):
        (WebCore::jsTestObjReplaceableAttributeGetter):
        (WebCore::setJSTestObjReplaceableAttributeSetter):
        (WebCore::jsTestObjNullableDoubleAttributeGetter):
        (WebCore::jsTestObjNullableLongAttributeGetter):
        (WebCore::jsTestObjNullableBooleanAttributeGetter):
        (WebCore::jsTestObjNullableStringAttributeGetter):
        (WebCore::jsTestObjNullableLongSettableAttributeGetter):
        (WebCore::setJSTestObjNullableLongSettableAttributeSetter):
        (WebCore::jsTestObjNullableStringSettableAttributeGetter):
        (WebCore::setJSTestObjNullableStringSettableAttributeSetter):
        (WebCore::jsTestObjNullableUSVStringSettableAttributeGetter):
        (WebCore::setJSTestObjNullableUSVStringSettableAttributeSetter):
        (WebCore::jsTestObjNullableByteStringSettableAttributeGetter):
        (WebCore::setJSTestObjNullableByteStringSettableAttributeSetter):
        (WebCore::jsTestObjAttributeGetter):
        (WebCore::jsTestObjAttributeWithReservedEnumTypeGetter):
        (WebCore::setJSTestObjAttributeWithReservedEnumTypeSetter):
        (WebCore::jsTestObjTestReadOnlyVoidPromiseAttributeGetter):
        (WebCore::jsTestObjTestReadOnlyPromiseAttributeGetter):
        (WebCore::jsTestObjPutForwardsAttributeGetter):
        (WebCore::setJSTestObjPutForwardsAttributeSetter):
        (WebCore::jsTestObjPutForwardsNullableAttributeGetter):
        (WebCore::setJSTestObjPutForwardsNullableAttributeSetter):
        (WebCore::jsTestObjStringifierAttributeGetter):
        (WebCore::setJSTestObjStringifierAttributeSetter):
        (WebCore::jsTestObjConditionallyReadWriteAttributeGetter):
        (WebCore::setJSTestObjConditionallyReadWriteAttributeSetter):
        (WebCore::jsTestObjConditionalAndConditionallyReadWriteAttributeGetter):
        (WebCore::setJSTestObjConditionalAndConditionallyReadWriteAttributeSetter):
        (WebCore::jsTestObjRuntimeConditionallyReadWriteAttributeGetter):
        (WebCore::setJSTestObjRuntimeConditionallyReadWriteAttributeSetter):
        (WebCore::jsTestObjRuntimeConditionallyReadWriteAttributeUnforgeableGetter):
        (WebCore::setJSTestObjRuntimeConditionallyReadWriteAttributeUnforgeableSetter):
        (WebCore::jsTestObjRuntimeConditionallyReadWriteAttributeUnforgeablePrivateGetter):
        (WebCore::setJSTestObjRuntimeConditionallyReadWriteAttributeUnforgeablePrivateSetter):
        (WebCore::jsTestObjRuntimeConditionallyReadWriteAttributePromiseGetter):
        (WebCore::setJSTestObjRuntimeConditionallyReadWriteAttributePromiseSetter):
        (WebCore::jsTestObjConditionallyExposedToWindowAttributeGetter):
        (WebCore::setJSTestObjConditionallyExposedToWindowAttributeSetter):
        (WebCore::jsTestObjConditionallyExposedToWorkerAttributeGetter):
        (WebCore::setJSTestObjConditionallyExposedToWorkerAttributeSetter):
        (WebCore::jsTestObjConditionallyExposedToWindowAndWorkerAttributeGetter):
        (WebCore::setJSTestObjConditionallyExposedToWindowAndWorkerAttributeSetter):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Body):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Body):
        (WebCore::jsTestObjPrototypeFunctionEnabledAtRuntimeOperationOverloadDispatcher):
        (WebCore::jsTestObjConstructorFunctionEnabledAtRuntimeOperationStaticBody):
        (WebCore::jsTestObjPrototypeFunctionEnabledInSpecificWorldWhenRuntimeFeatureEnabledBody):
        (WebCore::jsTestObjPrototypeFunctionWorldSpecificMethodBody):
        (WebCore::jsTestObjPrototypeFunctionCalculateSecretResultBody):
        (WebCore::jsTestObjPrototypeFunctionGetSecretBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionTestFeatureGetSecretBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionByteMethodBody):
        (WebCore::jsTestObjPrototypeFunctionByteMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodBody):
        (WebCore::jsTestObjPrototypeFunctionOctetMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionLongMethodBody):
        (WebCore::jsTestObjPrototypeFunctionLongMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionObjMethodBody):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgsBody):
        (WebCore::jsTestObjInstanceFunctionUnforgeableMethodBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterBody):
        (WebCore::jsTestObjPrototypeFunctionNullableStringMethodBody):
        (WebCore::jsTestObjConstructorFunctionNullableStringStaticMethodBody):
        (WebCore::jsTestObjPrototypeFunctionNullableStringSpecialMethodBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithStandaloneEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrowsBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNullableByteStringArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithByteStringArgTreatingNullAsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionSerializedValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithRecordBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningLongBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithExceptionReturningObjectBody):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodBody):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgsBody):
        (WebCore::jsTestObjPrototypeFunctionPrivateMethodBody):
        (WebCore::jsTestObjPrototypeFunctionPublicAndPrivateMethodBody):
        (WebCore::jsTestObjPrototypeFunctionAddEventListenerBody):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListenerBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateVoidExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithExecStateObjExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateObjExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContextAndExecStateWithSpacesBody):
        (WebCore::jsTestObjPrototypeFunctionWithDocumentArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionWithCallerDocumentArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionWithCallerWindowArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringAndDefaultValueBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAtomStringIsEmptyStringBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalAnyBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalObjectBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalRecordBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromiseBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgBody):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArgBody):
        (WebCore::jsTestObjConstructorFunctionStaticMethodWithCallbackArgBody):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod1Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod2Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalMethod3Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod6Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod7Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod8Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod10Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod12Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod13Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameterOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnions2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnionsOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter1Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameter2Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameterOverloadDispatcher):
        (WebCore::jsTestObjConstructorFunctionClassMethodBody):
        (WebCore::jsTestObjConstructorFunctionClassMethodWithOptionalBody):
        (WebCore::jsTestObjConstructorFunctionClassMethod2Body):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod11Body):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod12Body):
        (WebCore::jsTestObjConstructorFunctionOverloadedMethod1OverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithClampOnOptionalBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeBody):
        (WebCore::jsTestObjPrototypeFunctionClassMethodWithEnforceRangeOnOptionalBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionStringArrayFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionDomStringListFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionOperationWithOptionalUnionParameterBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceBody):
        (WebCore::jsTestObjPrototypeFunctionGetElementByIdBody):
        (WebCore::jsTestObjPrototypeFunctionGetSVGDocumentBody):
        (WebCore::jsTestObjPrototypeFunctionConvert1Body):
        (WebCore::jsTestObjPrototypeFunctionConvert2Body):
        (WebCore::jsTestObjPrototypeFunctionConvert3Body):
        (WebCore::jsTestObjPrototypeFunctionConvert4Body):
        (WebCore::jsTestObjPrototypeFunctionMutablePointFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionOrangeBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicStringMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicDoubleMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicNodeMethodBody):
        (WebCore::jsTestObjPrototypeFunctionVariadicUnionMethodBody):
        (WebCore::jsTestObjPrototypeFunctionAnyBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentBody):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Body):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Body):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunctionOverloadDispatcher):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionBody):
        (WebCore::jsTestObjConstructorFunctionTestStaticPromiseFunctionWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionTestCustomPromiseFunctionBody):
        (WebCore::jsTestObjConstructorFunctionTestStaticCustomPromiseFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionTestCustomReturnsOwnPromiseFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnsOwnPromiseAndPromiseProxyFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverload1Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverload2Body):
        (WebCore::jsTestObjPrototypeFunctionConditionalOverloadOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload1Body):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverload2Body):
        (WebCore::jsTestObjPrototypeFunctionSingleConditionalOverloadOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionAttachShadowRootBody):
        (WebCore::jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterBody):
        (WebCore::jsTestObjPrototypeFunctionBufferSourceParameterBody):
        (WebCore::jsTestObjPrototypeFunctionLegacyCallerNamedBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationBody):
        (WebCore::jsTestObjPrototypeFunctionTestReturnValueOptimizationWithExceptionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWorkerFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionConditionallyExposedToWindowAndWorkerFunctionBody):
        (WebCore::jsTestObjPrototypeFunctionToStringBody):
        (WebCore::JSTestObj::serialize):
        (WebCore::jsTestObjPrototypeFunctionToJSONBody):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp:
        (WebCore::jsTestOperationConditionalPrototypeFunctionNonConditionalOperationBody):
        (WebCore::jsTestOperationConditionalPrototypeFunctionConditionalOperationBody):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::jsTestOverrideBuiltinsPrototypeFunctionNamedItemBody):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::jsTestPromiseRejectionEventPromiseGetter):
        (WebCore::jsTestPromiseRejectionEventReasonGetter):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::jsTestSerializationFirstStringAttributeGetter):
        (WebCore::setJSTestSerializationFirstStringAttributeSetter):
        (WebCore::jsTestSerializationSecondLongAttributeGetter):
        (WebCore::setJSTestSerializationSecondLongAttributeSetter):
        (WebCore::jsTestSerializationThirdUnserializableAttributeGetter):
        (WebCore::setJSTestSerializationThirdUnserializableAttributeSetter):
        (WebCore::jsTestSerializationFourthUnrestrictedDoubleAttributeGetter):
        (WebCore::setJSTestSerializationFourthUnrestrictedDoubleAttributeSetter):
        (WebCore::jsTestSerializationFifthLongAttributeGetter):
        (WebCore::setJSTestSerializationFifthLongAttributeSetter):
        (WebCore::jsTestSerializationSixthTypedefAttributeGetter):
        (WebCore::setJSTestSerializationSixthTypedefAttributeSetter):
        (WebCore::jsTestSerializationSeventhDirectlySerializableAttributeGetter):
        (WebCore::setJSTestSerializationSeventhDirectlySerializableAttributeSetter):
        (WebCore::jsTestSerializationEighthIndirectlyAttributeGetter):
        (WebCore::setJSTestSerializationEighthIndirectlyAttributeSetter):
        (WebCore::jsTestSerializationNinthOptionalDirectlySerializableAttributeGetter):
        (WebCore::setJSTestSerializationNinthOptionalDirectlySerializableAttributeSetter):
        (WebCore::jsTestSerializationTenthFrozenArrayAttributeGetter):
        (WebCore::setJSTestSerializationTenthFrozenArrayAttributeSetter):
        (WebCore::jsTestSerializationEleventhSequenceAttributeGetter):
        (WebCore::setJSTestSerializationEleventhSequenceAttributeSetter):
        (WebCore::jsTestSerializationTwelfthInterfaceSequenceAttributeGetter):
        (WebCore::setJSTestSerializationTwelfthInterfaceSequenceAttributeSetter):
        (WebCore::JSTestSerialization::serialize):
        (WebCore::jsTestSerializationPrototypeFunctionToJSONBody):
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::jsTestSerializationInheritInheritLongAttributeGetter):
        (WebCore::setJSTestSerializationInheritInheritLongAttributeSetter):
        (WebCore::JSTestSerializationInherit::serialize):
        (WebCore::jsTestSerializationInheritPrototypeFunctionToJSONBody):
        * bindings/scripts/test/JS/JSTestSerializationInherit.h:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::jsTestSerializationInheritFinalFinalLongAttributeFooGetter):
        (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeFooSetter):
        (WebCore::jsTestSerializationInheritFinalFinalLongAttributeBarGetter):
        (WebCore::setJSTestSerializationInheritFinalFinalLongAttributeBarSetter):
        (WebCore::JSTestSerializationInheritFinal::serialize):
        (WebCore::jsTestSerializationInheritFinalPrototypeFunctionToJSONBody):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValueGetter):
        (WebCore::setJSTestSerializedScriptValueInterfaceValueSetter):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValueGetter):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValueGetter):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValueSetter):
        (WebCore::jsTestSerializedScriptValueInterfacePortsGetter):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionBody):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionFunctionReturningBody):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::jsTestStringifierPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::jsTestStringifierAnonymousOperationPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::jsTestStringifierNamedOperationPrototypeFunctionIdentifierBody):
        (WebCore::jsTestStringifierNamedOperationPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionIdentifierBody):
        (WebCore::jsTestStringifierOperationImplementedAsPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::jsTestStringifierOperationNamedToStringPrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::jsTestStringifierReadOnlyAttributeIdentifierGetter):
        (WebCore::jsTestStringifierReadOnlyAttributePrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::jsTestStringifierReadWriteAttributeIdentifierGetter):
        (WebCore::setJSTestStringifierReadWriteAttributeIdentifierSetter):
        (WebCore::jsTestStringifierReadWriteAttributePrototypeFunctionToStringBody):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttrGetter):
        (WebCore::setJSTestTypedefsUnsignedLongLongAttrSetter):
        (WebCore::jsTestTypedefsSerializedScriptValueGetter):
        (WebCore::setJSTestTypedefsSerializedScriptValueSetter):
        (WebCore::jsTestTypedefsConstructorTestSubObjGetter):
        (WebCore::jsTestTypedefsAttributeWithClampGetter):
        (WebCore::setJSTestTypedefsAttributeWithClampSetter):
        (WebCore::jsTestTypedefsAttributeWithClampInTypedefGetter):
        (WebCore::setJSTestTypedefsAttributeWithClampInTypedefSetter):
        (WebCore::jsTestTypedefsBufferSourceAttrGetter):
        (WebCore::setJSTestTypedefsBufferSourceAttrSetter):
        (WebCore::jsTestTypedefsDomTimeStampAttrGetter):
        (WebCore::setJSTestTypedefsDomTimeStampAttrSetter):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncBody):
        (WebCore::jsTestTypedefsPrototypeFunctionSetShadowBody):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithSequenceArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionNullableSequenceOfUnionsArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionUnionArgBody):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampBody):
        (WebCore::jsTestTypedefsPrototypeFunctionFuncWithClampInTypedefBody):
        (WebCore::jsTestTypedefsPrototypeFunctionPointFunctionBody):
        (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunctionBody):
        (WebCore::jsTestTypedefsPrototypeFunctionStringSequenceFunction2Body):
        (WebCore::jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresIncludeBody):
        (WebCore::jsTestTypedefsPrototypeFunctionMethodWithExceptionBody):

2020-07-24  Jiewen Tan  <jiewen_tan@apple.com>

        Propagating user gesture through Fetch API
        https://bugs.webkit.org/show_bug.cgi?id=214444
        <rdar://problem/65980953>

        Reviewed by Youenn Fablet.

        This patch propagates media only user gestures through Fetch API, including Fetch and FetchResponse.

        Covered by new test contents.

        * Modules/fetch/DOMWindowFetch.cpp:
        (WebCore::DOMWindowFetch::fetch):
        Propagates media only user gestures through Fetch.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::clean):
        (WebCore::FetchBodyConsumer::resolve):
        (WebCore::FetchBodyConsumer::setConsumePromise):
        (WebCore::FetchBodyConsumer::resetConsumePromise):
        (WebCore::FetchBodyConsumer::loadingFailed):
        (WebCore::FetchBodyConsumer::loadingSucceeded):
        * Modules/fetch/FetchBodyConsumer.h:
        (WebCore::FetchBodyConsumer::setMaximumIntervalForUserGestureForwarding):
        (WebCore::FetchBodyConsumer::FetchBodyConsumer):
        Propagates media only user gestures through FetchResponse. UserGestureIndicator is only set in the async promise resolving path.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueMicrotaskToEventLoop):
        Propagates media only user gestures that was propagated through Fetch to the related promise executors.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::~UserGestureIndicator):
        * dom/UserGestureIndicator.h:
        (WebCore::UserGestureToken::setIsPropagatedFromFetch):
        (WebCore::UserGestureToken::resetIsPropagatedFromFetch):
        (WebCore::UserGestureToken::isPropagatedFromFetch const):
        Adds a flag to indicate the propagation source of a user gesture token. And makes pipelines from testing.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        Gathers some constants.

        * testing/Internals.cpp:
        (WebCore::Internals::setFetchMaximumIntervalForUserGestureForwarding):
        * testing/Internals.h:
        * testing/Internals.idl:
        Crafts a way to pass the maximum interval from layout tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        Gathers some constants.

2020-07-24  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Framebuffer and renderbuffer updates
        https://bugs.webkit.org/show_bug.cgi?id=126448

        Reviewed by Dean Jackson.

        Implement, or finish implementing, the following WebGL 2.0
        framebuffer and renderbuffer related APIs:
          framebufferTextureLayer
          getInternalformatParameter
          getRenderbufferParameter
          invalidateFramebuffer
          invalidateSubFramebuffer
          readBuffer
          renderbufferStorage
          renderbufferStorageMultisample

        Covered by existing WebGL 2.0 conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeNewContext):
        (WebCore::WebGL2RenderingContext::validateTexFuncLayer):
        (WebCore::WebGL2RenderingContext::maxTextureLevelForTarget):
        (WebCore::WebGL2RenderingContext::blitFramebuffer):
        (WebCore::WebGL2RenderingContext::framebufferTextureLayer):
        (WebCore::WebGL2RenderingContext::getInternalformatParameter):
        (WebCore::WebGL2RenderingContext::invalidateFramebuffer):
        (WebCore::WebGL2RenderingContext::invalidateSubFramebuffer):
        (WebCore::WebGL2RenderingContext::renderbufferStorageMultisample):
        (WebCore::WebGL2RenderingContext::renderbufferStorageImpl):
        (WebCore::WebGL2RenderingContext::renderbufferStorageHelper):
        (WebCore::WebGL2RenderingContext::checkAndTranslateAttachments):
        (WebCore::WebGL2RenderingContext::renderbufferStorage): Deleted.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::setAttachmentForBoundFramebuffer):
        (WebCore::WebGLFramebuffer::attach):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::setAttachmentInternal):
        (WebCore::WebGLFramebuffer::removeAttachmentInternal):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::renderbufferStorage): Deleted.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContextBase::framebufferTexture2D):
        (WebCore::WebGLRenderingContextBase::getRenderbufferParameter):
        (WebCore::WebGLRenderingContextBase::renderbufferStorage):
        (WebCore::WebGLRenderingContextBase::renderbufferStorageImpl):
        (WebCore::WebGLRenderingContextBase::validateTexFuncLevel):
        (WebCore::WebGLRenderingContextBase::maxTextureLevelForTarget):
        (WebCore::WebGLRenderingContextBase::validateFramebufferFuncParameters):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::framebufferTextureLayer):
        (WebCore::GraphicsContextGLOpenGL::invalidateFramebuffer):
        (WebCore::GraphicsContextGLOpenGL::invalidateSubFramebuffer):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2020-07-24  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add PerformanceTest tool for measuring raw speed of a video decoder
        https://bugs.webkit.org/show_bug.cgi?id=214723

        Reviewed by Darin Adler.

        Export classes used by the DecoderTest performance tool. Drive-by fix: allow the
        clients to enable or disable the hardware decoder for a given decompression session.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/MediaSample.h:
        * platform/graphics/cocoa/SourceBufferParserWebM.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample):

2020-07-24  Youenn Fablet  <youenn@apple.com>

        Monitor the case of a fetch event not able to register to the respondWith promise
        https://bugs.webkit.org/show_bug.cgi?id=214631

        Reviewed by Alex Christensen.

        In some cases, the "Fetch event is destroyed" error is received.
        One possibility is that the fetch event is not able to register to its respondWith promise.
        Add a specific error message for that case.

        This is difficult to test as we would need to have a fetch event trying to register to the respondWith promise
        exactly at the time the service worker gets stopped.

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenSettled):
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMPromise.h:
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::respondWith):
        Change from weakThis to makeRef. While this is not strictly needed since addExtendLifetimePromise ref the event while calling whenSettled,
        this is clearer and more robust.

2020-07-24  Youenn Fablet  <youenn@apple.com>

        ASSERT(!m_peerConnection.isClosed()) on imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-operations.https.html
        https://bugs.webkit.org/show_bug.cgi?id=214189
        <rdar://problem/65343941>

        Reviewed by Eric Carlson.

        Covered by unskipped tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addPendingTrackEvent):
        This can be called in case the connection is closed but should not be in case the connection is stopped.
        Update the ASSERT accordingly.

2020-07-24  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failed
        https://bugs.webkit.org/show_bug.cgi?id=213364

        Reviewed by Philippe Normand.

        The initial patch for this bug had good intentions but it failed
        in something basic and tests did not tackle the original
        issue. The problem was in that the destructor of the subclass was
        being called before the destructor of the superclass, hence the
        buffer was unreffed before unmapped.

        Now we finish what we started by adding an unmapEarly method that
        can be used as regular API if wanted and that it is used by the
        GstMappedOwnedBuffer destructor to instruct GstMappedBuffer
        superclass to actually unmap without having to wait for the
        destructor of the superclass to kick in.

        Tests: GStreamerTest::mappedOwnedBufferDestruction and
        GStreamerTest::mappedBufferValidityUnmapEarly API tests.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::~GstMappedBuffer):
        (WebCore::GstMappedBuffer::unmapEarly):
        (WebCore::GstMappedOwnedBuffer::~GstMappedOwnedBuffer):

2020-07-23  Alex Christensen  <achristensen@webkit.org>

        Split Windows parts from CFNetworkSPI.h to CFNetworkSPIWin.h
        https://bugs.webkit.org/show_bug.cgi?id=214719

        Reviewed by Tim Horton.

        No change in behavior.
        Windows CFNetwork work is not actively developed, but Cocoa is.
        This makes it easier to find where to put new things.

        * platform/network/NetworkStorageSession.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/CookieStorageCFNet.cpp:
        * platform/network/cf/CredentialStorageCFNet.cpp:
        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        * platform/network/cf/ResourceRequestCFNet.cpp:
        * platform/network/cf/ResourceRequestCFNet.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:

2020-07-23  Alex Christensen  <achristensen@webkit.org>

        Remove dead code in ResourceHandleCFNet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=214717

        Reviewed by Darin Adler.

        ResourceHandleCFNet.cpp is not compiled on Cocoa platforms any more.
        Remove Cocoa-specific code in that file, which was used on iOS before adopting NSURLSession.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::schedule): Deleted.
        (WebCore::ResourceHandle::unschedule): Deleted.

2020-07-23  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Query Objects
        https://bugs.webkit.org/show_bug.cgi?id=126940

        Reviewed by Dean Jackson.

        Passes conformance tests webgl/2.0.0/conformance2/query/*

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::deleteQuery):
        (WebCore::WebGL2RenderingContext::isQuery):
        (WebCore::WebGL2RenderingContext::validateQueryTarget):
        (WebCore::WebGL2RenderingContext::beginQuery):
        (WebCore::WebGL2RenderingContext::endQuery):
        (WebCore::WebGL2RenderingContext::getQuery):
        (WebCore::WebGL2RenderingContext::getQueryParameter):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLQuery.cpp:
        (WebCore::WebGLQuery::deleteObjectImpl):
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateWebGLObject):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::deleteQuery):
        (WebCore::GraphicsContextGLOpenGL::isQuery):
        (WebCore::GraphicsContextGLOpenGL::getQuery):

2020-07-23  Guowei Yang  <guowei_yang@apple.com>

        Infrastructure Work for Integrating CoreImage for Accelerated CSS/SVG Filter Rendering
        https://bugs.webkit.org/show_bug.cgi?id=213672

        Reviewed by Simon Fraser.

        This patch is the infrastructure work to enable filter rendering using 
        CoreImage. The design of this code is as follows:

        0) changing WebCore configuration for using CoreImage framework from
           iOS/mac only to unconditional, so watchOS and tvOS could also use
           CoreImage

        1) adding a new API to obtain the IOSurface from an AcceleratedImageBuffer 
           since CoreImage needs to render to an IOSurface

        2) Instead of applying the filters inside FilterEffect, a new class,
           FilterEffectRendererCoreImage is designed to handle the rendering. We hide
           the implementation details by subclassing from a generic FilterEffectRenderer class.
           This also has the benefit of organizing CoreImage obj-c calls in one place. This class
           owns a FilterEffect node, that is the last FilterEffect of a given filter graph.
           The filter graph will be traversed backwards and filter parameters is gathered 
           along the way. Then CIFilters will be created and connected to a larger CIFilter 
           graph. The output of the CIFilter graph will be rendered to the IOSurface of 
           a newly created AcceleratedImageBuffer. This image buffer will be returned 
           to RenderLayerFilters and rendered to the screen

        3) Inside CSSFilter::build, we first try to create a FilterEffectRenderer by passing in
           a renderer setting. A valid pointer will be returned only when the following two conditions
           are met:
               . CoreImage rendering is enabled in settings
               . All the filters inside the filter graph is implemented using CIFilters

        No new tests are required as this is the 
        infrastructure code for integrating CoreImage
        This patch should pass all the existing css3/filters tests

        * Configurations/WebCore.xcconfig: modified flag definition 
           so that CoreImage is used on all Apple Platforms, not only iPhone.
        * Sources.txt: Added the generic FilterEffectRenderer class file
        * SourcesCocoa.txt: added FilterEffectRendererCoreImage.mm
        * WebCore.xcodeproj/project.pbxproj: Reflecting newly added files,
           with some ordering changes 
        * platform/graphics/ConcreteImageBuffer.h: overrides isAccelerated()
           function that returns true only if the backend is IOSurface
        * platform/graphics/ImageBuffer.h: defined virtual function isAccelerated()
        * platform/graphics/ImageBufferBackend.h: defined virtual function 
          isAccelerated() that returns false in the base class
        (WebCore::ImageBufferBackend::isAccelerated const): returns false for the base class
        * platform/graphics/PlatformImageBuffer.h: added SPECIALIZE_TYPE_TRAITS to check 
          what type of ImageBufferBackend is
        * platform/graphics/PlatformImageBuffer.h: Added API to obtain 
          IOSurface from IOSurfaceBackend; added SPECIALIZE_TYPE_TRAITS
        (WebCore::AcceleratedImageBuffer::surface): Obtain the IOSurface pointer
          from ImageBufferIOSurfaceBackend
        (isType): check if a given ImageBuffer is type AcceleratedImageBuffer
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::surface): added an API to get the 
           IOSurface pointer
        (WebCore::ImageBufferIOSurfaceBackend::isAccelerated const): returns true
           because it is an accelerated image buffer
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h: added function surface()
           and isAccelerated()
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.h: Added.
        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm: Added.
        (WebCore::FilterEffectRendererCoreImage::tryCreate): creates a FilterEffectRendererCoreImage
          unique pointer. If the filters inside the graph are not all implemented,
          we return nullptr
        (WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering): 
          a function that takes in FilterEffect& and returns true if its a filter effect 
          type that is implemented in CoreImage, false otherwise
        (WebCore::FilterEffectRendererCoreImage::applyEffects): takes in a FilterEffect pointer,
           calls FilterEffectRendererCoreImage::connectCIFilters to create the final output CIImage
        (WebCore::FilterEffectRendererCoreImage::connectCIFilters): recursive 
           helper function that traverses the FilterEffect graph backwards, 
           creates CIFilter graph based on the subclass type of current processing 
           FilterEffect node. It will cache the CIFilter in a hashmap, whose key
           is the corresponding FilterEffect pointer. 
        (WebCore::FilterEffectRendererCoreImage::canRenderUsingCIFilters): unction 
           that takes in the last FilterEffect node and determines whether
           all of the filters inside the filter graph is already implemented using 
           CIFilters. It returns false as long as there is one filter that hasn't 
           been implemented. The rendering procedure will fallback to software mode
           if this function returns false
        (WebCore::FilterEffectRendererCoreImage::output const): returns the ImageBuffer
           that contains the data of the final output image
        (WebCore::FilterEffectRendererCoreImage::renderToImageBuffer): r
           enders CIImage* to an ImageBuffer
        (WebCore::FilterEffectRendererCoreImage::destRect const): calculates the destination
           bounding box
        (WebCore::FilterEffectRendererCoreImage::clearResult): clears all the saved results
        (WebCore::FilterEffectRendererCoreImage::FilterEffectRendererCoreImage): constructor
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::FEBlend): Pass an additional FilterEffect::Type argument
          to base class constructor
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::FEColorMatrix): ditto
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::FEComponentTransfer): ditto
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::FEComposite): ditto
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix): ditto
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):ditto
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::FEDisplacementMap):ditto
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::FEDropShadow):ditto
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::FEFlood):ditto
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::FEGaussianBlur):ditto
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::FELighting):ditto
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::FEMerge): ditto
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::FEMorphology): ditto
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::FEOffset): ditto
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting): ditto
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::FETile): ditto
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence): ditto
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect): ditto
        * platform/graphics/filters/FilterEffect.h: added a const member, 
          m_filterEffectType
        (WebCore::FilterEffect::filterEffectClassType): returns the FilterEffect
          class type
        * platform/graphics/filters/FilterEffectRenderer.cpp: Added.
        (WebCore::FilterEffectRenderer::tryCreate): tries creates a new FilterEffectRenderer 
           unique pointer. Here, we check whether the renderer setting has 
           CoreImage accelerated filter rendering enabled; we also check if all the 
           filters in the given FilterEffect graph is already implemented using 
           CoreImage. If both conditions are satisfied, create a FilterEffectRendererCoreImage
           otherwise returns nullptr.
        * platform/graphics/filters/FilterEffectRenderer.h: Added.
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::SourceAlpha): Pass an additional FilterEffect::Type argument
          to base class constructor
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic): ditto
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::build): we try to create a FilterEffectRenderer here by passing 
           in the state of the CoreImage Accelerated Rendering feature switch
        (WebCore::CSSFilter::apply): If we have a valid m_filterRenderer pointer, that means 
           we can render the result image using CoreImage path, thus we don't call effect.apply()
           fall back to software mode if hasResult() returns false.
        (WebCore::CSSFilter::output const): if we have a valid m_filterRenderer, then we will 
           obtain the ImageBuffer result from it, not FilterEffect
        (WebCore::CSSFilter::outputRect const): if we have a valid m_filterRenderer, then we will 
           obtain the ImageBuffer result from it, not FilterEffect
        * rendering/CSSFilter.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):  Pass an additional FilterEffect::Type argument
          to base class constructor

2020-07-23  Yusuke Suzuki  <ysuzuki@apple.com>

        We should have exception check after promise operation
        https://bugs.webkit.org/show_bug.cgi?id=214610
        <rdar://problem/65881794>

        Reviewed by Youenn Fablet and Mark Lam.

        Test: js/dom/promise-should-have-exception-check-on-operation.html

        Add exception check after promise operations.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):

2020-07-23  Jer Noble  <jer.noble@apple.com>

        [Cocoa|WebM] Seeking can leave parser in hung state
        https://bugs.webkit.org/show_bug.cgi?id=214704
        <rdar://problem/66009420>

        Reviewed by Eric Carlson.

        When the parser is explicitly reset, make sure to clear out all the tracks and initialization datas. Otherwise, a half-filled
        CMSampleBuffer can be left waiting around for more data, which may never arrive, and no further samples will ever be parsed.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::resetParserState):

2020-07-23  Jer Noble  <jer.noble@apple.com>

        [Cocoa] RELEASE_ASSERT when calling registerSupplementalVP9Decoder() when VideoToolbox.framework is not present
        https://bugs.webkit.org/show_bug.cgi?id=214697
        <rdar://problem/66010949>

        Reviewed by Eric Carlson.

        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::registerSupplementalVP9Decoder):
        (WebCore::isVP9DecoderAvailable):

2020-07-23  Sihui Liu  <sihui_liu@appe.com>

        Allow IndexedDB in third-party frames
        https://bugs.webkit.org/show_bug.cgi?id=214583
        <rdar://problem/61278487>

        Reviewed by Geoffrey Garen.

        Match IndexedDB's behavior with localStorage. Third-party iframes now have access to IndexedDB with partitioned
        in-memory storage. The partitioning key is ClientOrigin, which consists of opening origin and top origin.

        API Test: IndexedDB.IndexedDBThirdPartyFrameHasAccess
                  IndexedDB.IndexedDBThirdPartyDataRemoval
                  IndexedDB.IndexedDBThirdPartyWorkerHasAccess

        * Modules/indexeddb/IDBDatabaseIdentifier.cpp:
        (WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
        (WebCore::m_isTransient):
        (WebCore::IDBDatabaseIdentifier::isolatedCopy const):
        (WebCore::IDBDatabaseIdentifier::loggingString const):
        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        (WebCore::IDBDatabaseIdentifier::hash const):
        (WebCore::IDBDatabaseIdentifier::operator== const):
        (WebCore::IDBDatabaseIdentifier::isTransient const):
        (WebCore::IDBDatabaseIdentifier::encode const):
        (WebCore::IDBDatabaseIdentifier::decode):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::shouldThrowSecurityException):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::createBackingStore):
        * Modules/webdatabase/DOMWindowWebDatabase.cpp:
        (WebCore::DOMWindowWebDatabase::openDatabase):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessDatabase const):

2020-07-23  Chris Dumez  <cdumez@apple.com>

        Add support for SVGAElement's rel / relList attributes
        https://bugs.webkit.org/show_bug.cgi?id=214690

        Reviewed by Darin Adler.

        Add support for SVGAElement's rel / relList attributes:
        https://www.w3.org/TR/SVG/linking.html#InterfaceSVGAElement

        No new tests, rebaselined existing tests.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::parseAttribute):
        (WebCore::SVGAElement::relList const):
        * svg/SVGAElement.h:
        * svg/SVGAElement.idl:
        * svg/svgattrs.in:

2020-07-23  Yusuke Suzuki  <ysuzuki@apple.com>

        Add exception check for WebCore createRejectedPromiseWithTypeError
        https://bugs.webkit.org/show_bug.cgi?id=214680
        <rdar://problem/65925490>

        Reviewed by Mark Lam.

        Test: js/dom/rejected-promise-creation-should-check-exception.html

        Add missing exception checks in createRejectedPromiseWithTypeError.

        * bindings/js/JSDOMAttribute.h:
        (WebCore::IDLAttribute::get):
        * bindings/js/JSDOMOperationReturningPromise.h:
        (WebCore::IDLOperationReturningPromise::call):
        (WebCore::IDLOperationReturningPromise::callReturningOwnPromise):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::createRejectedPromiseWithTypeError):

2020-07-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Win] Build StructuredExceptionHandlerSuppressor.cpp and makesafeseh.asm only for AppleWin
        https://bugs.webkit.org/show_bug.cgi?id=214671

        Reviewed by Per Arne Vollan.

        StructuredExceptionHandlerSuppressor is used only by AppleWin port
        in platform/graphics/ca/win/LayerChangesFlusher.cpp.
        makesafeseh.asm causes a building problem for 32bit WinCairo
        because it is using OBJECT library type for WebCore.

        * PlatformAppleWin.cmake: Added build rules for them.
        * PlatformWin.cmake: Removed build rules for them.

2020-07-23  Andres Gonzalez  <andresg_22@apple.com>

        Update the isolated tree even when there is no client request.
        https://bugs.webkit.org/show_bug.cgi?id=214692

        Reviewed by Chris Fleizach.

        AXObjectCache::updateIsolatedTree was checking for isIsolatedTreeEnabled,
        which in turn checks for whether the clientSupportsIsolatedTree. Often
        at the time updateIsolatedTree is called, there is no client request
        since client requests and updates occur in separate threads,
        independently from each other. Thus the isolated tree wasn't being
        updated. This patch removes the check for isIsolatedTreeEnabled and rely
        on the presence of an isolated tree for the given PageID to perform the
        update.
        In addition, added an update of the isolated tree for AXLoadingEvent::AXLoadingFinished.
        This fixes several instance of dynamic content page changes that were
        not being reflected on the isolated tree.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::clientSupportsIsolatedTree): Some logging.
        (WebCore::AXObjectCache::isIsolatedTreeEnabled): Some logging.
        (WebCore::AXObjectCache::frameLoadingEventNotification): Calls updateIsolatedTree.
        (WebCore::AXObjectCache::updateIsolatedTree): Handles AXLoadingEvents.
        * accessibility/AXObjectCache.h:

2020-07-23  Clark Wang  <clark_wang@apple.com>

        Added PeriodicWave constructor according to spec
        https://bugs.webkit.org/show_bug.cgi?id=214615

        Reviewed by Chris Dumez.

        Re-baselined existing tests that now pass.

        Added PeriodicWave constructor according to spec: https://www.w3.org/TR/webaudio/#periodicwave.
        Added PeriodicWaveConstraints, PeriodicWaveOptions files. Updated PeriodicWave::createBandLimitedTables
        to normalize waveform based on spec: https://www.w3.org/TR/webaudio/#waveform-normalization.
        Added updated createPeriodicWave method in BaseAudioContext, and moved old createPeriodicWave method
        Into WebKitAudioContext.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createPeriodicWave):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::createPeriodicWave):
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::create):
        (WebCore::PeriodicWave::createBandLimitedTables):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/PeriodicWave.idl:
        * Modules/webaudio/PeriodicWaveConstraints.h: Added.
        * Modules/webaudio/PeriodicWaveConstraints.idl: Added.
        * Modules/webaudio/PeriodicWaveOptions.h: Added.
        * Modules/webaudio/PeriodicWaveOptions.idl: Added.
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::createPeriodicWave):
        * Modules/webaudio/WebKitAudioContext.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-23  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] WebKit::ArgumentCoder<BlobPart>::decode() and encode() should use enum BlobPart::Type
        <https://webkit.org/b/214665>
        <rdar://problem/65777948>

        Reviewed by Darin Adler.

        * platform/network/BlobPart.h:
        (WebCore::BlobPart::Type):
        - Convert to an enum class of size `bool`.
        (WebCore::BlobPart::BlobPart):
        (WebCore::BlobPart::data const):
        (WebCore::BlobPart::moveData):
        (WebCore::BlobPart::url const):
        - Change BlobPart::Type enums to use fully qualified name.
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        - Change BlobPart::Type enums to use fully qualified name.

2020-07-23  Simon Fraser  <simon.fraser@apple.com>

        updateRendering trace point should exclude SVG
        https://bugs.webkit.org/show_bug.cgi?id=214649

        Reviewed by Geoffrey Garen.

        Don't issue the trace point for SVGImage Pages.

        * page/Page.cpp:
        (WebCore::Page::updateRendering):

2020-07-23  Zalan Bujtas  <zalan@apple.com>

        Unreviewed, reverting r262124.

        See REGRESSION(r262124) Overlapping text on Youtube's video upload page
        https://bugs.webkit.org/show_bug.cgi?id=214655

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution):

2020-07-23  Brady Eidson  <beidson@apple.com>

        Add Gamepad tests that exercise the native frameworks
        <rdar://problem/65343674> and https://bugs.webkit.org/show_bug.cgi?id=214188

        Reviewed by Tim Horton.

        * platform/gamepad/mac/MultiGamepadProvider.h:
        (WebCore::MultiGamepadProvider::setUsesOnlyHIDGamepadProvider):
        * platform/gamepad/mac/MultiGamepadProvider.mm:
        (WebCore::MultiGamepadProvider::startMonitoringGamepads):
        (WebCore::MultiGamepadProvider::stopMonitoringGamepads):

2020-07-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed, build fix after r264762.

        * platform/graphics/gstreamer/GStreamerCommon.cpp: Added include
        SharedBuffer.h.

2020-07-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failed
        https://bugs.webkit.org/show_bug.cgi?id=213364

        Reviewed by Philippe Normand.

        In some cases as in passing init datas around, the InitData that
        contains a SharedBuffer that contains a non-reffed mapped buffer
        can outlive the buffer itself, creating this problem.

        In this patch we make a new class called GstMappedOwnedBuffer that
        is to map read-only buffers and that is used for the InitData
        SharedBuffer. GstMappedBuffer does not support SharedBuffer
        anymore and is not ref counted anymore as it is intended for short
        term and quick usage.

        Test: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-setmediakeys-to-multiple-video-elements.https.html

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::create):
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/SharedBuffer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcAllocateBuffersAndRenderAudio):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::GstMappedBuffer::createVector const):
        (WebCore::GstMappedOwnedBuffer::createSharedBuffer):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::GstMappedBuffer):
        (WebCore::GstMappedBuffer::~GstMappedBuffer):
        (WebCore::GstMappedBuffer::isValid const):
        (WebCore::GstMappedBuffer::data):
        (WebCore::GstMappedBuffer::data const):
        (WebCore::GstMappedBuffer::size const):
        (WebCore::GstMappedBuffer::operator bool const):
        (WebCore::GstMappedBuffer::operator! const):
        (WebCore::GstMappedOwnedBuffer::create):
        (WebCore::GstMappedOwnedBuffer::GstMappedOwnedBuffer):
        (WebCore::operator==):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        (WebCore::CDMProxyThunder::getDecryptionSession const):
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (decrypt):
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
        (WebCore::MockRealtimeAudioSourceGStreamer::render):
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingAudioSourceLibWebRTC::pullAudioData):
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        (WebCore::RealtimeOutgoingVideoSourceLibWebRTC::createBlackFrame):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::Fragmentize):

2020-07-23  Mark Lam  <mark.lam@apple.com>

        Fix missing exception checks below RTCPeerConnection.generateCertificate().
        https://bugs.webkit.org/show_bug.cgi?id=214668
        <rdar://problem/65929975>

        Reviewed by Yusuke Suzuki.

        Test: webrtc/missing-exception-checks-RTCPeerConnection-generateCertificate.html

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::whenDefined):
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/JSDOMOperationReturningPromise.h:
        (WebCore::IDLOperationReturningPromise::call):
        (WebCore::IDLOperationReturningPromise::callReturningOwnPromise):
        (WebCore::IDLOperationReturningPromise::callStatic):
        (WebCore::IDLOperationReturningPromise::callStaticReturningOwnPromise):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::reject):
        (WebCore::rejectPromiseWithExceptionIfAny):
        * bindings/js/JSDOMPromiseDeferred.h:
        (WebCore::callPromiseFunction):

2020-07-22  Conrad Shultz  <conrad_shultz@apple.com>

        Update macOS Version macros
        https://bugs.webkit.org/show_bug.cgi?id=214653

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-07-22  Jer Noble  <jer.noble@apple.com>

        [Cocoa|WebM] Decode error when seeking
        https://bugs.webkit.org/show_bug.cgi?id=214666

        Reviewed by Eric Carlson.

        A decoder error is hit when seeking because we think all samples coming out of the SourceBufferParserWebM are sync-samples.
        This is because the attachment added with CMSetAttachment() is ignored; the correct way to set sample attachments is by
        getting the sample attachments array with CMSampleBufferGetSampleAttachmentsArray(), and then iterating over the attachments
        and adding keys to the underlying mutable CFDictionary.

        * platform/graphics/cocoa/SourceBufferParserWebM.cpp:
        (WebCore::SourceBufferParserWebM::OnFrame):

2020-07-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][32bit] JPEG2000ImageDecoder.cpp: error C2664: 'std::unique_ptr<...>::unique_ptr(...)': cannot convert argument 2 from 'void (__stdcall *)(opj_codec_t *)' to 'const _Dx &'
        https://bugs.webkit.org/show_bug.cgi?id=214657

        Reviewed by Darin Adler.

        __cdecl and __stdcall calling conventions don't match.
        <https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and-naming-conventions>

        * platform/image-decoders/jpeg2000/JPEG2000ImageDecoder.cpp:
        (WebCore::JPEG2000ImageDecoder::decode): Use decltype for the second template argument of unique_ptr.

2020-07-22  Jon Davis  <jond@apple.com>

        Add feature status for CSS Containment Module Level 1
        https://bugs.webkit.org/show_bug.cgi?id=214663

        Reviewed by Darin Adler.

        * features.json:

2020-07-22  Jon Davis  <jond@apple.com>

        Add feature status for the focus-visible pseudo-selector
        https://bugs.webkit.org/show_bug.cgi?id=214662

        Reviewed by Darin Adler.

        * features.json:

2020-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, update feature status for async clipboard API

        * features.json: Move from "In Development" to "Supported".

2020-07-21  Mark Lam  <mark.lam@apple.com>

        Disallow VM entry when doing a VMInquiry.
        https://bugs.webkit.org/show_bug.cgi?id=214624
        <rdar://problem/65915314>

        Reviewed by Saam Barati.

        1. Change binding to reset the DisallowVMEntry scope in PropertySlot after doing
           a VMInquiry.
        2. Rebase bindings test results to match.

        * bindings/js/JSDOMAbstractOperations.h:
        (WebCore::isVisibleNamedProperty):
        (WebCore::accessVisibleNamedProperty):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDefineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::put):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::put):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::putByIndex):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::put):
        (WebCore::JSTestNamedSetterNoIdentifier::putByIndex):
        (WebCore::JSTestNamedSetterNoIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::put):
        (WebCore::JSTestNamedSetterThrowingException::putByIndex):
        (WebCore::JSTestNamedSetterThrowingException::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::put):
        (WebCore::JSTestNamedSetterWithIdentifier::putByIndex):
        (WebCore::JSTestNamedSetterWithIdentifier::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetter::putByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetter::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::put):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::putByIndex):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::defineOwnProperty):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgableProperties::put):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::putByIndex):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::defineOwnProperty):

2020-07-22  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] canPlayType with 'codecs' parameter should never return "maybe"
        https://bugs.webkit.org/show_bug.cgi?id=214621
        <rdar://problem/65146785>

        Reviewed by Jer Noble.

        No new tests, updated existing tests and results.

        * platform/graphics/MIMETypeCache.cpp:
        (WebCore::MIMETypeCache::canDecodeType):

2020-07-22  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Implement multiple render target entry points
        https://bugs.webkit.org/show_bug.cgi?id=211156

        Reviewed by Dean Jackson.

        Implement the drawBuffers and clearBuffer entry points.

        Integrate the clearBuffer APIs with preserveDrawingBuffer:false's
        auto-clearing. Move some auto-clearing state from
        WebGLRenderingContextBase to GraphicsContextGL and
        GraphicsContextGLOpenGL.

        Rename setPreserveDrawingBuffer to enablePreserveDrawingBuffer to
        make it clear that arbitrary changes of preserveDrawingBuffer are
        not supported. setPreserveDrawingBuffer was previously added for
        capture of preserveDrawingBuffer:false WebGL canvases.

        Covered by existing WebGL conformance tests and canvas capture
        layout tests.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::drawBuffers):
        (WebCore::WebGL2RenderingContext::clearBufferiv):
        (WebCore::WebGL2RenderingContext::clearBufferuiv):
        (WebCore::WebGL2RenderingContext::clearBufferfv):
        (WebCore::WebGL2RenderingContext::clearBufferfi):
        (WebCore::WebGL2RenderingContext::validateClearBuffer):
        (WebCore::WebGL2RenderingContext::updateBuffersToAutoClear):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::clearIfComposited):
        (WebCore::WebGLRenderingContextBase::enablePreserveDrawingBuffer):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::setPreserveDrawingBuffer): Deleted.
        * platform/graphics/GraphicsContextGL.cpp:
        (WebCore::GraphicsContextGL::enablePreserveDrawingBuffer):
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited):
        (WebCore::GraphicsContextGLOpenGL::drawBuffers):
        (WebCore::GraphicsContextGLOpenGL::clearBufferiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferuiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfi):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::resetBuffersToAutoClear):
        (WebCore::GraphicsContextGLOpenGL::setBuffersToAutoClear):
        (WebCore::GraphicsContextGLOpenGL::getBuffersToAutoClear const):
        (WebCore::GraphicsContextGLOpenGL::enablePreserveDrawingBuffer):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited):
        (WebCore::GraphicsContextGLOpenGL::drawBuffers):

2020-07-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        Article headlines are split across multiple lines after translating tagesschau.de
        https://bugs.webkit.org/show_bug.cgi?id=214652
        <rdar://problem/63995571>

        Reviewed by Tim Horton.

        Treat block-level heading elements (`h1` through `h6`) as item boundaries. On this website, we currently vend
        the main heading and sub-heading as separate tokens in the same item, which sometimes causes the machine
        translation framework to try and rearrange and split tokens, since it treats the combination of the main heading
        and sub-heading text as a single sentence to be translated.

        Test: TextManipulation.StartTextManipulationExtractsHeadingElementsAsSeparateItems

        * editing/TextManipulationController.cpp:
        (WebCore::isEnclosingItemBoundaryElement):

2020-07-22  Alex Christensen  <achristensen@webkit.org>

        Safari does not present CertificateInfo for service-worker served documents
        https://bugs.webkit.org/show_bug.cgi?id=206403
        <rdar://problem/65410875>

        Reviewed by Darin Adler and Youenn Fablet.

        When loading a service worker JavaScript resource, we need to tell the network process to include certificate info with the response.
        We then pass that response to the ServiceWorkerContextData for storage.  When the service worker generates responses to fetches, use that
        certificate chain for WKWebView.serverTrust when the page is committed.

        Covered by updating a test I wrote in r264687.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::setCertificateInfo):
        * platform/network/cf/CertificateInfo.h:
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::CertificateInfo::isolatedCopy const):
        * platform/network/soup/CertificateInfo.h:
        (WebCore::CertificateInfo::isolatedCopy const):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::certificateInfo const):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::isolatedCopy const):
        (WebCore::serviceWorkerFetchError):
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        Also fix a possible use-after-move bug, depending on parameter evaluation order which is undefined behavior.
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::contextData const):
        * workers/service/server/SWServerWorker.h:

2020-07-22  David Kilzer  <ddkilzer@apple.com>

        Unreviewed build fix after r264710, r264719, r264721: use more HAVE_AVPLAYER_VIDEORANGEOVERRIDE.

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        - Guard more code with HAVE(AVPLAYER_VIDEORANGEOVERRIDE).

2020-07-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Uniscribe] Material icons containing underscore or numbers aren't shown because ScriptItemize splits them apart
        https://bugs.webkit.org/show_bug.cgi?id=201214

        Reviewed by Don Olmstead.

        ScriptItemize split "3d_rotation" into "3", "d", "_" and
        "rotation". It has a option fMergeNeutralItems to control it.

        Test: fonts/ligature.html

        * platform/graphics/win/ComplexTextControllerUniscribe.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        Set fMergeNeutralItems of SCRIPT_CONTROL true.

2020-07-22  Jer Noble  <jer.noble@apple.com>

        Further unreviewed build fix after r264710; need more HAVE_AVPLAYER_VIDEORANGEOVERRIDE guards.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

2020-07-22  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r264710; add a HAVE_AVPLAYER_VIDEORANGEOVERRIDE guard.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPreferredDynamicRangeMode):

2020-07-22  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r205826): narrowNoBreakSpace (U+202F) has zero width, regardless of font
        https://bugs.webkit.org/show_bug.cgi?id=214626
        <rdar://problem/65193790>

        Reviewed by Timothy Hatcher.

        There's no reason to overwrite narrowNoBreakSpace with zeroWidthSpace.

        This is becoming much more prominent now because a lot of the French unit formatting data in CLDR - and hence in e.g. NSMeasurementFormatter - uses 202F between numeric value and unit, e.g. "37 km"

        It works in native content on macOS, and in all other browsers on macOS, but not in WebKit.

        Test: fast/text/narrowNoBreakSpace.html

        * platform/graphics/Font.cpp:
        (WebCore::overrideControlCharacters):

2020-07-22  James Darpinian  <jdarpinian@chromium.org>

        Fix validation of deleted WebGL objects
        https://bugs.webkit.org/show_bug.cgi?id=214622

        Reviewed by Dean Jackson.

        Programs and shaders need to be validated differently than other WebGL objects.
        Using a deleted WebGL object should cause an INVALID_OPERATION error, except
        for programs and shaders which should be INVALID_VALUE.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        (WebCore::WebGL2RenderingContext::transformFeedbackVaryings):
        (WebCore::WebGL2RenderingContext::getTransformFeedbackVarying):
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        (WebCore::WebGL2RenderingContext::getActiveUniforms):
        (WebCore::WebGL2RenderingContext::getUniformBlockIndex):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        (WebCore::WebGL2RenderingContext::uniformBlockBinding):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::attachShader):
        (WebCore::WebGLRenderingContextBase::bindAttribLocation):
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::detachShader):
        (WebCore::WebGLRenderingContextBase::validateWebGLObject):
        (WebCore::WebGLRenderingContextBase::validateWebGLProgramOrShader):
        (WebCore::WebGLRenderingContextBase::getActiveAttrib):
        (WebCore::WebGLRenderingContextBase::getActiveUniform):
        (WebCore::WebGLRenderingContextBase::getAttachedShaders):
        (WebCore::WebGLRenderingContextBase::getAttribLocation):
        (WebCore::WebGLRenderingContextBase::getProgramParameter):
        (WebCore::WebGLRenderingContextBase::getProgramInfoLog):
        (WebCore::WebGLRenderingContextBase::getShaderParameter):
        (WebCore::WebGLRenderingContextBase::getShaderInfoLog):
        (WebCore::WebGLRenderingContextBase::getShaderSource):
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::getUniformLocation):
        (WebCore::WebGLRenderingContextBase::linkProgramWithoutInvalidatingAttribLocations):
        (WebCore::WebGLRenderingContextBase::shaderSource):
        (WebCore::WebGLRenderingContextBase::validateProgram):
        * html/canvas/WebGLRenderingContextBase.h:

2020-07-22  Jon Davis  <jond@apple.com>

        Update feature status to include the inert attribute
        https://bugs.webkit.org/show_bug.cgi?id=214644

        Reviewed by Darin Adler.

        * features.json:

2020-07-22  Jer Noble  <jer.noble@apple.com>

        [macOS] Adopt AVPlayer.videoRangeOverride
        https://bugs.webkit.org/show_bug.cgi?id=213902
        <rdar://problem/63953509>

        Reviewed by Youenn Fablet.

        AVPlayer.videoRangeOverride and also +[AVPlayer preferredVideoRangeForDisplays:] are replacements for the
        process-global MTShouldPlayHDR() and MTOverrideShouldPlayHDRVideo() and should be used preferentially if
        present.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::setPreferredDynamicRangeMode):
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::screenPropertiesDidChange):
        (WebCore::Page::windowScreenDidChange):
        * page/Page.h:
        * platform/PlatformScreen.h:
        (WebCore::preferredDynamicRangeMode):
        * platform/ScreenProperties.h:
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::setPreferredDynamicRangeMode):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setPreferredDynamicRangeMode):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::convertDynamicRangeModeEnumToAVVideoRange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setPreferredDynamicRangeMode):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::convertAVVideoRangeToEnum):
        (WebCore::collectScreenProperties):
        (WebCore::preferredDynamicRangeMode):

2020-07-22  Jon Davis  <jond@apple.com>

        Update status for Web App Manifest
        https://bugs.webkit.org/show_bug.cgi?id=204863

        Reviewed by Dean Jackson.

        * features.json:

2020-07-21  Simon Fraser  <simon.fraser@apple.com>

        Scrolling tesla.com on iPad is not smooth
        https://bugs.webkit.org/show_bug.cgi?id=214627

        Reviewed by Tim Horton.

        This is the iOS equivalent of the fix in r264203; if the user is scrolling (or we're animating for
        scroll snap), layout should not trigger scroll position changes via computation of the current snap
        location.

        To fix this, we need to send data from the UI process to the web process about which scrolling tree
        nodes the user is scrolling. That's done via RemoteScrollingUIState, which will, in the long term,
        become a more general UI -> WebProcess scrolling state updating mechanism. For now, it just keeps
        track of nodes undergoing scroll snap and user scrolls (only the latter is hooked up for now).

        Test: fast/scrolling/ios/adjust-scroll-snap-during-gesture.html

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::scrollingTreeNodeWillStartPanGesture):
        (WebCore::ScrollingTree::scrollingTreeNodeWillStartScroll):
        (WebCore::ScrollingTree::scrollingTreeNodeDidEndScroll):

2020-07-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r264691.
        https://bugs.webkit.org/show_bug.cgi?id=214642

        Regressed fast/mediastream/captureStream/canvas3d.html

        Reverted changeset:

        "[WebGL2] Implement multiple render target entry points"
        https://bugs.webkit.org/show_bug.cgi?id=211156
        https://trac.webkit.org/changeset/264691

2020-07-22  Youenn Fablet  <youenn@apple.com>

        KeepAlive fetch should not be blocked in pagehide event handlers
        https://bugs.webkit.org/show_bug.cgi?id=214630
        <rdar://problem/65564772>

        Reviewed by Chris Dumez.

        Test: http/wpt/fetch/fetch-in-pagehide.html

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        Allow keep alive fetches to proceed similarly to ping loads.

2020-07-22  Geoffrey Garen  <ggaren@apple.com>

        JSRunLoopTimer should use WTF::RunLoop rather than custom CF code
        https://bugs.webkit.org/show_bug.cgi?id=214102

        Unreviewed, re-landing r264242 with crash fixed.

        Since I was here, I applied Darin's previous review feedback that I had
        missed.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2020-07-19  Darin Adler  <darin@apple.com>

        Remove live ranges from Editor.h and EditorClient.h
        https://bugs.webkit.org/show_bug.cgi?id=214261

        Reviewed by Sam Weinig.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::misspellingRange const): Update since
        rangeForTextCheckingResult no longer returns a live range.
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const):
        Update since rangeOfString no longer returns a live range.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilityTextOperationForParameterizedAttribute): Use makeSimpleRange.

        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus): Use makeRangeSelectingNodeContents
        since shouldBeginEditing no longer takes a live range.

        * dom/Range.h: Exxported makeSimpleRange for use outside WebCore.

        * dom/SimpleRange.cpp:
        (WebCore::makeSimpleRange): Added. Takes two optional boundary points and
        returns an optional range.
        * dom/SimpleRange.h: Added the above.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired): Removed calls to
        crateLiveRange since markAllMisspellingsAndBadGrammarInRanges no
        longer takes live ranges.
        (WebCore::AlternativeTextController::applyDictationAlternative):
        Updates since shouldInsertText no longer takes a live range.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Updated since
        shouldMoveRangeAfterDelete no longer takes live ranges.

        * editing/Editor.cpp:
        (WebCore::Editor::canDeleteRange const): Updated to not take a
        live range.
        (WebCore::Editor::deleteWithDirection): Updated since
        addRangeToKillRing no longer takes a live range.
        (WebCore::Editor::pasteAsPlainTextWithPasteboard): Updated since
        shouldInsertText no longer takes a live range.
        (WebCore::Editor::shouldInsertFragment): No longer take a live range.
        (WebCore::Editor::replaceSelectionWithText): Updated since
        selectedRange no longer returns a live range.
        (WebCore::Editor::selectedRange): Do not return a live range.
        (WebCore::Editor::shouldDeleteRange const): Do not take a live range.
        (WebCore::Editor::shouldInsertText const): Ditto.
        (WebCore::Editor::shouldApplyStyle): Ditto. Also take a const& to
        the style instead of a non-const*.
        (WebCore::Editor::applyStyleToSelection): Pass a style reference
        and a non-live range.
        (WebCore::Editor::applyParagraphStyleToSelection): Updated for
        the change above.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): No need to
        pass a live range any more.
        (WebCore::Editor::insertLineBreak): Ditto.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::performCutOrCopy): Updated to not use live range.
        (WebCore::Editor::performDelete): Ditto.
        (WebCore::Editor::shouldEndEditing): Do not take a live range.
        (WebCore::Editor::shouldBeginEditing): Ditto.
        (WebCore::Editor::willWriteSelectionToPasteboard): Ditto.
        (WebCore::Editor::selectComposition): Update since compositionRange
        is not a live range.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Update since
        we don't need to pass live ranges to markAllMisspellingsAndBadGrammarInRanges.
        (WebCore::Editor::markMisspellingsOrBadGrammar): Don't return a
        live range in tthe out argument.
        (WebCore::Editor::markMisspellings): Ditto.
        (WebCore::Editor::markBadGrammar): Update for the above.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Do not
        take live ranges for the arguments.
        (WebCore::Editor::replaceRangeForSpellChecking): Do not take a live range.
        (WebCore::Editor::markAndReplaceFor): Update since shouldInsertText does
        not take a live range any more.
        (WebCore::Editor::changeBackToReplacedString): Update to not use live
        ranges as much.
        (WebCore::Editor::markMisspellingsAndBadGrammar): Updae since
        we don't need to pass live ranges to markAllMisspellingsAndBadGrammarInRanges.
        (WebCore::Editor::rangeForPoint): Don't return a live range.
        (WebCore::Editor::compositionRange const): Ditto.
        (WebCore::Editor::transpose): Updated since we don't pass a live range.
        (WebCore::Editor::firstRectForRange const): Don't take a live range.
        (WebCore::Editor::shouldChangeSelection const): Updated since we don't
        need to pass a live range.
        (WebCore::Editor::findString): Ditto.
        (WebCore::start): Added. Helper to make rangeOfString easier to read.
        (WebCore::end): Ditto.
        (WebCore::makeBoundaryPointAfterNodeContents): Ditto.
        (WebCore::makeBoundaryPointAfterNode): Ditto.
        (WebCore::collapseIfRootsDiffer): Ditto.
        (WebCore::Editor::rangeOfString): Updated to not take or return a
        live range and not use it internally either.
        (WebCore::isFrameInRange): Don't take a live range.
        (WebCore::Editor::countMatchesForText): Don't take or return live ranges.
        (WebCore::Editor::contextRangeForCandidateRequest const): Don't return
        a live range.
        (WebCore::Editor::rangeForTextCheckingResult const): Ditto.
        (WebCore::Editor::handleAcceptedCandidate): Update for the above.
        (WebCore::Editor::adjustedSelectionRange): Don't return a live range.

        * editing/Editor.h: Updated for all the chagnes above.

        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity): Updated to reduce the use of
        live ranges.
        (WebCore::unionRanges): Updated to no longer take or return a live
        range. Still uses live ranges in the algorithm for now.
        (WebCore::executeDeleteToMark): Updated since selectedRange no longer
        returns a live range.
        (WebCore::executeSelectToMark): Update to use the new unionRanges.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::shouldDeleteSelection const): Updated
        since shouldDeleteRange no longer requires a live range.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment): Updated
        for changes to use fewer live ranges.
        (WebCore::Editor::writeSelectionToPasteboard): Ditto.
        (WebCore::Editor::writeSelection): Ditto.
        (WebCore::Editor::replaceSelectionWithAttributedString): Ditto.
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard): Ditto.
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.
        (WebCore::Editor::pasteWithPasteboard): Ditto.
        * editing/libwpe/EditorLibWPE.cpp:
        (WebCore::createFragmentFromPasteboardData): Ditto.
        (WebCore::Editor::pasteWithPasteboard): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::pasteWithPasteboard): Ditto.
        (WebCore::Editor::replaceNodeFromPasteboard): Ditto.
        (WebCore::Editor::dataSelectionForPasteboard): Ditto.
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard): Ditto.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename):
        Removed a WTFMove that messes up the return value optimization.
        Noticed while fixing errors caused by live range changes.

        * loader/EmptyClients.cpp: Updated for changes to EditorClient.

        * page/ContextMenuController.cpp:
        (WebCore::insertUnicodeCharacter): Updated to use fewer live ranges.
        (WebCore::ContextMenuController::contextMenuItemSelected): DItto.
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Ditto.
        (WebCore::DragController::startDrag): Ditto.

        * page/EditorClient.h: Don't take or return live ranges.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey): Simplified
        since we don't need to use a live range.

        * page/FocusController.cpp:
        (WebCore::relinquishesEditingFocus): Changed argument type to be
        more specific, and changed to not use a live range.
        (WebCore::FocusController::setFocusedElement): Updated for the above.

        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint): Updated to not use live ranges.

        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges): Updated to not use
        live ranges as much.
        (WebCore::Page::rangeOfString): Ditto.
        (WebCore::Page::findMatchesForText): Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::rangeOfString): Updated since return value
        of the Editor member function is no longer a live range.
        (WebCore::Internals::countMatchesForText): Ditto.

2020-07-21  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Implement multiple render target entry points
        https://bugs.webkit.org/show_bug.cgi?id=211156

        Reviewed by Myles C. Maxfield.

        Implement the drawBuffers and clearBuffer entry points. Integrate
        the clearBuffer APIs with preserveDrawingBuffer:false's
        auto-clearing.

        Covered by existing WebGL conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::drawBuffers):
        (WebCore::WebGL2RenderingContext::clearBufferiv):
        (WebCore::WebGL2RenderingContext::clearBufferuiv):
        (WebCore::WebGL2RenderingContext::clearBufferfv):
        (WebCore::WebGL2RenderingContext::clearBufferfi):
        (WebCore::WebGL2RenderingContext::validateClearBuffer):
        (WebCore::WebGL2RenderingContext::updateBuffersToAutoClear):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::drawBuffersIfNecessary):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::clearIfComposited):
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited):
        (WebCore::GraphicsContextGLOpenGL::drawBuffers):
        (WebCore::GraphicsContextGLOpenGL::clearBufferiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferuiv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfv):
        (WebCore::GraphicsContextGLOpenGL::clearBufferfi):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::resetBuffersToAutoClear):
        (WebCore::GraphicsContextGLOpenGL::setBuffersToAutoClear):
        (WebCore::GraphicsContextGLOpenGL::getBuffersToAutoClear const):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::markLayerComposited):
        (WebCore::GraphicsContextGLOpenGL::drawBuffers):

2020-07-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r258871): Shift + click to extend selection loses currently selected text
        https://bugs.webkit.org/show_bug.cgi?id=214617
        <rdar://problem/64980223>

        Reviewed by Megan Gardner.

        After the changes in r258871, shift clicking sometimes fails to preserve the existing selected text range on
        macOS and iOS. The logic in `EventHandler::handleMousePressEventSingleClick` uses the `textDistance` helper
        method to count the number of characters between the start of the current selection to the newly selected
        extent, as well as the number of characters between the end of the current selection and the newly selected
        extent position. It compares these two character counts, and attempts to choose the new selection extents in
        such a way that maximizes the amount of selected text.

        However, after r258871, `textDistance` uses `characterCount` instead of `TextIterator::rangeLength`. Unlike the
        former, `rangeLength` is robust in the case where the start position comes after the end position (in document
        order), since the process of creating a live `Range` object swaps the start and end if needed. This isn't the
        case when using `SimpleRange`. Instead, when given a simple range where the start comes after the end,
        `characterCount` will iterate text in the DOM, starting from the start position and ending at the end of the
        document rather than the end position. The result is that `characterCount` actually counts the number of
        characters between the start position and the end of the document, rather than the number of characters between
        the two positions.

        In the context of this bug, if the start of the current selection is "far away" (in terms of character count)
        from the end of the document and the new extent position comes after end of the current selection, we will end
        up choosing the end (instead of the start) as one of the new extents of the updated selection.

        To fix this (as well as other similar issues that might've arisen when replacing uses of
        `TextIterator::rangeLength` with `characterCount`), simply teach `characterCount` to flip the start and end
        positions if the end position of the `SimpleRange` comes before the start.

        Test: editing/selection/shift-click-includes-existing-selection.html

        * editing/TextIterator.cpp:
        (WebCore::characterCount):

2020-07-21  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=214623

        * platform/network/curl/CertificateInfo.h:
        * platform/network/curl/CertificateInfoCurl.cpp:
        (WebCore::CertificateInfo::summary const):
        (WebCore::CertificateInfo::summaryInfo const): Deleted.

2020-07-21  Alex Christensen  <achristensen@webkit.org>

        Remove unneeded CertificateInfoBase
        https://bugs.webkit.org/show_bug.cgi?id=214623

        Reviewed by Brady Eidson.

        I need to make CertificateInfo::isolatedCopy and this class was making it messy.
        It has no shared functionality, so I removed it.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForResourceResponse):
        * platform/network/CertificateInfoBase.h: Removed.
        * platform/network/CertificateSummary.h: Copied from Source/WebCore/platform/network/CertificateInfoBase.h.
        (WebCore::CertificateInfoBase::containsNonRootSHA1SignedCertificate const): Deleted.
        (WebCore::CertificateInfoBase::summaryInfo const): Deleted.
        (WebCore::CertificateInfoBase::isEmpty const): Deleted.
        * platform/network/cf/CertificateInfo.h:
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WebCore::CertificateInfo::summary const):
        (WebCore::CertificateInfo::summaryInfo const): Deleted.
        * platform/network/curl/CertificateInfo.h:
        * platform/network/soup/CertificateInfo.h:
        (WebCore::CertificateInfo::summary const):
        (WebCore::CertificateInfo::summaryInfo const): Deleted.

2020-07-21  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add experimental MSE WebM parser
        https://bugs.webkit.org/show_bug.cgi?id=214529

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-webm.html

        Add an experimental MSE WebM parser to SourceBufferPrivateAVFObjC. This will require extensive refactoring
        of SourceBufferPrivateAVFObjC, to extract out the parser into a new, virtualized class. This new parser can
        take advantage of new C++>11 features such as lambdas to clean up some problematic existing code. The new
        virtualized SourceBufferParser class uses passed-in Function objects, rather than pure-virtual Client classes
        to notify it's parent object when the parser encounters initialization- or media-data.
        
        Because SourceBufferPrivateAVFObjC will now have to deal with AudioTrackPrivate and VideoTrackPrivate objects
        that are not necessarily Audio- and VideoTrackPrivateMediaSourceAVFObjC subclasses, move those classes notification
        features up into Audio- and VideoTrackPrivate, again using a Function object rather than a client class.

        Add a new SourceBufferParserWebM and associated AudioTrackPrivateWebM and VideoTrackPrivateWebM classes, which
        use libwebm via libwebrtc to parse appended buffers. SourceBufferParserWebM feeds passed-in data into a
        libwebm-provided parser of its own. It then builds up tracks and samples based on callbacks from that same parser,
        constructing CMSampleBuffers and VideoTrackPrivate objects out of the underlying libwebm primitives.

        Because WebM uses a UUID as its track identifier, the representation of a "trackID" inside WebCore must be
        increased from an int to a uint64_t, or trackIDs will be truncated or zeroed when passed between classes and
        when converted to and from AtomStrings.

        This early implementation is not yet able to pass the WebM WPT media-source/ tests, as we only have a VP9 decoder
        available, and those tests use both VP8 and Vorbis.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebMParserEnabled):
        (WebCore::RuntimeEnabledFeatures::webMParserEnabled const):
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setEnabled):
        (WebCore::AudioTrackPrivate::setEnabledChangedCallback):
        * platform/graphics/VP9Utilities.cpp:
        (WebCore::isValidVPColorPrimaries):
        (WebCore::isValidVPTransferCharacteristics):
        (WebCore::isValidVPMatrixCoefficients):
        (WebCore::parseVPCodecParameters):
        * platform/graphics/VP9Utilities.h:
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setSelected):
        (WebCore::VideoTrackPrivate::setSelectedChangedCallback):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::update):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        (WebCore::MediaSampleAVFObjC::create):
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.h: Added.
        (isType):
        * platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm: Added.
        (-[WebAVStreamDataParserListener initWithParser:parent:]):
        (-[WebAVStreamDataParserListener dealloc]):
        (-[WebAVStreamDataParserListener invalidate]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParserWillProvideContentKeyRequestInitializationData:forTrackID:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideContentKeyRequestInitializationData:forTrackID:]):
        (WebCore::SourceBufferParserAVFObjC::isContentTypeSupported):
        (WebCore::SourceBufferParserAVFObjC::SourceBufferParserAVFObjC):
        (WebCore::SourceBufferParserAVFObjC::~SourceBufferParserAVFObjC):
        (WebCore::SourceBufferParserAVFObjC::appendData):
        (WebCore::SourceBufferParserAVFObjC::flushPendingMediaData):
        (WebCore::SourceBufferParserAVFObjC::setShouldProvideMediaDataForTrackID):
        (WebCore::SourceBufferParserAVFObjC::shouldProvideMediadataForTrackID):
        (WebCore::SourceBufferParserAVFObjC::resetParserState):
        (WebCore::SourceBufferParserAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferParserAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::SourceBufferParserAVFObjC::didProvideMediaDataForTrackID):
        (WebCore::SourceBufferParserAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferParserAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::create):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseInitializationData):
        (WebCore::SourceBufferPrivateAVFObjC::didEncounterErrorDuringParsing):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::appendCompleted):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):
        (WebCore::SourceBufferPrivateAVFObjC::destroyParser):
        (WebCore::SourceBufferPrivateAVFObjC::clearTracks):
        (WebCore::SourceBufferPrivateAVFObjC::hasSelectedVideo const):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeSelected):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::parser const):
        (WebCore::SourceBufferPrivateAVFObjC::attemptToDecrypt):
        (WebCore::SourceBufferPrivateAVFObjC::flush):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::canSetMinimumUpcomingPresentationTime const):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
        * platform/graphics/cocoa/AudioTrackPrivateWebM.cpp: Copied from Source/WebCore/platform/graphics/cocoa/VP9UtilitiesCocoa.h.
        (WebCore::AudioTrackPrivateWebM::create):
        (WebCore::AudioTrackPrivateWebM::AudioTrackPrivateWebM):
        (WebCore::AudioTrackPrivateWebM::id const):
        (WebCore::AudioTrackPrivateWebM::label const):
        (WebCore::AudioTrackPrivateWebM::language const):
        (WebCore::AudioTrackPrivateWebM::trackIndex const):
        * platform/graphics/cocoa/AudioTrackPrivateWebM.h: Copied from Source/WebCore/platform/graphics/cocoa/VP9UtilitiesCocoa.h.
        * platform/graphics/cocoa/SourceBufferParser.cpp: Copied from Source/WebCore/platform/graphics/cocoa/VP9UtilitiesCocoa.h.
        (WebCore::SourceBufferParser::isContentTypeSupported):
        (WebCore::SourceBufferParser::create):
        * platform/graphics/cocoa/SourceBufferParser.h: Added.
        (WebCore::SourceBufferParser::setDidParseInitializationDataCallback):
        (WebCore::SourceBufferParser::setDidEncounterErrorDuringParsingCallback):
        (WebCore::SourceBufferParser::setDidProvideMediaDataCallback):
        (WebCore::SourceBufferParser::setWillProvideContentKeyRequestInitializationDataForTrackIDCallback):
        (WebCore::SourceBufferParser::setDidProvideContentKeyRequestInitializationDataForTrackIDCallback):
        * platform/graphics/cocoa/SourceBufferParserWebM.cpp: Added.
        (WebCore::isWebmParserAvailable):
        (WebCore::SourceBufferParserWebM::isContentTypeSupported):
        (WebCore::SourceBufferParserWebM::SourceBufferParserWebM):
        (WebCore::SourceBufferParserWebM::appendData):
        (WebCore::SourceBufferParserWebM::flushPendingMediaData):
        (WebCore::SourceBufferParserWebM::setShouldProvideMediaDataForTrackID):
        (WebCore::SourceBufferParserWebM::shouldProvideMediadataForTrackID):
        (WebCore::SourceBufferParserWebM::resetParserState):
        (WebCore::SourceBufferParserWebM::trackDataForTrackNumber):
        (WebCore::SourceBufferParserWebM::OnElementBegin):
        (WebCore::SourceBufferParserWebM::OnEbml):
        (WebCore::SourceBufferParserWebM::OnSegmentBegin):
        (WebCore::SourceBufferParserWebM::OnInfo):
        (WebCore::SourceBufferParserWebM::OnClusterBegin):
        (WebCore::SourceBufferParserWebM::OnTrackEntry):
        (WebCore::SourceBufferParserWebM::OnBlockBegin):
        (WebCore::SourceBufferParserWebM::OnBlockEnd):
        (WebCore::SourceBufferParserWebM::OnSimpleBlockBegin):
        (WebCore::SourceBufferParserWebM::OnSimpleBlockEnd):
        (WebCore::SourceBufferParserWebM::OnBlockGroupBegin):
        (WebCore::SourceBufferParserWebM::OnBlockGroupEnd):
        (WebCore::convertToColorPrimaries):
        (WebCore::convertToTransferCharacteristics):
        (WebCore::convertToMatrixCoefficients):
        (WebCore::convertSubsamplingXYToChromaSubsampling):
        (WebCore::createFormatDescriptionFromVP9HeaderParser):
        (WebCore::SourceBufferParserWebM::OnFrame):
        * platform/graphics/cocoa/SourceBufferParserWebM.h: Added.
        (WebCore::SourceBufferParserWebM::status const):
        (WebCore::SourceBufferParserWebM::type const):
        (isType):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::isVP9DecoderAvailable):
        (WebCore::validateVPParameters):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
        (WebCore::VideoTrackPrivateWebM::create):
        (WebCore::VideoTrackPrivateWebM::VideoTrackPrivateWebM):
        (WebCore::VideoTrackPrivateWebM::id const):
        (WebCore::VideoTrackPrivateWebM::label const):
        (WebCore::VideoTrackPrivateWebM::language const):
        (WebCore::VideoTrackPrivateWebM::trackIndex const):
        * platform/graphics/cocoa/VideoTrackPrivateWebM.h:

2020-07-21  Peng Liu  <peng.liu6@apple.com>

        Safari is unresponsive after playing a video of youtube.com playlist in picture-in-picture mode
        https://bugs.webkit.org/show_bug.cgi?id=214616

        Reviewed by Eric Carlson.

        Remove the function setPreparedToReturnVideoLayerToInline() from
        MediaControlsHost.idl and replace all the calls to that function
        in Javascript code with a call in HTMLVideoElement::fullscreenModeChanged().

        Calling setPreparedToReturnVideoLayerToInline() in the Javascript code of
        modern media controls can be problematic because the host object might have
        been destroyed when the webkitpresentationmodechanged event is fired.
        During the exit fullscreen/picture-in-picture transaction, missing a call to
        setPreparedToReturnVideoLayerToInline() will block the transaction,
        and the UI process will be stuck in a bad state.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::setPreparedToReturnVideoLayerToInline): Deleted.
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handlePresentationModeChange):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._returnMediaLayerToInlineIfNeeded): Deleted.
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::fullscreenModeChanged):

2020-07-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (WebSQL disablement): Fudget app is unresponsive on launch
        https://bugs.webkit.org/show_bug.cgi?id=214620
        <rdar://problem/65443085>

        Reviewed by Geoffrey Garen.

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

2020-07-21  Michael Catanzaro  <mcatanzaro@gnome.org>

        Update Chrome and Firefox versions in user agent quirks
        https://bugs.webkit.org/show_bug.cgi?id=214595

        Reviewed by Adrian Perez de Castro.

        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::stringForQuirk):

2020-07-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Use CatchScope in microtask execution
        https://bugs.webkit.org/show_bug.cgi?id=214600
        <rdar://problem/65881165>

        Reviewed by Mark Lam.

        Test: js/dom/microtask-drain-should-use-catch-scope.html

        Use CatchScope to suppress JSC_validateExceptionChecks.

        * bindings/js/JSMicrotaskCallback.h:
        (WebCore::JSMicrotaskCallback::call):

2020-07-21  Eric Carlson  <eric.carlson@apple.com>

        Use AVRoutePickerView when available for choosing AirPlay devices
        https://bugs.webkit.org/show_bug.cgi?id=213497
        <rdar://problem/58610662>

        Reviewed by Jer Noble.

        Use an AVRoutePickerView, the replacement for AVOutputDeviceMenuController, when
        it is available to allow a user to pick an AirPlay device. To do this, create an 
        AVPlaybackTargetPicker abstract base and create a concrete class from the 
        AVOutputDeviceMenuController-specific code from MediaPlaybackTargetPickerMac, and
        create a new concrete class using AVRoutePickerView.

        Tested manually because these changes require an AirPlay device.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the view to the
        target picker.
        * Modules/mediasession/WebMediaSessionManagerClient.h:

        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): Drive-by fix: return
        early if there are no pending promises.

        * SourcesCocoa.txt: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): Add new parameter.
        * platform/graphics/MediaPlaybackTargetPicker.h:

        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.h: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h.
        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm.
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::AVOutputDeviceMenuControllerTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::~AVOutputDeviceMenuControllerTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::devicePicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::availableDevicesDidChange):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::currentDeviceDidChange):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::showPlaybackTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::stopMonitoringPlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::invalidatePlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::externalOutputDeviceAvailable):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::outputContext):
        (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]):
        (-[WebAVOutputDeviceMenuControllerHelper clearCallback]):
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]):

        * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h: Added.
        (WebCore::AVPlaybackTargetPicker::AVPlaybackTargetPicker):
        (WebCore::AVPlaybackTargetPicker::client const):

        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h: Added.
        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm: Added.
        (WebCore::AVRoutePickerViewTargetPicker::isAvailable):
        (WebCore::AVRoutePickerViewTargetPicker::AVRoutePickerViewTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::~AVRoutePickerViewTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::outputContextInternal):
        (WebCore::AVRoutePickerViewTargetPicker::devicePicker):
        (WebCore::AVRoutePickerViewTargetPicker::routeDetector):
        (WebCore::AVRoutePickerViewTargetPicker::showPlaybackTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::stopMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::externalOutputDeviceAvailable):
        (WebCore::AVRoutePickerViewTargetPicker::outputContext):
        (WebCore::AVRoutePickerViewTargetPicker::invalidatePlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::availableDevicesDidChange):
        (WebCore::AVRoutePickerViewTargetPicker::currentDeviceDidChange):
        (WebCore::AVRoutePickerViewTargetPicker::devicePickerWasDismissed):
        (-[WebAVRoutePickerViewHelper initWithCallback:]):
        (-[WebAVRoutePickerViewHelper dealloc]):
        (-[WebAVRoutePickerViewHelper clearCallback]):
        (-[WebAVRoutePickerViewHelper routePickerViewDidEndPresentingRoutes:]):
        (-[WebAVRoutePickerViewHelper notificationHandler:]):

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMac::playbackTarget):
        (WebCore::MediaPlaybackTargetPickerMac::routePicker):
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::invalidatePlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::pickerWasDismissed):
        (WebCore::MediaPlaybackTargetPickerMac::availableDevicesChanged):
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceChanged):
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Deleted.
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        * platform/mock/MediaPlaybackTargetPickerMock.h:

2020-07-21  James Darpinian  <jdarpinian@chromium.org>

        webgl/2.0.0/conformance2/state/gl-object-get-calls.html results appears to show an out of bounds access bug.
        https://bugs.webkit.org/show_bug.cgi?id=214557

        Reviewed by Myles C. Maxfield.

        The WebGL 2 function getActiveUniformBlockName was accidentally untested because an
        unrelated bug caused the test to exit before reaching the part that tested it. The
        other bug is fixed now, and this change fixes getActiveUniformBlockName to actually
        work.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName):

2020-07-21  Sihui Liu  <sihui_liu@appe.com>

        REGRESSION(r264486): ASSERTION FAILED: ASSERT_NOT_REACHED() in NetworkProcessPlatformStrategies::createBlobRegistry
        https://bugs.webkit.org/show_bug.cgi?id=214425

        Reviewed by Youenn Fablet.

        In SerializedScriptValue.cpp, some kind of wrappers will not be created when global object is not 
        JSDOMGlobalObject, so they would not be created for IDB before r264486. After r264486, IDB uses 
        JSIDBSerializationGlobalObject, which is JSDOMGlobalObject, so those wrappers start to be created. To restore
        the old behavior, adding checks for JSIDBSerializationGlobalObject in SerializedScriptValue.cpp.

        Modify and re-enable test: LayoutTests/storage/indexeddb/structured-clone.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readRTCCertificate):
        (WebCore::CloneDeserializer::readTerminal):

2020-07-21  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Adopt VTRegisterSupplementalVideoDecoderIfAvailable
        https://bugs.webkit.org/show_bug.cgi?id=214585
        <rdar://problem/65863651>

        Reviewed by Youenn Fablet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/VideoToolboxSoftLink.cpp:
        * platform/cocoa/VideoToolboxSoftLink.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h:
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm:
        (WebCore::registerSupplementalVP9Decoder):

2020-07-21  Zalan Bujtas  <zalan@apple.com>

        [UI Events] Make mousemove cancelable
        https://bugs.webkit.org/show_bug.cgi?id=214513
        <rdar://problem/64267520>

        Reviewed by Simon Fraser.

        This patch makes the mousemove event cancelable.
        The event was initially specified to be non-cancelable in DOM Level 2 Events, but was changed to reflect existing interoperability between browsers.
        The most user facing behavior change here is that when the mousemove event is prevent-defaulted (canceled) content selection is not possible.

        Chrome is aligned with the latest version of the spec, the mousemove event is cancelable. 
        However they also have a TODO right at where the drag would happen: 
        // TODO(crbug.com/346473): Since there is no default action for the mousemove
        // event we should consider doing drag&drop even when js cancels the
        // mouse move event.

        Firefox preforms the drag(select) operation but not sure if it’s because their mousemove event is still non-cancelable or whether they already went ahead with what the TODO says.

        Test: fast/text/selection-is-prevent-defaulted.html

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):

2020-07-21  Clark Wang  <clark_wang@apple.com>

        Added OfflineAudioContext constructor
        https://bugs.webkit.org/show_bug.cgi?id=214577

        Reviewed by Chris Dumez.

        Added OfflineAudioContext constructor and OfflineAudioContextOptions files.

        Re-baselined existing tests. Lots of failures that fail because of unsupported sampleRate range.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::create):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OfflineAudioContextOptions.h: Added.
        * Modules/webaudio/OfflineAudioContextOptions.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-21  Rob Buis  <rbuis@igalia.com>

        Make AnyStepHandling an enum class
        https://bugs.webkit.org/show_bug.cgi?id=214423

        Reviewed by Darin Adler.

        Correct some post commit comments.

        * html/HTMLInputElement.h:
        * html/InputType.h:
        * html/StepRange.h:

2020-07-21  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][1.18] mediastreamsrc element hits assert in gst -core
        https://bugs.webkit.org/show_bug.cgi?id=214150

        Reviewed by Philippe Normand.

        Removed track pointers from observers cause the object was
        self-referencing a couple of times. Observers are 1-1 with the
        source so there is no need to keep an owned reference and there is
        no danger of incorrect dereferencing.

        Turned finalize into dispose as the work is doing is more removing
        the references with other objects, which what the dispose is
        about. Called the parent on that, which as missing as well.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebKitMediaStreamTrackObserver::WebKitMediaStreamTrackObserver):
        (WebKitMediaStreamObserver::WebKitMediaStreamObserver):
        (webkitMediaStreamSrcConstructed):
        (webkitMediaStreamSrcDispose):
        (webkit_media_stream_src_class_init):

2020-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Add support for text-underline-offset and text-decoration-thickness
        https://bugs.webkit.org/show_bug.cgi?id=214550

        Reviewed by Adrian Perez de Castro.

        Get the underline position and thickness from the font if it's scalable and set them in font metrics.

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::scaledFontScaleFactor):
        (WebCore::fontUnitsPerEm):
        (WebCore::Font::platformInit):

2020-07-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] imported blink large gradient tests are crashing on debug builds
        https://bugs.webkit.org/show_bug.cgi?id=214192

        Reviewed by Žan Doberšek.

        The assert is:
            ASSERT(cairo_surface_status(m_surface.get()) == CAIRO_STATUS_SUCCESS);

        and the status we are getting is CAIRO_STATUS_INVALID_SIZE, because we are reaching the cairo image size
        limit. We should check the size before trying to create the image surface. This patch fixes the crash, but not
        the tests themselves that will still fail due to the cairo limitation.

        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::create): Return early if the image size is bigger than the
        maximum allowed by cairo.

2020-07-20  Alex Christensen  <achristensen@webkit.org>

        Revert r262776 for existing apps using UIWebView/WebView
        https://bugs.webkit.org/show_bug.cgi?id=214528
        <rdar://problem/65468982>

        Reviewed by Tim Horton.

        r262776 removed Content-Type: application/x-www-form-urlencoded from POST requests with unspecified content type.
        This matches the behavior of Chrome, Firefox, and WKWebView and is a change we want to make.
        This doesn't match behavior of iOS 13 UIWebView, though, and given its state of being supported for compatibility until removed,
        we are going to keep it behaving as it always has.

        Updated WK1 test expectations.

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

2020-07-20  Peng Liu  <peng.liu6@apple.com>

        An airplaying video can enter picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=214556

        Reviewed by Eric Carlson.

        WebAVPlayerController replaces the AVPlayerController used by AVKit. Its property
        "pictureInPicturePossible" will always be YES after VideoFullscreenInterfaceAVKit::doSetup()
        sets it, even after the video enters picture-in-picture.

        This patch fixes the issue by checking whether the video is airplaying (isExternalPlaybackActive)
        in -[WebAVPlayerController isPictureInPicturePossible].

        AVPlayerController has the logic to change the property "pictureInPicturePossible" to NO
        after a video enters picture-in-picture, but we cannot use AVPlayerController's value of
        "pictureInPicturePossible" as the property value of WebAVPlayerController. Because the value of
        "-[AVPlayerController isPictureInPicturePossible]" depends on the value of
        "[[AVAudioSession sharedInstance] isPiPAvailable]", which is always NO in the UI process.
        (AVAudioSession related code is in the web process).

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::doSetup):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController setAllowsPictureInPicture:]):
        (-[WebAVPlayerController isPictureInPicturePossible]):

2020-07-20  Megan Gardner  <megan_gardner@apple.com>

        Add OK button to Date/Time form controls.
        https://bugs.webkit.org/show_bug.cgi?id=214195

        Reviewed by Darin Adler.

        * en.lproj/Localizable.strings:

2020-07-20  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION (r264242): [ macOS ] imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate.any.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=214572

        Unreviewed, reverting r264242.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2020-07-20  Adrian Perez de Castro  <aperez@igalia.com>

        Non unified build fixes, midsummer 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=213616

        Unreviewed build fix.

        No new tests needed.

        * inspector/InspectorInstrumentationWebKit.h: Forward-declare ResourceLoader class.

2020-07-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r261874): Typing near the bottom of a scrollable document causes the scroll position to jump
        https://bugs.webkit.org/show_bug.cgi?id=214426
        <rdar://problem/65302701>

        Reviewed by Simon Fraser.

        After the changes in r261874, any content size changes that trigger `FrameView::adjustViewSize` cause the scroll
        position to be clamped to its minimum and maximum limits after the next layout pass. In the context of edit
        commands, this means that the scroll position may jump erratically, since many edit commands can temporarily
        leave the DOM in a state where the content size is unstable.

        For example, in the test case below, deleting the only character in a div element on its own line first involves
        emptying the text node underneath the div (causing it to have no height), before inserting a BR element in its
        place (which restores a nonzero height). After the text node is emptied (but before we insert the BR element),
        the content size of view changes due to a layout update while creating visible positions (under
        `VisiblePosition::canonicalPosition`). If we happen to be scrolled all the way to the bottom of the main frame,
        this means we'll scroll up, due to the maximum scroll position temporarily decreasing. A similar effect happens
        when inserting the first character on a line, wherein the div is empty after BR element is removed but before it
        is replaced with a text node.

        To mitigate this, introduce a mechanism to temporarily avoid updating the scroll position, and use it when
        executing edit commands. See below for more details.

        Test: editing/execCommand/typing-should-not-trigger-scrolling-when-selection-is-visible.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):
        (WebCore::CompositeEditCommand::apply):
        * editing/Editor.cpp:
        (WebCore::Editor::willApplyEditing const):
        (WebCore::Editor::appliedEditing):

        Add logic to specifically handle typing commands here, since we handle typing commands by adding them to the
        latest "open" typing command, rather than go through the more standard codepaths in EditCommandComposition
        above.

        * editing/Editor.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::topContentDirectionDidChange):
        (WebCore::FrameView::handleDeferredScrollbarsUpdate):
        (WebCore::FrameView::handleDeferredPositionScrollbarLayers):

        Split existing logic for handling deferred scrollbar updates and deferred calls to `positionScrollbarLayers`
        into two separate methods, with separate boolean flags. `topContentDirectionDidChange` sets both of these flags
        (which preserves existing behavior), while `decrementProhibitsScrollingWhenChangingContentSizeCount` just
        requests a scrollbar update.

        (WebCore::FrameView::didLayout):
        (WebCore::FrameView::didFinishProhibitingScrollingWhenChangingContentSize):

        After decrementing `m_prohibitsScrollingWhenChangingContentSizeCount` back to zero, ensure that the scroll
        position ultimately remains clamped to the minimum and maximum values by either immediately calling
        `updateScrollbars` with the current scroll position if layout and style are up to date, or by scheduling a
        deferred scrollbar update if that is not the case.

        (WebCore::FrameView::handleDeferredScrollbarsUpdateAfterDirectionChange): Deleted.

        Rename this to just `handleDeferredScrollbarsUpdate`.

        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setContentsSize):
        (WebCore::ScrollView::prohibitScrollingWhenChangingContentSizeForScope):
        (WebCore::ScrollView::ProhibitScrollingWhenChangingContentSizeForScope::ProhibitScrollingWhenChangingContentSizeForScope):
        (WebCore::ScrollView::ProhibitScrollingWhenChangingContentSizeForScope::~ProhibitScrollingWhenChangingContentSizeForScope):

        Introduce a new token object, `ProhibitScrollingWhenChangingContentSizeForScope`, which increments a count on
        `ScrollView` when created and decrements the count when destroyed. While this counter is greater than zero, we
        will avoid scrolling as a result of changing content size.

        * platform/ScrollView.h:
        (WebCore::ScrollView::incrementProhibitsScrollingWhenChangingContentSizeCount):
        (WebCore::ScrollView::decrementProhibitsScrollingWhenChangingContentSizeCount):

2020-07-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        CSS clip-path is applied to the <svg> root element in the view-box coordinates
        https://bugs.webkit.org/show_bug.cgi?id=214418

        Reviewed by Darin Adler.

        We need to transfer the bounding box of the SVG element renderer from the
        SVG coordinates system to the CSS coordinates before calculating the clip
        path. Then we need to transfer the clip path back to the SVG coordinates
        before applying it to the GraphicsContext. The GraphicsContext is already
        transformed by the localToPrentTransform.

        Test: svg/in-html/svg-view-box-css-clip-path.html

        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clipContextToCSSClippingArea):

2020-07-20  Clark Wang  <clark_wang@apple.com>

        Fixes to match BaseAudioContext.idl to spec
        https://bugs.webkit.org/show_bug.cgi?id=214487

        Reviewed by Chris Dumez.

        Removed unrestricted keyword from certain attributes and parameters in BaseAudioContext.
        Changed createPanner to call new PannerNode constructor, removed old PannerNode constructor.

        Re-baselined existing tests that now pass.

        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::createPanner):
        * Modules/webaudio/BaseAudioContext.idl:
        * Modules/webaudio/PannerNode.cpp:
        * Modules/webaudio/PannerNode.h:

2020-07-20  Keith Miller  <keith_miller@apple.com>

        Add support for FinalizationRegistries
        https://bugs.webkit.org/show_bug.cgi?id=199888

        Reviewed by Yusuke Suzuki.

        Refactor things for changing PromiseDeferredTimer to DeferredWorkTimer.

        Also, add globalObject hook for reporting uncaught exceptions from JSC's
        runloop callbacks.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::reportUncaughtExceptionAtEventLoop):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::compileStreaming):
        (WebCore::JSDOMWindowBase::instantiateStreaming):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/JSWorkletGlobalScopeBase.cpp:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::addTimerSetNotification):
        (WebCore::WorkerScriptController::removeTimerSetNotification):
        * workers/WorkerRunLoop.cpp:
        * worklets/WorkletScriptController.cpp:

2020-07-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Flushing ImageBuffer IOSurface cached image can happen when creating an image for encoding only
        https://bugs.webkit.org/show_bug.cgi?id=214515
        <rdar://problem/65735991>

        Reviewed by Simon Fraser.

        Drawing an empty rectangle after changing the bytes of the IOSurface was
        a hack to force CG to regenerate the IOSurface cached image. This hack
        was added to solve the bug in which we were getting stale data url from
        the ImageBuffer after calling its putImageData() function.

        Drawing the ImageBuffer to a GraphicsContext or getting its data url starts
        by getting a native image from the IOSurface. The stale cached image problem
        was seen only in getting the data url but when not drawing the ImageBuffer.

        So to save the cost of flushing the cached image, we will delay doing the
        empty rectangle hack till toCFData() is called. toCFData() is called for
        all ImageBuffer data retrieval functions including toDataURL().

        This gives a 15% progression to the Images test on MacBookPro15,2 because
        the Images test does not call toDataURL() so it does not require flushing
        the IOSurface cached image. It calls getImageData(), alter the image data
        and then calls putImageData().

        * platform/graphics/cg/ImageBufferIOSurfaceBackend.cpp:
        (WebCore::ImageBufferIOSurfaceBackend::toCFData const):
        (WebCore::ImageBufferIOSurfaceBackend::putImageData):
        * platform/graphics/cg/ImageBufferIOSurfaceBackend.h:

2020-07-20  Darin Adler  <darin@apple.com>

        Streamline URLDecomposition::setHash
        https://bugs.webkit.org/show_bug.cgi?id=214561

        Reviewed by Anders Carlsson.

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHash): No need to cast to StringView since we
        already have a StringView. Also don't need a local variable.

2020-07-20  Darin Adler  <darin@apple.com>

        [Cocoa] MediaSampleAVFObjC::createImageSample depends on function argument evaluation order
        https://bugs.webkit.org/show_bug.cgi?id=214560

        Reviewed by Anders Carlsson.

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::deallocateVectorBuffer): Renamed from releaseUint8Vector.
        (WebCore::MediaSampleAVFObjC::createImageSample): Rearranged code so that we don't call both
        data() and releaseBuffer() on the same vector in the same function call; that isn't safe because
        the order of argument evaluation is not guaranteed, and so data() could be called after the
        buffer is released. Also added code to deallocate the buffer if CVPixelBufferCreateWithBytes
        fails. The old code would have leaked it in that case. Also made some style tweaks to use
        adoptCF more consistently to handle reference counting, and slightly optimized a loop to
        only get the array count once.

2020-07-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Add support for canvas captureStream, tests failing since they were added in r213598
        https://bugs.webkit.org/show_bug.cgi?id=169811

        Reviewed by Darin Adler.

        Hook captureStream support in GStreamer ports. The only missing bits were:

        1. create a MediaSample from a BGRA buffer
        2. convert a MediaSample to a RGBA buffer (used only for layout tests)
        3. set video width and height tags not only on video capture tracks (tracks created from
           captureStream are not GStreamer capture device tracks)

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h: Refactor createImageSample to
        use unsigned for dimensions.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::createImageSample):
        (WebCore::MediaSampleGStreamer::getRGBAImageData const):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (mediaStreamTrackPrivateGetTags):

2020-07-20  Youenn Fablet  <youenn@apple.com>

        GenerateCertificateAsync should be called on signaling thread
        https://bugs.webkit.org/show_bug.cgi?id=214447

        Reviewed by Geoffrey Garen.

        As per debug assert, GenerateCertificateAsync is expected to be called in the signaling thread.
        Covered by unskipped test.

        * Modules/mediastream/libwebrtc/LibWebRTCCertificateGenerator.cpp:
        (WebCore::LibWebRTCCertificateGenerator::generateCertificate):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::prepareCertificateGenerator):
        We can pass generator to a background thread as it is allocated once and does not get freed.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2020-07-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r264596.
        https://bugs.webkit.org/show_bug.cgi?id=214551

        hits Debug asserts

        Reverted changeset:

        "[GStreamer] Add support for canvas captureStream, tests
        failing since they were added in r213598"
        https://bugs.webkit.org/show_bug.cgi?id=169811
        https://trac.webkit.org/changeset/264596

2020-07-20  Rob Buis  <rbuis@igalia.com>

        Make AnyStepHandling an enum class
        https://bugs.webkit.org/show_bug.cgi?id=214423

        Reviewed by Youenn Fablet.

        Make AnyStepHandling an enum class since this is more readable
        and allows us to have less includes in header files.

        * html/BaseDateAndTimeInputType.cpp:
        * html/DateInputType.cpp:
        * html/DateTimeLocalInputType.cpp:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::rangeUnderflow const):
        (WebCore::InputType::rangeOverflow const):
        (WebCore::InputType::minimum const):
        (WebCore::InputType::maximum const):
        (WebCore::InputType::isInRange const):
        (WebCore::InputType::isOutOfRange const):
        (WebCore::InputType::stepMismatch const):
        (WebCore::InputType::validationMessage const):
        (WebCore::InputType::getAllowedValueStep const):
        (WebCore::InputType::stepUp):
        (WebCore::InputType::stepUpFromRenderer):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/NumberInputType.cpp:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        (WebCore::RangeInputType::fallbackValue const):
        (WebCore::RangeInputType::sanitizeValue const):
        * html/StepRange.cpp:
        (WebCore::StepRange::parseStep):
        * html/StepRange.h:
        * html/TimeInputType.cpp:
        * html/WeekInputType.cpp:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::sliderPosition):
        (WebCore::SliderThumbElement::setPositionFromPoint):

2020-07-20  Rob Buis  <rbuis@igalia.com>

        Setting URL.hash to '#' should set empty fragment
        https://bugs.webkit.org/show_bug.cgi?id=214318

        Reviewed by Youenn Fablet.

        Setting URL.hash to '#' should set empty fragment
        identifier [1], unlike setting it to the empty string
        which drops the fragment identifier.

        Behavior matches Chrome and Firefox.

        [1] https://html.spec.whatwg.org/#dom-hyperlink-hash

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHash):

2020-07-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Add support for canvas captureStream, tests failing since they were added in r213598
        https://bugs.webkit.org/show_bug.cgi?id=169811

        Reviewed by Darin Adler.

        Hook captureStream support in GStreamer ports. The only missing bits were:

        1. create a MediaSample from a BGRA buffer
        2. convert a MediaSample to a RGBA buffer (used only for layout tests)
        3. set video width and height tags not only on video capture tracks (tracks created from
           captureStream are not GStreamer capture device tracks)

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::toMediaSample):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h: Refactor createImageSample to
        use unsigned for dimensions.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        (WebCore::MediaSampleGStreamer::createImageSample):
        (WebCore::MediaSampleGStreamer::getRGBAImageData const):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (mediaStreamTrackPrivateGetTags):

2020-07-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] ImageDecoder hits more Debug ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=214191

        Reviewed by Xabier Rodriguez-Calvar.

        Process decoded video samples from the decoder parent thread, in order to guarantee the
        underlying RefPtrs stored in the ImageDecoderGStreamerSample keep a consistent owning
        runloop.

        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):
        (WebCore::ImageDecoderGStreamer::setHasEOS):
        (WebCore::ImageDecoderGStreamer::notifySample):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::handleMessage):
        (WebCore::ImageDecoderGStreamer::pushEncodedData):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:

2020-07-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use forward template declarations for ColorComponents instead of including ColorComponents.h
        https://bugs.webkit.org/show_bug.cgi?id=214540

        Reviewed by Darin Adler.

        * platform/graphics/ColorMatrix.h:
        * platform/graphics/ColorTypes.h:

2020-07-19  Lauro Moura  <lmoura@igalia.com>

        Unreviewed, fix GTK build in Debian/LTS

        Like r264279, include functional to provide std::invoke.

        * platform/graphics/ColorUtilities.h:

2020-07-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, reverting r264588.

        It broke Mac port.

        Reverted changeset:

        "Use forward template declarations for ColorComponents instead
        of including ColorComponents.h as much as possible"
        https://bugs.webkit.org/show_bug.cgi?id=214204
        https://trac.webkit.org/changeset/264588

2020-07-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Use forward template declarations for ColorComponents instead of including ColorComponents.h as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=214204
        <rdar://problem/65414170>

        Unreviewed follow-up for the review feedback of r264289.

        * platform/graphics/ColorConversion.cpp:
        * platform/graphics/ColorMatrix.h:
        * platform/graphics/ColorTypes.h:
        * platform/graphics/ColorUtilities.h:

2020-07-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified source build fix

        * html/canvas/WebGLSync.cpp:
        * html/canvas/WebGLSync.h:

2020-07-19  Geoffrey Garen  <ggaren@apple.com>

        There should be only one RunLoop Timer class
        https://bugs.webkit.org/show_bug.cgi?id=214340

        Reviewed by Darin Adler.

        RunLoop::Timer wins. RunLoopTimer loses.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::tryLoadingSubstituteData):
        (WebCore::DocumentLoader::cancelMainResourceLoad):
        (WebCore::DocumentLoader::startDataLoadTimer): Deleted. Use
        RunLoop::dispatch instead of a timer because we have no need to control
        the time period or to fire more than once. Use an explicit token so that
        we can still cancel.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::DataLoadToken::clear): Added an explicit token
        class to we can cancel a data load.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL): page->scheduledRunLoopPairs()
        is never null; and if it were null, data loads would always fail.

        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decode):
        (WebCore::DataURLDecoder::DecodingResultDispatcher::dispatch): Deleted.
        (WebCore::DataURLDecoder::DecodingResultDispatcher::DecodingResultDispatcher): Deleted.
        (WebCore::DataURLDecoder::DecodingResultDispatcher::startTimer): Deleted.
        (WebCore::DataURLDecoder::DecodingResultDispatcher::timerFired): Deleted.
        No need for two code paths, now that we can just call RunLoop::dispatch.

        * platform/network/DataURLDecoder.h:

2020-07-19  Sam Weinig  <weinig@apple.com>

        Rename Color::transparent to Color::transparentBlack to more clearly state what it is
        https://bugs.webkit.org/show_bug.cgi?id=214522

        Reviewed by Darin Adler.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const):
        * accessibility/AccessibilityObject.h:
        * css/CSSValuePool.cpp:
        (WebCore::StaticCSSValuePool::StaticCSSValuePool):
        (WebCore::CSSValuePool::createColorValue):
        * editing/EditingStyle.cpp:
        (WebCore::cssValueToColor):
        * html/HTMLInputElement.cpp:
        (WebCore::autoFillStrongPasswordMaskImage):
        * html/InputType.cpp:
        (WebCore::InputType::valueAsColor const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::State::State):
        (WebCore::CanvasRenderingContext2DBase::clearRect):
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        (WebCore::CanvasRenderingContext2DBase::clearShadow):
        (WebCore::CanvasRenderingContext2DBase::applyShadow):
        * inspector/InspectorOverlay.cpp:
        (WebCore::drawShapeHighlight):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::paintBoxDecoration):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS const):
        * page/DebugPageOverlays.cpp:
        (WebCore::drawRightAlignedText):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotNode):
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateBaseBackgroundColor):
        * page/PageOverlay.h:
        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::shadowForBlending):
        * platform/graphics/Color.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        * platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp:
        (Nicosia::PaintingEngineBasic::paint):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        (Nicosia::paintLayer):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::requestVideoContentLayer):
        (VideoFullscreenControllerContext::returnVideoContentLayer):
        (VideoFullscreenControllerContext::didSetupFullscreen):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIncompleteImageOutline const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeIOS::platformInactiveSelectionBackgroundColor const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColor const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialStrokeColor):
        (WebCore::RenderStyle::initialBackgroundColor):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyTextOrBoxShadowValue):
        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::createFilterOperations):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):
        * testing/Internals.cpp:
        (WebCore::Internals::setViewIsTransparent):
        (WebCore::Internals::setViewBaseBackgroundColor):
        Color::transparent to Color::transparentBlack.

2020-07-19  Sam Weinig  <weinig@apple.com>

        Remove ColorBuilder
        https://bugs.webkit.org/show_bug.cgi?id=214521

        Reviewed by Darin Adler.

        ColorBuilder is unnecessary and just makes deduction contexts more complicated.
        Instead, we can get the same behavior by having color types inherit from a shared
        base class ColorType that uses the curiously recurring template pattern, which 
        exposes the colorWithAlphaByte function (renamed from colorWithAlpha for clarity
        of the parameter).

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Remove ColorBuilder.

        * platform/graphics/ColorBuilder.h: Removed.

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        * platform/graphics/Color.h:
        (WebCore::Color::alphaByte const):
        (WebCore::Color::alpha const): Deleted.
        Stop using ColorBuilder for color named color types and rename Color::alpha to Color:alphaByte()
        for consistency with colorWithAlphaByte().

        * platform/graphics/ColorTypes.h:
        (WebCore::ColorType::colorWithAlphaByte const):
        (WebCore::LinearSRGBA::LinearSRGBA):
        (WebCore::DisplayP3::DisplayP3):
        (WebCore::LinearDisplayP3::LinearDisplayP3):
        (WebCore::HSLA::HSLA):
        (WebCore::CMYKA::CMYKA):
        (WebCore::XYZA::XYZA):
        Switch each color type to inheriting from new ColorWithAlphaHelper struct. Use the opertunity to
        give each color type the same construction interface as well. Now that each type has constructors,
        the deduction guides are no longer necessary.

        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendSourceOver):
        Switch from !color.alpha() to !color.isVisible() to more clearly indicate the intent.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable const):
        Update to call alphaByte() and add FIXME indicating that it is probably incorrect and filed
        https://bugs.webkit.org/show_bug.cgi?id=214537 to track things further.
        
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::drawBounds):
        (WebCore::InspectorOverlay::drawRulers):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS const):
        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        * page/DragController.cpp:
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::resolveStyleForMarkedText):
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForTouchAction):
        (WebCore::patternForEventListenerRegionType):
        (WebCore::RenderLayerBacking::paintDebugOverlays):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformTapHighlightColor const):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * testing/cocoa/WebViewVisualIdentificationOverlay.mm:
        (-[WebViewVisualIdentificationOverlay initWithWebView:kind:deprecated:]):
        Update to call colorWithAlphaByte rather than colorWithAlpha.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::addRoundedBorderClip):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        Update to use colorWithAlphaByte rather than colorWithAlpha and alphaByte rather than alpha.

2020-07-19  Rob Buis  <rbuis@igalia.com>

        Remove findCharsetInMediaType
        https://bugs.webkit.org/show_bug.cgi?id=214523

        Reviewed by Darin Adler.

        Remove findCharsetInMediaType (by moving its code
        into extractCharsetFromMediaType) since there are
        no users for findCharsetInMediaType anymore.

        * platform/network/HTTPParsers.cpp:
        (WebCore::extractCharsetFromMediaType):
        (WebCore::findCharsetInMediaType): Deleted.
        * platform/network/HTTPParsers.h:

2020-07-19  Sam Weinig  <weinig@apple.com>

        Additional Color related cleanups
        https://bugs.webkit.org/show_bug.cgi?id=214514

        Reviewed by Darin Adler.

        * platform/graphics/ColorBuilder.h:
        Remove redundant "public" and use decltype() rather than more wordy typename for static_assert.

        * platform/graphics/ColorUtilities.h:
        (WebCore::clampToComponentByte):
        (WebCore::clampToComponentFloat):
        Templatize to support any input.

        (WebCore::clampToComponentBytes):
        (WebCore::clampToComponentFloats):
        Templatize using variadic templates to support any input and prepare for color types with more 
        than four components. 

        (WebCore::colorByModifingEachNonAlphaComponent):
        Use std::invoke to support more types of functors.

        (WebCore::colorWithOverridenAlpha):
        (WebCore::invertedColorWithOverridenAlpha):
        Use auto more consistently.

        (WebCore::invertComponent): Deleted.
        Replace invertComponent functions with ComponentTraits::maxValue - value inline at callsite.

2020-07-18  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix build warnings in the WebXR backend

        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::Instance::Impl::enumerateInstanceExtensionProperties const): Guard log loop
        with LOG_DISABLED macro, to avoid unused variable warnings in release builds.
        * testing/WebFakeXRDevice.h: Remove unused private class member.

2020-07-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r264563.
        https://bugs.webkit.org/show_bug.cgi?id=214518

        Broke the watchOS build

        Reverted changeset:

        "Add OK button to Date/Time form controls."
        https://bugs.webkit.org/show_bug.cgi?id=214195
        https://trac.webkit.org/changeset/264563

2020-07-18  Rob Buis  <rbuis@igalia.com>

        Only use enum classes in HTTPParsers
        https://bugs.webkit.org/show_bug.cgi?id=214451

        Reviewed by Darin Adler.

        Only use enum classes in HTTPParsers by converting XFrameOptionsSameOrigin
        and ContentTypeOptionsDisposition. Remove HTTPVersion enum since its
        only use is by parseHTTPRequestLine, but this method is unused.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::mimeTypeAllowedByNosniff const):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseContentTypeOptionsHeader):
        (WebCore::parseXFrameOptionsHeader):
        (WebCore::parseHTTPRequestLine): Deleted.
        * platform/network/HTTPParsers.h:
        (): Deleted.
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isScriptAllowedByNosniff):

2020-07-17  Sam Weinig  <weinig@apple.com>

        Remove final vestigates of SimpleColor
        https://bugs.webkit.org/show_bug.cgi?id=214439

        Reviewed by Simon Fraser.

        Replace remaining makeSimpleColor uses:
        - Literal / constant colors switched to using SRGBA<uint8_t> { ... }.
        - Direct construction from uint8_t values also switched to SRGBA<uint8_t> { ... }
        - Where possible switched to using of named colors (e.g. Color::yellow) both
          directly and where an override alpha was needed. To aid this, new named
          colors were added for red, magenta, blue, green, darkGreen and orange.
        - Remaining callers switched to directly calling clampToComponentBytes, which
          was all that makeSimpleColor did. An overload of clampToComponentBytes that
          doesn't require the alpha parameter was added to simplify calls.
    
        To make construction of SRGBA<uint8_t> values nicer, callers no longer need
        to specify the alpha explicitly if the color is opaque.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/SimpleColor.h: Removed.
        Remove SimpleColor.h

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseNumericColor):
        Switch to clampToComponentBytes, but leave a FIXME indicating this should be
        switched to direct SRGBA<uint8_t> when hepler functions are fixed to return
        uint8_ts rather than ints.

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        Switched to clampToComponentBytes and removed existing unnecessary additional clamping
        of the alpha component.

        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        Restructure HashMap construction to use the HashMap std::intializer_list constructor.
        This takes advantage of a change to WTF::KeyValuePair that allows it deduce in this
        context.

        * platform/graphics/Color.h:
        Remove SimpleColor.h include, but add ColorBuilder.h and ColorUtilities.h
        which SimpleColor was including on its behalf. Add new named colors for 
        red, magenta, blue, green, darkGreen and orange. For all named colors,
        use ColorBuilder<SRGBA<uint8_t>> rather than SRGBA<uint8_t> alone to allow
        for callers to do things like Color::yellow.colorWithAlpha(...). In the future,
        it might make more sense to merge ColorBuilder's functionality directly into
        the color types, but for now this preserves that functionality.

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::animate):
        (WebCore::SVGAnimationColorFunction::roundAndClampColorChannel): Deleted.
        Replace bespoke rounding/clamping functions in favor of ColorUtilities.h aggregate ones and
        directly calling std::lround.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        * editing/CompositionHighlight.h:
        * html/ColorInputType.cpp:
        (WebCore::parseSimpleColorValue):
        * html/HTMLElement.cpp:
        (WebCore::parseLegacyColorValue):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::drawOutlinedQuadWithClip):
        (WebCore::drawShapeHighlight):
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::drawBounds):
        (WebCore::InspectorOverlay::drawRulers):
        (WebCore::InspectorOverlay::drawElementTitle):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::debugTextShadow):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS const):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolAllPagesWithBoundaries):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::HistoricResourceUsageData::HistoricResourceUsageData):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::activeSelectionForegroundColor const):
        (WebCore::ThemeAdwaita::activeSelectionBackgroundColor const):
        (WebCore::ThemeAdwaita::inactiveSelectionForegroundColor const):
        * platform/graphics/Color.cpp:
        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendSourceOver):
        (WebCore::blendWithWhite):
        * platform/graphics/ColorBuilder.h:
        (WebCore::ColorBuilder::colorWithAlpha const):
        (WebCore::ColorBuilder::ColorBuilder): Deleted.
        * platform/graphics/ColorTypes.h:
        (WebCore::SRGBA::SRGBA):
        * platform/graphics/ColorUtilities.h:
        (WebCore::clampToComponentBytes):
        (WebCore::clampToComponentFloats):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::contentsLayerDebugBorderColor):
        (WebCore::cloneLayerDebugBorderColor):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        (WebCore::TileCoverageMap::update):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::colorForMarkerLineStyle):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForLink):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::colorForGridTileBorder const):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawBoxes):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        * platform/playstation/ScrollbarThemePlayStation.cpp:
        (WebCore::ScrollbarThemePlayStation::paintTrackBackground):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderFrameSet.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForTouchAction):
        (WebCore::patternForEventListenerRegionType):
        (WebCore::RenderLayerBacking::paintDebugOverlays):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::systemColor const):
        (WebCore::RenderTheme::paintSystemPreviewBadge):
        (WebCore::RenderTheme::platformTapHighlightColor const):
        * rendering/RenderThemeAdwaita.cpp:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintProgressBar):
        * rendering/RenderThemeMac.mm:
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeMac::systemColor const):
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeWin::systemColor const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorResolvingCurrentColor const):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialStopColor):
        (WebCore::SVGRenderStyle::initialFloodColor):
        (WebCore::SVGRenderStyle::initialLightingColor):
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::drawRect):
        * testing/cocoa/WebViewVisualIdentificationOverlay.mm:
        (-[WebViewVisualIdentificationOverlay initWithWebView:kind:deprecated:]):
        Replace makeSimpleColor uses with appropriate alternative.

2020-07-17  Megan Gardner  <megan_gardner@apple.com>

        Add OK button to Date/Time form controls.
        https://bugs.webkit.org/show_bug.cgi?id=214195

        Reviewed by Darin Adler.

        * en.lproj/Localizable.strings:

2020-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Followup to r264531
        https://bugs.webkit.org/show_bug.cgi?id=214488
        <rdar://problem/64531754>

        Reviewed by Darin Adler.

        Elide a null check by grabbing `RenderStyle` from the renderer instead of the element, and also limit
        overflow hidden to the X axis.

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::completeManipulation):

2020-07-17  Clark Wang  <clark_wang@apple.com>

        Added Fixes for AudioScheduledSourceNode
        https://bugs.webkit.org/show_bug.cgi?id=214381

        Reviewed by Chris Dumez.

        Added in IDL file for AudioScheduledSourceNode, according to spec: https://www.w3.org/TR/webaudio/#AudioScheduledSourceNode

        Re-baselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioScheduledSourceNode.idl: Added.
        * Modules/webaudio/OscillatorNode.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-17  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] ReadPixels updates
        https://bugs.webkit.org/show_bug.cgi?id=209516

        Reviewed by Dean Jackson.

        Upgrade readPixels to WebGL 2.0 functionality.

        Handle both WebGL 2.0 pack/unpack parameters correctly. Fix
        preexisting bugs in texture uploads from pixel unpack buffers.
        Remove entry points from GraphicsContextGL that will never be used
        by the WebGL 2.0 implementation.

        Covered by existing WebGL 2.0 conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeNewContext):
        (WebCore::WebGL2RenderingContext::sliceArrayBufferView):
        (WebCore::WebGL2RenderingContext::pixelStorei):
        (WebCore::WebGL2RenderingContext::texImage2D):
        (WebCore::WebGL2RenderingContext::texImage3D):
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        (WebCore::WebGL2RenderingContext::getPackPixelStoreParams const):
        (WebCore::WebGL2RenderingContext::getUnpackPixelStoreParams const):
        (WebCore::WebGL2RenderingContext::readPixels):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::readPixels):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/ExtensionsGL.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::readnPixelsRobustANGLE):
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readRenderingResults):
        (WebCore::GraphicsContextGLOpenGL::texImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage3D): Deleted.
        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.cpp:
        (WebCore::ExtensionsGLOpenGLCommon::readnPixelsRobustANGLE):
        * platform/graphics/opengl/ExtensionsGLOpenGLCommon.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::texSubImage3D): Deleted.

2020-07-17  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Sync objects
        https://bugs.webkit.org/show_bug.cgi?id=126942

        Reviewed by Dean Jackson.

        Passes WebGL conformance tests
        webgl/2.0.0/conformance2/sync/sync-webgl-specific.html
        and
        webgl/2.0.0/deqp/functional/gles3/sync.html

        although the latter times out in the layout test harness.


        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::fenceSync):
        (WebCore::WebGL2RenderingContext::isSync):
        (WebCore::WebGL2RenderingContext::deleteSync):
        (WebCore::WebGL2RenderingContext::clientWaitSync):
        (WebCore::WebGL2RenderingContext::waitSync):
        (WebCore::WebGL2RenderingContext::getSyncParameter):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLSync.cpp:
        (WebCore::WebGLSync::WebGLSync):
        (WebCore::WebGLSync::deleteObjectImpl):
        (WebCore::WebGLSync::updateCache):
        (WebCore::WebGLSync::getCachedResult const):
        (WebCore::WebGLSync::isSignaled const):
        (WebCore::WebGLSync::scheduleAllowCacheUpdate):
        * html/canvas/WebGLSync.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/GraphicsTypesGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::fenceSync):
        (WebCore::GraphicsContextGLOpenGL::isSync):
        (WebCore::GraphicsContextGLOpenGL::deleteSync):
        (WebCore::GraphicsContextGLOpenGL::clientWaitSync):
        (WebCore::GraphicsContextGLOpenGL::waitSync):
        (WebCore::GraphicsContextGLOpenGL::getSynciv):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::fenceSync):
        (WebCore::GraphicsContextGLOpenGL::isSync):
        (WebCore::GraphicsContextGLOpenGL::deleteSync):
        (WebCore::GraphicsContextGLOpenGL::clientWaitSync):
        (WebCore::GraphicsContextGLOpenGL::waitSync):
        (WebCore::GraphicsContextGLOpenGL::getSynciv):

2020-07-17  Lauro Moura  <lmoura@igalia.com>

        Fix -Wformat= warnings when passing enum to integer specifiers
        https://bugs.webkit.org/show_bug.cgi?id=214441

        Reviewed by Darin Adler.

        Covered by existing tests.

        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::MediaConstraint::log const):
        (WebCore::BooleanConstraint::logAsBoolean const):
        (WebCore::DoubleConstraint::logAsDouble const):
        (WebCore::IntConstraint::logAsInt const):
        * platform/mediastream/MediaConstraints.h: Made uint8_t the underlying
        type for MediaConstraints::DataType.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::selectSettings):
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h: Made
        uint8_t the underlying type for MediaConstraintType.

2020-07-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Don't include <wtf/text/WTFString.h> in SVGParserUtilities.h
        https://bugs.webkit.org/show_bug.cgi?id=214320

        Reviewed by Darin Adler.

        r264332 mistakenly added #include <wtf/text/WTFString.h> in
        ColorSerialization.h and SVGParserUtilities.h. It should be
        <wtf/Forward.h>.

        See <https://lists.webkit.org/pipermail/webkit-dev/2020-July/031274.html>
        for the discussion.

        * platform/graphics/ColorSerialization.h:
        * svg/SVGParserUtilities.h:

2020-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Recommended article titles on csdn.net are clipped after translating to English
        https://bugs.webkit.org/show_bug.cgi?id=214488
        <rdar://problem/64531754>

        Reviewed by Tim Horton.

        On csdn.net, the translation of the "荐" pill into English is "Recommended". This increase in the size of the
        text node after translation breaks the layout of the page by clipping content below the pill, since the page
        expects the element containing this text to have a fixed width and height.

        Add a heuristic to detect and mitigate this exact scenario by applying `overflow: hidden;` onto containers
        after translation, in the case where the container:

        1. Did not have any visual overflow before translation.
        2. Has visual overflow after translation.
        3. Has both fixed width and fixed height.
        4. Does not have any overflow clip.
        5. Is not out-of-flow (i.e. fixed or absolute position).

        While it does mean that the text inside the fixed-dimension container will be clipped, this will at least
        prevent this overflow from breaking the rest of the page.

        Test: TextManipulation.CompleteTextManipulationAddsOverflowHiddenToAvoidBreakingLayout

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::completeManipulation):
        (WebCore::TextManipulationController::replace):

        While replacing content, keep track of nodes under which we're inserting content that didn't have any visual
        overflow prior to replacement.

        * editing/TextManipulationController.h:

2020-07-17  Simon Fraser  <simon.fraser@apple.com>

        Make ScrollbarControlSize an enum class
        https://bugs.webkit.org/show_bug.cgi?id=199325

        Reviewed by Sam Weinig.

        Make ScrollbarControlSize an enum class, and make some RenderScrollbar methods const.

        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::createScrollbar):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::scrollbarThickness):
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarControlSizeToNSControlSize):
        (WebCore::scrollbarSizeToIndex):
        (WebCore::ScrollbarThemeMac::hasButtons):
        (WebCore::buttonRepaintRect):
        (WebCore::ScrollbarThemeMac::backButtonRect):
        (WebCore::ScrollbarThemeMac::forwardButtonRect):
        (WebCore::ScrollbarThemeMac::trackRect):
        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::scrollbarThickness):
        * platform/mock/ScrollbarThemeMock.h:
        * platform/playstation/ScrollbarThemePlayStation.h:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        * platform/win/ScrollbarThemeWin.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar):
        (WebCore::RenderScrollbar::buttonRect const):
        (WebCore::RenderScrollbar::trackRect const):
        (WebCore::RenderScrollbar::trackPieceRectWithMargins const):
        (WebCore::RenderScrollbar::minimumThumbLength const):
        (WebCore::RenderScrollbar::opacity const):
        (WebCore::RenderScrollbar::buttonRect): Deleted.
        (WebCore::RenderScrollbar::trackRect): Deleted.
        (WebCore::RenderScrollbar::trackPieceRectWithMargins): Deleted.
        (WebCore::RenderScrollbar::minimumThumbLength): Deleted.
        (WebCore::RenderScrollbar::opacity): Deleted.
        * rendering/RenderScrollbar.h:
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::scrollbarControlSizeForPart):
        * rendering/RenderThemeMac.h:

2020-07-17  Rob Buis  <rbuis@igalia.com>

        Changing URL.host should not override port
        https://bugs.webkit.org/show_bug.cgi?id=151613

        Reviewed by Alex Christensen.

        When setting host, empty/incorrect port strings
        should not change the existing port [1, 2].

        Behavior matches Chrome and Firefox.

        [1] https://url.spec.whatwg.org/#host-state Step 2.4
        [2] https://url.spec.whatwg.org/#port-state Step 2.2

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):

2020-07-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r264477.

        Broke the internal build

        Reverted changeset:

        "Use AVRoutePickerView when available for choosing AirPlay
        devices"
        https://bugs.webkit.org/show_bug.cgi?id=213497
        https://trac.webkit.org/changeset/264477

2020-07-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r264482.

        Part of an attempted fix for the build

        Reverted changeset:

        "Use AVRoutePickerView when available for choosing AirPlay
        devices"
        https://bugs.webkit.org/show_bug.cgi?id=213497
        https://trac.webkit.org/changeset/264482

2020-07-17  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r264280.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behaviors.

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::decode):

2020-07-17  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below and redundant spaces since r264381.
        warning: this statement may fall through [-Wimplicit-fallthrough=]

        No new tests, no new behaviors.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::vertexAttribI4iv):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::vertexAttribfvImpl):

2020-07-17  Joonghun Park  <jh718.park@samsung.com>

        Remove the build warning below and redundant spaces since r263985.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behaviors.

        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::create):
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/PannerNode.h:

2020-07-16  Rob Buis  <rbuis@igalia.com>

        Make DocumentParser.ParserState an enum class
        https://bugs.webkit.org/show_bug.cgi?id=214416

        Reviewed by Darin Adler.

        Make DocumentParser.ParserState an enum class since it is more readable.

        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        (WebCore::DocumentParser::startParsing):
        (WebCore::DocumentParser::prepareToStopParsing):
        (WebCore::DocumentParser::stopParsing):
        (WebCore::DocumentParser::detach):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::isParsing const):
        (WebCore::DocumentParser::isStopping const):
        (WebCore::DocumentParser::isStopped const):
        (WebCore::DocumentParser::isDetached const):
        (): Deleted.

2020-07-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Rename createBoxPtr into adoptBoxPtr
        https://bugs.webkit.org/show_bug.cgi?id=214171

        Reviewed by Darin Adler.

        No new tests, just a rename.

        * platform/graphics/gstreamer/eme/CDMProxyThunder.cpp:
        (WebCore::CDMProxyThunder::getDecryptionSession const): Used the
        renamed function.

2020-07-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF] Remove the unnecessary inner class DefaultHash<T>::Hash
        https://bugs.webkit.org/show_bug.cgi?id=214389

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBDatabaseIdentifier.h:
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        * Modules/webgpu/WHLSL/AST/WHLSLUnnamedTypeHash.h:
        * Modules/webgpu/WHLSL/WHLSLSemanticMatcher.cpp:
        (WebCore::WHLSL::matchResources):
        (WebCore::WHLSL::matchVertexAttributes):
        (WebCore::WHLSL::matchColorAttachments):
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityObject.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::serializeActions):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::TriggerHash::hash):
        * contentextensions/ContentExtensionStyleSheet.h:
        * contentextensions/DFA.cpp:
        (WebCore::ContentExtensions::printTransitions):
        * contentextensions/DFABytecodeInterpreter.h:
        * contentextensions/DFACombiner.cpp:
        (WebCore::ContentExtensions::DFAMerger::getOrCreateCombinedNode):
        * contentextensions/DFANode.cpp:
        (WebCore::ContentExtensions::DFANode::bestFallbackTarget const):
        * contentextensions/ImmutableNFANodeBuilder.h:
        * contentextensions/NFA.cpp:
        (WebCore::ContentExtensions::NFA::debugPrintDot const):
        * contentextensions/NFANode.h:
        * contentextensions/NFAToDFA.cpp:
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetSource::NodeIdSetToUniqueNodeIdSetSource):
        (WebCore::ContentExtensions::NodeIdSetToUniqueNodeIdSetTranslator::translate):
        * css/makeprop.pl:
        * css/parser/CSSParserContext.h:
        * dom/GCReachableRef.h:
        * dom/MessagePortIdentifier.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListCacheMapEntryHash::hash):
        (WebCore::NodeListsNodeData::NodeListCacheMapEntryHash::equal):
        * dom/QualifiedName.h:
        * history/BackForwardItemIdentifier.h:
        * html/canvas/WebGLRenderingContextBase.h:
        * layout/LayoutUnits.h:
        * loader/AdClickAttribution.h:
        * loader/ResourceCryptographicDigest.h:
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::hash):
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::equal):
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::Hash::hash): Deleted.
        (WTF::DefaultHash<WebCore::ResourceCryptographicDigest>::Hash::equal): Deleted.
        * page/ClientOrigin.h:
        * page/GlobalWindowIdentifier.h:
        * page/SecurityOriginData.h:
        * page/SecurityOriginHash.h:
        * platform/Cookie.h:
        * platform/RegistrableDomain.h:
        * platform/graphics/ColorHash.h:
        * platform/graphics/FloatSizeHash.h:
        (WTF::FloatHash<WebCore::FloatSize>::hash):
        * platform/graphics/FontGenericFamilies.h:
        * platform/graphics/IntPointHash.h:
        * platform/graphics/IntRectHash.h:
        (WTF::IntHash<WebCore::IntRect>::hash):
        (WTF::IntHash<WebCore::IntRect>::equal):
        * platform/graphics/IntSizeHash.h:
        * platform/graphics/WidthCache.h:
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FallbackFontDescriptionKey::computeHash const):
        * platform/network/HTTPParsers.h:
        * platform/network/ProtectionSpaceHash.h:
        * platform/win/COMPtr.h:
        * platform/win/WindowsKeyNames.h:
        * rendering/CSSValueKey.h:
        * rendering/GridBaselineAlignment.h:
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::placeSpecifiedMajorAxisItemsOnGrid const):
        * rendering/RenderTheme.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
        * svg/SVGElement.h:
        (WebCore::SVGAttributeHashTranslator::hash):
        * workers/service/ServiceWorkerClientIdentifier.h:
        * workers/service/ServiceWorkerRegistrationKey.h:

2020-07-16  Sihui Liu  <sihui_liu@appe.com>

        IDB serialization of some DOM object types crashes the Networking process due to incorrect global object type (WPT IndexedDB/structured-clone.any tests fail)
        https://bugs.webkit.org/show_bug.cgi?id=210735
        <rdar://problem/62045703>

        Reviewed by Yusuke Suzuki.

        In r239746, IDB went back to use JSGlobalObject for serialization and deserialization. However, in our current
        implementation, there is a strong assumption that DOM JS objects are tied to JSDOMGlobalObject, which is 
        derived from JSGlobalObject. For example, in SerializedScriptValue.cpp, we cast the global object to
        JSDOMGlobalObject in many places. 

        We recently notice this issue when we enable some wpt test, which has been disabled since it was imported as 
        some types were not supported. The test fails as DOMMatrix object requires its global object to be
        JSDOMGlobalObject. To fix this, introduce a new Class JSIDBSerializationGlobalObject, derived from 
        JSDOMGlobalObject, and use it for IDB serialization.

        Tests: LayoutTests/storage/indexeddb/structured-clone.html
               LayoutTests/storage/indexeddb/structured-clone-private.html

        * Modules/indexeddb/server/IDBSerializationContext.cpp:
        (WebCore::IDBServer::IDBSerializationContext::initializeVM):
        * Modules/indexeddb/server/IDBSerializationContext.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        * bindings/js/JSIDBSerializationGlobalObject.cpp: Added.
        (WebCore::JSIDBSerializationGlobalObject::JSIDBSerializationGlobalObject):
        (WebCore::JSIDBSerializationGlobalObject::create):
        (WebCore::JSIDBSerializationGlobalObject::finishCreation):
        (WebCore::JSIDBSerializationGlobalObject::subspaceForImpl):
        (WebCore::JSIDBSerializationGlobalObject::destroy):
        * bindings/js/JSIDBSerializationGlobalObject.h: Added.
        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::idbSerializationSpace):
        * dom/EmptyScriptExecutionContext.h: Added.
        * worklets/WorkletScriptController.h:

2020-07-16  Eric Carlson  <eric.carlson@apple.com>

        Use AVRoutePickerView when available for choosing AirPlay devices
        https://bugs.webkit.org/show_bug.cgi?id=213497
        <rdar://problem/58610662>

        Unreviewed build fix.

        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::routePicker): Use HAVE_AVROUTEPICKERVIEW.

2020-07-16  Eric Carlson  <eric.carlson@apple.com>

        Use AVRoutePickerView when available for choosing AirPlay devices
        https://bugs.webkit.org/show_bug.cgi?id=213497
        <rdar://problem/58610662>

        Reviewed by Jer Noble.

        Use an AVRoutePickerView, the replacement for AVOutputDeviceMenuController, when
        it is available to allow a user to pick an AirPlay device. To do this, create an 
        AVPlaybackTargetPicker abstract base and create a concrete class from the 
        AVOutputDeviceMenuController-specific code from MediaPlaybackTargetPickerMac, and
        create a new concrete class using AVRoutePickerView.

        Tested manually because these changes require an AirPlay device.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the view to the
        target picker.
        * Modules/mediasession/WebMediaSessionManagerClient.h:

        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::playbackTargetPickerWasDismissed): Drive-by fix: return
        early if there are no pending promises.

        * SourcesCocoa.txt: Add new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): Add new parameter.
        * platform/graphics/MediaPlaybackTargetPicker.h:

        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.h: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h.
        * platform/graphics/avfoundation/objc/AVOutputDeviceMenuControllerTargetPicker.mm: Copied from Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm.
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::AVOutputDeviceMenuControllerTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::~AVOutputDeviceMenuControllerTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::devicePicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::availableDevicesDidChange):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::currentDeviceDidChange):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::showPlaybackTargetPicker):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::stopMonitoringPlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::invalidatePlaybackTargets):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::externalOutputDeviceAvailable):
        (WebCore::AVOutputDeviceMenuControllerTargetPicker::outputContext):
        (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]):
        (-[WebAVOutputDeviceMenuControllerHelper clearCallback]):
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]):

        * platform/graphics/avfoundation/objc/AVPlaybackTargetPicker.h: Added.
        (WebCore::AVPlaybackTargetPicker::AVPlaybackTargetPicker):
        (WebCore::AVPlaybackTargetPicker::client const):

        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.h: Added.
        * platform/graphics/avfoundation/objc/AVRoutePickerViewTargetPicker.mm: Added.
        (WebCore::AVRoutePickerViewTargetPicker::isAvailable):
        (WebCore::AVRoutePickerViewTargetPicker::AVRoutePickerViewTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::~AVRoutePickerViewTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::outputContextInternal):
        (WebCore::AVRoutePickerViewTargetPicker::devicePicker):
        (WebCore::AVRoutePickerViewTargetPicker::routeDetector):
        (WebCore::AVRoutePickerViewTargetPicker::showPlaybackTargetPicker):
        (WebCore::AVRoutePickerViewTargetPicker::startingMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::stopMonitoringPlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::externalOutputDeviceAvailable):
        (WebCore::AVRoutePickerViewTargetPicker::outputContext):
        (WebCore::AVRoutePickerViewTargetPicker::invalidatePlaybackTargets):
        (WebCore::AVRoutePickerViewTargetPicker::availableDevicesDidChange):
        (WebCore::AVRoutePickerViewTargetPicker::currentDeviceDidChange):
        (WebCore::AVRoutePickerViewTargetPicker::devicePickerWasDismissed):
        (-[WebAVRoutePickerViewHelper initWithCallback:]):
        (-[WebAVRoutePickerViewHelper dealloc]):
        (-[WebAVRoutePickerViewHelper clearCallback]):
        (-[WebAVRoutePickerViewHelper routePickerViewDidEndPresentingRoutes:]):
        (-[WebAVRoutePickerViewHelper notificationHandler:]):

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac):
        (WebCore::MediaPlaybackTargetPickerMac::externalOutputDeviceAvailable):
        (WebCore::MediaPlaybackTargetPickerMac::playbackTarget):
        (WebCore::MediaPlaybackTargetPickerMac::routePicker):
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
        (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::invalidatePlaybackTargets):
        (WebCore::MediaPlaybackTargetPickerMac::pickerWasDismissed):
        (WebCore::MediaPlaybackTargetPickerMac::availableDevicesChanged):
        (WebCore::MediaPlaybackTargetPickerMac::currentDeviceChanged):
        (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper initWithCallback:]): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper clearCallback]): Deleted.
        (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Deleted.
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        * platform/mock/MediaPlaybackTargetPickerMock.h:

2020-07-16  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Add MediaCapabilities support for SW VP9 decoder.
        https://bugs.webkit.org/show_bug.cgi?id=214316

        Reviewed by Eric Carlson.

        Test: platform/mac/media/mediacapabilities/vp9-decodingInfo-sw.html

        Add some foundational support for SW VP9, which due to policy decisions will need information
        both on the system battery status and the power adapter status, and these need to be shipped
        into the WebContent process from the UIProcess.

        Add some Internal override settings to allow the policies to be effectively tested through
        LayouTests. This includes overrides for system battery and AC state, as well as overrides for
        screen size and resolution.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformScreen.cpp:
        (WebCore::getScreenProperties):
        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/cocoa/PowerSourceNotifier.h:
        * platform/cocoa/PowerSourceNotifier.mm:
        (WebCore::PowerSourceNotifier::PowerSourceNotifier):
        (WebCore::PowerSourceNotifier::~PowerSourceNotifier):
        (WebCore::PowerSourceNotifier::notifyPowerSourceChanged):
        * platform/cocoa/SystemBattery.h:
        * platform/cocoa/SystemBattery.mm:
        (WebCore::systemHasBattery):
        (WebCore::resetSystemHasAC):
        (WebCore::setSystemHasAC):
        (WebCore::systemHasAC):
        (WebCore::setOverrideSystemHasBatteryForTesting):
        (WebCore::setOverrideSystemHasACForTesting):
        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
        (WebCore::videoCodecTypeFromRFC4281Type):
        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
        * platform/graphics/cocoa/VP9UtilitiesCocoa.h: Copied from Source/WebCore/PAL/pal/spi/cocoa/IOPSLibSPI.h.
        * platform/graphics/cocoa/VP9UtilitiesCocoa.mm: Added.
        (WebCore::setOverrideVP9HardwareDecoderDisabledForTesting):
        (WebCore::setOverrideVP9ScreenSizeAndScaleForTesting):
        (WebCore::resetOverrideVP9ScreenSizeAndScaleForTesting):
        (WebCore::validateVPParameters):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::collectScreenProperties):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::setSystemHasBattery):
        (WebCore::Internals::setSystemHasAC):
        (WebCore::Internals::setHardwareVP9DecoderDisabledForTesting):
        (WebCore::Internals::setVP9ScreenSizeAndScale):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-07-16  Brady Eidson  <beidson@apple.com>

        Remove (entirely unused) hat switch dpad support in HIDGamepad.
        https://bugs.webkit.org/show_bug.cgi?id=214419

        Reviewed by Andy Estes.

        Turns out these devices simply don't exist in the wild.

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::initElements):
        (WebCore::HIDGamepad::initElementsFromArray):
        (WebCore::HIDGamepad::valueChanged):
        (WebCore::HIDGamepad::maybeAddDPad): Deleted.
        (WebCore::fillInButtonValues): Deleted.

        * platform/gamepad/mac/HIDGamepad.h:
        (WebCore::HIDGamepadElement::isAxis const):
        (WebCore::HIDGamepadElement::isDPad const): Deleted.
        (WebCore::HIDGamepadDPad::HIDGamepadDPad): Deleted.
        (WebCore::HIDGamepadDPad::normalizedValue): Deleted.

2020-07-16  Peng Liu  <peng.liu6@apple.com>

        Double tapping to zoom out a fullscreen video will zoom in slightly before zooming out
        https://bugs.webkit.org/show_bug.cgi?id=214400

        Reviewed by Jer Noble.

        When changing the video gravity of a fullscreen video from AVLayerVideoGravityResizeAspectFill
        to AVLayerVideoGravityResizeAspect, the implicit animation of the AVPlayerLayer in the web process
        will conflict with the implicit animation of the _videoSublayer in the WebAVPlayerLayer in the
        UI process. To avoid the implicit animation in the web process because of the video gravity change,
        we have to let the remote hosting layer and the corresponding AVPlayerLayer in the web process
        to include the whole video, even when the video gravity is AVLayerVideoGravityResizeAspectFill
        and the video will be clipped by the superlayer. When the AVPlayerLayer has the whole video,
        changing the video gravity from AVLayerVideoGravityResizeAspectFill to AVLayerVideoGravityResizeAspect
        will not generate an implicit animation in the web process.

        This patch also adds an instance variable _previousVideoGravity to make sure the transform is
        correctly calculated when video gravity is changing.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer init]):
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):

2020-07-16  Andres Gonzalez  <andresg_22@apple.com>

        Crash caused by clients that don't support isolated tree mode calling on the secondary thread.
        https://bugs.webkit.org/show_bug.cgi?id=214409

        Reviewed by Chris Fleizach.

        In isolated tree mode, isIsolatedTreeEnabled should return true whenever
        is called off of the main thread, even if the client doesn’t support
        isolated tree mode.
        Once the secondary AX thread is initialized due to a call from a client
        that supports isolated tree mode like VoiceOver, all calls into the
        accessibility API will happen on the secondary thread, including calls
        from clients that don't support isolated tree mode. At this point, we
        need to handle those clients as if they supported isolated tree mode.
        In other words, one client that supports isolated tree mode makes all
        other clients to be treated as such.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::isIsolatedTreeEnabled):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper lineTextMarkerRangeForTextMarker:forUnit:]): Minor cleanup, the cache is already
        in a local varriable.

2020-07-16  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Fix line name positions after implicit tracks
        https://bugs.webkit.org/show_bug.cgi?id=214315

        Reviewed by Manuel Rego Casasnovas.

        When serializing grid-template-rows/columns of a grid container, we get
        the list of used track sizes, and then insert line names at the
        corresponding indices.

        Before this patch, these indices were simply taken from the computed
        value. However, leading implicit tracks appear in the used value but not
        in the computed one. Therefore, we have to offset the indices so that
        the line names appear at the proper positions.

        This patch is a port of https://crrev.com/777829

        Tests: imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-implicit-track.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-implicit-track.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::populateGridTrackList):
        (WebCore::valueForGridTrackList):
        * rendering/RenderGrid.h:

2020-07-16  Andres Gonzalez  <andresg_22@apple.com>

        [webAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange]needs to autorelease the return value from the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=214404
        <rdar://problem/65627156>

        Reviewed by Chris Fleizach.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:spellCheck:]):
        Call retrieveAutoreleasedValueFromMainthread instead of retrieveValueFromMainThread.
        The autorelease call inside the lambda doesn't do the job.

2020-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r264280) [GTK][WPE] fast/gradients/conic-gradient-alpha.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=214259

        Reviewed by Darin Adler.

        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendWithoutPremultiply): Use 'to' instead of 'from' when converting to SRGBA.
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::createConic): Use blendWithoutPremultiply() instead of blend() for the color stops interpolation.

2020-07-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r264272) [GTK][WPE] css3/color/composited-solid-backgrounds.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=214260

        Reviewed by Darin Adler.

        The problem is that clampToComponentFloat is returning a uint8_t instead of a float, so we always end up
        returning 0.

        * platform/graphics/ColorUtilities.h:
        (WebCore::clampToComponentFloat):

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

        Should clear exception after microtask draining
        https://bugs.webkit.org/show_bug.cgi?id=214391
        <rdar://problem/65536227>

        Reviewed by Mark Lam.

        Test: js/dom/microtask-drain-should-clear-exceptions.html

        Since microtask draining involves JS calls, potentially it can cause exception.
        We should clear exceptions after microtask draining since we do not handle it and suppress exception-check validation.
        And we also should not create ThrowScope in canAccessDocument when parameter says it never throws an error.
        Both cases are handled in the attached test.

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::canAccessDocument):
        * bindings/js/JSExecState.h:
        (WebCore::JSExecState::~JSExecState):

2020-07-15  Devin Rousso  <drousso@apple.com>

        Unreviewed followup, use `objectReplacementCharacter` instead of `0xFFFC`
        <https://webkit.org/b/214331> <rdar://problem/64779558>

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::representNodeOffsetZero):

2020-07-15  Simon Fraser  <simon.fraser@apple.com>

        Flip the sense of the return value for processWheelEventForScrollSnap()
        https://bugs.webkit.org/show_bug.cgi?id=214328

        Reviewed by Wenson Hsieh.

        All the other functions return "true" to mean "handled". Make this one the same.

        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::processWheelEventForScrollSnap):

2020-07-15  Devin Rousso  <drousso@apple.com>

        should represent `TextPlaceholderElement` as an `NSTextAttachmentCharacter` instead of a `\n`
        https://bugs.webkit.org/show_bug.cgi?id=214331
        <rdar://problem/64779558>

        Reviewed by Wenson Hsieh.

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitReplacementInsteadOfNode): Added.
        (WebCore::shouldEmitNewlinesBeforeAndAfterNode):
        (WebCore::TextIterator::representNodeOffsetZero):
        Placeholders should eventually be removed, so stringifying them as a newline doesn't make
        sense as they should be treated as a "slot" in the existing flow of the surrounding content
        without changing the characteristics of the content (e.g. a sentence with a placeholder
        should remain as a sentence, not suddenly become two paragraphs separated by a placeholder).

2020-07-15  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Build fix after r264213
        https://bugs.webkit.org/show_bug.cgi?id=214373

        Unreviewed build fix

        No new tests, build fix only

        * PlatformPlayStation.cmake: Stop compiling UserAgentQuirks

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

        [iOS] Caret should be before text placeholder instead of after it
        https://bugs.webkit.org/show_bug.cgi?id=214319
        <rdar://problem/65295523>

        Reviewed by Wenson Hsieh.

        Move the caret to before the text placeholder to match UIKit.

        Tests: editing/text-placeholder/caret-before-zero-width-placeholder-in-content-editable-end-of-word.html
               editing/text-placeholder/caret-before-zero-width-placeholder-in-content-editable-start-of-word.html
               editing/text-placeholder/insert-into-content-editable-and-remove-via-mutation-event.html

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextPlaceholder): Compute the position before the placeholder in its parent.
        This computation can only be done if the placeholder still has a parent. It may not after insertion
        because arbitrary JavaScript code can run. If this happens then bail out and return nullptr. Otherwise,
        set the new selection.

2020-07-15  Simon Fraser  <simon.fraser@apple.com>

        itsnicethat.com page is sometimes non-scrollable
        https://bugs.webkit.org/show_bug.cgi?id=214362
        <rdar://problem/65431127>

        Reviewed by Tim Horton.

        This page uses 'clip-path: inset(1px); on a 1px x 1px element to hit descendants from
        hit-testing and compositing code turns this into a layer mask using a CAShapeLayer.
        Our layer/view hit-testing code failed to check for masking; if a layer has a mask,
        it needs to be handled like -masksToBounds, in that points outside the mask should
        never hit descendant layers.

        Make a -_web_maskContainsPoint: to test whether the point is inside the mask layer,
        and _web_maskMayIntersectRect: which does approximate testing using path bounds
        intersection (this is used for editable regions).

        Also convert some hard-coded winding rule strings to use the CA constants.

        Tests: fast/scrolling/ios/clip-path-hit-test.html
               fast/scrolling/mac/clip-path-hit-test.html

        * page/scrolling/mac/ScrollingTreeMac.mm:
        (collectDescendantLayersAtPoint):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::shapeWindRule const):
        (WebCore::PlatformCALayerCocoa::setShapeWindRule):
        * platform/graphics/cocoa/WebCoreCALayerExtras.h:
        * platform/graphics/cocoa/WebCoreCALayerExtras.mm:
        (-[CALayer _web_maskContainsPoint:]):
        (-[CALayer _web_maskMayIntersectRect:]):

2020-07-15  Mark Lam  <mark.lam@apple.com>

        Add handling of out of memory handling while adding a worklet module.
        https://bugs.webkit.org/show_bug.cgi?id=214354
        <rdar://problem/65271931>

        Reviewed by Yusuke Suzuki and Keith Miller.

        Test: fast/css-custom-paint/out-of-memory-while-adding-worklet-module.html

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        * dom/ExceptionCode.h:
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::tryCreate):
        (WebCore::PaintWorkletGlobalScope::PaintWorkletGlobalScope):
        (WebCore::PaintWorkletGlobalScope::create): Deleted.
        * worklets/PaintWorkletGlobalScope.h:
        * worklets/Worklet.cpp:
        (WebCore::Worklet::addModule):
        * worklets/Worklet.h:
        * worklets/Worklet.idl:
        * worklets/WorkletGlobalScope.cpp:
        (WebCore::WorkletGlobalScope::WorkletGlobalScope):
        * worklets/WorkletGlobalScope.h:
        * worklets/WorkletScriptController.cpp:
        (WebCore::WorkletScriptController::WorkletScriptController):
        * worklets/WorkletScriptController.h:

2020-07-15  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Rename SmallestTrackStart to ExplicitGridStart
        https://bugs.webkit.org/show_bug.cgi?id=214347

        Reviewed by Manuel Rego Casasnovas.

        The SmallestTrackStart method used to return a signed int which was
        never positive, representing the smallest untranslated start among all
        grid items, clamped by 0 as a maximum.

        In practice, though, what we usually want is the index of the first
        explicit track/line among all tracks/lines, or equivalently, the number
        of leading implicit tracks/lines.

        That number is precisely minus the return value of SmallestTrackStart.
        Thus, in grid layout there were various std::abs() to invert the value.

        But it's a bit confusing to have an API which returns a non-positive
        integer, which then needs to be made non-negative. Therefore, this patch
        renames SmallestTrackStart to ExplicitGridStart, and makes it return
        the unsigned which is usually desired.

        This patch should have no effect in practice.

        This patch is a port of https://crrev.com/777768

        * rendering/Grid.cpp:
        (WebCore::Grid::setExplicitGridStart):
        (WebCore::Grid::explicitGridStart const):
        (WebCore::Grid::setNeedsItemsPlacement):
        * rendering/Grid.h:
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::rawGridTrackSize const):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const):
        (WebCore::RenderGrid::placeItemsOnGrid const):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator const):
        (WebCore::RenderGrid::gridAreaBreadthForOutOfFlowChild):

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

        Unreviewed atttempt to fix build after r264389.

        * platform/gamepad/mac/HIDGamepadProvider.mm:
        (WebCore::HIDGamepadProvider::deviceRemoved):

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

        [LFC][IFC] Remove Display::LineBox::isConsideredEmpty
        https://bugs.webkit.org/show_bug.cgi?id=214335

        Reviewed by Antti Koivisto.

        Display classes should not have layout related bits.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const):
        * layout/displaytree/DisplayLineBox.h:
        (WebCore::Display::LineBox::baselineOffset const):
        (WebCore::Display::LineBox::LineBox):
        (WebCore::Display::LineBox::isConsideredEmpty const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::setDisplayBoxesForLine):

2020-07-15  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Break circular reference between SourceBufferPrivateGStreamer and AppendPipeline
        https://bugs.webkit.org/show_bug.cgi?id=214345

        Reviewed by Xabier Rodriguez-Calvar.

        SourceBufferPrivate is ref counted.

        AppendPipeline is owned exclusively by SourceBufferPrivateGStreamer:
        it's born and destroyed with it, managed by a never-moved unique_ptr.

        AppendPipeline needs a reference to SourceBufferPrivateGStreamer to
        notify it of essential events like samples having been parsed. This
        used to be a Ref<>, thus creating a circular reference leak:

        AppendPipeline is only destroyed in SourceBufferPrivateGStreamer
        destructor. AppendPipeline holds ref counted reference to
        SourceBufferPrivateGStreamer, therefore neither are destroyed.

        This patch breaks the cycle by replacing the Ref<> in AppendPipeline
        with a plain old reference. This is safe because
        SourceBufferPrivateGStreamer owns, and therefore is alive at least
        just as long as AppendPipeline.

        As a consequence of not using Ref<>, the SourceBufferPrivateGStreamer
        constructor does no longer need to relax the adoption requirements and
        unique_ptr<AppendPipeline> can be replaced by a UniqueRef<>.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleErrorConditionFromStreamingThread):
        (WebCore::AppendPipeline::handleStateChangeMessage):
        (WebCore::AppendPipeline::handleEndOfAppend):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::sourceBufferPrivate):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2020-07-15  Brady Eidson  <beidson@apple.com>

        Resolve race between IOHIDManager and GameController framework.
        <rdar://problem/65554490> and https://bugs.webkit.org/show_bug.cgi?id=214245

        Reviewed by Tim Horton.

        No automated testing available.
        
        IOHIDDevices and IOHIDServices are two separate things.
        
        An IOHIDDevice and IOHIDService often have a 1-to-1 correlation, but the IOHIDDevice might be
        published to the application before the IOHIDService is.
        
        WebKit's HID gamepad manager uses IOHIDDevice.
        GameController.framework uses IOHIDServices.
        
        When we added the ability for WebKit to switch between HID and GCF, the following happens:

        - Sometimes the IOHIDServiceClient will get published first. Then when the IOHIDDevice is published,
          and WebKit was deciding which gamepad manager to use, the device's services are available,
          and we get the right answer.
        
        - Sometimes, the IOHIDDevice is published first. Then when WebKit is deciding which gamepad 
          manager to use, it can't check the IOHIDServiceClient against GameController framework.
          So we have the HID manager handle the device... but then GCF comes along a split second later
          and ALSO handles it.
          
        The "device before service" scenario results in the same gamepad showing up twice.
        
        To resolve this, we do the following:
        
        1 - If an IOHIDDevice attaches and its services aren't available yet, we delay managing it.
        2 - When we delay managing a device, we start listening for IOHIDServiceClient additions.
        3 - Each time a GamePad service is published, we once again try to determine if GCF will handle
            the device.
        4 - As long as the answer is "Maybe" - instead of "Yes" or "No" - we refuse to manage the device.
        5 - After a brief delay (currently 1 second), we will give up waiting for published services
            and manage the device with the HID gamepad provider.
            
        In my testing, when the service publishes after the devices, it's always within 50ms,
        (and usually just a spin or two of the runloop) so the 1s delay seems sufficient.
        
        NOTE: The above all holds true with the "MultiGamepadProvider" on Catalina.
        On Big Sur, there's brand new GameController framework API that makes this much easier. 👍

        * platform/gamepad/mac/HIDGamepadProvider.h:
        * platform/gamepad/mac/HIDGamepadProvider.mm:
        (WebCore::deviceAddedCallback):
        (WebCore::gameControllerFrameworkWillHandleHIDDevice):
        (WebCore::HIDGamepadProvider::waitForManagementDecisionForDevice):
        (WebCore::HIDGamepadProvider::removeDeviceWaitingForManagementDecision):
        (WebCore::HIDGamepadProvider::newGamePadServicePublished):
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):

2020-07-14  Zalan Bujtas  <zalan@apple.com>

        Caret leaves trails behind when the editable content is subpixel positioned
        https://bugs.webkit.org/show_bug.cgi?id=214333
        <rdar://problem/61914738>

        Reviewed by Simon Fraser.

        Replace integral rounding with pixelsnapping when painting the caret.

        The paint invalidation uses device pixel snapping and the actual painting needs to match it
        in order to not paint outside of the invalidated region.

        * editing/Editing.cpp:
        (WebCore::caretRendersInsideNode):
        (WebCore::rendererForCaretPainting):
        * editing/Editing.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::paintCaret):
        (WebCore::CaretBase::computeCaretColor):
        (WebCore::CaretBase::paintCaret const):
        (WebCore::DragCaretController::paintDragCaret const):
        * editing/FrameSelection.h:

2020-07-14  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] vertexAttribI* and getFragDataLocation
        https://bugs.webkit.org/show_bug.cgi?id=214211

        Reviewed by Dean Jackson.

        Passes all relevant WebGL 2 conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        (WebCore::WebGL2RenderingContext::vertexAttribI4i):
        (WebCore::WebGL2RenderingContext::vertexAttribI4iv):
        (WebCore::WebGL2RenderingContext::vertexAttribI4ui):
        (WebCore::WebGL2RenderingContext::vertexAttribI4uiv):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getVertexAttrib):
        (WebCore::WebGLRenderingContextBase::vertexAttribfImpl):
        (WebCore::WebGLRenderingContextBase::vertexAttribfvImpl):
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::VertexAttribValue::initValue):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::getFragDataLocation):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4i):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4iv):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4ui):
        (WebCore::GraphicsContextGLOpenGL::vertexAttribI4uiv):

2020-07-14  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Implement compressedTex{Sub}Image*, copyTexSubImage3D
        https://bugs.webkit.org/show_bug.cgi?id=126449

        Reviewed by Dean Jackson.

        Implement WebGL 2.0 entry points compressedTex{Sub}Image[23]D and
        copyTexSubImage3D.

        These require and use the ANGLE_robust_client_memory extension for
        size checking. Remove the associated entry points from
        GraphicsContextGL and subclasses, since they will never be used.

        Add needed pixel buffer object validation to the WebGL 1.0
        versions of these APIs as well as to texImage2D and texSubImage2D.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texImage2D):
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        (WebCore::WebGL2RenderingContext::copyTexSubImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexImage2D):
        (WebCore::WebGL2RenderingContext::compressedTexImage3D):
        (WebCore::WebGL2RenderingContext::compressedTexSubImage2D):
        (WebCore::WebGL2RenderingContext::compressedTexSubImage3D):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::copyTexSubImage3D):
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage3D): Deleted.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::compressedTexImage3D): Deleted.
        (WebCore::GraphicsContextGLOpenGL::compressedTexSubImage3D): Deleted.

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

        Drop cache of subframe count on the Page
        https://bugs.webkit.org/show_bug.cgi?id=214312
        <rdar://problem/65433615>

        Reviewed by Geoffrey Garen.

        Drop cache of subframe count on the Page as it is error-prone to keep it up to date and it is
        not performance sensitive. We only need the subframe count when trying to load a new iframe
        to see if we reached the maximum number of subframes (1000). Calculating this count is also
        not very expensive since we merely need to iterate the frame tree, which is composed of at
        most 1000 frames.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::open):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeAndRemoveChild):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::disconnectOwnerElement):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::childCount const):
        (WebCore::FrameTree::descendantCount const):
        * page/FrameTree.h:
        * page/Page.cpp:
        (WebCore::Page::subframeCount const):
        * page/Page.h:

2020-07-14  James Darpinian  <jdarpinian@chromium.org>

        Implement uniform* and getUniform for WebGL 2 types
        https://bugs.webkit.org/show_bug.cgi?id=214116

        Reviewed by Dean Jackson.

        Passes all relevant WebGL conformance tests.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getFragDataLocation):
        (WebCore::WebGL2RenderingContext::uniform1ui):
        (WebCore::WebGL2RenderingContext::uniform2ui):
        (WebCore::WebGL2RenderingContext::uniform3ui):
        (WebCore::WebGL2RenderingContext::uniform4ui):
        (WebCore::WebGL2RenderingContext::uniform1uiv):
        (WebCore::WebGL2RenderingContext::uniform2uiv):
        (WebCore::WebGL2RenderingContext::uniform3uiv):
        (WebCore::WebGL2RenderingContext::uniform4uiv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3x4fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4x3fv):
        (WebCore::WebGL2RenderingContext::uniform1fv):
        (WebCore::WebGL2RenderingContext::uniform2fv):
        (WebCore::WebGL2RenderingContext::uniform3fv):
        (WebCore::WebGL2RenderingContext::uniform4fv):
        (WebCore::WebGL2RenderingContext::uniform1iv):
        (WebCore::WebGL2RenderingContext::uniform2iv):
        (WebCore::WebGL2RenderingContext::uniform3iv):
        (WebCore::WebGL2RenderingContext::uniform4iv):
        (WebCore::WebGL2RenderingContext::uniformMatrix2fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix3fv):
        (WebCore::WebGL2RenderingContext::uniformMatrix4fv):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::getUniform):
        (WebCore::WebGLRenderingContextBase::uniform1fv):
        (WebCore::WebGLRenderingContextBase::uniform2fv):
        (WebCore::WebGLRenderingContextBase::uniform3fv):
        (WebCore::WebGLRenderingContextBase::uniform4fv):
        (WebCore::WebGLRenderingContextBase::uniform1iv):
        (WebCore::WebGLRenderingContextBase::uniform2iv):
        (WebCore::WebGLRenderingContextBase::uniform3iv):
        (WebCore::WebGLRenderingContextBase::uniform4iv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix2fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix3fv):
        (WebCore::WebGLRenderingContextBase::uniformMatrix4fv):
        (WebCore::WebGLRenderingContextBase::validateUniformParameters):
        (WebCore::WebGLRenderingContextBase::validateUniformMatrixParameters):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::getUniformuiv):
        (WebCore::GraphicsContextGLOpenGL::getFragDataLocation):
        (WebCore::GraphicsContextGLOpenGL::uniform1ui):
        (WebCore::GraphicsContextGLOpenGL::uniform2ui):
        (WebCore::GraphicsContextGLOpenGL::uniform3ui):
        (WebCore::GraphicsContextGLOpenGL::uniform4ui):
        (WebCore::GraphicsContextGLOpenGL::uniform1uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform2uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform3uiv):
        (WebCore::GraphicsContextGLOpenGL::uniform4uiv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x3fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2x4fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3x4fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4x3fv):
        (WebCore::GraphicsContextGLOpenGL::uniform1fv):
        (WebCore::GraphicsContextGLOpenGL::uniform2fv):
        (WebCore::GraphicsContextGLOpenGL::uniform3fv):
        (WebCore::GraphicsContextGLOpenGL::uniform4fv):
        (WebCore::GraphicsContextGLOpenGL::uniform1iv):
        (WebCore::GraphicsContextGLOpenGL::uniform2iv):
        (WebCore::GraphicsContextGLOpenGL::uniform3iv):
        (WebCore::GraphicsContextGLOpenGL::uniform4iv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix2fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix3fv):
        (WebCore::GraphicsContextGLOpenGL::uniformMatrix4fv):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::getUniformuiv):

2020-07-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Avoid loading media libraries in Document::visibilityStateChanged() if not needed
        https://bugs.webkit.org/show_bug.cgi?id=214304
        <rdar://problem/65005038>

        Unreviewed, address additional review comments.

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

2020-07-14  Jer Noble  <jer.noble@apple.com>

        Add support for parsing VP-style codec strings.
        https://bugs.webkit.org/show_bug.cgi?id=214270

        Reviewed by Eric Carlson.

        Test: media/vp-codec-parameters.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/VP9Utilities.cpp: Added.
        (WebCore::validVPLevels):
        (WebCore::validColorPrimaries):
        (WebCore::parseVPCodecParameters):
        * platform/graphics/VP9Utilities.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::parseVPCodecParameters):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-07-14  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When invalidating the clients of an SVG resource we should not go beyond the RenderSVGRoot
        https://bugs.webkit.org/show_bug.cgi?id=211804
        <rdar://problem/60308199>

        Reviewed by Zalan Bujtas.

        ComplexLineLayout::layoutLineBoxes() walks through the renderers of a line.
        The order of this walk may include a node and its children. For example 
        the layout of a RenderInline may be run first, then it is followed by the
        layout for a RenderSVGRoot which happens to be a child of the RenderInline.

        If the RenderSVGRoot has a dirty RenderSVGResource, e.g. RenderSVGResourceClipper,
        this resource will call RenderSVGResource::markForLayoutAndParentResourceInvalidation() 
        which will invalidate its ancestors including RenderSVGRoot and RenderInline
        by setting the normalChildNeedsLayoutBit() for each of them.

        The layout of SVG is hierarchical which means RenderSVGRoot will finish
        its layout after finishing the layout of all its descendants including
        this RenderSVGResource. So dirtying the RenderSVGRoot is this scenario
        is okay since RenderSVGRoot will do another SVGRenderSupport::layoutChildren()
        and will clear its needsLayout bits before it returns.

        The problem happens because we set normalChildNeedsLayoutBit for the containing
        RenderInline and this leaves the render tree dirty. Later Document::resolveStyle()
        may called to invalidate an SVG element e.g. RenderSVGPath. So setNeedsLayout()
        is called for this object. Because the normalChildNeedsLayoutBit() is set
        for the RenderInline, RenderObject::markContainingBlocksForLayout() stops
        in the middle and do not mark the containing RenderBlock. So we end up 
        with a render tree like this:

            +  RenderView
            +    HTML RenderBlock
            +      BODY RenderBody
            -        RenderBlock
            +          ANY-ELEMENT RenderInline
            +           svg RenderSVGRoot
            -              clipPath RenderSVGResourceClipper
            +              polygon RenderSVGPath

        where the '+' means needsLayout() is true and '-' means needsLayout() is
        false.

        So the layout will not run for RenderBlock with '-' sign. And we end up
        with dirty RenderSVGPath or even worse RenderSVGPath with uninitialized 
        m_path. So a null pointer deref may happen.

        The fix is to prevent mutating the render tree while running the layout
        of the SVG resource. This can be done by making the RenderSVGResource not
        dirtying any renderer beyond the RenderSVGRoot when it finishes its layout.
        The SVG resource layout should not affect the intrinsic size of the SVG
        if it is embedded in an HTML document.

        In RenderObject::markContainingBlocksForLayout(), we do something similar
        when we break if the ancestor is objectIsRelayoutBoundary().

        Test: svg/in-html/inline-svg-resource-dynamic-update.html

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/svg/RenderSVGRoot.h:

2020-07-14  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Avoid loading media libraries in Document::visibilityStateChanged() if not needed
        https://bugs.webkit.org/show_bug.cgi?id=214304
        <rdar://problem/65005038>

        Reviewed by Darin Adler.

        When the shared PlatformMediaSessionManager is created and accessed for the first time, some media libraries are loaded. There should be
        no need to access the shared PlatformMediaSessionManager if no manager has been created in Document::visibilityStateChanged().

        No new tests, since this patch does not change behavior.

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

2020-07-14  Jonathan Bedard  <jbedard@apple.com>

        [watchOS] Support armv7k build
        https://bugs.webkit.org/show_bug.cgi?id=214306
        <rdar://problem/65549901>

        Reviewed by Aakash Jain.

        No new tests, build fix.

        * Configurations/Base.xcconfig: Disable 64 to 32 bit conversion warning for armv7k.

2020-07-14  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Do not update ScreenTime when in private browsing mode
        https://bugs.webkit.org/show_bug.cgi?id=214288
        <rdar://problem/63735067>

        Reviewed by Jer Noble.

        Test: media/media-usage-state-private-browsing.html

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::updateMediaUsageIfChanged): Return early if the
        page is in private mode.

2020-07-14  Clark Wang  <clark_wang@apple.com>

        Updated AudioContext constructor according to spec
        https://bugs.webkit.org/show_bug.cgi?id=214267

        Reviewed by Chris Dumez.

        Updated AudioContext constructor according to spec: https://www.w3.org/TR/webaudio/#AudioContext-constructors.
        Added in files accordingly to support AudioContextOptions.

        Re-baselined existing tests. One new test case passes, and one fails due to current accepted range for sampleRate.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        (WebCore::AudioContext::AudioContext):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::create):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioContextLatencyCategory.h: Added.
        * Modules/webaudio/AudioContextLatencyCategory.idl: Added.
        * Modules/webaudio/AudioContextOptions.h: Added.
        * Modules/webaudio/AudioContextOptions.idl: Added.
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::BaseAudioContext):
        * Modules/webaudio/BaseAudioContext.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-07-14  Justin Fan  <justin_fan@apple.com>

        [WebGL] REGRESSION (r262366): Google search photos do not render, black images
        https://bugs.webkit.org/show_bug.cgi?id=214156
        <rdar://problem/64964922>

        Reviewed by Dean Jackson.

        http://trac.webkit.org/changeset/262366 separated WebGL canvas contents swapping and presentation
        into two steps. This Google search page was only running the presentation code without the swapping
        step, as it removes canvases from the observer Document before the Document is able to swap its canvas'
        contents. Ensure that re-inserted canvas elements properly register their new Documents as observers.

        Covered by existing tests.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::insertedIntoAncestor): 
        * html/HTMLCanvasElement.h:

2020-07-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified build fixes

        * bindings/js/CommonVM.cpp:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * html/canvas/CanvasStyle.cpp:
        * platform/graphics/GradientImage.cpp:
        * rendering/svg/RenderSVGPath.cpp:

2020-07-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified build fixes

        * animation/CSSTransition.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/ImageData.cpp:
        * inspector/InspectorInstrumentationWebKit.h:
        * layout/FormattingContextGeometry.cpp:
        * layout/floats/FloatingContext.cpp:
        * layout/floats/FloatingState.cpp:
        * layout/tableformatting/TableFormattingContext.cpp:
        * loader/MediaResourceLoader.cpp:
        * platform/FrameRateMonitor.h:
        * platform/graphics/ColorSerialization.cpp:
        * platform/graphics/ColorSerialization.h:
        * svg/SVGNumber.h:
        * svg/SVGParserUtilities.h:
        * svg/SVGTransformList.cpp:
        * svg/SVGZoomAndPan.cpp:

2020-07-13  Peng Liu  <peng.liu6@apple.com>

        Keyboard remains on full screen video view after back from PiP
        https://bugs.webkit.org/show_bug.cgi?id=214287

        Reviewed by Daniel Bates.

        Make the window for video fullscreen and picture-in-picture support the key window
        after the video returns to fullscreen from the picture-in-picture mode. Otherwise,
        the WebAVPlayerViewController cannot become the first responder.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):

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

        [RenderTreeNeedsLayoutChecker] imported/w3c/web-platform-tests/html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=214281
        <rdar://problem/56740133>

        Reviewed by Simon Fraser.

        While percentage height descendant computation runs on the containing block chain, when
        we mark the ancestors for layout, we need to traverse the parent (container) chain rather than the containing block chain.
        Containing block traversal skips certain non-block renderers which leaves gap between dirty renderers.

        Renderer[A] + dirty
          Renderer[B] - not dirty
            Renderer[C] + dirty

        During layout this gap (Renderer[B]) makes us exit early, resulting dirty leftover renderers (Renderer[C]).

        This is similar to what we do in RenderObject::markContainingBlocksForLayout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dirtyForLayoutFromPercentageHeightDescendants):

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

        REGRESSION: (r257915?) [ Mac ] accessibility/accessibility-node-memory-management.html is flaky failing.
        https://bugs.webkit.org/show_bug.cgi?id=208930

        Reviewed by Chris Fleizach.

        Test: accessibility/accessibility-node-memory-management.html

        In some cases, such as the empty canvas in this test, the algorithm in
        AXIsolatedTree::updateChildren to only update the children that are
        added or removed does not work. In those cases, fallback to updating
        the entire subtree.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateChildren):

2020-07-13  Keith Miller  <keith_miller@apple.com>

        ScriptController needs to SetForScope m_sourceURL after Refing its Frame
        https://bugs.webkit.org/show_bug.cgi?id=214276

        Reviewed by Chris Dumez.

        The SetForScopes in ScriptController need to be constructed after the
        Frame is retained otherwise the Ref to the frame may be destroyed
        before m_sourceURL is restored. Since the Frame owns the ScriptController
        we end up writing the SourceURL after the ScriptController has been freed.

        No new tests because my recent code change already caused ASAN failures.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::callInWorld):

2020-07-13  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, re-landing r264242 with crash fixed.

        Re-landed changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):

2020-07-13  Eric Carlson  <eric.carlson@apple.com>

        Impossible to pause playback of MediaStream video track
        https://bugs.webkit.org/show_bug.cgi?id=214262
        <rdar://problem/65483729>

        Reviewed by Jer Noble.

        These changes were tested manually because they don't change the behavior when
        snapshotting or rendering to canvas.

        * platform/graphics/avfoundation/SampleBufferDisplayLayer.h: Add pure virtual play
        and pause methods.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        (WebCore::LocalSampleBufferDisplayLayer::play): New, toggle m_paused.
        (WebCore::LocalSampleBufferDisplayLayer::pause): Ditto.
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample): Return early if paused.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers): Pause the display
        layer if necessary.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Start display layer.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Pause display layer.

2020-07-13  Sam Weinig  <weinig@apple.com>

        Replace single argument makeSimpleColor uses with their implementation
        https://bugs.webkit.org/show_bug.cgi?id=214240

        Reviewed by Darin Adler.

        Remove makeSimpleColor overloads that took SRGBA<uint8_t> and SRGBA<float>:
        - makeSimpleColor(SRGBA<uint8_t>) was a no-op, so is replaced with nothing.
        - makeSimpleColor(SRGBA<float>) is replaced by the function it called, convertToComponentBytes().

        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::isEquivalent const):
        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        * platform/graphics/SimpleColor.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeSimpleColorFromARGBCFArray):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        (WebCore::colorFromNSColor):
        (WebCore::semanticColorFromNSColor):
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::brushWithColor):
        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromUIColor):

2020-07-13  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation does not observe manipulated text after update
        https://bugs.webkit.org/show_bug.cgi?id=213318
        <rdar://problem/63766703>

        Reviewed by Geoffrey Garen.

        Make TextManipulationController be aware of content replacement on Text and extract the new content.

        Test: TextManipulation.CompleteTextManipulationForManipulatedTextWithNewContent

        * dom/CharacterData.h:
        * dom/Text.cpp:
        (WebCore::Text::setDataAndUpdate):
        * dom/Text.h:
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::didCreateRendererForElement):
        (WebCore::TextManipulationController::didUpdateContentForText):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        * editing/TextManipulationController.h:
        * editing/markup.cpp:

2020-07-13  Keith Miller  <keith_miller@apple.com>

        Clean up SourceProvider and add caller relative load script to jsc.cpp
        https://bugs.webkit.org/show_bug.cgi?id=214205

        Reviewed by Yusuke Suzuki.

        Refactor WebCore <-> JSC binding layer now that JSC uses WTF::URLs
        for SourceOrigins.

        Also, improve module loading error messages to include the
        specifier and referrer when producing errors around bare-name
        specifiers.

        New error message behavior is already tested so existing tests
        have been updated.

        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::sourceURL const):
        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::JSLazyEventListener::JSLazyEventListener):
        (WebCore::JSLazyEventListener::initializeJSFunction const):
        (WebCore::JSLazyEventListener::create):
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::callInWorld):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::sourceURL const):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::resolveModuleSpecifier):
        (WebCore::rejectPromise):
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::url const):

2020-07-13  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Discard PTS-less samples
        https://bugs.webkit.org/show_bug.cgi?id=214252

        Reviewed by Philippe Normand.

        In some cases GStreamer demuxers emit PTS-less samples with metadata
        at the beginning of the container. These are fortunately not necessary
        for playback, and in fact incompatible with the way MSE works, where
        you should be able to start playing a stream from the middle.

        This patch skips these frames in the AppendPipeline so they don't
        pollute other parts of the MSE codebase.

        Since these frames were not necessary and were later overwritten,
        this patch is just a cleanup introducing no notable behavior changes.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample):

2020-07-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK4] Form controls are not painted when using threaded rendering
        https://bugs.webkit.org/show_bug.cgi?id=214178

        Reviewed by Žan Doberšek.

        Which is the default for GTK4 since r263888. The problem is that RenderTheme::paint() returns early if the given
        GraphicsContext doesn't have a platform context, assuming all RenderTheme implementations paint directly to the
        platform context. This patch adds a pure virtual canPaint() to RenderTheme to be used as the early return.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeAdwaita.h:
        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::canPaint const):
        * rendering/RenderThemePlayStation.h:
        * rendering/RenderThemeWin.h:

2020-07-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Unreviewed, remove private debug code

        When I landed the OpenCDM code I accidentally landed a couple of
        things that were internal debug that is not useful upstream.

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

2020-07-12  Darin Adler  <darin@apple.com>

        Some further streamlining of Gradient handling code
        https://bugs.webkit.org/show_bug.cgi?id=214239

        Reviewed by Sam Weinig.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::interpolateColorStop): Deleted.
        (WebCore::createConic): Rewrite the interpolation code to create a new
        vector rather than edit the existing one and to use a more straightforward
        idiom, and a lambda rather than a helper function. Also removed an explicit
        conversion to Gradient::ColorStop, no longer needed because of the overload
        added to Vector::insert.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource): Use ensure rather
        than add to initialize gradient data in the gradient map. Change the #if
        for USE(CG) so it doesn't confuse brace matching from the syntax handling
        of text editors like the one in Xcode. Update for the changes to the
        buildGradient and gradientTransform functions. Use auto a bit more.
        (WebCore::RenderSVGResourceGradient::postApplyResource): Update since the
        map now contains GradientData rather than unique_ptr<GradientData>. Use
        std::exchange when fetching m_savedContext and a local variable to make
        the gradient-related code a bit less wordy.
        (WebCore::RenderSVGResourceGradient::addStops): Updated to take Gradient&
        rather than GradientData* and made this a static member function.
        (WebCore::RenderSVGResourceGradient::platformSpreadMethodFromSVGType):
        Made this a static member function.

        * rendering/svg/RenderSVGResourceGradient.h: Made more functions private.
        Converted addStops and platformSpreadMethodFromSVGType to static member
        functions. Made GradientData a member class, and put directly into the
        HashMap rather than putting unique_ptr into the map. Changed
        calculateGradientTransform to gradientTransform, which uses a return
        value rather than an out argument. Changed buildGradient to return
        Ref<Gradient> rather than taking a GradientData* to store it in.

        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        Changed to return the gradient instead of modifying an argument and
        updated for the change to addStops.

        * rendering/svg/RenderSVGResourceLinearGradient.h: Made more functions
        private and updated for changes to gradientTransform and buildGradient.

        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):
        Changed to return the gradient instead of modifying an argument and
        updated for the change to addStops.

        * rendering/svg/RenderSVGResourceRadialGradient.h: Made more functions
        private and updated for changes to gradientTransform and buildGradient.

        * svg/GradientAttributes.h: Removed the stopsSet boolean since
        the stops vector is empty if and only if it's not set. Made the setStops
        function take an rvalue reference so it doesn't always copy a vector.
        Also use the ColorStopVector type, sharing the same inline capacity
        policy with the Gradient class; both are optimizing the same thing.

        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops): Use the ColorStopVector type.
        * svg/SVGGradientElement.h: Update for the above.

        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes): Update for changes to buildStops and
        removed an unnecessary check for an empty vector now that an empty
        vector has the same semantics as "no stops".
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes): Ditto.

2020-07-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][Clang] Unreviewed build fix for r264272
        https://bugs.webkit.org/show_bug.cgi?id=214204
        <rdar://problem/65414170>

        clang-cl reported:

        > ..\..\Source\WebCore\platform\graphics/ColorUtilities.h(200,26): error: no template named 'ComponentTraits'
        >     constexpr auto min = ComponentTraits<typename ColorType::ComponentType>::minValue;
        >                          ^

        * platform/graphics/ColorUtilities.cpp: Removed #include "ColorTypes.h".
        * platform/graphics/ColorUtilities.h: Added #include "ColorTypes.h".

2020-07-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS]: A HEIF image, selected from the OpenPanel, should be converted to an accepted MIME type
        https://bugs.webkit.org/show_bug.cgi?id=213347
        <rdar://problem/57258464>

        Reviewed by Darin Adler.

        Tests: fast/forms/file/entries-api/image-no-transcode-open-panel.html
               fast/forms/file/entries-api/image-transcode-open-panel.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::allowedMIMETypes):
        Make sure this function returns lowercase MIME types.

        * platform/MIMETypeRegistry.h:
        * platform/graphics/NativeImage.h:
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::drawNativeImage):

2020-07-12  Sam Weinig  <weinig@apple.com>

        Tidy up color usage in accessibility code
        https://bugs.webkit.org/show_bug.cgi?id=214226

        Reviewed by Darin Adler.

        Rather than passing around r, g, b components as out-parameters,
        use SRGBA<uint8_t> return values.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetText):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::colorValue const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2020-07-12  Rob Buis  <rbuis@igalia.com>

        Improve IPv6 detection when setting host/hostname
        https://bugs.webkit.org/show_bug.cgi?id=214218

        Reviewed by Darin Adler.

        Improve IPv6 detection when setting host/hostname by checking for '[' and ']' as
        well as using reverse find for ':' separators, to ensure we are not finding a
        separator within the IPv6 section of the url.

        Behavior matches Chrome and Firefox.

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):

2020-07-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC][Min-Max width] Regular block level box resets the horizontal stacking
        https://bugs.webkit.org/show_bug.cgi?id=214225

        Reviewed by Antti Koivisto.

        Non-floating block level boxes reset the current horizontal float stacking.
        e.g. with a shrink-to-fit width container:
        <div style="float: left; width: 10px;"></div>
        <div></div>
        <div style="float: left; width: 40px;"></div>
        will produce a max width of 40px which makes the floats vertically stacked.

        Test: fast/layoutformattingcontext/min-max-content-width-with-nested-floats-simple.html

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

2020-07-12  Darin Adler  <darin@apple.com>

        Simplify and improve Gradient, some other small color-related removals
        https://bugs.webkit.org/show_bug.cgi?id=214221

        Reviewed by Sam Weinig.

        * css/CSSGradientValue.cpp: Removed some unneeded includes.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::currentColor): Deleted.
        (WebCore::ColorInputType::shouldShowSuggestions const): Deleted.
        * html/ColorInputType.h: Updated for the above.

        * html/HTMLDocument.cpp: Removed unneeded include of HashTools.h.

        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::create): Moved these functions out of the
        header since inlining should be the same or better with them here.
        (WebCore::CanvasGradient::~CanvasGradient): Moved this out of the
        header so we don't need to include Gradient.h in the header.
        (WebCore::CanvasGradient::addColorStop): Updated for change to
        Gradient::addColorStop and move Color rather than copying it.

        * html/canvas/CanvasGradient.h: Removed include of Gradient.h.
        Moved things out of the header to make that work.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient): Removed
        use of Gradient::type and instead unify the type string code with
        the code that interprets the data for the different types.

        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle): Refactored
        to eliminate the multiple redundant code paths, otherwising leaving
        the logic unchanged.

        * platform/ColorChooserClient.h: Remove unneeded includes and unused
        currentColor and shouldShowSuggestions functions.

        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::create): Replaced create functions that take
        type-specific data structure with one that takes the variant Data.
        (WebCore::Gradient::Gradient): Ditto. Also removed platformInit.
        (WebCore::Gradient::~Gradient): Removed platformDestroy.
        (WebCore::Gradient::type const): Deleted.
        (WebCore::Gradient::addColorStop): Take an rvalue reference to cut down
        a little bit on reference count churn. Replaced the platformDestroy
        function with a new stopsChanged function. Removed an unneeded overload
        that takes the two parts of a ColorStop separately.
        (WebCore::Gradient::setSortedColorStops): Use stopsChanged.
        (WebCore::Gradient::sortStops const): Simplify a bit, using a lambda.
        Also gave this a shorter name; it still optimizes by not sorting if
        the vector is already sorted.
        (WebCore::Gradient::hasAlpha const): Deleted.
        (WebCore::Gradient::setSpreadMethod): Removed some slightly overzealous
        code checking this isn't used after creating the platform-specific gradient.
        Decided not to bother with this for now.
        (WebCore::Gradient::setGradientSpaceTransform): Tweaked formatting.
        (WebCore::add): Added overloads to add(Hasher&) so we can use computeHash.
        (WebCore::Gradient::hash const): Use computeHash instead of hashMemory.

        * platform/graphics/Gradient.h: Use RetainPtr, COMPtr, and RefPtr instead
        of manually managing the lifetimes of the platform-specific underlying
        gradient objects. Also removed the unhelpful PlatformGradient type. This
        pattern, all too common in our platform library, provides no useful
        abstraction here. Removed unneeded constructors from ColorStop.
        Updated for changes above. Added platform-specific functions createBrush,
        createPattern, and createCGGradient. Simplify encoding and decoding by
        taking advantage of the support for encoding/decoding variants.
        Remove the enum Gradient::Type entirely. Removed the invalidateHash
        function because it's only used in a few setters and setting the hash
        to 0 is a fine way to write it there.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContextState::GraphicsContextState): Moved here from
        the header so we don't need to include Gradient.h in the header.
        (WebCore::GraphicsContextState::~GraphicsContextState): Ditto.
        (WebCore::GraphicsContextState::operator=): Ditto.

        * platform/graphics/GraphicsContext.h: Removed include of Gradient.h.
        Moved things out of the header to make that work.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::FillSource::FillSource): Use createPattern instead of
        createPlatformGradient.
        (WebCore::Cairo::StrokeSource::StrokeSource): Ditto.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::stopsChanged): Renamed from platformDestroy.
        (WebCore::interpolateColorStop): Rewrote to use existing blend functions.
        (WebCore::createConic): Changed return type to RefPtr. Tweaked to match
        WebKit coding style a bit better, use auto, use Vector::first/last, and
        updated for removal of the Gradient::ColorStop constructor.
        (WebCore::Gradient::createPattern): Renamed from createPlatformGradient.
        Changed to return a RefPtr instead of a raw pointer the caller needs to
        adopt at each call site. Refactored so it no longer uses Gradient::type.
        (WebCore::Gradient::fill): Use createPattern.
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::fillRect): Ditto.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::stopsChanged): Renamed from platformDestroy, and
        simplified implementation now that we use RetainPtr.
        (WebCore::Gradient::createCGGradient): Renamed from platformGradient,
        got rid of the return value, and made it caller responsibility to only
        call this when a gradeitn needs to be allocated.
        (WebCore::Gradient::paint): Updated to use the above.

        * platform/graphics/cg/GraphicsContextCG.cpp: Add include of Gradient.h.

        * platform/graphics/displaylists/DisplayListItems.h:
        Added include of Gradient.h since the function templates in this file
        encode and decode gradients.

        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::fillRect): Use createPattern.

        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::FillSource::FillSource): Use createBrush
        (WebCore::Direct2D::StrokeSource::StrokeSource): Ditto.

        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::stopsChanged): Renamed from platformDestroy and
        simplified implementation now that we use COMPtr.
        (WebCore::Gradient::platformGradient): Deleted.
        (WebCore::Gradient::createPlatformGradientIfNecessary): Deleted.
        (WebCore::Gradient::createBrush): Renamed from generateGradient and
        added a return value. Simplified now that we use COMPtr, optimized
        the code a bit, and added some FIXME about mistakes I noticed.
        (WebCore::Gradient::fill): Use createBrush and m_brush.
        * platform/graphics/win/GraphicsContextImplDirect2D.cpp:
        (WebCore::GraphicsContextImplDirect2D::fillRect): Use createBrush.

        * platform/mac/ScrollAnimatorMac.mm: Added include of Gradient.h.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar): Updated for changes to
        addColorStop. Also remove a lot of unnecessary conversion from float
        to double and back to float.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::addStops): Update to make
        and move a new color stop instead of copying it, modifying it in
        place, and then copying it again.
        * rendering/svg/RenderSVGResourceGradient.cpp: Removed include of
        Gradient.h.

        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::buildStops): Use std::clamp to convert
        the offsets into monotonically increasing ones in a more direct way,
        using variable names instead of comments to clarify what we are doing.

2020-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix GTK debian builds

        Include <functional> in ExtendedColor.h since it uses std::invoke.

        * platform/graphics/ExtendedColor.h:

2020-07-11  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Conic gradients support
        https://bugs.webkit.org/show_bug.cgi?id=214216

        Reviewed by Sam Weinig.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::addConicSector): Replaced M_PI with piDouble of WTF.
        (WebCore::Gradient::createPlatformGradient): Don't use C++20 designated initializers.

2020-07-11  Sam Weinig  <weinig@apple.com>

        Reduce surface area of the ExtendedColor class to a bare minimum
        https://bugs.webkit.org/show_bug.cgi?id=214204

        Reviewed by Darin Adler.

        - Add helper function to Color to operate on the underlying color type
          and reimplement a bunch of functionality using it, reducing the need
          for duplicate implementations in ExtendedColor.
        - Add constructors to Color that take extended color types, replacing
          the makeExtendedColor helper function. 

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove ExtenedColor.cpp

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):
        Use new Color constructor taking ColorComponents and ColorSpace.

        * platform/graphics/Color.cpp:
        (WebCore::Color::colorWithAlpha const): Reimpliment using callOnUnderlyingType.
        (WebCore::Color::invertedColorWithAlpha const): Reimpliment using callOnUnderlyingType.
        * platform/graphics/Color.h:
        (WebCore::Color::Color):  
        (WebCore::Color::hash const):
        (WebCore::Color::callOnUnderlyingType const):
        (WebCore::Color::toSRGBALossy const):
        (WebCore::Color::setColor):
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        - Add new constructors taking extended color types: SRGBA<float>, LinearSRGBA<float> and DiplayP3<float>.
        - Add new function, callOnUnderlyingType, to make working with any underlying type more streamlined.

        * platform/graphics/ColorConversion.h:
        (WebCore::toSRGBA):
        (WebCore::toLinearSRGBA):
        (WebCore::toDisplayP3):
        (WebCore::toLinearDisplayP3):
        (WebCore::toHSLA):
        Add identity conversion functions to make implementing generic functions like Color::toSRGBALossy more
        straigtforward.

        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serialization):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        * platform/graphics/ColorSerialization.h:
        Replace serialization of the ExtendedColor type itself, with serialization for the underlying color
        types. Use callOnUnderlyingType to dispatch to the right one.

        * platform/graphics/ColorTypes.h:
        - Adds ComponentTraits struct to get information like min/max value of the component types.
        - Adds `using ComponentType = T;` to each color type, to allow easy access to the type in
          deduced contexts.
        - Adds static constexpr ColorSpace to each color type that currently has a ColorSpace mapping. 

        * platform/graphics/ColorUtilities.h:
        (WebCore::isBlack):
        (WebCore::isWhite):
        Add helpers to implement Color::isBlack/Color::isWhiteColor for each color type.

        * platform/graphics/ExtendedColor.cpp: Removed.
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::create):
        (WebCore::ExtendedColor::ExtendedColor):
        (WebCore::ExtendedColor::callOnUnderlyingType const):
        (WebCore::ExtendedColor::toSRGBALossy const): Deleted.
        Reduce down to just construction, member access and the callOnUnderlyingType helper.
        In future revisions, ExtendedColor should be converted to an internal class of Color.

        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::Color):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::Color):
        Update to use constructor delegation.

2020-07-11  Darin Adler  <darin@apple.com>

        Remove live ranges from AccessibilityObject.h, AccessibilityObjectInterface.h, AccessibilityRenderObject.h, AXIsolatedObject.h
        https://bugs.webkit.org/show_bug.cgi?id=214215

        Reviewed by Sam Weinig.

        Also use the IntPoint and LayoutPoint center() functions instead of rolling our own.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::misspellingRange const): Return SimpleRange. Also
        renamed from getMisspellingRange.
        (WebCore::rangeClosestToRange): Take and return SimpleRange.
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const): Ditto.
        (WebCore::AccessibilityObject::elementRange const): Return SimpleRange.
        (WebCore::AccessibilityObject::findTextRange const): Take and return SimpleRange.
        (WebCore::AccessibilityObject::findTextRanges const): Ditto.
        (WebCore::AccessibilityObject::performTextOperation): Use SimpleRange.
        (WebCore::AccessibilityObject::clickPoint): Use center().
        (WebCore::AccessibilityObject::rangeForPlainTextRange const): Return SimpleRange.
        (WebCore::AccessibilityObject::stringForRange const): Take SimpleRange.
        (WebCore::AccessibilityObject::stringForVisiblePositionRange): Use SimpleRange.
        (WebCore::AccessibilityObject::lengthForVisiblePositionRange const): Ditto.
        (WebCore::AccessibilityObject::replaceTextInRange): Use SimpleRange.
        * accessibility/AccessibilityObject.h: Update for above.

        * accessibility/AccessibilityObjectInterface.h: Take and return SimpleRange.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::linkClickPoint): Use SimpleRange.
        (WebCore::AccessibilityRenderObject::clickPoint): Ditto.
        (WebCore::AccessibilityRenderObject::setSelectedTextRange): Ditto.
        (WebCore::AccessibilityRenderObject::boundsForRange const): Take SimpleRange.
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange const):
        Use SimpleRange.
        (WebCore::AccessibilityRenderObject::doAXBoundsForRangeUsingCharacterOffset const):
        Use SimpleRange.
        * accessibility/AccessibilityRenderObject.h: Update for above.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp: Include Range.h.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper stringForTextMarkers:]): Use SimpleRange.
        (-[WebAccessibilityObjectWrapper textMarkerRange]): Ditto.
        (-[WebAccessibilityObjectWrapper stringForRange:]): Ditto.
        (-[WebAccessibilityObjectWrapper misspellingTextMarkerRange:forward:]): Ditto.
        (-[WebAccessibilityObjectWrapper frameForTextMarkers:]): Ditto.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::stringForRange const): Take SimpleRange.
        (WebCore::AXIsolatedObject::findTextRanges const): Return SimpleRange.
        * accessibility/isolatedtree/AXIsolatedObject.h: Update for above.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilityTextOperationForParameterizedAttribute): Use SimpleRange.
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForRange:]): Ditto.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Ditto.

        * dom/Range.cpp:
        (WebCore::makeSimpleRange): Added.
        * dom/Range.h: Added makeSimpleRange so we can explicitly convert from
        live ranges to simple ranges.

        * editing/Editing.cpp:
        (WebCore::indexForVisiblePosition): Use separate returns for start and end.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::offsetTo const): Ditto.
        (WebCore::TextCheckingParagraph::automaticReplacementStart const): Ditto.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded): Use center().

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

        REGRESSION(r260276): Overflow scrolling layers misplaced inside SVG foreign object
        https://bugs.webkit.org/show_bug.cgi?id=213788
        <rdar://problem/65039637>

        Reviewed by Zalan Bujtas.
        
        RenderLayers inside SVG <foreignObject> don't display correctly, so don't use
        accelerated overflow scroll (which requires layers) inside <foreignObject>.

        This reverts behavior to macOS Catalina behavior (i.e. as soon as the overflow
        becomes scrollable, rendering problems appear), and to pre-iOS 13 behavior.

        Test: fast/scrolling/overflow-inside-foreignobject.html

        * dom/Document.h:
        (WebCore::Document::mayHaveRenderedSVGForeignObjects const):
        (WebCore::Document::setMayHaveRenderedSVGForeignObjects):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::updateAncestorDependentState):
        (WebCore::RenderLayer::canUseCompositedScrolling const):
        * rendering/RenderLayer.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::createElementRenderer):

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

        [LFC][BFC][Min-Max width] Add support for float avoiders
        https://bugs.webkit.org/show_bug.cgi?id=214220

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/min-max-content-width-with-floats-simple.html

        Float avoiders (including the float boxes) with infinite constraint form a horizontal float stack.
        (This does not yet support clear property/non-direct children.)

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

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

        Unreviewed, reverting r264242.

        Caused many crashes on iOS bots

        Reverted changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

2020-07-10  Brady Eidson  <beidson@apple.com>

        Cleanup GameController framework button binding with some constants
        https://bugs.webkit.org/show_bug.cgi?id=214210

        Reviewed by Darin Adler.

        No new tests (No behavior change)

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad): Use named constants instead of magic numbers.

2020-07-10  Darin Adler  <darin@apple.com>

        Fix build for PLATFORM(IOS_FAMILY) && !ENABLE(REVEAL), for example, tvOS

        * editing/cocoa/DictionaryLookup.mm: Added include of "SimpleRange.h".

2020-07-10  Darin Adler  <darin@apple.com>

        Fix build for PLATFORM(IOS_FAMILY) && !ENABLE(REVEAL), for example, tvOS

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Update to return SimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.

2020-07-08  Darin Adler  <darin@apple.com>

        Remove live ranges from Document.h, AlternativeTextController.h, DictionaryLookup.h, and WebPage.h
        https://bugs.webkit.org/show_bug.cgi?id=214109

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::characterOffsetForPoint): Updated to call
        caretPositionFromPoint, internal function, instead of caretRangeFromPoint,
        public DOM function.

        * dom/Document.cpp:
        (WebCore::Document::Document): Changed documentClasses argument to DocumentClassFlags.
        (WebCore::Document::caretRangeFromPoint): Refactored so this calls createLiveRange,
        since it's a DOM function that returns a live range.
        (WebCore::Document::caretPositionFromPoint): Renamed so this is not just an overload
        and changed to return a BoundaryPoint rather than a live range.

        * dom/Document.h: Simplified forward declarations by getting rid of all the conditionals.
        Tweaked a few typedef things. Updated for the changes above.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::startAlternativeTextUITimer): Updated since
        m_rangeWithAlternative is an Optional<SimpleRange>.
        (WebCore::AlternativeTextController::stopAlternativeTextUITimer): Ditto.
        (WebCore::AlternativeTextController::applyPendingCorrection): Ditto.
        (WebCore::AlternativeTextController::hasPendingCorrection const): Ditto.
        (WebCore::AlternativeTextController::isSpellingMarkerAllowed const): Take SimpleRange.
        (WebCore::AlternativeTextController::show): Ditto.
        (WebCore::AlternativeTextController::applyAutocorrectionBeforeTypingIfAppropriate):
        Updated since m_rangeWithAlternative is an Optional<SimpleRange>.
        (WebCore::AlternativeTextController::timerFired): Ditto.
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult): Ditto.
        (WebCore::AlternativeTextController::markReversed): Take SimpleRange.
        (WebCore::AlternativeTextController::markCorrection): Ditto.
        (WebCore::AlternativeTextController::recordSpellcheckerResponseForModifiedCorrection): Ditto.
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult): Ditto.
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord): Use SimpleRange
        instead of a live range.
        (WebCore::AlternativeTextController::applyAlternativeTextToRange): Take SimpleRange.
        * editing/AlternativeTextController.h: Use SimpleRange instead of live ranges.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Return SimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.
        (WebCore::showPopupOrCreateAnimationController): Renamed type from RevealView to CocoaView.
        (WebCore::DictionaryLookup::showPopup): Ditto.
        * editing/mac/DictionaryLookup.h: Simplified header since it is included only from
        Objective-C files. Use SimpleRange instead of live ranges.

        * editing/mac/DictionaryLookupLegacy.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Return SimpleRange.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup): Updated
        since DictionaryLookup::rangeAtHitTestResult returns SimpleRange.
        (WebCore::autoscrollAdjustmentFactorForScreenBoundaries): Use constexpr instead of
        macros for constants.

        * testing/Internals.mm:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation): Updated
        since DictionaryLookup::rangeAtHitTestResult returns SimpleRange.
        (WebCore::Internals::encodedPreferenceValue): Removed unneeded error local, and
        fixed formatting.

2020-07-10  Brady Eidson  <beidson@apple.com>

        GameController.framework gamepads should support Home buttons.
        <rdar://problem/63500696> and https://bugs.webkit.org/show_bug.cgi?id=212933

        Reviewed by Tim Horton.

        No new tests (Cannot yet drive GameController framework directly in tests)

        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::homeButtonFromExtendedGamepad): Try a few different techniques of extracting the home button
          from a GCExtendedGamepad.
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad): If there's a home button, put it at button index 16,
          defined by the spec as "Center button in center cluster"
        * platform/gamepad/cocoa/GameControllerSoftLink.h:
        * platform/gamepad/cocoa/GameControllerSoftLink.mm:

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

        AX: Build failure for catalyst
        https://bugs.webkit.org/show_bug.cgi?id=214202
        <rdar://problem/65366125>

        Reviewed by Zalan Bujtas.

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

2020-07-10  Geoffrey Garen  <ggaren@apple.com>

        JSRunLoopTimer should use WTF::RunLoop rather than custom CF code
        https://bugs.webkit.org/show_bug.cgi?id=214102

        Reviewed by Darin Adler.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow): Supply a RunLoop at construction time since
        JSC requires that now.

2020-07-10  Guowei Yang  <guowei_yang@apple.com>

        Removing usage of "using namespace WebCore" from TextTrackRepresentationCocoa.mm
        https://bugs.webkit.org/show_bug.cgi?id=214196

        Reviewed by Tim Horton.

        The line "using namespace WebCore" will cause problems 
        when compiling unified source. Removing this line and 
        replace it with WebCore::prefix and namespace WebCore{ }
        to enclose C++ calls.

        No new tests are requied as this is a code style fix

        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm: removed usage 
          of "using namespace WebCore" to avoid future errors while compiling
        (-[WebCoreTextTrackRepresentationCocoaHelper initWithParent:]): added "WebCore::" prefix
        (-[WebCoreTextTrackRepresentationCocoaHelper setParent:]): ditto
        (-[WebCoreTextTrackRepresentationCocoaHelper parent]): ditto
        (TextTrackRepresentation::create): enclosed inside namespace WebCore{ }
        (TextTrackRepresentationCocoa::TextTrackRepresentationCocoa): Deleted. 
          enclosed inside namespace WebCore{ }
        (TextTrackRepresentationCocoa::~TextTrackRepresentationCocoa): ditto
        (TextTrackRepresentationCocoa::update): ditto
        (TextTrackRepresentationCocoa::setContentScale): ditto
        (TextTrackRepresentationCocoa::setHidden const): ditto
        (TextTrackRepresentationCocoa::bounds const): ditto
        (TextTrackRepresentationCocoa::boundsChanged): ditto

2020-07-10  Peng Liu  <peng.liu6@apple.com>

        MobileSafari rotates its scene to portrait upside down if it has a PiP on screen
        https://bugs.webkit.org/show_bug.cgi?id=214169

        Reviewed by Jer Noble.

        The UIViewController for video fullscreen/picture-in-picture should not ignore
        the App's supported orientations when the video element is in picture-in-picture.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::doSetup):

2020-07-10  Don Olmstead  <don.olmstead@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] WOFF2 font support
        https://bugs.webkit.org/show_bug.cgi?id=214174

        Reviewed by Per Arne Vollan.

        * PlatformWinCairo.cmake: Added additional libraries for static WOFF2 library to WebCore_LIBRARIES.
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added woff2.

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

        AX: iOS VoiceOver should support definition lists
        https://bugs.webkit.org/show_bug.cgi?id=210214
        <rdar://problem/61478299>

        Reviewed by Darin Adler.

        Expose bits to make definition lists accessibility on iOS.

        Test: accessibility/ios-simulator/definition-list.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityDescriptionListAncestor]):
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListTerm]):
        (-[WebAccessibilityObjectWrapper accessibilityIsInDescriptionListDefinition]):

2020-07-10  Brady Eidson  <beidson@apple.com>

        Limit MultiGamepadProvider to Catalina and Big Sur.
        https://bugs.webkit.org/show_bug.cgi?id=214190

        Unreviewed build fix.

        * platform/gamepad/cocoa/GameControllerSPI.h:
        * platform/gamepad/cocoa/GameControllerSoftLink.h:
        * platform/gamepad/cocoa/GameControllerSoftLink.mm:
        * platform/gamepad/mac/HIDGamepadProvider.mm:
        (WebCore::HIDGamepadProvider::deviceAdded):
        * platform/gamepad/mac/MultiGamepadProvider.h:
        * platform/gamepad/mac/MultiGamepadProvider.mm:

2020-07-10  Sam Weinig  <weinig@apple.com>

        Part 4 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=214158

        Reviewed by Darin Adler.

        Removes SimpleColor!
        
        Alas, makeSimpleColor() remains for now, seeking a new name in a follow up.

        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::SimpleColor): Deleted.
        (WebCore::SimpleColor::alphaComponent const): Deleted.
        (WebCore::SimpleColor::alphaComponentAsFloat const): Deleted.
        (WebCore::SimpleColor::isOpaque const): Deleted.
        (WebCore::SimpleColor::isVisible const): Deleted.
        (WebCore::SimpleColor::colorWithAlpha const): Deleted.
        (WebCore::SimpleColor::invertedColorWithAlpha const): Deleted.
        (WebCore::SimpleColor::asSRGBA const): Deleted.
        (WebCore::SimpleColor::get const): Deleted.
        (): Deleted.
        (WebCore::operator==): Deleted.
        (WebCore::operator!=): Deleted.
        Remove the SimpleColor class.  

        * platform/graphics/Color.cpp:
        (WebCore::Color::operator=):
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::invertedColorWithAlpha const):
        (WebCore::Color::colorSpaceAndComponents const):
        * platform/graphics/Color.h:
        (WebCore::Color::isHashTableDeletedValue const):
        (WebCore::Color::isValid const):
        (WebCore::Color::isSemantic const):
        (WebCore::Color::isOpaque const):
        (WebCore::Color::isVisible const):
        (WebCore::Color::alpha const):
        (WebCore::Color::alphaAsFloat const):
        (WebCore::Color::isExtended const):
        (WebCore::Color::isInline const):
        (WebCore::Color::tagAsSemantic):
        (WebCore::Color::tagAsValid):
        (WebCore::operator==):
        (WebCore::equalIgnoringSemanticColor):
        (WebCore::Color::Color):
        (WebCore::Color::~Color):
        (WebCore::Color::hash const):
        (WebCore::Color::toSRGBALossy const):
        (WebCore::Color::asInline const):
        (WebCore::Color::setInlineColor):
        (WebCore::Color::setExtendedColor):
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        (WebCore::Color::encode const):
        (WebCore::Color::isSimple const): Deleted.
        (WebCore::Color::asSimple const): Deleted.
        (WebCore::Color::setSimpleColor): Deleted.
        - Rename existing uses of Simple with Inline, denoting the inline SRGBA<uint8_t>.
        - Move multiline functions out of line in the header.
        - Adds new constructor functions taking Optional<SRGBA<uint8_t>> to make Color(CGColorRef)
          constructors more straightforward.
        - Replaces uses of SimpleColor's interface with use of ColorUtilities.h helpers. e.g.
          Color::invertedColorWithAlpha() now uses the new invertedColorWithOverridenAlpha()
          helper function. Use of these utilities will be expanded to ExtendedColor in a follow
          up, allowing us to have just one implementation of these algorithms.
        
        * platform/graphics/ColorSerialization.cpp:
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        * platform/graphics/ColorSerialization.h:
        Replace serialization of SimpleColor with serialization of SRGBA<uint8_t>.
        
        * platform/graphics/ColorTypes.h:
        (WebCore::forEachNonAlphaComponent): Deleted.
        Removed forEachNonAlphaComponent. Uses replaced by new colorByModifingEachNonAlphaComponent
        function in ColorUtilities.h

        * platform/graphics/ColorUtilities.h:
        (WebCore::colorByModifingEachNonAlphaComponent):
        (WebCore::convertComponentByteTo<uint8_t>):
        (WebCore::convertComponentByteTo<float>):
        (WebCore::convertComponentFloatTo<uint8_t>):
        (WebCore::convertComponentFloatTo<float>):
        (WebCore::colorWithOverridenAlpha):
        (WebCore::invertComponent):
        (WebCore::invertedColorWithOverridenAlpha):
        Added heplers to implement color mutation behaviors.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeSimpleColorFromCGColor):
        (WebCore::Color::Color):
        (WebCore::cachedCGColor):
        Switch makeSimpleColorFromCGColor to return an Optional<SRGBA<uint8_t>> to streamline
        the constructors. Update to use is/asInline functions.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        Update to use is/asInline functions.
        
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        Switch to using colorByModifingEachNonAlphaComponent().

2020-07-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Unreviewed, prospective API test bot fix...

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setVolume): I suppose changing the audio volume to 0 wasn't intended :)

2020-07-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, remove debug printf after r264219.

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

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

        [LFC][Floats] Normal flow element that establishes a new block formatting context must not overlap the margin box of any floats
        https://bugs.webkit.org/show_bug.cgi?id=214185

        Reviewed by Antti Koivisto.

        BFCs in general should avoid floats. This code was confusing the cases where the block container box (not necessarily a BFC) establishes an IFC.
          <div>The div establishes an IFC only. It should not avoid floats.</div> 
          <div style="overflow: hidden">The div establishes both a new BFC and an IFC. It should avoid floats.</div>

        Test: fast/layoutformattingcontext/float-avoider-with-inline-content.html

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isFloatAvoider const):

2020-07-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][EME][OpenCDM] Implement OpenCDM support
        https://bugs.webkit.org/show_bug.cgi?id=213550

        Reviewed by Philippe Normand.

        Implemented the OpenCDM support in the CDMOpenCDM and
        CDMProxyOpenCDM related classes. CDMOpenCDM classes check for
        Widevine support in OpenCDM and glues the JavaScript API to the
        OpenCDM/Thunder framework. Building this is optional and --opencdm
        parameter needs to be passed to build-webkit to get it.

        CDMProxy related needed changes because of several reasons. First
        is that Key was considering only a Vector<uint8_t> as a type and
        OpenCDM has session objects. Key is also renamed to KeyHandle as
        this name reflects in a better way the purpose of the class. This
        bleeds out to all CDMProxy related classes. CDMInstanceSessionProxy
        gets support to remove itself from the CDMSessionProxy.

        Regarding ClearKey, we adapt the changes to the CDMProxy classes
        and de-cable protection system from the decryptors as the OpenCDM
        decryptor could handle more than one system.

        No new tests. YouTube TV 2019 tests are green.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/GStreamer.cmake:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::dataAsUInt8Ptr const):
        * platform/SharedBuffer.h:
        * platform/encryptedmedia/CDMInstance.h:
        * platform/encryptedmedia/CDMOpenCDMTypes.h: Copied from Source/WebCore/platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp.
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::KeyHandle::idAsString const):
        (WebCore::KeyHandle::takeValueIfDifferent):
        (WebCore::KeyStore::containsKeyID const):
        (WebCore::KeyStore::merge):
        (WebCore::KeyStore::allKeysAs const):
        (WebCore::KeyStore::addKeys):
        (WebCore::KeyStore::add):
        (WebCore::KeyStore::remove):
        (WebCore::KeyStore::keyHandle const):
        (WebCore::CDMProxy::keyHandle const):
        (WebCore::CDMProxy::tryWaitForKeyHandle const):
        (WebCore::CDMProxy::keyAvailableUnlocked const):
        (WebCore::CDMProxy::keyAvailable const):
        (WebCore::CDMProxy::getOrWaitForKeyHandle const):
        (WebCore::CDMProxy::getOrWaitForKeyValue const):
        (WebCore::CDMInstanceSessionProxy::CDMInstanceSessionProxy):
        (WebCore::CDMInstanceSessionProxy::removeFromInstanceProxy):
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::KeyHandle::create):
        (WebCore::KeyHandle::id const):
        (WebCore::KeyHandle::value const):
        (WebCore::KeyHandle::value):
        (WebCore::KeyHandle::isStatusCurrentlyValid):
        (WebCore::KeyHandle::operator==):
        (WebCore::KeyHandle::operator<):
        (WebCore::KeyHandle::KeyHandle):
        (WebCore::KeyStore::isEmpty const):
        (WebCore::CDMProxy::instance const):
        (WebCore::CDMInstanceSessionProxy::releaseDecryptionResources):
        (WebCore::CDMInstanceSessionProxy::cdmInstanceProxy const):
        (WebCore::CDMInstanceProxy::proxy const):
        (WebCore::CDMInstanceProxy::removeSession):
        * platform/encryptedmedia/CDMUtilities.cpp: Copied from Source/WebCore/platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp.
        (WebCore::CDMUtilities::parseJSONObject):
        * platform/encryptedmedia/CDMUtilities.h: Copied from Source/WebCore/platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp.
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::parseLicenseFormat):
        (WebCore::CDMPrivateClearKey::supportsInitData const):
        (WebCore::CDMPrivateClearKey::sanitizeResponse const):
        (WebCore::CDMInstanceSessionClearKey::updateLicense):
        (WebCore::CDMInstanceSessionClearKey::removeSessionData):
        (WebCore::CDMInstanceSessionClearKey::parentInstance const):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::isOpenCDMRanked):
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::GstMappedBuffer::createVector):
        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::waitForCDMAttachment):
        * platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp:
        (WebCore::CDMFactory::platformRegisterFactories):
        * platform/graphics/gstreamer/eme/CDMOpenCDM.cpp: Added.
        (openCDMLicenseType):
        (WebCore::initDataMD5):
        (WebCore::sessionLoadFailureFromOpenCDM):
        (WebCore::OpenCDM::destructOpenCDMSession):
        (WebCore::OpenCDM::createSharedOpenCDMSession):
        (WebCore::CDMFactoryOpenCDM::singleton):
        (WebCore::CDMFactoryOpenCDM::createCDM):
        (WebCore::CDMFactoryOpenCDM::createCDMProxy):
        (WebCore::CDMFactoryOpenCDM::supportedKeySystems const):
        (WebCore::CDMFactoryOpenCDM::supportsKeySystem):
        (WebCore::CDMPrivateOpenCDM::supportedInitDataTypes const):
        (WebCore::CDMPrivateOpenCDM::supportsConfiguration const):
        (WebCore::CDMPrivateOpenCDM::supportedRobustnesses const):
        (WebCore::CDMPrivateOpenCDM::distinctiveIdentifiersRequirement const):
        (WebCore::CDMPrivateOpenCDM::persistentStateRequirement const):
        (WebCore::CDMPrivateOpenCDM::distinctiveIdentifiersAreUniquePerOriginAndClearable const):
        (WebCore::CDMPrivateOpenCDM::createInstance):
        (WebCore::CDMPrivateOpenCDM::loadAndInitialize):
        (WebCore::CDMPrivateOpenCDM::supportsServerCertificates const):
        (WebCore::CDMPrivateOpenCDM::supportsSessions const):
        (WebCore::CDMPrivateOpenCDM::supportsInitData const):
        (WebCore::CDMPrivateOpenCDM::sanitizeResponse const):
        (WebCore::CDMPrivateOpenCDM::sanitizeSessionId const):
        (WebCore::CDMInstanceOpenCDM::CDMInstanceOpenCDM):
        (WebCore::CDMInstanceOpenCDM::initializeWithConfiguration):
        (WebCore::CDMInstanceOpenCDM::setServerCertificate):
        (WebCore::CDMInstanceOpenCDM::setStorageDirectory):
        (WebCore::CDMInstanceSessionOpenCDM::CDMInstanceSessionOpenCDM):
        (WebCore::CDMInstanceOpenCDM::createSession):
        (WebCore::ParsedResponseMessage::ParsedResponseMessage):
        (WebCore::ParsedResponseMessage::hasPayload const):
        (WebCore::ParsedResponseMessage::payload const):
        (WebCore::ParsedResponseMessage::payload):
        (WebCore::ParsedResponseMessage::hasType const):
        (WebCore::ParsedResponseMessage::type const):
        (WebCore::ParsedResponseMessage::typeOr const):
        (WebCore::CDMInstanceSessionOpenCDM::challengeGeneratedCallback):
        (WebCore::toString):
        (WebCore::CDMInstanceSessionOpenCDM::status const):
        (WebCore::CDMInstanceSessionOpenCDM::keyUpdatedCallback):
        (WebCore::CDMInstanceSessionOpenCDM::keysUpdateDoneCallback):
        (WebCore::CDMInstanceSessionOpenCDM::errorCallback):
        (WebCore::CDMInstanceSessionOpenCDM::requestLicense):
        (WebCore::CDMInstanceSessionOpenCDM::sessionFailure):
        (WebCore::CDMInstanceSessionOpenCDM::updateLicense):
        (WebCore::CDMInstanceSessionOpenCDM::loadSession):
        (WebCore::CDMInstanceSessionOpenCDM::closeSession):
        (WebCore::CDMInstanceSessionOpenCDM::removeSessionData):
        (WebCore::CDMInstanceSessionOpenCDM::storeRecordOfKeyUsage):
        (WebCore:: const):
        * platform/graphics/gstreamer/eme/CDMOpenCDM.h: Added.
        (WebCore::OpenCDM::OpenCDMSystemDeleter::operator() const):
        (WebCore::OpenCDM::OpenCDMSessionDeleter::operator() const):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::cencSetDecryptionKey):
        * platform/graphics/gstreamer/eme/CDMProxyOpenCDM.cpp: Added.
        (WebCore::CDMProxyOpenCDM::getDecryptionSession const):
        (WebCore::CDMProxyOpenCDM::decrypt):
        * platform/graphics/gstreamer/eme/CDMProxyOpenCDM.h: Copied from Source/WebCore/platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::InitData::InitData):
        (WebCore::InitData::payload const):
        (WebCore::GStreamerEMEUtilities::isWidevineKeySystem):
        (WebCore::GStreamerEMEUtilities::keySystemToUuid):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webkit_media_clear_key_decrypt_class_init):
        (protectionSystemId):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (transformCaps):
        (transformInPlace):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:
        * platform/graphics/gstreamer/eme/WebKitOpenCDMDecryptorGStreamer.cpp: Added.
        (webkit_media_opencdm_decrypt_class_init):
        (webkit_media_opencdm_decrypt_init):
        (finalize):
        (protectionSystemId):
        (cdmProxyAttached):
        (decrypt):
        * platform/graphics/gstreamer/eme/WebKitOpenCDMDecryptorGStreamer.h: Added.

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

        [LFC][TreeConstruction] Create block level container for unsupported renderer
        https://bugs.webkit.org/show_bug.cgi?id=214182

        Reviewed by Antti Koivisto.

        It makes full LFC rendering on random pages less crashy.

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

2020-07-02  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Retrieve WebGL framebuffer resolution from XR devices
        https://bugs.webkit.org/show_bug.cgi?id=213886

        Reviewed by Carlos Garcia Campos.

        The recommended WebGL framebuffer resolution should be retrieved from the actual XR device being used.
        Implemented the OpenXR machinery to retrieve it from the XR system. We are also moving the methods that
        call the platform code to the XRSession as specs define, instead of having them inside the XRWebGLLayer.

        Finally this patch is also removing a unused definition in OpenXR plaform code and properly initializing
        a OpenXR struct. The missing initialization was the source of errors when querying api layer properties.
        The patch is also properly setting the SessionMode::Inline when XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO
        is found. It used to set SessionMode::ImmersiveAr instead, but that's wrong, we should only care about
        ImmersiveAr session mode once the WebXR AR module is implemented.

        * Modules/webxr/WebXRRenderState.cpp:
        (WebCore::WebXRRenderState::outputCanvas const): Return render state's canvas.
        * Modules/webxr/WebXRRenderState.h: Added a m_outputCanvas member with its getter.
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::nativeWebGLFramebufferResolution const): Moved from WebXRWebGLLayer and reimplemented.
        (WebCore::WebXRSession::recommendedWebGLFramebufferResolution const): Ditto.
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::WebXRWebGLLayer):
        (WebCore::WebXRWebGLLayer::getNativeFramebufferScaleFactor): Call the session to get native and recommended
        resolutions.
        (WebCore::WebXRWebGLLayer::computeNativeWebGLFramebufferResolution): Deleted.
        (WebCore::WebXRWebGLLayer::computeRecommendedWebGLFramebufferResolution): Ditto.
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::recommendedResolution): New virtual method with default implementation.
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::Instance::Impl::enumerateApiLayerProperties const): Added initialization of the XrApiLayerProperties
        objects. The call to xrEnumerateApiLayerProperties succeeds now.
        (PlatformXR::OpenXRDevice::OpenXRDevice): Call enumerateConfigurationViews().
        (PlatformXR::OpenXRDevice::collectSupportedSessionModes): Fill in the m_viewConfigurationProperties map.
        (PlatformXR::OpenXRDevice::enumerateConfigurationViews): New method that retrieves the XR device views for each
        supported configuration.
        (PlatformXR::OpenXRDevice::recommendedResolution): Return the recommended resolution for a given SessionMode.
        * platform/xr/openxr/PlatformXROpenXR.h: Added some new methods and attributes.

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

        [LFC][MarginCollapsing] Margins do not collapse through when the box has clearance.
        https://bugs.webkit.org/show_bug.cgi?id=214172

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/box.html#collapsing-margins
        "Two margins are adjoining if and only if: no line boxes, no clearance, no padding and no border separate them"

        Only adjoining margins can collapse through.

        Test: fast/layoutformattingcontext/empty-block-level-box-with-clearance.html

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const):

2020-07-10  Jan-Michael Brummer  <jan.brummer@tabos.org>

        [GTK][WPE] Use mobile user-agent on tablet
        https://bugs.webkit.org/show_bug.cgi?id=149496

        Reviewed by Carlos Garcia Campos.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::urlRequiresLinuxDesktopPlatform):
        (WebCore::UserAgentQuirks::quirksForURL):
        * platform/UserAgentQuirks.h:
        * platform/glib/UserAgentGLib.cpp:
        (WebCore::getChassisType):
        (WebCore::platformForUAString):
        (WebCore::platformVersionForUAString):
        (WebCore::buildUserAgentString):
        (WebCore::standardUserAgent):
        (WebCore::standardUserAgentForURL):

2020-07-10  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Inline MediaSourceClientGStreamerMSE away
        https://bugs.webkit.org/show_bug.cgi?id=214140

        Reviewed by Xabier Rodriguez-Calvar.

        MediaSourceClientGStreamerMSE is a superfluous class that adds
        a layer of indirection and complexity to the GStreamer MSE codebase
        for no gain. This patch gets rid of it.

        This also gets rid of the friend access layer violations that
        MediaSourceClientGStreamerMSE relied upon.

        This patch is a refactor that doesn't introduce behavior changes and
        it's covered by existing tests.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):
        (WebCore::MediaPlayerPrivateGStreamerMSE::setMediaSourceClient): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerMSE::mediaSourceClient): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        (WebCore::MediaPlayerPrivateGStreamerMSE::playbackPipeline const):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp: Removed.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h: Removed.
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
        (WebCore::MediaSourcePrivateGStreamer::MediaSourcePrivateGStreamer):
        (WebCore::MediaSourcePrivateGStreamer::addSourceBuffer):
        (WebCore::MediaSourcePrivateGStreamer::durationChanged):
        (WebCore::MediaSourcePrivateGStreamer::markEndOfStream):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::create):
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::finishCreation):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::abort):
        (WebCore::SourceBufferPrivateGStreamer::resetParserState):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        (WebCore::SourceBufferPrivateGStreamer::flush):
        (WebCore::SourceBufferPrivateGStreamer::enqueueSample):
        (WebCore::SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2020-07-09  Brady Eidson  <beidson@apple.com>

        Multiplex the HID and GameController gamepad providers on Mac.
        <rdar://problem/63192532> and https://bugs.webkit.org/show_bug.cgi?id=214126

        Reviewed by Tim Horton.
        
        Mac has already supported both the HID provider and GameController provider.
        
        By adding an intermediate provider to multiplex both and tweaking a few other things,
        it can support both at the same time.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * platform/gamepad/PlatformGamepad.h:
        (WebCore::PlatformGamepad::lastUpdateTime const):
        (WebCore::PlatformGamepad::source const):

        * platform/gamepad/cocoa/GameControllerGamepad.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):
        (WebCore::GameControllerGamepadProvider::gamepadHadInput):
        (WebCore::GameControllerGamepadProvider::makeInvisibleGamepadsVisible):
        (WebCore::GameControllerGamepadProvider::inputNotificationTimerFired):
        (WebCore::GameControllerGamepadProvider::makeInvisibileGamepadsVisible): Deleted.

        * platform/gamepad/cocoa/GameControllerSPI.h:
        * platform/gamepad/cocoa/GameControllerSoftLink.h:
        * platform/gamepad/cocoa/GameControllerSoftLink.mm:

        * platform/gamepad/mac/HIDGamepad.h:
        * platform/gamepad/mac/HIDGamepadProvider.h:
        (WebCore::HIDGamepadProvider::ignoreGameControllerFrameworkDevices):
        * platform/gamepad/mac/HIDGamepadProvider.mm: Renamed from Source/WebCore/platform/gamepad/mac/HIDGamepadProvider.cpp.
        (WebCore::deviceMatchingDictionary):
        (WebCore::deviceAddedCallback):
        (WebCore::deviceRemovedCallback):
        (WebCore::deviceValuesChangedCallback):
        (WebCore::HIDGamepadProvider::singleton):
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::stopMonitoringInput):
        (WebCore::HIDGamepadProvider::startMonitoringInput):
        (WebCore::HIDGamepadProvider::indexForNewlyConnectedDevice):
        (WebCore::HIDGamepadProvider::initialGamepadsConnectedTimerFired):
        (WebCore::HIDGamepadProvider::openAndScheduleManager):
        (WebCore::HIDGamepadProvider::closeAndUnscheduleManager):
        (WebCore::HIDGamepadProvider::startMonitoringGamepads):
        (WebCore::HIDGamepadProvider::stopMonitoringGamepads):
        (WebCore::gameControllerFrameworkWillHandleHIDDevice):
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):
        (WebCore::HIDGamepadProvider::valuesChanged):
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired):
        (WebCore::HIDGamepadProvider::removeGamepadForDevice):

        * platform/gamepad/mac/MultiGamepadProvider.h: Added.
        (WebCore::MultiGamepadProvider::isMockGamepadProvider const):
        (WebCore::MultiGamepadProvider::PlatformGamepadWrapper::PlatformGamepadWrapper):
        * platform/gamepad/mac/MultiGamepadProvider.mm: Added.
        (WebCore::MultiGamepadProvider::singleton):
        (WebCore::MultiGamepadProvider::startMonitoringGamepads):
        (WebCore::MultiGamepadProvider::stopMonitoringGamepads):
        (WebCore::MultiGamepadProvider::indexForNewlyConnectedDevice):
        (WebCore::MultiGamepadProvider::platformGamepadConnected):
        (WebCore::MultiGamepadProvider::platformGamepadDisconnected):
        (WebCore::MultiGamepadProvider::platformGamepadInputActivity):

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

        "ESPN Fantasy Sports" does not respond to mouse events, only touch events
        https://bugs.webkit.org/show_bug.cgi?id=214165
        <rdar://problem/64671543>

        Reviewed by Wenson Hsieh.

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

2020-07-09  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Stuttery scrolling on tesla.com
        https://bugs.webkit.org/show_bug.cgi?id=214159
        <rdar://problem/64555500>

        Reviewed by Wenson Hsieh.
        
        tesla.com uses scroll snapping, and also triggers layout during scrolling that could
        cause scroll snap to yank the scroll position. This manifested as a change that affected
        getBoundingClientRect which is used an an input to some transform math, causing the images
        to move around.

        Fix by ensuring that layout-triggered scroll snap does not happen if a user scroll is in progress,
        when that scroll occurs via the scrolling thread. ScrollingTreeScrollingNodeDelegateMac has a 
        ScrollController that tracks when a gesture is in progress; push this state to
        the ScrollingTree so it can be consulted from the main thread. The two subclasses
        of ScrollableArea, RenderLayer and FrameView, then consult the ScrollingCoordinator
        to ask whether a user scroll is in progress for their scrolling tree node.

        Test: fast/scrolling/mac/adjust-scroll-snap-during-gesture.html

        * page/FrameView.cpp:
        (WebCore::FrameView::isUserScrollInProgress const):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::isUserScrollInProgress const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::isUserScrollInProgress const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::isUserScrollInProgressForNode):
        (WebCore::ScrollingTree::setUserScrollInProgressForNode):
        (WebCore::ScrollingTree::clearNodesWithUserScrollInProgress):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::isUserScrollProgress const):
        (WebCore::ScrollingTreeScrollingNode::setUserScrollInProgress):
        (WebCore::ScrollingTreeScrollingNode::setScrollSnapInProgress):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isUserScrollInProgress const):

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

        [Bindings] Add default value support for union types in dictionary members
        https://bugs.webkit.org/show_bug.cgi?id=214160

        Reviewed by Sam Weinig.

        Add default value support for union types in dictionary members. This is needed for the WebAudio specification:
        - https://www.w3.org/TR/webaudio/#AudioContextOptions
        """
        (AudioContextLatencyCategory or double) latencyHint = "interactive";
        """

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadWithOptionalUnion1Body):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/TestStandaloneDictionary.idl:

2020-07-09  Per Arne Vollan  <pvollan@apple.com>

        Move XPCEndpoint and XPCEndpointClient classes from WebCore to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=214099

        Reviewed by Alex Christensen.

        These classes should not be in WebCore, but in WebKit, since they are only expected to be used there.

        No new tests, since this patch is only moving source files.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/XPCEndpoint.h: Removed.
        * platform/cocoa/XPCEndpoint.mm: Removed.
        * platform/cocoa/XPCEndpointClient.h: Removed.
        * platform/cocoa/XPCEndpointClient.mm: Removed.

2020-07-09  Simon Fraser  <simon.fraser@apple.com>

        After a scroll gesture, content changes don't trigger re-snapping with scroll snap
        https://bugs.webkit.org/show_bug.cgi?id=214123

        Reviewed by Wenson Hsieh.

        ScrollController::m_inScrollGesture could get stuck as true after a scroll gesture, because
        ScrollAnimatorMac::handleWheelEvent() didn't reliably call m_scrollController.handleWheelEvent() for
        the event event based on the hokey shouldForwardWheelEventsToParent() code.

        Fix by explicitly calling m_scrollController.updateGestureInProgressState() which maintains
        m_inScrollGesture.

        When m_inScrollGesture was stuck as true, ScrollableArea::updateScrollSnapState() would return early
        because isScrollSnapInProgress() would return true. In addition,
        ScrollController::isScrollSnapInProgress() was a lie for non-scroll-snapping scrollable areas, so
        explicitly check for snap points there, using an explicit usesScrollSnap() function.

        Rename some WheelEventStatus values to use "momentum" rather than "inertia".

        Test: fast/scrolling/mac/adjust-scroll-snap-after-gesture.html

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::usesScrollSnap const):
        (WebCore::ScrollableArea::updateScrollSnapState):
        * platform/ScrollableArea.h:
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::usesScrollSnap const):
        (WebCore::ScrollController::isScrollSnapInProgress const):
        (WebCore::ScrollController::snapRubberBand):
        (WebCore::toWheelEventStatus):
        (WebCore::operator<<):
        (WebCore::ScrollController::shouldOverrideMomentumScrolling const):
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        (WebCore::ScrollController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollController::processWheelEventForScrollSnap):
        (WebCore::ScrollController::updateGestureInProgressState):
        (WebCore::ScrollController::scrollSnapTimerFired):
        (WebCore::ScrollController::activeScrollSnapIndexForAxis const):
        (WebCore::ScrollController::setActiveScrollSnapIndexForAxis):
        (WebCore::ScrollController::setNearestScrollSnapIndexForAxisAndOffset):
        (WebCore::ScrollController::setActiveScrollSnapIndicesForOffset):
        (WebCore::ScrollController::shouldOverrideInertialScrolling const): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::handleWheelEvent):

2020-07-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][MediaFoundation] Use /DELAYLOAD for mf.dll
        https://bugs.webkit.org/show_bug.cgi?id=213330

        Reviewed by Per Arne Vollan.

        WinCairo failed to start up due to a missing dependency on some
        versions of Windows in which Media Foundation is not available
        such like Windows 10 N. Use delay load for Media Foundation. And,
        check the availability.

        * PlatformWinCairo.cmake: Link with delayimp.lib. Added /DELAYLOAD linker options.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::isAvailable): Check mf.dll is available.

2020-07-09  Eric Carlson  <eric.carlson@apple.com>

        Reset AVSystemController_PIDToInheritApplicationStateFrom when mediaserverd dies
        https://bugs.webkit.org/show_bug.cgi?id=214112
        <rdar://problem/65229214>

        Reviewed by Jer Noble.

        Tested manually because this can only be tested by killing a system process while
        capturing on iOS hardware.

        * platform/audio/cocoa/MediaSessionManagerCocoa.h: Add task queue accessor.
        (WebCore::MediaSessionManagerCocoa::taskQueue):

        * platform/audio/ios/MediaSessionHelperIOS.h:
        (WebCore::MediaSessionHelperClient::mediaServerConnectionDied):
        * platform/audio/ios/MediaSessionHelperIOS.mm:
        (MediaSessionHelperiOS::mediaServerConnectionDied): Renamed from carPlayServerDied. 
        Inform clients if we previously set the PID proxy.
        (-[WebMediaSessionHelper initWithCallback:]): Call mediaServerConnectionDied.
        (-[WebMediaSessionHelper mediaServerConnectionDied:]): Ditto.
        (MediaSessionHelperiOS::carPlayServerDied): Deleted.
        (-[WebMediaSessionHelper carPlayServerDied:]): Deleted.

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::mediaServerConnectionDied): Call providePresentingApplicationPID
        if we previously set the PID proxy.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::captureSessionRuntimeError): Don't try to restart the
        session immediately since this is called directly from the notification handler.

2020-07-09  Clark Wang  <clark_wang@apple.com>

        Set Restrictions for channelCount, channelCountMode for PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=213992

        Reviewed by Chris Dumez.

        Added setter methods to PannerNode that handle exceptions for channelCount, channelCountMode, according to spec:
        https://www.w3.org/TR/webaudio/#dom-audionode-channelcount.
        Moved ChannelCount, ChannelCountMode enums into their own files.

        Re-baselined tests that now pass.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::channelCount): Deleted.
        (WebCore::AudioNode::channelCountMode): Deleted.
        (WebCore::AudioNode::channelInterpretation): Deleted.
        * Modules/webaudio/AudioNode.h:
        (WebCore::AudioNode::channelCount const):
        (WebCore::AudioNode::channelCountMode const):
        (WebCore::AudioNode::channelInterpretation const):
        (WebCore::AudioNode::internalChannelCountMode const): Deleted.
        (WebCore::AudioNode::internalChannelInterpretation const): Deleted.
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels const):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        * Modules/webaudio/AudioNodeOptions.h:
        * Modules/webaudio/AudioNodeOptions.idl:
        * Modules/webaudio/ChannelCountMode.h: Copied from Source/WebCore/Modules/webaudio/AudioNodeOptions.h.
        * Modules/webaudio/ChannelCountMode.idl: Copied from Source/WebCore/Modules/webaudio/AudioNodeOptions.idl.
        * Modules/webaudio/ChannelInterpretation.h: Copied from Source/WebCore/Modules/webaudio/AudioNodeOptions.h.
        * Modules/webaudio/ChannelInterpretation.idl: Copied from Source/WebCore/Modules/webaudio/AudioNodeOptions.idl.
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::create):
        (WebCore::PannerNode::setChannelCount):
        (WebCore::PannerNode::setChannelCountMode):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WebKitAudioPannerNode.cpp:
        (WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::copyFrom):
        (WebCore::AudioBus::sumFrom):
        * platform/audio/AudioBus.h:

2020-07-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove m_appendPipelinesMap
        https://bugs.webkit.org/show_bug.cgi?id=214132

        Reviewed by Xabier Rodriguez-Calvar.

        m_appendPipelinesMap was owned by MediaPlayerPrivateGStreamerMSE but
        was only used by MediaPlayerPrivateGStreamerMSE to clear it during
        destruction, while the other uses were in
        MediaSourceClientGStreamerMSE.

        After analysis, it was found keeping a HashMap of AppendPipelines is not
        necessary. An AppendPipeline only needs to be used by the SourceBuffer
        receiving the muxed data: making AppendPipeline a member of
        SourceBufferPrivateGStreamer reflects this dependency in a much
        clearer way. No need for a HashMap of AppendPipeline's.

        Moreso, there are no other users of AppendPipeline, which means
        AppendPipeline doesn't need to be ref counted. This patch removes that
        feature, using std::unique_ptr<AppendPipeline> for ownership instead.

        This patch is a refactor: it doesn't introduce behavior changes and
        it's covered by existing tests.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkCapsChanged):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::~MediaPlayerPrivateGStreamerMSE):
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::addSourceBuffer):
        (WebCore::MediaSourceClientGStreamerMSE::abort):
        (WebCore::MediaSourceClientGStreamerMSE::resetParserState):
        (WebCore::MediaSourceClientGStreamerMSE::append):
        (WebCore::MediaSourceClientGStreamerMSE::removedFromMediaSource):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
        (WebCore::MediaSourcePrivateGStreamer::addSourceBuffer):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::create):
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::finishCreation):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

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

        [LFC][Verification] Use the table wrapper box's margin when checking the table box
        https://bugs.webkit.org/show_bug.cgi?id=214119

        Reviewed by Darin Adler.

        Table margins are propagated to the table wrapper box.

        Test: fast/layoutformattingcontext/table-with-margin-simple.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):

2020-07-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Don't cache duration in MediaSourceClientGStreamerMSE
        https://bugs.webkit.org/show_bug.cgi?id=214128

        Reviewed by Xabier Rodriguez-Calvar.

        MediaSource should be the single source of truth for the duration of
        the MediaSource, and querying it to MediaSource is efficient enough
        (trivial getter). There is no reason for MediaSourceClientGStreamerMSE
        to store a separate m_duration field.

        This patch introduces no behavior changes.

        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::MediaSourceClientGStreamerMSE):
        (WebCore::MediaSourceClientGStreamerMSE::duration):
        (WebCore::MediaSourceClientGStreamerMSE::durationChanged):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:

2020-07-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Make duration changes one way
        https://bugs.webkit.org/show_bug.cgi?id=214083

        Reviewed by Xabier Rodriguez-Calvar.

        Until now, AppendPipeline emitted duration changes for the
        MediaSource. This was done with
        MediaSourcePrivateClient::durationChanged(const MediaTime&), a
        method which was added to MediaSource in r207889 just to implement
        this in the GStreamer port.

        This is not necessary though. AppendPipeline only needs to inform
        MediaSource of the duration of the initialization segment, and
        MediaSource will in turn set duration from the multi-platform code.

        This patch removes MediaSourcePrivateClient::durationChanged(const
        MediaTime&) from the multi-platform API, along with its usages in the
        GStreamer port, giving the multi-platform code sole responsibility on
        duration changes.

        This is a code cleanup and it's covered by existing tests.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::durationChanged): Deleted.
        * Modules/mediasource/MediaSource.h:
        * platform/graphics/MediaSourcePrivateClient.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::didReceiveInitializationSegment):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::durationChanged):

2020-07-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MSE] AV1 support
        https://bugs.webkit.org/show_bug.cgi?id=207547

        Reviewed by Xabier Rodriguez-Calvar.

        If only the av1dec decoder is available, consider AV1 decoding
        support as disabled, because this plugin performs really badly.
        However, if any other AV1 decoder is present, such as the
        dav1d-based Rust decoder for instance, consider AV1 support as
        enabled.

        These checks are now performed by both RegistryScanner instances,
        for MSE and non-MSE players.

        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::hasElementForMediaType const):
        (WebCore::GStreamerRegistryScanner::initialize):
        * platform/graphics/gstreamer/GStreamerRegistryScanner.h:

2020-07-09  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Remove orphan code in SourceBufferPrivateGStreamer::append()
        https://bugs.webkit.org/show_bug.cgi?id=214086

        Reviewed by Xabier Rodriguez-Calvar.

        A refactor in r240784 missed this line, which was unreachable code
        before and should have removed.

        Instead, it has been run every time after sending an append to the
        AppendPipeline, and it just happens it doesn't have visible
        consequences.

        This patch cleans that up removing that line. No visible behavior
        changes are introduced.

        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::append):

2020-07-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Initialize m_allowCookies and m_acceptEncoding in ResourceRequest::updateFromSoupMessage
        https://bugs.webkit.org/show_bug.cgi?id=214077

        Reviewed by Michael Catanzaro.

        Check if SOUP_TYPE_CONTENT_DECODER and SOUP_TYPE_COOKIE_JAR are disabled in the given message.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):

2020-07-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add support for HTTPCookieAcceptPolicy::OnlyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=213954

        Reviewed by Michael Catanzaro.

        Handle both OnlyFromMainDocumentDomain and ExclusivelyFromMainDocumentDomain.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::setCookieAcceptPolicy):
        (WebCore::NetworkStorageSession::cookieAcceptPolicy const):
        (WebCore::NetworkStorageSession::setResourceLoadStatisticsEnabled):

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

        Allow ScrollableArea to ask if a user scroll is in progress
        https://bugs.webkit.org/show_bug.cgi?id=214121

        Reviewed by Wenson Hsieh.

        Work towards fixing scrolling stutters on layouting pages using scroll snap, like tesla.com.

        ScrollableArea::updateScrollSnapState(), which happens as a result of layout, should not set a new
        scroll position if a user scroll is in progress. ScrollController already tracks m_inScrollGesture,
        so in the first instance just refactor the code to return that. Future changes will check
        for scrolling thread activity.

        * page/FrameView.cpp:
        (WebCore::FrameView::isUserScrollInProgress const):
        (WebCore::FrameView::isRubberBandInProgress const):
        * page/FrameView.h:
        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::isUserScrollInProgress const):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::updateScrollSnapState):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isUserScrollInProgress const):
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::isUserScrollInProgress const):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::isUserScrollInProgress const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isUserScrollInProgress const):
        (WebCore::RenderLayer::isRubberBandInProgress const):
        * rendering/RenderLayer.h:

2020-07-08  Andres Gonzalez  <andresg_22@apple.com>

        Implementation of AXIsolatedObject::setSelectedVisiblePositionRange.
        https://bugs.webkit.org/show_bug.cgi?id=214118

        Reviewed by Chris Fleizach.

        Covered by test: accessibility/mac/selected-visible-position-range.html.

        Implemented AXIsolatedObject::setSelectedVisiblePositionRange() and
        selection() by forwarding the call to the associated AX object.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::selection const):
        (WebCore::AXIsolatedObject::setSelectedVisiblePositionRange const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        call to the backing object should happen on the main thread since it
        takes a VisiblePositionRange parameter.

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

        Clean up time values in ScrollController
        https://bugs.webkit.org/show_bug.cgi?id=214117

        Reviewed by Wenson Hsieh.

        ScrollController used a mixture of [NSDate timeIntervalSinceReferenceDate], [NSProcessInfo processInfo].systemUptime
        and wheelEvent.timestamp().secondsSinceEpoch(). Standardize on Seconds/MonotonicTime/WallTime.

        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::elasticDeltaForTimeDelta):
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::snapRubberBandTimerFired):
        (WebCore::ScrollController::snapRubberBand):

2020-07-08  Brady Eidson  <beidson@apple.com>

        Aggressively prime GameController.framework gamepad provider.
        https://bugs.webkit.org/show_bug.cgi?id=214094

        Reviewed by Darin Adler.

        GameController.framework gets itself going by listening for application activation, 
        assuming that it is hard linked.
        
        Soft linking breaks this.
        
        There's an SPI to manually kickstart it.
        
        Also add some logging I'd added while exploring issues around this.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.h:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):
        (WebCore::GameControllerGamepadProvider::prewarmGameControllerDevicesIfNecessary):
        (WebCore::GameControllerGamepadProvider::startMonitoringGamepads):
        * platform/gamepad/cocoa/GameControllerSPI.h:

2020-07-08  Sam Weinig  <weinig@apple.com>

        Part 3 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=214082

        Reviewed by Darin Adler.

        - Replaces all uses of SimpleColor that are not implementation details of Color, with SRGBA<uint8_t>.
        - Adds ColorBuilder<T> to allow maintaining the syntax SimpleColor for constant colors. e.g:
            
            Color color = Color::yellow.colorWithAlpha(128);

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Add ColorBuilder.h

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::semanticColor const):
        * platform/graphics/Color.h:
        (WebCore::Color::Color):
        (WebCore::Color::asSimple const):
        (WebCore::Color::setSimpleColor):
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        (WebCore::Color::encode const):
        (WebCore::Color::decode):
        - Make constructor taking a SimpleColor private. 
        - Add / modifiy constructors to take SRGBA<uint8_t>.
        - Make setSimpleColor() take a SRGBA<uint8_t> (this will be renamed along with
          other aspects of Color's internals in a subsequent change).
        - Update calls that still need SimpleColor to use an explicit construction from
          SRGBA<uint8_t>.
    
        * platform/graphics/ColorBuilder.h: Added.
        (WebCore::ColorBuilder::ColorBuilder):
        (WebCore::ColorBuilder::color const):
        (WebCore::ColorBuilder::colorWithAlpha const):
        Added to help maintain current syntax why constructing colors. Currently it only
        supports color type with uint8_t components, but can be expanded to support more.

        * platform/graphics/ColorUtilities.h:
        (WebCore::clampToComponentByte):
        Remove unnecessary cast.

        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::SimpleColor):
        Restrict to explicit construction via a SRGBA<uint8_t>.
 
        (WebCore::makeSimpleColor):
        Update to return ColorBuilder<SRGBA<uint8_t>>. A future change will update
        the function name, but kept the same here to limit the size of the change.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        (WebCore::nsColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeSimpleColorFromCGColor):
        (WebCore::cachedCGColor):
        Replace direct SimpleColor usage with SRGBA<uint8_t> and simplify Packed
        construction now that .asSRGBA<uint8_t>() is not needed for color constants.

        * css/DeprecatedCSSOMRGBColor.h:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseNamedColor):
        (WebCore::CSSParser::parseHexColor):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::finishParsingHexColor):
        (WebCore::parseHexColorInternal):
        (WebCore::parseNumericColor):
        (WebCore::finishParsingNamedColor):
        (WebCore::parseNamedColorInternal):
        (WebCore::parseSimpleColorInternal):
        (WebCore::CSSParserFastPaths::parseSimpleColor):
        (WebCore::CSSParserFastPaths::parseHexColor):
        (WebCore::CSSParserFastPaths::parseNamedColor):
        * css/parser/CSSParserFastPaths.h:    
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHexColor):
        * html/ColorInputType.cpp:
        (WebCore::parseSimpleColorValue):
        * html/HTMLElement.cpp:
        (WebCore::parseLegacyColorValue):
        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::HistoricMemoryCategoryInfo::HistoricMemoryCategoryInfo):
        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendWithWhite):
        (WebCore::blend):
        (WebCore::blendWithoutPremultiply):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeSimpleColorFromARGBCFArray):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::cloneLayerDebugBorderColor):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawBoxes):
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::menuBackgroundColor):
        Replace direct SimpleColor usage with SRGBA<uint8_t>. 

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

        Make a logging channel for ScrollSnap and improve its logging
        https://bugs.webkit.org/show_bug.cgi?id=214096

        Reviewed by Wenson Hsieh.

        Pull existing scroll snap logging out of the Scrolling log channel into a new ScrollSnap channel,
        add more logging, and make better use of TextStream-based logging.

        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::operator<<):
        (WebCore::updateSnapOffsetsForScrollableArea):
        (WebCore::snapOffsetsToString): Deleted.
        (WebCore::snapOffsetRangesToString): Deleted.
        (WebCore::snapPortOrAreaToString): Deleted.
        * platform/Logging.h:
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::updateScrollSnapState):
        * platform/cocoa/ScrollController.mm:
        (WebCore::operator<<):
        (WebCore::ScrollController::processWheelEventForScrollSnap):
        (WebCore::ScrollController::startScrollSnapTimer):
        (WebCore::ScrollController::stopScrollSnapTimer):
        (WebCore::ScrollController::scrollSnapTimerFired):
        (WebCore::ScrollController::updateScrollSnapState):
        * platform/cocoa/ScrollSnapAnimatorState.h:
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        (WebCore::operator<<):

2020-07-08  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] Make it possible to establish direct XPC connections between WebKit processes
        https://bugs.webkit.org/show_bug.cgi?id=214079

        Reviewed by Brent Fulgham.

        Add abstract classes XPCEndpoint and XPCEndpointClient to handle the creation of direct xpc connections between WebKit processes.
        In order to create a direct xpc connection between two processes, these two classes can be subclassed, and the xpc endpoint created
        by the XPCEndpoint object, can be sent via the UI process over the bootstrap xpc connection. The UI process can then forward this
        endpoint to another WebKit process by sending it over the bootstrap xpc connection. The receiving process can then initialize an
        XPCEndpointClient object with this endpoint, and a new direct connection will then be available, over which the two processes can
        communicate.

        API test: WebKit.XPCEndpoint

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/XPCEndpoint.h: Added.
        * platform/cocoa/XPCEndpoint.mm: Added.
        (WebCore::XPCEndpoint::XPCEndpoint):
        (WebCore::XPCEndpoint::sendEndpointToConnection):
        (WebCore::XPCEndpoint::endpoint const):
        * platform/cocoa/XPCEndpointClient.h: Added.
        (WebCore::XPCEndpointClient::~XPCEndpointClient):
        * platform/cocoa/XPCEndpointClient.mm: Added.
        (WebCore::XPCEndpointClient::setEndpoint):
        (WebCore::XPCEndpointClient::connection):

2020-07-08  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Build fix after r264050
        https://bugs.webkit.org/show_bug.cgi?id=214091

        Unreviewed build fix

        No new tests, only build fix.

        * platform/playstation/ScrollbarThemePlayStation.cpp:

2020-07-08  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation should ignore white spaces between nodes
        https://bugs.webkit.org/show_bug.cgi?id=213907

        Reviewed by Wenson Hsieh.

        Text returned by TextIterator contains white spaces (including tabs and line breaks) that do not belong to 
        content of nodes. Those spaces are emitted based on style of nodes. For example, line breaks can be emitted 
        before and after block-level element. These spaces should not be extracted as part of the content, because 
        they could change based on the style of nodes or range of TextIterator, and manipulation fails if content is 
        changed. We want to make sure TextManipulationController monitors the real content of nodes.

        r262778 tried solving this issue by excluding text with empty node from TextIterator's result. That worked with
        line break, but not space and tab. See radar and new test. To solve this, now we exclude text with zero-length
        range. 

        This patch does not change the behavior of line breaks, which is covered by:
        TextManipulation.StartTextManipulationExtractsVisibleLineBreaksInTextAsExcludedTokens
        TextManipulation.CompleteTextManipulationCanMergeContentAndPreserveLineBreaks
        TextManipulation.CompleteTextManipulationReplaceTwoSimpleParagraphs

        New test: TextManipulation.CompleteTextManipulationIgnoreWhiteSpacesBetweenParagraphs
        Modified existing tests: TextManipulation.StartTextManipulationExtractsValuesByNode

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::ParagraphContentIterator):
        (WebCore::ParagraphContentIterator::shouldAdvanceIteratorPastCurrentNode const):
        (WebCore::ParagraphContentIterator::advanceIteratorNodeAndUpdateText):

2020-07-08  Darin Adler  <darin@apple.com>

        Remove use of live ranges from AXObject.h
        https://bugs.webkit.org/show_bug.cgi?id=214053

        Reviewed by Sam Weinig.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange): Take SimpleRange.
        (WebCore::AXObjectCache::lengthForRange): Take Optional<SimpleRange>.
        (WebCore::AXObjectCache::rangeForNodeContents): Return SimpleRange, take reference
        rather than pointer.
        (WebCore::characterOffsetsInOrder): Use SimpleRange.
        (WebCore::resetNodeAndOffsetForReplacedNode): Take a reference to the node rather than
        a pointer.
        (WebCore::boundaryPoint): Added. Could be used to replace calls to
        setRangeStartOrEndWithCharacterOffset.
        (WebCore::setRangeStartOrEndWithCharacterOffset): Take SimpleRange. Also use the
        new boundaryPoint function above.
        (WebCore::AXObjectCache::rangeForUnorderedCharacterOffsets): Return Optional<SimpleRange>.
        (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange): Take SimpleRange.
        (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange): Take SimpleRange.
        (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): Use SimpleRange.
        (WebCore::AXObjectCache::textMarkerDataForNextCharacterOffset): Ditto.
        (WebCore::AXObjectCache::textMarkerDataForPreviousCharacterOffset): Ditto.
        (WebCore::AXObjectCache::visiblePositionFromCharacterOffset):
        (WebCore::AXObjectCache::characterOffsetFromVisiblePosition):
        (WebCore::AXObjectCache::leftWordRange): Return Optional<SimpleRange>.
        (WebCore::AXObjectCache::rightWordRange): Ditto.
        (WebCore::AXObjectCache::nextBoundary): Ditto.
        (WebCore::AXObjectCache::previousBoundary): Ditto.
        (WebCore::AXObjectCache::startCharacterOffsetOfParagraph): Use SimpleRange.
        (WebCore::AXObjectCache::endCharacterOffsetOfParagraph): Ditto.
        (WebCore::AXObjectCache::paragraphForCharacterOffset): Ditto.
        (WebCore::AXObjectCache::sentenceForCharacterOffset): Ditto.
        (WebCore::AXObjectCache::localCaretRectForCharacterOffset): Ditto.
        (WebCore::AXObjectCache::characterOffsetForPoint): Ditto.
        (WebCore::AXObjectCache::characterOffsetForIndex): Ditto.
        (WebCore::AXObjectCache::indexForCharacterOffset): Ditto.

        * accessibility/AXObjectCache.h: Remove uses of Range and include of "Range.h".

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::elementRange const): Call createLiveRange.
        (WebCore::AccessibilityObject::rangeForPlainTextRange const): Ditto.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundsForRange const): Pass SimpleRange.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (+[WebAccessibilityTextMarker startOrEndTextMarkerForRange:isStart:cache:]): Pass SimpleRange.
        (-[WebAccessibilityObjectWrapper positionForTextMarker:]): Call createLiveRange.
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]): Pass SimpleRange.
        (-[WebAccessibilityObjectWrapper textMarkerForPosition:]): Ditto.
        (-[WebAccessibilityObjectWrapper rangeForTextMarkers:]): Call createLiveRange.
        (-[WebAccessibilityObjectWrapper lengthForTextMarkers:]): Pass SimpleRange.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (startOrEndTextmarkerForRange):
        (-[WebAccessibilityObjectWrapper rangeForTextMarkerRange:]): Pass SimpleRange.
        (-[WebAccessibilityObjectWrapper _indexForTextMarker:]): Call createLiveRange.
        (-[WebAccessibilityObjectWrapper textMarkerRangeAtTextMarker:forUnit:]): Ditto.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Ditto.

        * dom/BoundaryPoint.h: Added makeBoundaryPointBefore/AfterNode.

        * dom/SimpleRange.cpp:
        (WebCore::makeBoundaryPointBeforeNode): Added.
        (WebCore::makeBoundaryPointAfterNode): Ditto.

2020-07-08  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Do not use the initial strut baseline values when the text content is inside an inline container
        https://bugs.webkit.org/show_bug.cgi?id=214069

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/line-heigt-when-text-is-inside-inline-container.html

        * layout/inlineformatting/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::close):
        (WebCore::Layout::LineBuilder::adjustBaselineAndLineHeight):
        * layout/inlineformatting/InlineLineBuilder.h:

2020-07-08  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Table width is computed as if box-sizing was border-box
        https://bugs.webkit.org/show_bug.cgi?id=214070

        Reviewed by Antti Koivisto.

        Apparently the width property of the <table> works as if box-sizing were set to border-box (and <div style="display: table" does not).

        Test: fast/layoutformattingcontext/table-with-padding-and-border-simple.html

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

2020-07-07  Antoine Quint  <graouts@webkit.org>

        [iOS] Sharing an <img> element with a base64-encoded URL shares the URL as raw text instead of an image
        https://bugs.webkit.org/show_bug.cgi?id=214042
        <rdar://problem/56669102>

        Reviewed by Wenson Hsieh.

        * en.lproj/Localizable.strings:

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

        REGRESSION(r263836): [GStreamer] Debug ASSERT hits
        https://bugs.webkit.org/show_bug.cgi?id=214047

        Reviewed by Xabier Rodriguez-Calvar.

        Reduce the element dependency on RefPtr<MediaStreamTrackPrivate> which is not MT-safe. The
        data we need from it are its ID and the contents required to build a GstTagList. So we now
        create this tag-list upfront and keep track of the trackID as well.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (webkitMediaStreamSrcAddPad):
        (ProbeData::ProbeData):
        (webkitMediaStreamSrcPadProbeCb):
        (webkitMediaStreamSrcSetupSrc):

2020-07-07  Andy Estes  <aestes@apple.com>

        [Apple Pay] Fix the build on Catalina internal SDKs
        https://bugs.webkit.org/show_bug.cgi?id=214066

        Unreviewed build fix for the 10.15.0 Internal SDK.

        * Modules/applepay/ApplePaySetupFeature.mm:
        (WebCore::ApplePaySetupFeature::supportsInstallments const):

2020-07-07  Alex Christensen  <achristensen@webkit.org>

        Allow WebCoreNSURLSession sendH2Ping:pongHandler: to be called from any thread like the rest of WebCoreNSURLSession methods
        https://bugs.webkit.org/show_bug.cgi?id=214065

        Reviewed by Jer Noble.

        Otherwise horrible crashes happen.
        The WebCore function calls and loading IPC calls need to happen on the main thread,
        and the callback should happen on the NSOperationQueue given when constructing the WebCoreNSURLSession.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession sendH2Ping:pongHandler:]):

2020-07-07  Sam Weinig  <weinig@apple.com>

        Part 2 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=213981

        Reviewed by Darin Adler.

        - Replaces internal representation of SimpleColor based on an ARGB uint32_t with SRGBA<uint8_t>.
        - Removes SimpleColor constructor taking a uint32_t. Callers that still need to convert from ARGB
          now do makeSimpleColor(asSRGBA(Packed::ARGB { value })).
        - Removes value() and valueAsARGB() member functions from SimpleColor. Callers that need a packed
          representation now do Packed::ARGB { simpleColor.asSRGBA<uint8_t>() }.value.

        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        Use asSRGBA(Packed::ARGB{...}) to constuct the color.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::finishParsingNamedColor):
        Use asSRGBA(Packed::ARGB{...}) (or in one case, Packed::RGBA) to constuct the color.
        These can almost certainly be simplified, but in the interest of keeping things smallish,
        I have left that for a subsequent change.

        * editing/CompositionHighlight.h:
        Switch to using auto/makeSimpleColor.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        Switch to using makeSimpleColor.

        (WebCore::HistoricMemoryCategoryInfo::HistoricMemoryCategoryInfo):
        (WebCore::HistoricResourceUsageData::HistoricResourceUsageData):
        Switch to using auto/makeSimpleColor.

        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        Switch to using auto/makeSimpleColor.

        * platform/graphics/Color.cpp:
        * platform/graphics/Color.h:
        - Switch to using auto/makeSimpleColor for named colors.
        - Switch to storing/encoding the inline SimpleColor as a Packed::RGBA value.

        * platform/graphics/ColorBlending.cpp:
        (WebCore::blend):
        Update for new name of clampToComponentBytes.

        * platform/graphics/ColorTypes.h:
        (WebCore::Packed::RGBA::RGBA):
        (WebCore::Packed::ARGB::ARGB):
        (WebCore::asSRGBA):
        Rename WebCore::ARGB to WebCore::Packed::ARGB. Adds companion, WebCore::Packed::RGBA. And adds constructors
        which make a packed type from an SRGBA<uint8_t>.

        * platform/graphics/ColorUtilities.h:
        (WebCore::clampToComponentByte):
        (WebCore::clampToComponentFloat):
        Extract out helper functions which just do the clamping for the type. 

        (WebCore::clampToComponentBytes):
        (WebCore::clampToComponentFloats):
        Rename conversion functions that just clamp to use "clamp" prefix rather than "convert". Make use
        of extracted helpers.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::blendPixel):
        (WebCore::ImageBackingStore::pixelValue const):
        Update using new packed color types and funtions. 

        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::SimpleColor):
        (WebCore::SimpleColor::alphaComponent const):
        (WebCore::SimpleColor::alphaComponentAsFloat const):
        (WebCore::SimpleColor::isOpaque const):
        (WebCore::SimpleColor::isVisible const):
        (WebCore::SimpleColor::colorWithAlpha const):
        (WebCore::SimpleColor::invertedColorWithAlpha const):
        (WebCore::SimpleColor::asSRGBA const):
        (WebCore::SimpleColor::get const):
        (WebCore::makeSimpleColor):
        (WebCore::SimpleColor::valueAsARGB const): Deleted.
        (WebCore::SimpleColor::value const): Deleted.
        (WebCore::SimpleColor::redComponent const): Deleted.
        (WebCore::SimpleColor::greenComponent const): Deleted.
        (WebCore::SimpleColor::blueComponent const): Deleted.
        - Removes constructor taking an ARGB uint32_t.
        - Removes valueAsARGB()/value() functions (can use Packed::ARGB directly if needed).
        - Switches internal representation to SRGBA<uint8_t>.
        - Streamline makeSimpleColor functions to use shared helpers from ColorUtilities.h

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::nsColor):
        Use Packed::RGBA to extract uint32_t for quick lookup of transparent/white/black SimpleColors. Despite the
        length of the calls, SimpleColor is fully constexpr, so these actually collapse down to the uint32_t representation
        at compile time.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        Switch to using auto/makeSimpleColor.

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices):
        Switch to using makeSimpleColor.

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawBoxes):
        Switch to using auto/makeSimpleColor.

        * platform/mock/ScrollbarThemeMock.cpp:
        (WebCore::ScrollbarThemeMock::paintTrackBackground):
        Switch to using makeSimpleColor.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::calculateBorderStyleColor):
        Update comment to use per-component values.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor const):
        Switch to using makeSimpleColor.

        * rendering/RenderThemeAdwaita.cpp:
        Switch to using auto/makeSimpleColor.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintProgressBar):
        Switch to using auto/makeSimpleColor.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):
        Switch to using auto/makeSimpleColor.

2020-07-07  Andres Gonzalez  <andresg_22@apple.com>

        Web content process hangs in AccessibilityRenderObject::setSelectedVisiblePositionRange in some corner cases.
        https://bugs.webkit.org/show_bug.cgi?id=214017
        <rdar://problem/63000006>

        Reviewed by Chris Fleizach.

        Ensures that in the case of collapsed ranges, the VisiblePosition that
        the selection is being set to, is contained in the Element object.

        Test: accessibility/mac/selected-visible-position-range.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange const):

2020-07-07  Youenn Fablet  <youenn@apple.com>

        Fix potential pixel buffer leak in ImageRotationSessionVT::rotate
        https://bugs.webkit.org/show_bug.cgi?id=213922

        Reviewed by Eric Carlson.

        Fix a potential memory leak in an error case.
        Add more logging to be able to see errors.
        Remove the kCVPixelBufferIOSurfacePropertiesKey key on iOS from the buffer pool to revert
        part of https://trac.webkit.org/changeset/258504/webkit that seems problematic in iOS.

        * platform/graphics/cv/ImageRotationSessionVT.mm:
        (WebCore::ImageRotationSessionVT::initialize):
        (WebCore::ImageRotationSessionVT::rotate):

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

        Unable to scroll elcomerico.pe page until the page finishes loading
        https://bugs.webkit.org/show_bug.cgi?id=214027
        <rdar://problem/64646259>

        Reviewed by Antti Koivisto.
        
        <https://elcomercio.pe/mundo/eeuu/que-visas-para-estados-unidos-fueron-suspendidas-por-orden-de-donald-trump-hasta-fin-de-ano-y-a-quien-afecta-la-medida-noticia/>
        had a scaleX(0) element as an ancestor of an overflow:scroll. The CALayer hit-testing code failed to take
        non-invertible transforms into account, causing the overflow:scroll to intercept scrolling events.

        Fix by explicitly testing for non-invertible transforms, and, when found, bailing from the
        sublayer walk. A non-invertible layer transform makes all its descendants non hit-testable.

        Tests: fast/scrolling/ios/non-invertible-transformed-scroller-ancestor.html
               fast/scrolling/mac/non-invertible-transform-hit-testing.html

        * page/scrolling/mac/ScrollingTreeMac.mm:
        (collectDescendantLayersAtPoint):
        * platform/graphics/transforms/TransformationMatrix.h:

2020-07-07  Peng Liu  <peng.liu6@apple.com>

        Function didCleanupFullscreencreen() should be called at the end of VideoFullscreenInterfaceAVKit::cleanupFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=214032

        Reviewed by Eric Carlson.

        VideoFullscreenManagerProxy::didCleanupFullscreen() may destroy an instance of VideoFullscreenInterfaceAVKit.
        So we should not access member variables of VideoFullscreenInterfaceAVKit after calling didCleanupFullscreen()
        in VideoFullscreenInterfaceAVKit::cleanupFullscreen().

        Fix a flaky test crash: media/video-autoplay.html

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):

2020-07-07  Tim Horton  <timothy_horton@apple.com>

        <attachment> layout does not scale with Dynamic Type size changes
        https://bugs.webkit.org/show_bug.cgi?id=214023
        <rdar://problem/64914762>

        Reviewed by Sam Weinig.

        Test: fast/attachment/attachment-dynamic-type.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::shortCaptionPointSizeWithContentSizeCategory):
        (WebCore::attachmentDynamicTypeScaleFactor):
        (WebCore::RenderAttachmentInfo::buildWrappedLines):
        (WebCore::RenderThemeIOS::attachmentIntrinsicSize const):
        Scale the <attachment> overall size and text line width by the Dynamic Type
        scaling factor, determined by dividing the resolved point size of two
        font descriptors created with the Large (default) category and the Current category.

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::layout):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::attachmentShouldAllowWidthToShrink const):
        * rendering/RenderThemeIOS.h:
        Add a RenderTheme bit controlling the behavior introduced in r202117.
        After r202117, <attachment> elements are never allowed to shrink. This 
        is fine for macOS, where we don't vary the Dynamic Type size, only the content,
        but undesirable on iOS, where the size of the <attachment> is based solely
        on Dynamic Type size (and thus can shrink when the size is reduced),
        and not the content.
        
        * Configurations/WebCoreTestSupport.xcconfig:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setContentSizeCategory):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add a Internals method to change the current Dynamic Type category.

2020-07-07  Alex Christensen  <achristensen@webkit.org>

        Add WebCoreNSURLSession SPI to send HTTP/2 ping
        https://bugs.webkit.org/show_bug.cgi?id=214030
        <rdar://problem/64495827>

        Reviewed by Jer Noble.

        Add lots of plumbing, move internalError from WebKit to WebCore.

        Covered by an API test that requires some future CFNetwork behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMPromiseDeferred.h:
        * loader/FrameLoaderClient.cpp: Added.
        (WebCore::FrameLoaderClient::sendH2Ping):
        * loader/FrameLoaderClient.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::sendH2Ping):
        * loader/MediaResourceLoader.h:
        * platform/graphics/PlatformMediaResourceLoader.cpp: Added.
        (WebCore::PlatformMediaResourceLoader::sendH2Ping):
        * platform/graphics/PlatformMediaResourceLoader.h:
        * platform/network/ResourceErrorBase.cpp:
        (WebCore::internalError):
        * platform/network/ResourceErrorBase.h:
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession sendH2Ping:pongHandler:]):
        * testing/Internals.cpp:
        (WebCore::Internals::sendH2Ping):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-07-07  Tomoki Imai  <Tomoki.Imai@sony.com>

        [Win] Implement Pasteboard::writeCustomData for Web Inspector Console tab
        https://bugs.webkit.org/show_bug.cgi?id=213986

        Reviewed by Fujii Hironori.

        Implement Pasteboard::writeCustomData and Pasteboard::typesSafeForBindings.
        This fixes the issue which we cannot copy text in WebInspector's Console tab.

        We enable some existing testcases for pasteboard.

        * platform/Pasteboard.h:
        * platform/PasteboardCustomData.cpp:
        (WebCore::PasteboardCustomData::fromPersistenceDecoder): Construct PasteboardCustomData from WTF::Persistence::Decoder.
        (WebCore::PasteboardCustomData::fromSharedBuffer): Use fromPersistenceDecoder function to implement.
        * platform/PasteboardCustomData.h:
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData): Add uint8_t* variant.
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::finishCreatingPasteboard): Register new clipboard format CustomDataClipboardFormat.
        (WebCore::Pasteboard::readPasteboardCustomData): Helper function to read PasteboardCustomData from the pasteboard.
        (WebCore::Pasteboard::typesSafeForBindings): Implemented.
        (WebCore::Pasteboard::readOrigin): Implemented.
        (WebCore::Pasteboard::readStringInCustomData): Implemented.
        (WebCore::Pasteboard::writeCustomData): Implemented.


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

        High CPU usage on Stash search results pages
        https://bugs.webkit.org/show_bug.cgi?id=214018
        <rdar://problem/64832917>

        Reviewed by Tim Horton.

        Stash search results pages can contain a lot of overflow:scroll areas, so scrolling thread CA commits
        would take a long time because ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters() would
        open and close a CA commit for each scroller.

        Fix by not explicitly starting a CA commit, and only entering this code if a gesture is active and in
        the momentum phase.

        Also sprinkle BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS in more places that call into Core
        Animation.

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionScrollingLayers):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::repositionRelatedLayers):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::repositionScrollingLayers):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters):

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

        BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS should not have trailing semicolons
        https://bugs.webkit.org/show_bug.cgi?id=214019

        Reviewed by Tim Horton.

        These macros are defined as:
        
        #define BEGIN_BLOCK_OBJC_EXCEPTIONS @try {
        #define END_BLOCK_OBJC_EXCEPTIONS } @catch(NSException *localException) { ReportBlockedObjCException(localException); }
        
        so they should not be used with trailing semicolons.

        * editing/cocoa/DictionaryLookup.mm:
        (WebCore::expandSelectionByCharacters):
        (WebCore::showPopupOrCreateAnimationController):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::dataInRTFDFormat):
        (WebCore::Editor::dataInRTFFormat):
        * editing/mac/DictionaryLookupLegacy.mm:
        (WebCore::tokenRange):
        (WebCore::expandSelectionByCharacters):
        (WebCore::showPopupOrCreateAnimationController):
        (WebCore::DictionaryLookup::hidePopup):
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::keyEvent):
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::findViewInSubviews):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::mouseMoved):
        * page/mac/ChromeMac.mm:
        (WebCore::Chrome::focusNSView):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::keyEvent):
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::findViewInSubviews):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseDragged):
        (WebCore::EventHandler::mouseUp):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::pressureChange):
        (WebCore::EventHandler::passMouseMovedEventToScrollbars):
        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:
        (WebCore::ContentFilterUnblockHandler::encode const):
        (WebCore::ContentFilterUnblockHandler::decode):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::willProvideContentKeyRequestInitializationDataForTrackID):
        * platform/graphics/gpu/cocoa/GPUBindGroupAllocatorMetal.mm:
        (WebCore::GPUBindGroupAllocator::allocateAndSetEncoders):
        (WebCore::GPUBindGroupAllocator::reallocate):
        * platform/graphics/gpu/cocoa/GPUBindGroupLayoutMetal.mm:
        (WebCore::appendArgumentToArray):
        (WebCore::tryCreateMtlArgumentEncoder):
        (WebCore::argumentDescriptor):
        (WebCore::GPUBindGroupLayout::tryCreate):
        * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:
        (WebCore::setBufferOnEncoder):
        (WebCore::setSamplerOnEncoder):
        (WebCore::setTextureOnEncoder):
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        (WebCore::GPUBuffer::tryCreate):
        (WebCore::GPUBuffer::commandBufferCommitted):
        (WebCore::GPUBuffer::copyStagingBufferToGPU):
        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::tryCreate):
        (WebCore::GPUCommandBuffer::endBlitEncoding):
        (WebCore::GPUCommandBuffer::copyBufferToBuffer):
        (WebCore::GPUCommandBuffer::copyBufferToTexture):
        (WebCore::GPUCommandBuffer::copyTextureToBuffer):
        (WebCore::GPUCommandBuffer::copyTextureToTexture):
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm:
        (WebCore::GPUComputePassEncoder::tryCreate):
        (WebCore::GPUComputePassEncoder::setPipeline):
        (WebCore::GPUComputePassEncoder::dispatch):
        (WebCore::GPUComputePassEncoder::useResource):
        (WebCore::GPUComputePassEncoder::setComputeBuffer):
        * platform/graphics/gpu/cocoa/GPUComputePipelineMetal.mm:
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertComputePipelineDescriptor):
        (WebCore::tryCreateMTLComputePipelineState):
        * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::tryCreate):
        * platform/graphics/gpu/cocoa/GPUProgrammablePassEncoderMetal.mm:
        (WebCore::GPUProgrammablePassEncoder::endPass):
        * platform/graphics/gpu/cocoa/GPUQueueMetal.mm:
        (WebCore::GPUQueue::tryCreate):
        (WebCore::GPUQueue::submit):
        * platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:
        (WebCore::populateMtlColorAttachmentsArray):
        (WebCore::populateMtlDepthStencilAttachment):
        (WebCore::GPURenderPassEncoder::tryCreate):
        (WebCore::GPURenderPassEncoder::setPipeline):
        (WebCore::GPURenderPassEncoder::setBlendColor):
        (WebCore::GPURenderPassEncoder::setViewport):
        (WebCore::GPURenderPassEncoder::setScissorRect):
        (WebCore::GPURenderPassEncoder::setVertexBuffers):
        (WebCore::GPURenderPassEncoder::draw):
        (WebCore::GPURenderPassEncoder::drawIndexed):
        (WebCore::GPURenderPassEncoder::useResource):
        (WebCore::GPURenderPassEncoder::setVertexBuffer):
        (WebCore::GPURenderPassEncoder::setFragmentBuffer):
        * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:
        (WebCore::tryCreateMtlDepthStencilState):
        (WebCore::trySetVertexInput):
        (WebCore::trySetColorStates):
        (WebCore::trySetMetalFunctions):
        (WebCore::trySetFunctions):
        (WebCore::convertRenderPipelineDescriptor):
        (WebCore::tryCreateMtlRenderPipelineState):
        * platform/graphics/gpu/cocoa/GPUSamplerMetal.mm:
        (WebCore::tryCreateMtlSamplerState):
        * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm:
        (WebCore::GPUShaderModule::tryCreate):
        * platform/graphics/gpu/cocoa/GPUSwapChainMetal.mm:
        (WebCore::tryCreateWebGPULayer):
        (WebCore::GPUSwapChain::tryGetCurrentTexture):
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::tryCreateMtlTextureDescriptor):
        (WebCore::GPUTexture::tryCreate):
        (WebCore::GPUTexture::tryCreateDefaultTextureView):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        * platform/ios/ScrollViewIOS.mm:
        (WebCore::ScrollView::documentView const):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes const):
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        (WebCore::ScrollView::platformUnobscuredContentRect const):
        (WebCore::ScrollView::platformExposedContentRect const):
        (WebCore::ScrollView::setActualScrollPosition):
        (WebCore::ScrollView::platformVisibleContentRect const):
        (WebCore::ScrollView::platformVisibleContentSize const):
        (WebCore::ScrollView::legacyTileCache):
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformRepaintContentRectangle):
        (WebCore::ScrollView::platformContentsToScreen const):
        (WebCore::ScrollView::platformScreenToContents const):
        (WebCore::ScrollView::platformSetScrollOrigin):
        * platform/ios/WidgetIOS.mm:
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::frameRect const):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::paint):
        (WebCore::Widget::addToSuperview):
        (WebCore::Widget::removeFromSuperview):
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation invalidate]):
        (-[WebScrollerImpDelegate cancelAnimations]):
        (-[WebScrollerImpDelegate invalidate]):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::documentView const):
        (WebCore::ScrollView::platformAddChild):
        (WebCore::ScrollView::platformSetScrollbarModes):
        (WebCore::ScrollView::platformScrollbarModes const):
        (WebCore::ScrollView::platformSetCanBlitOnScroll):
        (WebCore::ScrollView::platformTopContentInset const):
        (WebCore::ScrollView::platformSetTopContentInset):
        (WebCore::ScrollView::platformVisibleContentRect const):
        (WebCore::ScrollView::platformVisibleContentRectIncludingObscuredArea const):
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollbarsSuppressed):
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformRepaintContentRectangle):
        (WebCore::ScrollView::platformContentsToScreen const):
        (WebCore::ScrollView::platformScreenToContents const):
        (WebCore::ScrollView::platformSetScrollOrigin):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):
        (WebCore::scrollerImpPaint):
        (WebCore::linenBackgroundColor):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setFocus):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::frameRect const):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):
        (WebCore::Widget::removeFromSuperview):
        (WebCore::Widget::convertFromRootToContainingWindow):
        (WebCore::Widget::convertFromContainingWindowToRoot):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookie):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::setAllCookiesToSameSiteStrict):
        (WebCore::NetworkStorageSession::cookiesForSession const):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::cookieAcceptPolicy const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):

2020-07-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Add ability for AX objects to output html in debug
        https://bugs.webkit.org/show_bug.cgi?id=214020

        Reviewed by Darin Adler.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase innerHTML]):
        (-[WebAccessibilityObjectWrapperBase outerHTML]):

2020-07-06  Brady Eidson  <beidson@apple.com>

        Get rid of concept of "initial connected gamepads"
        https://bugs.webkit.org/show_bug.cgi?id=214010

        Reviewed by Tim Horton.

        No new tests (Refactor, no behavior change)

        When a page starts using gamepads and some were already connected, this concept
        was meant to manage when the already-connected gamepads could be revealed to the page.
        
        It obviously wasn't needed, as only the HID provider used them (GameController provider didn't)
        
        Instead, we should just always include a "does this event make gamepads visible?" bit.
        
        This cleans up a lot of weird code gets both providers working closer to each other.
        
        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadConnected):
        (WebCore::GamepadManager::platformGamepadInputActivity):
        * Modules/gamepad/GamepadManager.h:
        
        * platform/gamepad/GamepadProvider.cpp:
        (WebCore::GamepadProvider::dispatchPlatformGamepadInputActivity):
        
        * platform/gamepad/GamepadProviderClient.h:
        (WebCore::GamepadProviderClient::setInitialConnectedGamepads): Deleted.
        
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect):
        (WebCore::GameControllerGamepadProvider::makeInvisibileGamepadsVisible):
        
        * platform/gamepad/mac/HIDGamepadProvider.cpp:
        (WebCore::HIDGamepadProvider::HIDGamepadProvider):
        (WebCore::HIDGamepadProvider::initialGamepadsConnectedTimerFired):
        (WebCore::HIDGamepadProvider::openAndScheduleManager):
        (WebCore::HIDGamepadProvider::closeAndUnscheduleManager):
        (WebCore::HIDGamepadProvider::deviceAdded):
        (WebCore::HIDGamepadProvider::deviceRemoved):
        (WebCore::HIDGamepadProvider::inputNotificationTimerFired):
        (WebCore::HIDGamepadProvider::connectionDelayTimerFired): Deleted.
        * platform/gamepad/mac/HIDGamepadProvider.h:
        
        * testing/MockGamepadProvider.cpp:
        (WebCore::MockGamepadProvider::connectMockGamepad):

2020-07-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Web process sometimes crashes when translating an article on spiegel.de
        https://bugs.webkit.org/show_bug.cgi?id=214014
        <rdar://problem/65099253>

        Reviewed by Tim Horton.

        The crash happens because we try to make a BoundaryPoint (using `makeBoundaryPoint`) out of an orphaned
        `Position` that is anchored before or after the anchor node (more specifically, either `PositionIsBeforeAnchor`
        or `PositionIsAfterAnchor`). In `makeBoundaryPoint`, we'll avoid the early `WTF::nullopt` return since the
        position is non-null, but then try to access the container node, which is null in this case because the anchor
        node has been unparented.

        Fix this by not attempting to observe orphaned DOM positions when extracting content for translation.

        Test: TextManipulation.StartTextManipulationAvoidCrashWhenExtractingOrphanedPositions

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

2020-07-06  John Wilander  <wilander@apple.com>

        Follow-up to r263992: Make isKinjaLoginAvatarElement() a free function
        https://bugs.webkit.org/show_bug.cgi?id=214015
        <rdar://problem/65153632>

        Unreviewed follow-up to a quirk. Just changing
        isKinjaLoginAvatarElement() from member to free function.

        As requested in https://bugs.webkit.org/show_bug.cgi?id=213910#c10.

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

2020-07-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement user action spec for Escape action
        https://bugs.webkit.org/show_bug.cgi?id=213875
        <rdar://problem/65022980>

        Reviewed by Darin Adler.

        Implement the Escape action for the user action events.
        https://github.com/WICG/aom/blob/gh-pages/explainer.md#user-action-events-from-assistive-technology

        Test: accessibility/keyevents-posted-for-dismiss-action.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::performEscape):
        (WebCore::AccessibilityNodeObject::dispatchSimulatedKeyboardUpDownEvent):
        (WebCore::AccessibilityNodeObject::postKeyboardKeysForValueChange):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformEscape]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::performEscape):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):

2020-07-06  James Darpinian  <jdarpinian@chromium.org>

        Fix transform feedback tests
        https://bugs.webkit.org/show_bug.cgi?id=213906

        Reviewed by Dean Jackson.

        Fix transform feedback conformance tests by implementing missing functionality such as:
         - Transform feedback object state tracking
         - Validation for all GL errors that can affect state tracking before calling ANGLE
         - Default transform feedback object
         - Pause/resume
         - Fix vertexAttribDivisor in WebGL 2 (unrelated to transform feedback)

        After this, all related tests pass except for a few that also fail in Chrome, and one that uses
        PIXEL_PACK_BUFFER which is not yet supported.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::~WebGL2RenderingContext):
        (WebCore::WebGL2RenderingContext::initializeNewContext):
        (WebCore::WebGL2RenderingContext::deleteTransformFeedback):
        (WebCore::WebGL2RenderingContext::bindTransformFeedback):
        (WebCore::ValidateTransformFeedbackPrimitiveMode):
        (WebCore::WebGL2RenderingContext::beginTransformFeedback):
        (WebCore::WebGL2RenderingContext::endTransformFeedback):
        (WebCore::WebGL2RenderingContext::transformFeedbackVaryings):
        (WebCore::WebGL2RenderingContext::pauseTransformFeedback):
        (WebCore::WebGL2RenderingContext::resumeTransformFeedback):
        (WebCore::WebGL2RenderingContext::setIndexedBufferBinding):
        (WebCore::WebGL2RenderingContext::getIndexedParameter):
        (WebCore::WebGL2RenderingContext::getMaxTransformFeedbackSeparateAttribs):
        (WebCore::WebGL2RenderingContext::getParameter):
        (WebCore::WebGL2RenderingContext::uncacheDeletedBuffer):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheInfoIfNeeded):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLTransformFeedback.cpp:
        (WebCore::WebGLTransformFeedback::create):
        (WebCore::WebGLTransformFeedback::WebGLTransformFeedback):
        (WebCore::WebGLTransformFeedback::setProgram):
        (WebCore::WebGLTransformFeedback::setBoundIndexedTransformFeedbackBuffer):
        (WebCore::WebGLTransformFeedback::getBoundIndexedTransformFeedbackBuffer):
        (WebCore::WebGLTransformFeedback::hasEnoughBuffers const):
        (WebCore::WebGLTransformFeedback::usesBuffer):
        (WebCore::WebGLTransformFeedback::unbindBuffer):
        (WebCore::WebGLTransformFeedback::validateProgramForResume const):
        * html/canvas/WebGLTransformFeedback.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::vertexAttribDivisor):

2020-07-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Locale-specific quotes infrastructure needs to compare locale strings properly
        https://bugs.webkit.org/show_bug.cgi?id=213827

        Reviewed by Darin Adler.

        Before this patch, WebKit is selecting which quotes to display on <q>
        elements by doing a raw strcmp() on the locale string with a big table
        of locale strings. strcmp() is the wrong way to compare locale strings.

        The HTML spec has a list of locales and their associated quotes[1].
        It is formulated in terms of CSS using the "lang()" pseudoclass.
        The spec of the lang() pseudoclass[2] describes that locale comparison
        needs to be done according to section 3.3.2 in RFC4647[3].

        This algorithm is a pretty general algorithm, and implementing it naively
        would mean turning our O(log(n)) algorithm into a O(n) algorithm, which
        would be unfortunate. Instead, we can use a few observations about the
        set of locale strings we are comparing against, in order to preserve the
        O(log(n)) runtime:
        - All the locales have either 1 or 2 subtags
        - None of the subtags in any of the ranges are wildcards
        - The list is sorted, so a locale string that is a prefix of another one
              is listed before it.

        [1] https://html.spec.whatwg.org/multipage/rendering.html#quotes
        [2] https://drafts.csswg.org/selectors-4/#the-lang-pseudo
        [3] https://tools.ietf.org/html/rfc4647#page-10

        Test: fast/css-generated-content/quotes-lang-2.html

        * WebCore.xcodeproj/xcshareddata/xcschemes/WebCore.xcscheme:
        * rendering/RenderQuote.cpp:
        (WebCore::subtagCompare):
        (WebCore::quoteTableLanguageComparisonFunction):
        (WebCore::quotesForLanguage):
        (WebCore::RenderQuote::computeText const):

2020-07-06  Daniel Bates  <dabates@apple.com>

        [iOS] WAKWindow should override -resignFirstResponder and clear state
        https://bugs.webkit.org/show_bug.cgi?id=214011
        <rdar://problem/65152410>

        Reviewed by Tim Horton.

        This is part of the fix for <rdar://problem/62615273>.

        Override -resignFirstResponder to clear out internal state that tracks the first responder
        in the iOS Legacy WebKit world.

        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow resignFirstResponder]):

2020-07-06  Sam Weinig  <weinig@apple.com>

        REGRESSION: (r263977): [ iOS Debug WK2 ] 36 fast form and web-platform test consistently crashing
        https://bugs.webkit.org/show_bug.cgi?id=214009
        <rdar://problem/65151752>

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::weekInputStyleSheet const):
        Replace ""_s with emptyString() to fix crashing tests.

2020-07-06  John Wilander  <wilander@apple.com>

        Storage Access API: Add the capability to open a popup and get user interaction so we can call the Storage Access API as a quirk, on behalf of websites that should be doing it themselves
        https://bugs.webkit.org/show_bug.cgi?id=213910
        <rdar://problem/65058017>

        Reviewed by Darin Adler.

        This patch not only adds the capability but also adds a site-specific quirk for
        the family of Kinja sites so that no previous user interaction with kinja.com
        results in a login popup for kinja.com.

        No new tests. This is for site-specific quirks.

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
            Just a change in the call into the quirk function.
        * page/Quirks.cpp:
        (WebCore::Quirks::isKinjaLoginAvatarElement const):
            Convenience function for telling if the given element is the Kinja login avatar.
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
            Now takes the whole Element to be able to look at both classes and attributes.
        * page/Quirks.h:

2020-07-06  Peng Liu  <peng.liu6@apple.com>

        Cleanup WebVideoFullscreenControllerAVKit.mm and PlaybackSessionInterfaceAVKit.mm
        https://bugs.webkit.org/show_bug.cgi?id=214005

        Reviewed by Daniel Bates.

        No new tests, no behavior change.

        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setUpFullscreen):
        Remove a redundant line.

2020-07-06  Clark Wang  <clark_wang@apple.com>

        Added PannerNode constructor according to spec
        https://bugs.webkit.org/show_bug.cgi?id=213801

        Reviewed by Chris Dumez.

        Added in new PannerNode constructor to match spec: https://www.w3.org/TR/webaudio/#dom-pannernode-pannernode.
        Added in AudioNodeOptions and PannerOptions files. Modified some previous code in order to pass compilation.

        Re-baselined existing tests now that new ones are passing. New ones that fail are due to accepted range
        of values that attributes can take on, which are to be implemented in a future patch.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeOptions.h: Added.
        * Modules/webaudio/AudioNodeOptions.idl: Added.
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNodeBase::PannerNodeBase):
        (WebCore::PannerNode::create):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/PannerOptions.h: Added.
        * Modules/webaudio/PannerOptions.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

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

        ASSERT_NOT_REACHED() in EventRegionContext::popClip()
        https://bugs.webkit.org/show_bug.cgi?id=213905

        Reviewed by Daniel Bates.

        Fix an assertion seen on bing.com, tesla.com etc where event region painting
        would have mismatched push/pop because of an obvious code error.

        I spent too long trying to make a testcase and gave up.

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

2020-07-06  Sam Weinig  <weinig@apple.com>

        Compile-time enable (but leave disabled at runtime by default) date/time input types on macOS to allow testing of cross platform (e.g. DOM) aspects of the controls
        https://bugs.webkit.org/show_bug.cgi?id=213949

        Reviewed by Darin Adler.

        Enable date/time related input element types on all Cocoa platforms, but disable them at runtime.
        To make runtime disabling work completely, the user agent style for these element types was
        extracted from html.css and is now only added when needed via UserAgentStyle::ensureDefaultStyleSheetsForElement.

        This is the first step to allowing us to run a subset of the date/time related input element tests
        on more platforms. If this is successful, we should consider do this for all platforms, not just Cocoa. 

        * css/html.css:
        Move to RenderTheme accessors for conditional inclusion based on Settings.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isDateTimeField const): Deleted.
        * html/HTMLInputElement.h:
        Removed dead isDateTimeField() code. This should have been removed when datetime was removed.

        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        (WebCore::InputType::create):
        Switch from using RuntimeEnabledFeatures to Settings for checking for enabling (Settings allows
        us to write less boilerplate code and is more versatile for testing) and switch to checking the
        condition on each InputType construction, rather than just on map's creation (again, this allows
        us to have more flexibility in testing).

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::inputTypeColorEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeColorEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::inputTypeDateEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeDateEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::inputTypeDateTimeLocalEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeDateTimeLocalEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::inputTypeMonthEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeMonthEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::inputTypeTimeEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeTimeEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::inputTypeWeekEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeWeekEnabled): Deleted.
        Remove hand written code infavor of code genreated from Settings.yaml.

        * page/Settings.yaml:
        Moved from RuntimeEnabledFeatures.

        * platform/LocalizedStrings.h:
        Remove weekFormatInLDML() declaration, which had not implementation.

        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::formatDateTime):
        * platform/text/PlatformLocale.h:
        Simplify code by marking formatDateTime() virtual on all platforms and un-#ifdefing
        the base implementation. Platforms that wish to override it still can.

        * platform/text/cocoa/LocaleCocoa.h:
        * platform/text/cocoa/LocaleCocoa.mm:
        * platform/text/ios/LocalizedDateCache.h:
        * platform/text/ios/LocalizedDateCache.mm:
        Remove iOS specific #ifdefs around code that should work on all Cocoa platforms.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::colorInputStyleSheet const):
        (WebCore::RenderTheme::dateInputStyleSheet const):
        (WebCore::RenderTheme::dateTimeLocalInputStyleSheet const):
        (WebCore::RenderTheme::monthInputStyleSheet const):
        (WebCore::RenderTheme::timeInputStyleSheet const):
        (WebCore::RenderTheme::weekInputStyleSheet const):
        * rendering/RenderTheme.h:
        Add default user agent stylesheet strings for input types. All moved from html.css. 
        
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):
        * style/UserAgentStyle.h:
        Conditionally add the input type specific user agent stylesheets only if the actual
        input type is being passed in. Since creation of the input types is guarded by a Setting,
        this can only happen if the type has been enabled. 

2020-07-06  Rob Buis  <rbuis@igalia.com>

        Allow setting empty host/hostname on URLs if they use file scheme
        https://bugs.webkit.org/show_bug.cgi?id=213983

        Reviewed by Alex Christensen.

        Allow setting empty host/hostname on URLs if they use file scheme [1, 2, 3].

        Behavior matches Firefox.

        [1] https://url.spec.whatwg.org/#dom-url-host
        [2] https://url.spec.whatwg.org/#dom-url-hostname
        [3] https://url.spec.whatwg.org/#host-state Step 1

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):
        (WebCore::URLDecomposition::setHostname):

2020-07-06  Matt Gilligan  <matthew_gilligan@apple.com>

        Update the user agent on iPadOS to use 11 to match macOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=213753

        Reviewed by Alex Christensen.

        Update the version number in the desktop user agent string to 11_0.

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

2020-07-06  Daniel Bates  <dabates@apple.com>

        Use RenderObject::positionForPoint instead of hit testing the entire view in closestEditablePositionInElementForAbsolutePoint
        https://bugs.webkit.org/show_bug.cgi?id=213975

        Reviewed by Wenson Hsieh.

        The target renderer is known a priori so it is more efficient to hit test this directly
        instead of indirectly by hit testing the entire view.

        * editing/Editing.cpp:
        (WebCore::closestEditablePositionInElementForAbsolutePoint):

2020-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Change the cookies accept policy when ITP is enabled
        https://bugs.webkit.org/show_bug.cgi?id=213502

        Reviewed by Michael Catanzaro.

        Set the accept policy to always when ITP is enabled and no-third-party is set, otherwise cookies access granted
        by request storage access would still be rejected by libsoup if policy is set to no-third-party.

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::setResourceLoadStatisticsEnabled): Move here the implementation for ports not
        using soup.
        * platform/network/NetworkStorageSession.h:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Initialize cookie accept policy.
        (WebCore::NetworkStorageSession::setCookieStorage): Set here the accept policy of the new jar.
        (WebCore::NetworkStorageSession::setCookieAcceptPolicy): Set the cookie accept policy taking into account that
        if ITP is enabled and no-third-party is set we save the policy but use always instead.
        (WebCore::NetworkStorageSession::cookieAcceptPolicy const): Remove the default case of the switch.
        (WebCore::NetworkStorageSession::setResourceLoadStatisticsEnabled): When enabled, save current policy and set
        always if no-third-party is set. When disabled, restore the saved policy.

2020-07-06  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Don't skip samples past media duration in AppendPipeline
        https://bugs.webkit.org/show_bug.cgi?id=213888

        Reviewed by Xabier Rodriguez-Calvar.

        appsinkNewSample() contained code to skip samples whose presentation
        time starts after media duration. This is paradoxical, because later
        sourceBufferPrivateDidReceiveSample() extends media duration whenever
        the presentation end time of the sample is past the original one.

        It does not sound reasonable that samples extending the duration are
        okay on one case but outright rejected in the other. Also, if it was
        about skipping samples, sourceBufferPrivateDidReceiveSample() could do
        it itself, and already does in other cases.

        For all these reasons I was very doubtful of the need for this if()
        and indeed removing this condition didn't cause any new test failure.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::appsinkNewSample):

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263960.
        https://bugs.webkit.org/show_bug.cgi?id=213980

        Re-land, because r263959 somehow fixed the build issue caused
        by r263953

        Reverted changeset:

        "Unreviewed, reverting r263953 and r263959."
        https://bugs.webkit.org/show_bug.cgi?id=213979
        https://trac.webkit.org/changeset/263960

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263953 and r263959.
        https://bugs.webkit.org/show_bug.cgi?id=213979

        Broke internal build

        Reverted changesets:

        "[Cocoa] Move almost all features from FeatureDefines.xcconfig
        to PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=212542
        https://trac.webkit.org/changeset/263953

        "[Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build
        system"
        https://bugs.webkit.org/show_bug.cgi?id=213976
        https://trac.webkit.org/changeset/263959

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build system
        https://bugs.webkit.org/show_bug.cgi?id=213976

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Removed everything except for ENABLE_WEB_RTC.

        * Configurations/WebCore.xcconfig: Removed FEATURE_DEFINES.
        * DerivedSources-input.xcfilelist: Removed FeatureDefines.xcconfig.
        * DerivedSources.make: Removed FEATURE_DEFINES, FEATURE_DEFINE_FLAGS, and the dependency
        on FeatureDefines.xcconfig.

2020-07-05  Sihui Liu  <sihui_liu@appe.com>

        Text manipulation: add a new heuristic to decide paragraph boundary
        https://bugs.webkit.org/show_bug.cgi?id=213918

        Reviewed by Wenson Hsieh.

        Modified test: TextManipulation.StartTextManipulationTreatsInlineBlockLinksAndButtonsAndSpansAsParagraphs.

        * editing/TextManipulationController.cpp:
        (WebCore::isEnclosingItemBoundaryElement):

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] REGRESSION (r263914): Non-Apple-Pay Cocoa builds failing
        https://bugs.webkit.org/show_bug.cgi?id=213977

        * Modules/applepay/cocoa/PaymentMethodCocoa.mm: Fixed messed up #endif and
        unnecessary #undef at end of file.

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

        [iOS] La Banque Postale app does not respect safe area insets on iOS 14
        https://bugs.webkit.org/show_bug.cgi?id=213974
        <rdar://problem/65109197>

        Reviewed by Darin Adler.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isLaBanquePostale): Added.

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Move almost all features from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212542

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Delete everything except
        ENABLE_EXPERIMENTAL_FEATURES and ENABLE_WEBRTC.

2020-07-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS 11] Indeterminate progress bar animation periodically jumps
        https://bugs.webkit.org/show_bug.cgi?id=213967

        Reviewed by Sam Weinig.

        The animation for an indeterminate progress bar occasionally jumps to the starting frame on macOS 11. This is
        because the indeterinate progress bar animation only lasts for 120 frames on macOS 11, so our current hard-coded
        value of 256 frames results in 16 extra frames of animation, before abruptly looping back to the starting frame.

        To fix this, instead of specifying the animation frame index when painting progress bars on macOS, specify the
        starting time and current time for the animation, and let CoreUI determine which frame to use.

        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationProgress):

        Assert that this never gets called with a zero animation duration.

        (WebCore::RenderProgress::updateAnimationState):

        Instead of checking for the animation duration to determine whether or not we should try and animate progress
        bar painting, check for the animation repeat interval instead. This is because on macOS, we no longer hard-code
        the animation duration, but still want to be able to animate progress bars.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::animationRepeatIntervalForProgressBar const): Deleted.
        (WebCore::RenderThemeIOS::animationDurationForProgressBar const): Deleted.

        Drive-by fix: remove some unnecessary overridden method implementations on RenderThemeIOS.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar const): Deleted.

        Stop overriding this method, and remove the `progressAnimationNumFrames` constant declared in this file.

2020-07-05  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [macOS] Allow selecting HEIF images if the 'accept' attribute includes an image MIME type that the platform can transcode the HEIF to
        https://bugs.webkit.org/show_bug.cgi?id=212489

        Reviewed by Darin Adler.

        Add some utility functions to MIMETypeRegistry. These new functions will
        deal with a list of MIME types combined with a list of file extensions.
        They are going to be used the FileChooserSettings which reflects the 
        'accept' attribute of the <input> file element.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::trimmedExtension):
        (WebCore::MIMETypeRegistry::preferredImageMIMETypeForEncoding):
        (WebCore::MIMETypeRegistry::containsImageMIMETypeForEncoding):

        (WebCore::MIMETypeRegistry::allowedMIMETypes):
        It returns the set of mime types which is stated by a list of mime types
        and a list of file extensions.

        (WebCore::MIMETypeRegistry::allowedFileExtensions):
        It returns the set of extensions which is stated by a list of mime types
        and a list of file extensions.

        * platform/MIMETypeRegistry.h:

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove all features from FeatureDefines.xcconfig that are already mentioned in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=213962

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Removed all features that were mentioned
        in PlatformEnableCocoa.h; the rules in that file now define whether they are enabled.

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

        [LFC][BFC] Move PositiveAndNegativeVerticalMargin to UsedVerticalMargin
        https://bugs.webkit.org/show_bug.cgi?id=213963

        Reviewed by Antti Koivisto.

        Now that UsedVerticalMargin is not used in Display::Box, we can merged these 2 layout structures.

        * layout/MarginTypes.h:
        (WebCore::Layout::UsedVerticalMargin::PositiveAndNegativePair::Values::isNonZero const):
        (WebCore::Layout::PositiveAndNegativeVerticalMargin::Values::isNonZero const): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingState.h:
        (WebCore::Layout::BlockFormattingState::hasUsedVerticalMargin const):
        (WebCore::Layout::BlockFormattingState::setPositiveAndNegativeVerticalMargin): Deleted.
        (WebCore::Layout::BlockFormattingState::hasPositiveAndNegativeVerticalMargin const): Deleted.
        (WebCore::Layout::BlockFormattingState::positiveAndNegativeVerticalMargin const): Deleted.
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedPositiveAndNegativeMargin const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginValue const):
        (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::collapsedVerticalValues):
        * layout/blockformatting/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeValues const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeMarginBefore const):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):

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

        [LFC][BFC] Remove redundant out-of-flow height-and-margin handling
        https://bugs.webkit.org/show_bug.cgi?id=213959

        Reviewed by Antti Koivisto.

        We will never end up here with an out-of-flow box.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):

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

        [LFC][BFC] Store used vertical margin values in the formatting state
        https://bugs.webkit.org/show_bug.cgi?id=213958

        Reviewed by Antti Koivisto.

        Layout related vertical margin values (collapsed vs. non-collapsed) should all go to the FormattingState, while
        Display::Box should only have the final values.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
        * layout/MarginTypes.h:
        (WebCore::Layout::marginBefore):
        (WebCore::Layout::marginAfter):
        (WebCore::Layout::UsedVerticalMargin::before const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::after const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::isCollapsedThrough const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::nonCollapsedValues const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::collapsedValues const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::hasCollapsedValues const): Deleted.
        (WebCore::Layout::UsedVerticalMargin::setCollapsedValues): Deleted.
        (WebCore::Layout::UsedVerticalMargin::UsedVerticalMargin): Deleted.
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockFormattingState.h:
        (WebCore::Layout::BlockFormattingState::setUsedVerticalMargin):
        (WebCore::Layout::BlockFormattingState::usedVerticalMargin const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::updateMarginAfterForPreviousSibling):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::nonCollapsedMarginBox const): Deleted.
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::rectWithMargin const):
        (WebCore::Display::Box::setHasValidVerticalMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::marginBefore const):
        (WebCore::Display::Box::marginAfter const):
        (WebCore::Display::Box::VerticalMargin::before const): Deleted.
        (WebCore::Display::Box::VerticalMargin::after const): Deleted.
        (WebCore::Display::Box::VerticalMargin::isCollapsedThrough const): Deleted.
        (WebCore::Display::Box::VerticalMargin::nonCollapsedValues const): Deleted.
        (WebCore::Display::Box::VerticalMargin::collapsedValues const): Deleted.
        (WebCore::Display::Box::VerticalMargin::hasCollapsedValues const): Deleted.
        (WebCore::Display::Box::VerticalMargin::setCollapsedValues): Deleted.
        (WebCore::Display::Box::hasCollapsedThroughMargin const): Deleted.
        (WebCore::Display::Box::setHasValidVerticalNonCollapsedMargin): Deleted.
        (WebCore::Display::Box::VerticalMargin::VerticalMargin): Deleted.
        (WebCore::Display::Box::VerticalMargin::NonCollapsedValues::NonCollapsedValues): Deleted.
        (WebCore::Display::Box::VerticalMargin::CollapsedValues::CollapsedValues): Deleted.
        (WebCore::Display::Box::nonCollapsedMarginBefore const): Deleted.
        (WebCore::Display::Box::nonCollapsedMarginAfter const): Deleted.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::layoutCell):

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove unconditional features from FeatureDefines.xcconfig, making sure they are covered in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Removed features that are either unconditionally not enabled,
        or unconditionally enabled. Double checked that all the enabled ones are either in PlatformEnable.h or
        PlatformEnableCocoa.h.

2020-07-04  Sam Weinig  <weinig@apple.com>

        Part 1 of SimpleColor and SRGBA<uint8_t> are essentially the same - let's converge them
        https://bugs.webkit.org/show_bug.cgi?id=213948

        Reviewed by Darin Adler.

        Begin converging SimpleColor and SRGBA<uint8_t>, starting with removing usages that
        were getting SimpleColors to access or operate on the color's components.

        - Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>
        - Replace toSRGBALossy() with toSRGBALossy<float>().
        - Remove direct color component accessors from SimpleColor. 
        - Add new ARGB type to support explicit conversion from packed ARGB bits to a color type.
        - Update premulitplication functions to operate on SRGBA<uint8_t> and rename them to
          match existing function operating on SRGBA<float>.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Removes SimpleColor.cpp

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::colorValue const):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * css/DeprecatedCSSOMRGBColor.h:
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.
        
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::lightness const):
        (WebCore::Color::luminance const):
        (WebCore::Color::semanticColor const):
        (WebCore::Color::toSRGBASimpleColorLossy const): Deleted.
        (WebCore::Color::toSRGBALossy const): Deleted.
        * platform/graphics/Color.h:
        Remove toSRGBASimpleColorLossy() and templatize toSRGBALossy() to support both
        lossy conversion to byte based components as well.

        * platform/graphics/ColorBlending.cpp:
        (WebCore::blendSourceOver):
        (WebCore::blendWithWhite):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        (WebCore::blend):
        (WebCore::blendWithoutPremultiply):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>. Adopt new premultipliedCeiling
        and unpremultiplied functions that operate on SRGBA<uint8_t> (rather than SimpleColor) and 
        clamping conversion to SRGBA<uint8_t> via convertToComponentBytes<SRGBA>. premultipliedCeiling 
        now works correctly for 0 alpha, so no workaround is needed anymore.

        * platform/graphics/ColorTypes.h:
        (WebCore::asARGB):
        (WebCore::asSRGBA):
        Add new type of color struct representing a format packing. The initial one is ARGB to support
        the few places using SimpleColor to manipulate ARGB pixel data. 

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::unpremultiplied):
        (WebCore::premultipliedFlooring):
        (WebCore::premultipliedCeiling):
        (WebCore::unpremultipliedComponentByte):
        * platform/graphics/ColorUtilities.h:
        (WebCore::convertToComponentBytes):
        (WebCore::convertToComponentFloats):
        Move remaining premultiplication functions here (from SimpleColor.h/cpp) and reimplement
        to operate on SRGBA<uint8_t>. Also slightly rename, premultiply -> premultiplied, to 
        match existing premultiplied functions. While moving them, also fix the premultiplied
        functions to better support 0 alpha to avoid workarounds in callers.
        
        Additional, this adds convertToComponentBytes/convertToComponentFloats helper functions
        which convert to/from uint8_t/float based color types, and support creating color types
        from values potentially outside of their supported value range. Right now, that value
        range is always considerer to be 0-255 for uint8_t and 0-1 for float, but that can be
        chnaged in the future by allowing color type structs to indicate their supported ranges.

        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::toSRGBAFloatComponentsLossy const):
        (WebCore::ExtendedColor::toSRGBALossy const): Deleted.
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::toSRGBALossy const):
        Rename existing toSRGBALossy() to toSRGBAFloatComponentsLossy() and replace templatize
        toSRGBALossy(), with the uint8_t case just down converting via new convertToComponentBytes.
        
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::fillRect):
        (WebCore::ImageBackingStore::setPixel):
        (WebCore::ImageBackingStore::blendPixel):
        (WebCore::ImageBackingStore::pixelValue const):
        Replace usage of SimpleColor with new ARGB type for conversion from ARGB to SRGBA<uint8_t>.
        Update to use new premulitplication functions. Also, update the interface to take pixel 
        components as uint8_t, rather than unsigned, as that is what the callers are passing anyway,
        and it avoids us having to clamp/cast manually all over the case.

        * platform/graphics/SimpleColor.cpp: Removed.
        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::alphaComponent const):
        (WebCore::SimpleColor::asSRGBA const):
        (WebCore::SimpleColor::redComponent const):
        (WebCore::SimpleColor::greenComponent const):
        (WebCore::SimpleColor::blueComponent const):
        (WebCore::operator==):
        (WebCore::makeSimpleColor):
        Simplify interface, making red, green and blue component accessors private and having 
        callers all use SRGBA directly. Remove premultiplication functions in favor of new ones  
        in ColorUtilities.

        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::PlatformCAAnimationCocoa::setFromValue):
        (WebCore::PlatformCAAnimationCocoa::setToValue):
        (WebCore::PlatformCAAnimationCocoa::setValues):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::setFromValue):
        (PlatformCAAnimationWin::setToValue):
        (PlatformCAAnimationWin::setValues):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::setSourceRGBAFromColor):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::addColorStopRGBA):
        (WebCore::setCornerColorRGBA):
        (WebCore::interpolateColorStop):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
        Replace usage of SimpleColor with new ARGB type for conversion from ARGB to SRGBA<uint8_t>.
        Update to use new premulitplication functions.

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        Replace usage of SimpleColor with new ARGB type for conversion from ARGB to SRGBA<uint8_t>.
        Update to use new premulitplication functions. 

        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::clearColor):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_COLOR_F const):
        (WebCore::Color::operator D2D1_VECTOR_4F const):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        Replace direct usage component access from SimpleColor with usage of accessed SRGBA<uint8_t>.

        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::colorWithGlobalAlpha const):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * rendering/RenderThemeIOS.mm:
        (WebCore::shouldUseConvexGradient):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        Replace toSRGBALossy() with toSRGBALossy<float>().

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::animate):
        Replace toSRGBASimpleColorLossy() with toSRGBALossy<uint8_t>.

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

        [LFC] Remove redundant Display::Box::HorizontalMargin c'tors
        https://bugs.webkit.org/show_bug.cgi?id=213957

        Reviewed by Antti Koivisto.

        Let's just have a very simple Display::Box:HorizontalMargin struct.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::HorizontalMargin::HorizontalMargin): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):

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

        [LFC] Do not cache computed horizontal margin values
        https://bugs.webkit.org/show_bug.cgi?id=213956

        Reviewed by Antti Koivisto.

        Outside of the width + margin computation, computed horizontal margin values are only required by
        float positioning. Let's just re-computed them on demand (which is basically just a style.marginStart/end resolve).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layout):
        * layout/LayoutUnits.h:
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidVerticalNonCollapsedMargin):
        (WebCore::Display::Box::setHasValidHorizontalComputedMargin): Deleted.
        (WebCore::Display::Box::ComputedHorizontalMargin::ComputedHorizontalMargin): Deleted.
        (WebCore::Display::Box::setHorizontalComputedMargin): Deleted.
        (WebCore::Display::Box::computedMarginStart const): Deleted.
        (WebCore::Display::Box::computedMarginEnd const): Deleted.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::computedHorizontalMargin):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForNonFloatingFloatAvoider const):
        * layout/floats/FloatingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::layoutCell):

2020-07-04  Darin Adler  <darin@apple.com>

        Make generate-unified-sources.sh not depend on features being listed in FEATURE_DEFINES environment variable
        https://bugs.webkit.org/show_bug.cgi?id=212420

        Reviewed by Don Olmstead.

        * Scripts/generate-unified-sources.sh: Added code to include sources from
        SourcesCocoaInternalSDK.txt, only if USE_INTERNAL_SDK is YES. Removed --feature-flags
        argument from invocation of generate-unified-source-bundles.rb. Removed many
        unnecessary quotes.

        * SourcesCocoa.txt: Removed the names of the files from the internal SDK.
        * SourcesCocoaInternalSDK.txt: Added. Moved those names here.

        * html/MediaElementSession.cpp: Added some includes, apparently needed because of different
        groupings of unified sources.

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

        [LFC] Used dedicated paint margin structures
        https://bugs.webkit.org/show_bug.cgi?id=213955

        Reviewed by Antti Koivisto.

        This is in preparation for having only final margin values in Display::Box.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::VerticalMargin::before const):
        (WebCore::Display::Box::VerticalMargin::after const):
        (WebCore::Display::Box::VerticalMargin::isCollapsedThrough const):
        (WebCore::Display::Box::VerticalMargin::nonCollapsedValues const):
        (WebCore::Display::Box::VerticalMargin::collapsedValues const):
        (WebCore::Display::Box::VerticalMargin::hasCollapsedValues const):
        (WebCore::Display::Box::VerticalMargin::setCollapsedValues):
        (WebCore::Display::Box::VerticalMargin::VerticalMargin):
        (WebCore::Display::Box::VerticalMargin::NonCollapsedValues::NonCollapsedValues):
        (WebCore::Display::Box::VerticalMargin::CollapsedValues::CollapsedValues):
        (WebCore::Display::Box::ComputedHorizontalMargin::ComputedHorizontalMargin):
        (WebCore::Display::Box::HorizontalMargin::HorizontalMargin):
        (WebCore::Display::Box::setHorizontalMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::setHorizontalComputedMargin):
        (WebCore::Display::Box::verticalMargin const):
        (WebCore::Display::Box::horizontalMargin const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::horizontalMargin const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):

2020-07-04  Darin Adler  <darin@apple.com>

        Update comment in FeatureDefines.xcconfig since PlatformEnableCocoa.h should be used instead
        https://bugs.webkit.org/show_bug.cgi?id=213952

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Updated comment.

2020-07-04  Youenn Fablet  <youenn@apple.com>

        Enable VTB required low latency code path
        https://bugs.webkit.org/show_bug.cgi?id=210609
        <rdar://problem/61890332>

        Reviewed by Darin Adler.

        Add new runtime flag for the low latency code path.
        Call webrtc newly introduced setter whenever creating a new encoder factory.
        Manually tested.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCH264LowLatencyEncoderEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCH264LowLatencyEncoderEnabled):
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):

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

        MediaRecorder should support peer connection remote video tracks
        https://bugs.webkit.org/show_bug.cgi?id=213924

        Reviewed by Darin Adler.

        Previsouly we were checking whether width and height are given for a video track.
        This is not always available, for instance for remote tracks.
        And this can change over time.
        Instead, pass a simple boolean (whether there is a video track or not).
        Minor simplifications to stop storing unneeded members.

        Tests: imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-bitrate.https.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-creation.https.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-detached-context.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-disabled-tracks.https.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-events-and-exceptions.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-no-sink.https.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-pause-resume.html
               imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-peerconnection.https.html
               imported/w3c/web-platform-tests/mediacapture-record/passthrough/MediaRecorder-passthrough.https.html

        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        (WebCore::MediaRecorderPrivateAVFImpl::MediaRecorderPrivateAVFImpl):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::create):

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove all remaining #if (ENABLE_WEBGL and ENABLE_WEBXR)
        https://bugs.webkit.org/show_bug.cgi?id=213946

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_WEBGL and ENABLE_WEBXR items out of if blocks.
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove all remaining #if, and sort files, getting rid of paragraphing
        per directory to just turn this into three sorted lists of filenames (separate ones for
        derived sources and generated bindings at the end). The source files themselves have the
        appropriate conditionals and soon we will not need to support #if in Sources.txt files.

2020-07-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Unreviewed stack-overflow crash fix for r263890
        https://bugs.webkit.org/show_bug.cgi?id=213912
        <rdar://problem/65069686>

        Renamed mimeTypeForExtension to mimeTypeForExtensionFromRegistry.

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::mimeTypeForExtensionFromRegistry):
        (WebCore::MIMETypeRegistry::mimeTypeForExtension):
        (WebCore::mimeTypeForExtension): Deleted.

2020-07-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Unreviewed build fix for r263913
        https://bugs.webkit.org/show_bug.cgi?id=213939
        <rdar://problem/65084185>

        * CMakeLists.txt: Process encrypted media IDL files even if ENABLE_ENCRYPTED_MEDIA is off.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_WIRELESS_PLAYBACK_TARGET
        https://bugs.webkit.org/show_bug.cgi?id=213945

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Moved items from the pictureinpicture and remoteplayback module here
        from PlatformMac.cmake. Even if these are currently only implemented on Mac, they are
        not intrinsically Mac-specific, so they belong here.
        * PlatformMac.cmake: Ditto.

        * Sources.txt: Remove #if ENABLE_WIRELESS_PLAYBACK_TARGET and sort files in with the others.
        The source files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

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

        Remove support for ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE
        https://bugs.webkit.org/show_bug.cgi?id=213932

        Reviewed by Darin Adler.

        Removes support for non-standard <input type="datetime">, currently being 
        guarded by the macro ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE. This macro, was
        added back in 2013 as a temporary measure to support some engines who shipped
        support for <input type="datetime">. It is currently not enabled for any
        ports so now seems like as good a time as any to remove it.

        * Configurations/FeatureDefines.xcconfig:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/html.css:
        (#endif):
        * html/DateTimeInputType.cpp: Removed.
        * html/DateTimeInputType.h: Removed.
        * html/InputType.cpp:
        (WebCore::createInputTypeFactoryMap):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::inputTypeDateTimeEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setInputTypeDateTimeEnabled): Deleted.
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTimeLocal):
        (WebCore::DateComponents::millisecondsSinceEpoch const):
        (WebCore::DateComponents::toString const):
        (WebCore::DateComponents::fromParsingDateTime): Deleted.
        (WebCore::DateComponents::parseDateTime): Deleted.
        (WebCore::DateComponents::fromMillisecondsSinceEpochForDateTime): Deleted.
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTime): Deleted.
        * platform/DateComponents.h:
        * platform/text/PlatformLocale.cpp:
        (WebCore::Locale::formatDateTime):
        * platform/text/ios/LocalizedDateCache.mm:
        (WebCore::LocalizedDateCache::createFormatterForType):

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_USER_MESSAGE_HANDLERS
        https://bugs.webkit.org/show_bug.cgi?id=213944

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_USER_MESSAGE_HANDLERS items out of if blocks.
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove #if ENABLE_USER_MESSAGE_HANDLERS and sort files in with the others.
        The source files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/SourcesCocoa.txt: Remove #if ENABLE_APPLE_PAY
        https://bugs.webkit.org/show_bug.cgi?id=213943

        Reviewed by Sam Weinig.

        * SourcesCocoa.txt: Remove #if ENABLE_APPLE_PAY and sort files in with the others.
        The source files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.
        Also, sort the files and remove the separate per-directory paragraphs, making this closer
        to just a sorted list of filenames with less "editorial" content. Also added comments
        about the USE_INTERNAL_SDK part of the file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=213939

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_ENCRYPTED_MEDIA items out of if blocks.
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove #if ENABLE_LEGACY_ENCRYPTED_MEDIA and sort files in with the others.
        The IDL files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_LEGACY_ENCRYPTED_MEDIA
        https://bugs.webkit.org/show_bug.cgi?id=213937

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_LEGACY_ENCRYPTED_MEDIA items out of if blocks.
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove #if ENABLE_LEGACY_ENCRYPTED_MEDIA and sort files in with the others.
        The IDL files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_QUOTA
        https://bugs.webkit.org/show_bug.cgi?id=213941

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_QUOTA items out of "if (ENABLE_QUOTA)".
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove #if ENABLE_QUOTA and sort files in with the others.
        The source files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_GAMEPAD
        https://bugs.webkit.org/show_bug.cgi?id=213936

        Reviewed by Sam Weinig.

        * CMakeLists.txt: Move IDL-related ENABLE_GAMEPAD items out of "if (ENABLE_GAMEPAD)".
        Longer term, I think our direction should be to remove most feature conditionals from
        CMakeLists.txt too, just like I am doing for Sources.txt. But for now, doing just enough
        of this to keep the build working. Someone can tidy this later as desired.

        * Sources.txt: Remove #if ENABLE_GAMEPAD and sort files in with the others.
        The IDL files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_MEDIA_SOURCE
        https://bugs.webkit.org/show_bug.cgi?id=213940

        Reviewed by Sam Weinig.

        * Sources.txt: Remove #if ENABLE_MEDIA_SOURCE and sort files in with the others.
        The IDL files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

2020-07-03  Lauro Moura  <lmoura@igalia.com>

        [WPE] Fix build with clang after r263898
        https://bugs.webkit.org/show_bug.cgi?id=213942

        Unreviewed build fix.

        * loader/appcache/ApplicationCacheManifestParser.cpp:

2020-07-03  Darin Adler  <darin@apple.com>

        WebCore/Sources.txt: Remove #if ENABLE_APPLICATION_MANIFEST
        https://bugs.webkit.org/show_bug.cgi?id=213935

        Reviewed by Sam Weinig.

        * Sources.txt: Remove #if ENABLE_APPLICATION_MANIFEST and sort files in with the others.
        The source files themselves have conditionals, we don't need conditionals in Sources.txt,
        and we are moving towards removing the capability for #if ENABLE in the Sources.txt file.

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

        Add "-Wliteral-conversion" warning to Xcode based builds and fix the issues it finds
        https://bugs.webkit.org/show_bug.cgi?id=213931

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Add -Wliteral-conversion.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        Fix error due to passing a double when a uint8_t was expected. This probably means
        that the debug borders looked wrong for a little bit, but should now be back to 
        their transparent splendor.

2020-07-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC][Quirk] Inflow child box quirk vertical margins should collapse with table cell.
        https://bugs.webkit.org/show_bug.cgi?id=213926

        Reviewed by Antti Koivisto.

        The BFC rootd (table cell box in this case) nornally do not collapse their margins with the first/last inflow child.
        However in quirks mode, cell boxes collapse their (non-existing)margins with inflow quirk margins.

        <table><tr><td><p>text content</td></tr></table> <- <p> box's top position is at 0px in quirks mode, while at 16px (1em) in strict mode.

        This patch ensures that we collapse the quirk margins and take them into account when computing the cell's content height.

        Test: fast/layoutformattingcontext/table-quirk-vertical-margin-simple.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldCollapseMarginBeforeWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::Quirks::shouldCollapseMarginAfterWithParentMarginAfter const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBeforeCollapsesWithParentMarginBefore const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginAfterCollapsesWithParentMarginAfter const):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedVerticalValues):
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::Quirks::Quirks):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::cellHeigh const):
        * layout/tableformatting/TableFormattingContextQuirks.cpp: Added.
        (WebCore::Layout::TableFormattingContext::Quirks::shouldIgnoreChildContentVerticalMargin const):

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

        Split color conversion functions out of ColorUtilities.h/cpp into their own file.
        https://bugs.webkit.org/show_bug.cgi?id=213803

        Reviewed by Simon Fraser.

        Moves color conversion functions (both between color spaces like toDisplayP3(const SRGBA&)
        and between different representations like toHSLA(const SRGBA&)) to their own files.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * css/parser/CSSPropertyParserHelpers.cpp:
        * editing/cocoa/DataDetection.mm:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * html/canvas/CanvasStyle.cpp:
        Add include of ColorConversion.h

        * platform/graphics/ColorConversion.cpp: Added.
        * platform/graphics/ColorConversion.h: Added.
        * platform/graphics/ColorUtilities.cpp:
        * platform/graphics/ColorUtilities.h:
        Move functions to the new files.

        * platform/graphics/ExtendedColor.cpp:
        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        * platform/graphics/filters/FELighting.cpp:
        Add include of ColorConversion.h, remove unncessary include of ColorUtilities.h

        * platform/graphics/cairo/ImageBufferCairoSurfaceBackend.cpp:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FilterOperations.cpp:
        Remove unncessary include of ColorUtilities.h

        * platform/graphics/filters/FilterOperation.cpp:
        Add include of ColorConversion.h and ColorTypes.h, remove unncessary include of ColorUtilities.h.

        * platform/graphics/gtk/ColorGtk.cpp:
        * platform/graphics/win/ColorDirect2D.cpp:
        Remove unncessary include of ColorUtilities.h. Update to use standard float -> SimpleColor idiom
        using SRGBA<float>.

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

        Convert DateComponents parsing code to use Optional based return values rather than out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=213440

        Reviewed by Darin Adler.

        Rework DateComponents and Date/Time related InputTypes to use Optional based programming
        for parsing results. Also take the opportunity to remove unicode upconversion from 
        DateComponent parsing and instead separate UChar and LChar variants via templates. 

        * html/BaseDateAndTimeInputType.cpp:
        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
            - Removes parseToDateComponentsInternal. No need it and parseToDateComponents.
            - Makes parseToDateComponents pure virtual. The old code had a default implementations
              down in InputType, but it had no callers.
            - Remove iOS vs. non-iOS difference for dateType(). It is now available on InputType
              on all platforms. 
            - Make setMillisecondToDateComponents and parseToDateComponents return an Optional.
        
        * platform/DateComponents.cpp:
        * platform/DateComponents.h:
            - Replace member function based interfaces for parsing/setting explicit time offsets
              with new factory functions that return Optional<DateComponents>.
            - These factories are implemented using the existing member functions, which are
              now private.
            - Make max/min constants constexpr.
            - Make parse* member functions templates to allow factory parse functions to
              call them without upconverting.
            - Replace header guard with #pragma once.
2020-07-03  Sam Weinig  <weinig@apple.com>

        Cleanup ApplicationCacheManifestParser.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=213844

        Reviewed by Alex Christensen.

        Address some post review comments.

        * loader/appcache/ApplicationCacheManifestParser.cpp:
        (WebCore::parseApplicationCacheManifest):
        Fix typos: manfest -> manifest. 
        * loader/appcache/ApplicationCacheManifestParser.h:
        Stop including ApplicationCache.h, and only include / declare what's needed.

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

        Support MediaRecorder.onstart
        https://bugs.webkit.org/show_bug.cgi?id=213720

        Reviewed by Darin Adler.

        Fire start event if MediaRecorder.start is successful.
        Do some WebIDL clean-up, in particular change timeSlice from long to unsigned long, as per spec.
        Covered by added test.

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::startRecording):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:

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

        MediaRecorder.start() Method is Ignoring the "timeslice" Parameter
        https://bugs.webkit.org/show_bug.cgi?id=202233
        <rdar://problem/55720555>

        Reviewed by Eric Carlson.

        Use a timer to implement timeSlice parameter.
        Schedule timer either when start is called or as part of requestData callback.
        This should ensure that, if requestData is called by the application, the timer will be rescheduled appropriately.

        Test: http/wpt/mediarecorder/MediaRecorder-start-timeSlice.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:

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

        MediaRecorder stopRecorder() returns empty Blob after first use
        https://bugs.webkit.org/show_bug.cgi?id=212274
        <rdar://problem/63601298>

        Reviewed by Eric Carlson.

        Refactor code to create/destroy MediaRecorderPrivate on MediaRecorder start/stop.
        This allows reusing a MediaRecorder after a stop and restarting with a clean state.

        We introduce MediaRecorderPrivate::startRecording to do the initialization,
        which allows to fix a potential ref cycle as part of the error callback handling.

        Make some improvements to the platform implementation, in particular add default initialization to all fields.
        Align the code using AudioConverterRef to what is done in AudioSampleDataSource.
        Also call VTCompressionSessionInvalidate when destroying the VideoSampleBufferCompressor.

        Test: http/wpt/mediarecorder/MediaRecorder-multiple-start-stop.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::fetchData):
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::startRecording):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):

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

        Change the names of MIMETypeRegistry methods to comply with webkit naming style
        https://bugs.webkit.org/show_bug.cgi?id=213912

        Reviewed by Youenn Fablet.

        Remove the verb 'get' from the name of some of the methods of MIMETypeRegistry.

        * editing/cocoa/WebArchiveResourceFromNSAttributedString.mm:
        (WebCore::if):
        * fileapi/File.cpp:
        (WebCore::File::computeNameAndContentType):
        * html/HTMLPlugInElement.cpp:
        (WebCore::pluginReplacementForType):
        * loader/mac/LoaderNSURLExtras.mm:
        (suggestedFilenameWithMIMEType):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::commonMimeTypesMap):
        (WebCore::MIMETypeRegistry::mediaMIMETypeForExtension):
        (WebCore::MIMETypeRegistry::mimeTypeForPath):
        (WebCore::MIMETypeRegistry::isSupportedImageMIMEType):
        (WebCore::MIMETypeRegistry::normalizedMIMEType):
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): Deleted.
        (WebCore::MIMETypeRegistry::getMediaMIMETypesForExtension): Deleted.
        Delete this function since it is not used.

        (WebCore::MIMETypeRegistry::getMIMETypeForPath): Deleted.
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType): Deleted.
        * platform/MIMETypeRegistry.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::MIMETypeRegistry::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::extensionsForMIMEType):
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Deleted.
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType): Deleted.
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): Deleted.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::filenameExtension const):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        * platform/playstation/MIMETypeRegistryPlayStation.cpp:
        (WebCore::MIMETypeRegistry::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::extensionsForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Deleted.
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): Deleted.
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType): Deleted.
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::extensionsForMIMEType):
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): Deleted.
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Deleted.
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType): Deleted.
        * platform/xdg/MIMETypeRegistryXdg.cpp:
        (WebCore::MIMETypeRegistry::mimeTypeForExtension):
        (WebCore::MIMETypeRegistry::preferredExtensionForMIMEType):
        (WebCore::MIMETypeRegistry::extensionsForMIMEType):
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension): Deleted.
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType): Deleted.
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType): Deleted.

2020-07-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Enable threaded rendering by default
        https://bugs.webkit.org/show_bug.cgi?id=213883

        Reviewed by Adrian Perez de Castro.

        When building with GTK4 we no longer use the cairo context to render directly, so we can always enable the
        threaded rendering. In WPE port threaded rendering is only enabled when env var WEBKIT_NICOSIA_PAINTING_THREADS
        is present. This patch changes a bit the meaning of the env var, so that when 0 is passed the feature is
        disabled too, instead of setting the number of threads to 4.

        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp:
        (Nicosia::PaintingEngine::create):

2020-07-02  Mark Lam  <mark.lam@apple.com>

        ReadableStream::create() should handle any exceptions that may be thrown during construction.
        https://bugs.webkit.org/show_bug.cgi?id=213819

        Reviewed by Youenn Fablet and Yusuke Suzuki.

        Win EWS detected that ReadableStream::create() can throw exceptions, and we were
        failing to handle it.  This patch fixes that.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::readableStream):
        (WebCore::FetchBodyOwner::createReadableStream):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        * bindings/js/ReadableStream.h:

2020-07-02  Alex Christensen  <achristensen@webkit.org>

        Update Mac CMake build

        * PlatformMac.cmake:

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

        MIMETypeRegistry::getExtensionsForMIMEType() needs to handle wildcard MIME types
        https://bugs.webkit.org/show_bug.cgi?id=213826

        Reviewed by Darin Adler.

        Addressing post commit review comments for r263832.

        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::extensionsForMIMETypeMap):

2020-07-02  Brady Eidson  <beidson@apple.com>

        GameController.framework soft linking refactoring
        https://bugs.webkit.org/show_bug.cgi?id=213909

        Reviewed by Tim Horton.

        No new tests (No behavior changes)

        * WebCore.xcodeproj/project.pbxproj:
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::startMonitoringGamepads):
        * platform/gamepad/cocoa/GameControllerSPI.h: Added.
        * platform/gamepad/cocoa/GameControllerSoftLink.h: Added.
        * platform/gamepad/cocoa/GameControllerSoftLink.mm: Added.

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

        REGRESSION(r260276): menu items in footer of https://salo.ai are invisible until you hover or resize
        https://bugs.webkit.org/show_bug.cgi?id=213712
        <rdar://problem/64893190>

        Reviewed by Zalan Bujtas.

        A negative z-index child triggers a foreground layer inside overflow scroll. This foreground layer
        gets the PaintingOverflowContents flag but not the PaintingCompositingScrollingPhase flag, but we still need
        to avoid the clip check that happens in RenderBlock::paint(), so change RenderLayer::paintLayerContents()
        to just check for isPaintingOverflowContents.

        Test: compositing/scrolling/async-overflow-scrolling/foreground-layer-paint-phase.html

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

2020-07-02  Antoine Quint  <graouts@webkit.org>

        visualViewport.addEventListener("scroll"*** fires permanently after zoom or orientation change
        https://bugs.webkit.org/show_bug.cgi?id=211522
        <rdar://problem/62939371>

        Reviewed by Simon Fraser.

        Correctly set the flag indicating that a scroll event has been dispatched on the visual viewport.

        Test: fast/visual-viewport/scroll-event-fired-during-scroll-alone.html

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

2020-07-02  Zalan Bujtas  <zalan@apple.com>

        Overlapping content on earny.co
        https://bugs.webkit.org/show_bug.cgi?id=213864
        <rdar://problem/61011802>

        Reviewed by Simon Fraser.

        Do not use a 1px value for initial min/max content width.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout): I found 2 places where we rely on the initial 1px value for min/max width. This might cause some "regression".

2020-07-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r263633, r263651, and r263671.

        Still seeing MediaRecorder test crashes after re-landing
        r263633

        Reverted changesets:

        "MediaRecorder stopRecorder() returns empty Blob after first
        use"
        https://bugs.webkit.org/show_bug.cgi?id=212274
        https://trac.webkit.org/changeset/263633

        "MediaRecorder.start() Method is Ignoring the "timeslice"
        Parameter"
        https://bugs.webkit.org/show_bug.cgi?id=202233
        https://trac.webkit.org/changeset/263651

        "Support MediaRecorder.onstart"
        https://bugs.webkit.org/show_bug.cgi?id=213720
        https://trac.webkit.org/changeset/263671

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

        REGRESSION: Comments section at dpreview has overlapping names with comment on phone
        https://bugs.webkit.org/show_bug.cgi?id=213890
        <rdar://problem/64693599>

        Reviewed by Simon Fraser.

        Test: fast/text-autosizing/ios/float-miscomputed-line-height.html

        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):

        Negative value is used to indicate unset line-height. We shouldn't make adjustments in this case.
        This matches Style::BuilderCustom code.

2020-07-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Remove redundant margin-border-padding when computing the intrinsic width
        https://bugs.webkit.org/show_bug.cgi?id=213882

        Reviewed by Antti Koivisto.

        The child intrinsic width already includes the margin-border-padding values.

        Test: fast/layoutformattingcontext/table-with-margin-content-simple.html

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

2020-07-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Use <tr> computed height as minimum height for the row
        https://bugs.webkit.org/show_bug.cgi?id=213880

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-fixed-row-height-simple.html

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

2020-07-02  Youenn Fablet  <youenn@apple.com>

        getUserMedia returns OverConstrained on Jitsi
        https://bugs.webkit.org/show_bug.cgi?id=210932
        <rdar://problem/64403675>

        Reviewed by Philippe Normand.

        We compute the max width, max height and max frame rate across all presets.
        In case a preset for the max resolution is different from the preset for the max frame rate,
        we were selecting capture parameters that no preset can match.

        To fix the issue, in case the frame rate constraint is not mandatory, and we do not find a preset
        when starting to capture, we remove the frame rate constraint, pick the preset and choose the max frame rate from that preset.

        Update mock sources to have a high resolution preset with low frame rate to enable writing a test.

        Test: fast/mediastream/get-user-media-ideal-constraints.html

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate):
        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate):
        (WebCore::RealtimeVideoCaptureSource::setSizeAndFrameRate):
        * platform/mediastream/VideoPreset.h:
        (WebCore::VideoPreset::maxFrameRate const):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices):

2020-07-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build

        * platform/gtk/GtkVersioning.h:
        (gtk_scrolled_window_new):

2020-07-02  Rob Buis  <rbuis@igalia.com>

        Fragment navigation involving fragment identifiers does not match specification
        https://bugs.webkit.org/show_bug.cgi?id=83930

        Reviewed by Darin Adler.

        Implement step 5 and 6 of [1] to allow fragment identifier lookup
        using percent-decoding, after normal lookup failed.

        Behavior matches Chrome and Firefox.

        [1] https://html.spec.whatwg.org/multipage/browsing-the-web.html#the-indicated-part-of-the-document

        Tests: imported/w3c/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-to-anchor-name.html
               imported/w3c/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding-2.html
               imported/w3c/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/fragment-and-encoding.html
               imported/w3c/web-platform-tests/html/browsers/browsing-the-web/scroll-to-fragid/scroll-frag-non-utf8-encoded-document.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragmentInternal):

2020-07-02  Alexander Mikhaylenko  <alexm@gnome.org>

        [GTK] Kinetic scrolling is still triggered if you wait before lifting fingers
        https://bugs.webkit.org/show_bug.cgi?id=213789

        Reviewed by Carlos Garcia Campos.

        The intended behavior for kinetic scrolling is that it's possible to not trigger it by
        stopping moving fingers before lifting them, as opposed to doing a fling/swipe. However,
        right now it's broken and trying to do this triggers kinetic scrolling as well.

        Currently, the last scroll event with (0, 0) deltas isn't added to the scroll history for
        kinetic scrolling. However, this is wrong, because the last event, or rather the timespan
        between it and the previous scroll event, actually determines the kinetic scrolling velocity:
        if this event follows the previous one quickly, the velocity is large, but if there was a long
        pause, the velocity would be close to 0.

        See https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1902 and
        https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1903 for the equivalent GTK fixes.

        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::handleWheelEvent):
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeOverflowScrollingNodeNicosia::handleWheelEvent):
        * platform/generic/ScrollAnimatorGeneric.cpp:
        (WebCore::ScrollAnimatorGeneric::handleWheelEvent):

2020-07-02  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Rewrite mediastreamsrc element
        https://bugs.webkit.org/show_bug.cgi?id=213777

        Reviewed by Xabier Rodriguez-Calvar.

        The underlying functionality remains the same, design-wise. This is mostly a refactoring
        switching to smart pointers as much as possible and trying to comply with WebKit code style
        guidelines.

        The previous version of this element was leaking pad templates and sticky stream-start
        events (in webkitMediaStreamSrcTrackEnded).

        The LIBWEBRTC ifdef guards were removed as well, because there's no actual libwebrtc
        dependency involved in this code.

        No new tests, existing webrtc and fast/mediastream tests cover this patch.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (mediaStreamTrackPrivateGetTags):
        (webkitMediaStreamNew):
        (WebKitMediaStreamTrackObserver::WebKitMediaStreamTrackObserver):
        (WebKitMediaStreamObserver::WebKitMediaStreamObserver):
        (InternalSource::InternalSource):
        (InternalSource::~InternalSource):
        (InternalSource::src const):
        (InternalSource::pushSample):
        (webkitMediaStreamSrcUriGetType):
        (webkitMediaStreamSrcUriGetProtocols):
        (webkitMediaStreamSrcUriGetUri):
        (webkitMediaStreamSrcUriSetUri):
        (webkitMediaStreamSrcUriHandlerInit):
        (webkitMediaStreamSrcSetProperty):
        (webkitMediaStreamSrcGetProperty):
        (webkitMediaStreamSrcConstructed):
        (stopObservingTracks):
        (webkitMediaStreamSrcFinalize):
        (webkitMediaStreamSrcChangeState):
        (webkit_media_stream_src_class_init):
        (webkitMediaStreamSrcChain):
        (webkitMediaStreamSrcAddPad):
        (ProbeData::ProbeData):
        (webkitMediaStreamSrcPadProbeCb):
        (webkitMediaStreamSrcSetupSrc):
        (webkitMediaStreamSrcPostStreamCollection):
        (webkitMediaStreamSrcAddTrack):
        (webkitMediaStreamSrcRemoveTrackByType):
        (webkitMediaStreamSrcSetStream):
        (webkitMediaStreamSrcPushVideoSample):
        (webkitMediaStreamSrcPushAudioSample):
        (webkitMediaStreamSrcTrackEnded):
        (webkitMediaStreamSrcNew):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h:

2020-07-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        MIMETypeRegistry::getExtensionsForMIMEType() needs to handle wildcard MIME types
        https://bugs.webkit.org/show_bug.cgi?id=213826

        Reviewed by Darin Adler.

        Working towards webkit.org/b/213347, it needs to be possible for WebCore
        to get the file extensions for wildcard MIME types, e.g. "image/*" or "video/*".

        For Cocoa platforms, we will enumerate the UTIs of the system. Get the
        MIMEType and the extensions of each UTI. Add the following pairs to a
        singleton HashMap:

            { MIMEType, extension }
            { Type(MIMEType)/*, extension }

        Change MIMETypeRegistry::getExtensionsForMIMEType() such that it calls
        extensionsForWildcardMIMEType() if the MIMEType ends with "*".

        * platform/MIMETypeRegistry.h:
        * platform/cocoa/MIMETypeRegistryCocoa.mm:
        (WebCore::extensionsForMIMETypeMap):
        (WebCore::extensionsForWildcardMIMEType):
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
        * platform/playstation/MIMETypeRegistryPlayStation.cpp:
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):
        * platform/xdg/MIMETypeRegistryXdg.cpp:
        (WebCore::MIMETypeRegistry::getExtensionsForMIMEType):

2020-07-01  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Allow the File object to be created with a replacement file
        https://bugs.webkit.org/show_bug.cgi?id=213825

        Reviewed by Darin Adler.

        Working towards webkit.org/b/213347, it needs to be possible to create 
        the File object with an optional replacement file. Only the registered
        BlobDataFileReference will be created with both the original file path
        and the replacement file path. So it can delete the replacement file when
        it is destroyed. Otherwise BlobDataFileReference will be created with the
        replacement file path.

        It is important to create the File object with the replacement file because
        it needs to get the meta-data and the bytes of the replacement file not
        the original file.

        * fileapi/File.cpp:
        (WebCore::File::create):
        * fileapi/File.h:
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerFileBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/DirectoryFileListCreator.cpp:
        (WebCore::createFileList):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesFromFormControlState):
        When the Files are created from a FormControlState, they will be created
        without replacement files since they might have been deleted.

        (WebCore::FileInputType::filesChosen):
        (WebCore::FileInputType::receiveDroppedFiles):
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseFiles):
        (WebCore::FileChooser::chooseMediaFiles):
        * platform/FileChooser.h:
        (WebCore::FileChooserFileInfo::isolatedCopy const):
        (WebCore::FileChooser::chooseFiles):
        (WebCore::FileChooserFileInfo::FileChooserFileInfo): Deleted.
        * platform/network/BlobDataFileReference.cpp:
        (WebCore::BlobDataFileReference::BlobDataFileReference):
        (WebCore::BlobDataFileReference::~BlobDataFileReference):
        (WebCore::BlobDataFileReference::path):
        (WebCore::BlobDataFileReference::startTrackingModifications):
        * platform/network/BlobDataFileReference.h:
        * platform/network/BlobRegistry.h:

2020-07-01  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WOFF2 targets
        https://bugs.webkit.org/show_bug.cgi?id=213865

        Reviewed by Fujii Hironori.

        Use the WOFF:: targets when USE_WOFF2 is set.

        * CMakeLists.txt:

2020-07-01  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement relevant simulated key presses for custom ARIA widgets for increment/decrement
        https://bugs.webkit.org/show_bug.cgi?id=213744

        Reviewed by Darin Adler.

        In order to allow custom ARIA widgets to work, we can post keyboard events for specific ax actions
        that are not handled natively.

        Spec: https://github.com/WICG/aom/blob/gh-pages/explainer.md#user-action-events-from-assistive-technology

        Test: accessibility/keyevents-posted-for-increment-actions.html
              accessibility/keyevents-for-increment-actions-with-node-removal.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::postKeyboardKeysForValueChange):
        (WebCore::AccessibilityNodeObject::setNodeValue):
        (WebCore::AccessibilityNodeObject::changeValueByStep):
        (WebCore::AccessibilityNodeObject::changeValueByPercent):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::setValue):
        * accessibility/AccessibilitySlider.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::setValue):
        * accessibility/isolatedtree/AXIsolatedObject.h:

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

        Fix the WebKit build after <rdar://problem/64288191>
        https://bugs.webkit.org/show_bug.cgi?id=213832

        Reviewed by Tim Horton.

        Upcoming changes to <UIKit/UIWebDocumentView.h> will cause the WebKit build to break, due to conflicting
        declarations of WKObject in both WebCore (WAK) code and the WebKit API. Avoid this by renaming the WAK version
        to WAKObject, rather than WKObject.

        Additionally, fix some minor style issues along the way.

        * platform/ios/wak/WKTypes.h:
        * platform/ios/wak/WKUtilities.c:
        (WKRetain):
        (WKRelease):
        (_WAKObjectDealloc):
        (WKGetClassInfo):
        (_WKObjectDealloc): Deleted.
        * platform/ios/wak/WKUtilities.h:
        * platform/ios/wak/WKView.h:
        * platform/ios/wak/WKView.mm:
        (_WKViewDealloc):

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

        [LFC][TFC] Add support for non-baseline aligned cell height
        https://bugs.webkit.org/show_bug.cgi?id=213845

        Reviewed by Antti Koivisto.

        Adjust max ascent/descent only when the cell is basline aligned.

        Test: fast/layoutformattingcontext/table-cell-height-middle-align-simple.html

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

2020-07-01  Antoine Quint  <graouts@webkit.org>

        [Media Controls] Tracks panel can show text tracks with mode "hidden" as selected
        https://bugs.webkit.org/show_bug.cgi?id=213839
        <rdar://problem/57989325>

        Reviewed by Jer Noble.

        We only considered text tracks that had their "mode" set to "disabled" as tracks that weren't selected,
        but there is also the "hidden" mode which should share the same UI state. We now check for "mode" to
        be set to "showing" to consider a text track as selected in the tracks panel.

        Test: media/modern-media-controls/tracks-support/tracks-support-hidden-tracks.html

        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.tracksPanelIsTrackInSectionSelected):

2020-07-01  Sam Weinig  <weinig@apple.com>

        Regression (r263788): Windows build broken: nameForRenderTreeAsText is not a member of WebCore::Color
        https://bugs.webkit.org/show_bug.cgi?id=213841
        <rdar://problem/64985276>

        Fix Windows build.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (printColor):

2020-07-01  Youenn Fablet  <youenn@apple.com>

        Make NetworkSendQueue use CString instead of String for UTF-8 data
        https://bugs.webkit.org/show_bug.cgi?id=213714

        Reviewed by Darin Adler.

        Use CString instead of String in NetworkSendQueue as all data is to be encoded as UTF-8.
        This allows converting and allocating the UTF-8 string only once.
        Covered by existing tests.

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::createMessageQueue):
        (WebCore::RTCDataChannel::send):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::sendStringData):
        (WebCore::LibWebRTCDataChannelHandler::sendRawData):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::enqueue):
        (WebCore::NetworkSendQueue::processMessages):
        * fileapi/NetworkSendQueue.h:
        * platform/mediastream/RTCDataChannelHandler.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp:
        (WebCore::RTCDataChannelHandlerMock::sendStringData):
        * platform/mock/RTCDataChannelHandlerMock.h:

2020-07-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use more efficient makeString() instead of StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=213708

        Reviewed by Sam Weinig.

        This patch refactors throwRequiredMemberTypeError() and throwArgument*Error()
        methods, replacing all StringBuilder usages with more efficient makeString().

        Extracts makeArgumentTypeErrorMessage(), similiar to existing helpers,
        which can be reused if neccessary.

        No new tests, no behavior change.

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::makeArgumentTypeErrorMessage):
        (WebCore::throwArgumentMustBeEnumError):
        (WebCore::throwArgumentMustBeFunctionError):
        (WebCore::throwArgumentMustBeObjectError):
        (WebCore::throwArgumentTypeError):
        (WebCore::throwRequiredMemberTypeError):
        (WebCore::appendArgumentMustBe): Deleted.

2020-06-29  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Don't include scrollbar extents when computing sizes for percentage resolution
        https://bugs.webkit.org/show_bug.cgi?id=213739

        Reviewed by Javier Fernandez.

        Content override sizes do include scrollbars so they must be substracted when using the override size
        to compute percentages.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution): Remove scrollbars.
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution): Ditto.

2020-06-30  Sergio Villar Senin  <svillar@igalia.com>

        [css-flex] Remove death code paths when evaluating percentage resolution
        https://bugs.webkit.org/show_bug.cgi?id=213809

        Reviewed by Manuel Rego Casasnovas.

        Both crossSizeForPercentageResolution() and mainSizeForPercentageResolution() are only called from
        childLogicalHeightForPercentageResolution(). The former is called whenever hasOrthogonalFlow(child)
        is false and the latter when it's true. However crossSizeForPercentageResolution() has a path for
        hasOrthogonalFlow(child)==true which is impossible to reach. The same happens to
        mainSizeForPercentageResolution() which has a path for hasOrthogonalFlow(child)==false which is
        also impossible to reach.

        Remove both death code paths and replace them by assertions. We're also making both methods
        private since are not meant to be used from the outside.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution): Remove death code path.
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution): Ditto.
        * rendering/RenderFlexibleBox.h: Make both calls private.

2020-06-30  Sam Weinig  <weinig@apple.com>

        Split Color serialization out of Color classes
        https://bugs.webkit.org/show_bug.cgi?id=213820

        Reviewed by Darin Adler.

        Move all color serialization related functions out of the Color family
        of classes, and into a standalone ColorSerialization.h
        
        Now all color serialization calls one of the following three functions, depending on need:

            - serializationForCSS(...)
            - serializationForHTML(...)
            - serializationForRenderTreeAsText(...)

        These are overload for all three Color classes (Color, SimpleColor and ExtendedColor) to
        allow easy use without necessarily needing to construct another type.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.
    
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::inverseTransformColorIfNeeded):
        (WebCore::StyleChange::extractTextStyles):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::didChooseColor):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::shadowColor const):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::color const):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties):
        (WebCore::TextTrackCueGeneric::toJSON const):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::colorPropertyCSS const):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret):
        * platform/graphics/Color.cpp:
        (WebCore::operator<<):
        (WebCore::Color::serialized const): Deleted.
        (WebCore::Color::cssText const): Deleted.
        (WebCore::Color::nameForRenderTreeAsText const): Deleted.
        * platform/graphics/Color.h:
        * platform/graphics/ColorSerialization.cpp: Added.
        (WebCore::decimalDigit):
        (WebCore::fractionDigitsForFractionalAlphaValue):
        (WebCore::serializationForCSS):
        (WebCore::serializationForHTML):
        (WebCore::serializationForRenderTreeAsText):
        (WebCore::serialization):
        * platform/graphics/ColorSerialization.h: Added.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::cssText const): Deleted.
        * platform/graphics/ExtendedColor.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/InbandGenericCue.cpp:
        (WebCore::InbandGenericCue::toJSONString const):
        * platform/graphics/SimpleColor.cpp:
        (WebCore::SimpleColor::serializationForHTML const): Deleted.
        (WebCore::decimalDigit): Deleted.
        (WebCore::fractionDigitsForFractionalAlphaValue): Deleted.
        (WebCore::SimpleColor::serializationForCSS const): Deleted.
        (WebCore::SimpleColor::serializationForRenderTreeAsText const): Deleted.
        * platform/graphics/SimpleColor.h:
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::externalRepresentation const):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::externalRepresentation const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<Color>::toString):
        * testing/Internals.cpp:
        (WebCore::Internals::viewBaseBackgroundColor):
        (WebCore::Internals::highlightPseudoElementColor):
        (WebCore::Internals::systemColorForCSSValue):
        (WebCore::Internals::focusRingColor):
        Adopt new serialization functions.

2020-06-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] Unreviewed build fix after r263776

        > WebCore\platform\graphics\ColorUtilities.h(67): error C2039: 'lround': is not a member of 'std'

        * platform/graphics/ColorUtilities.h: Include <cmath> for std::lround.

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

        Code cleanup in AccessibilityMenuList.cpp and AXIsolatedTree.h.
        https://bugs.webkit.org/show_bug.cgi?id=213806

        Reviewed by Darin Adler.

        No change in functionality.
        Minor code cleanup pointed out by Darin Adler in reviews for bug 209169 and bug 213575.

        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::isCollapsed const):
        * accessibility/isolatedtree/AXIsolatedTree.h:

2020-06-30  Sam Weinig  <weinig@apple.com>

        Move Color blending related functions to their own files
        https://bugs.webkit.org/show_bug.cgi?id=213742

        Reviewed by Dean Jackson.

        - Moves Color::blend(const Color&), Color::blendWithWhite(), blend(const Color&, const Color&, double)
          and blendWithoutPremultiply(const Color&, const Color&, double) to their own files: ColorBlending.h/cpp
        - Renames Color::blend(const Color&) to blendSourceOver(const Color&, const Color&) 
        - Renames Color::blendWithWhite() to blendWithWhite(const Color&).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/graphics/Color.cpp:
        (WebCore::Color::blend const): Deleted.
        (WebCore::Color::blendWithWhite const): Deleted.
        (WebCore::blend): Deleted.
        (WebCore::blendWithoutPremultiply): Deleted.
        * platform/graphics/Color.h:
        * platform/graphics/ColorBlending.cpp: Copied from Source/WebCore/platform/graphics/Color.cpp.
        * platform/graphics/ColorBlending.h: Added.
        Move declarations / implementations from Color.h/cpp to ColorBlending.h/cpp.

        * css/CSSGradientValue.cpp:
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::computeCaretColor):
        * page/FrameView.cpp:
        (WebCore::FrameView::documentBackgroundColor const):
        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange):
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/graphics/filters/FilterOperation.cpp:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::getItemBackgroundColor const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::transformSelectionBackgroundColor const):
        Update for new signatures and #include ColorBlending.h as neeeded.

2020-06-30  Sam Weinig  <weinig@apple.com>

        Rename ManifestParser.h/cpp to ApplicationCacheManifestParser.h/cpp to make it clear its not the ApplicationManifestParser (a different thing entirely)
        https://bugs.webkit.org/show_bug.cgi?id=213815

        Reviewed by Darin Adler.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheManifestParser.cpp: Copied from Source/WebCore/loader/appcache/ManifestParser.cpp.
        * loader/appcache/ApplicationCacheManifestParser.h: Copied from Source/WebCore/loader/appcache/ManifestParser.h.
        * loader/appcache/ManifestParser.cpp: Removed.
        * loader/appcache/ManifestParser.h: Removed.

2020-06-30  Brady Eidson  <beidson@apple.com>

        App-bound JavaScript and Navigation failures should have specific error codes.
        <rdar://problem/64940268> and https://bugs.webkit.org/show_bug.cgi?id=213808

        Reviewed by Tim Hatcher.
        (Informally by Kate Cheney)

        Covered by API tests.

        * bindings/js/ExceptionDetails.h:

2020-06-30  Mark Lam  <mark.lam@apple.com>

        Add handling for a case of OOME in CSSTokenizer and CSSParser.
        https://bugs.webkit.org/show_bug.cgi?id=213702
        <rdar://problem/64808889>

        Reviewed by Darin Adler.

        We add a bool* constructionSuccess feedback argument to the private CSSTokenizer
        constructor.  If construction fails and constructionSuccess is provided, the
        constructor will set *constructionSuccess to false.  If construction fails and
        constructionSuccess is not provided, the constructor will crash with a failed
        RELEASE_ASSERT.  In other words, the client may opt in to handle the failure to
        construct if it doesn't want the default behavior of crashing on failure.

        We also provide 2 convenience factory methods for CSSTokenizer which will return
        a null std::unique_ptr<CSSTokenizer> if construction fails.  This is currently
        only used by CSSParserImpl, and ensures that its m_tokenizer is null if we fail to
        construct.  This ensures that there isn't a pointer to a partially constructed
        tokenizer that some code may unknowingly use.

        The reason we don't force all clients of CSSTokenizer to use the factory methods
        instead is because there are clients that currently use on-stack instantiations
        of CSSTokenizer to do their work.  We don't want to force them to switch to using
        a malloc instance.  Currently, the constructors used by those clients do not
        provide a constructionSuccess argument to the underlying private constructor.
        Hence, for them, the CSSTokenizer constructor will crash if construction fails,
        which is how things work in pre-existing code.  The only difference is that
        the crash is deferred till the client attempts to use the tokenizer instead of at
        construction time.

        As of this patch, only CSSParser::parseSupportsCondition() makes use of the new
        feedback mechanism, and handles OOME during CSSTokenizer construction by
        interpreting it as CSS not supporting the passed in condition string.

        Test: css3/out-of-memory-in-css-tokenizer.html

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSupportsCondition):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::CSSParserImpl):
        (WebCore::CSSParserImpl::failed const):
        * css/parser/CSSParserImpl.h:
        * css/parser/CSSTokenizer.cpp:
        (WebCore::CSSTokenizer::CSSTokenizer):
        * css/parser/CSSTokenizer.h:
        (WebCore::CSSTokenizer::failed const):

2020-06-30  Peng Liu  <peng.liu6@apple.com>

        Enable the support of FULLSCREEN_API in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=213774

        Reviewed by Youenn Fablet.

        Replace the definition of ENABLE_FULLSCREEN_API in FeatureDefines.xcconfig with
        the one in PlatformEnableCocoa.h. We have to do that because WebKitTestRunner
        does not have a FeatureDefines.xcconfig but it uses "ENABLE(FULLSCREEN_API)"
        to conditionally compile code to test the element fullscreen API.
        WebKitTestRunner can use the macro defined in PlatformEnableCocoa.h.

        * Configurations/FeatureDefines.xcconfig:

2020-06-30  Daniel Bates  <dabates@apple.com>

        [iOS] Editable regions causes ~1% slowdown in PLT5
        https://bugs.webkit.org/show_bug.cgi?id=213659
        <rdar://problem/64361390>

        Reviewed by Simon Fraser.

        Fix the slowdown by only enabling editable region when Page::editableElementsInRect is called.

        There are two parts that make computing the editable region expensive:
                1. Requires traversing descendents during painting when a normal paint may be
                   able to avoid this.
                2. Can cause more event region invalidations because it extends the invalidation
                   criterion to include changes to element editability.

        Tests: editing/editable-region/hit-test-basic-without-editable-region.html
               editing/editable-region/iframe-without-editable-region.html
               editing/editable-region/text-field-basic-without-editable-region.html

        Tests: editing/editable-region/hit-test-basic-without-editable-region.html
               editing/editable-region/iframe-without-editable-region.html
               editing/editable-region/text-field-basic-without-editable-region.html

        * page/Frame.cpp:
        (WebCore::Frame::invalidateContentEventRegionsIfNeeded): Check if editable region is enabled.
        If it is then do what we do now. Otherwise, don't invalidate the region unless we were going
        to do so anyway.
        * page/Page.cpp:
        (WebCore::Page::setEditableRegionEnabled): Added. Update state and then invalidate
        the event region in all layers.
        (WebCore::Page::shouldBuildEditableRegion const): Added. Returns whether to build the
        editable region: either when Page::isEditableRegionEnabled() is true or the editable
        region debug overlay is enabled.
        (WebCore::Page::didFinishLoad): Turn off editable region as it may not be needed on
        the new page.
        * page/Page.h:
        (WebCore::Page::isEditableRegionEnabled const): Added.

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::translate):
        (WebCore::EventRegion::containsEditableElementsInRect const):
        (WebCore::EventRegion::dump const):
        * rendering/EventRegion.h:
        (WebCore::EventRegion::hasEditableRegion const):
        (WebCore::EventRegion::rectsForEditableElements const):
        (WebCore::EventRegion::decode):
        (WebCore::EventRegion::ensureEditableRegion):
        The editable region is now an Optional<>. There will only be one if ensureEditableRegion
        was called, which is only when Page::isEditableRegionEnabled() returns true.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::maintainsEventRegion const):
        Only do what we do now if Page::shouldBuildEditableRegion() returns true.

        (WebCore::RenderLayerBacking::updateEventRegion): Instantiate the editable region, if needed.
        Painting will then populate it.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::applyToCompositedLayerIncludingDescendants): Added.
        (WebCore::RenderLayerCompositor::invalidateEventRegionForAllLayers): Added.
        (WebCore::RenderLayerCompositor::clearBackingForAllLayers): Wrote in terms of applyToCompositedLayerIncludingDescendants.
        (WebCore::RenderLayerCompositor::clearBackingForLayerIncludingDescendants): Deleted.
        * rendering/RenderLayerCompositor.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setEditableRegionEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        Add a new internal setting for testing purposes to toggle enabling/disabling editable region.

2020-06-30  Peng Liu  <peng.liu6@apple.com>

        Scrunching a video to PiP can result in broken animation and leave Safari in a bad state
        https://bugs.webkit.org/show_bug.cgi?id=213175

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        The "standby" state is relevant to a video element only when its presentation mode is VideoFullscreenModeNone.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):
        Add a flag m_enteringPictureInPicture. Function exitFullscreen() and cleanupFullscreen() will check
        m_enteringPictureInPicture and they will abort the process to exit fullscreen/picture-in-picture if the flag
        is true. However, VideoFullscreenManager will retry to exit fullscreen/picture-in-picture after it confirms that
        the previous starting picture-in-picture process is completed.

        (VideoFullscreenInterfaceAVKit::willStartPictureInPicture):
        Set the flag m_enteringPictureInPicture.

        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        Call m_fullscreenChangeObserver->didEnterFullscreen() if the entering picture-in-picture process is
        started by the UI process (e.g., swipe-up gesture).
        Clear m_standby and m_enteringPictureInPicture after the video element enters picture-in-picture.

2020-06-30  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::MD5
        https://bugs.webkit.org/show_bug.cgi?id=213766

        Reviewed by Youenn Fablet.

        * Modules/websockets/WebSocketHandshake.cpp:
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2020-06-30  Youenn Fablet  <youenn@apple.com>

        Set runtime flag m_isWebRTCPlatformCodecsInGPUProcessEnabled to false by default
        https://bugs.webkit.org/show_bug.cgi?id=213779

        Reviewed by Alex Christensen.

        No change of behavior since this flag is WebKit 2 only and off by default.
        Move off by default WebRTC flags at the end of the section.

        * page/RuntimeEnabledFeatures.h:

2020-06-30  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r263753.

        This commit caused build failures across multiple platforms.

        Reverted changeset:

        "Move Color blending related functions to their own files"
        https://bugs.webkit.org/show_bug.cgi?id=213742
        https://trac.webkit.org/changeset/263753

2020-06-30  Sam Weinig  <weinig@apple.com>

        Move Color blending related functions to their own files
        https://bugs.webkit.org/show_bug.cgi?id=213742

        Reviewed by Dean Jackson.

        - Moves Color::blend(const Color&), Color::blendWithWhite(), blend(const Color&, const Color&, double)
          and blendWithoutPremultiply(const Color&, const Color&, double) to their own files: ColorBlending.h/cpp
        - Renames Color::blend(const Color&) to blendSourceOver(const Color&, const Color&) 
        - Renames Color::blendWithWhite() to blendWithWhite(const Color&).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/graphics/Color.cpp:
        (WebCore::Color::blend const): Deleted.
        (WebCore::Color::blendWithWhite const): Deleted.
        (WebCore::blend): Deleted.
        (WebCore::blendWithoutPremultiply): Deleted.
        * platform/graphics/Color.h:
        * platform/graphics/ColorBlending.cpp: Copied from Source/WebCore/platform/graphics/Color.cpp.
        * platform/graphics/ColorBlending.h: Added.
        Move declarations / implementations from Color.h/cpp to ColorBlending.h/cpp.

        * css/CSSGradientValue.cpp:
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::computeCaretColor):
        * page/FrameView.cpp:
        (WebCore::FrameView::documentBackgroundColor const):
        * page/TextIndicator.cpp:
        (WebCore::estimatedBackgroundColorForRange):
        * page/animation/CSSPropertyAnimation.cpp:
        * platform/graphics/filters/FilterOperation.cpp:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::getItemBackgroundColor const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::transformSelectionBackgroundColor const):
        Update for new signatures and #include ColorBlending.h as neeeded.

2020-06-30  Andy Estes  <aestes@apple.com>

        [Xcode] Enable the "My Mac (Mac Catalyst)" destination in WebKit Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=213740

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set SUPPORTS_MACCATALYST to YES to tell Xcode that this
        project supports building for Mac Catalyst.

2020-06-30  Michael Catanzaro  <mcatanzaro@gnome.org>

        [WPE][GTK] Update stale comment in UserAgentGLib.cpp
        https://bugs.webkit.org/show_bug.cgi?id=213749

        Reviewed by Adrian Perez de Castro.

        Remove outdated comment.

        * platform/glib/UserAgentGLib.cpp:
        (WebCore::platformVersionForUAString):

2020-06-30  Youenn Fablet  <youenn@apple.com>

        Add VP9 WebRTC codec runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=213724

        Reviewed by Eric Carlson.

        Add binding code to switch on/off VP9 in WebRTC factories based on runtime flag.

        Test: webrtc/vp9.html

        * page/Page.cpp:
        (WebCore::m_shouldRelaxThirdPartyCookieBlocking):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCVP9CodecEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCVP9CodecEnabled):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        * testing/Internals.cpp:
        (WebCore::Internals::setWebRTCH265Support):
        (WebCore::Internals::setWebRTCVP9Support):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-29  Antoine Quint  <graouts@webkit.org>

        [Web Animations] REGRESSION: Bootstrap Carousel component v4.1 regressed with Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=213376
        <rdar://problem/64531242>

        Reviewed by Dean Jackson.

        An older version of the Bootstrap CSS and JS library had a rather odd way to implement a completion callback
        for a transition: it would register a "transitionend" event but also set a timeout of the transition's duration
        and use whichever came first as a callback to run completion tasks for the transition.

        Additionally, in that callback, it would set the transitioned value to the same computed value but using a different
        specified value, for instance setting the "transform" CSS property to "translateX(0)" instead of "translateY(0)".

        In our implementation this would make the completed transition repeat. Indeed, we would first incorrectly assume that
        the transition was still "running" and not "finished", per the CSS Transitions spec terminology as we only update
        that status when we update animations under Page::updateRendering(). We now update an existing transition's
        status first in AnimationTimeline::updateCSSTransitionsForElementAndProperty().

        Another issue is that when we considered the existing transition to be running, even though it was finished, we would
        use the "timeline time at creation" to compute its current progress, which would yield situations where we computed
        the before-change style to be the existing transition's current computed value, except that transition's progress was
        0 since the "timeline time at creation" happens before the transition's resolved start time. We now only use the
        "timeline time at creation" in the situations it was designed to be used: either when the transition has not yet had
        a resolved start time, or its resolved start time is the current timeline time (ie. it was just set).

        To be able to compare the transition's resolved start time and the current timeline time, we also updated the internal
        start time getter and setter methods to use Seconds instead of double which is only needed for the JS bindings.

        Test: webanimations/css-transition-retargeting-to-same-value-upon-completion-with-timeout.html

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElementAndProperty):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::bindingsStartTime const):
        (WebCore::DeclarativeAnimation::setBindingsStartTime):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::bindingsStartTime const):
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::setStartTime):
        (WebCore::WebAnimation::startTime const): Deleted.
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::startTime const):
        (WebCore::WebAnimation::bindingsStartTime const): Deleted.

2020-06-29  Brady Eidson  <beidson@apple.com>

        JavaScript cannot be injected into iframes
        <rdar://problem/54168946> and https://bugs.webkit.org/show_bug.cgi?id=213556

        Reviewed by Geoff Garen.

        Covered by API tests.

        * bindings/js/ExceptionDetails.h: Start a collection of "exception types" that will grow quickly,
          beginning with the specialized "missing frame" type.

2020-06-29  Sam Weinig  <weinig@apple.com>

        Convert AppCache manifest parser over to using StringParsingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=213680

        Reviewed by Darin Adler.

        - Renames parseManifest to parseApplicationCacheManifest to differentiate between the manifest
          for the application cache and the "application manifest", which is a different thing entirely.
          Also renames the container struct from being called Manifest to ApplicationCacheManifest.
          (The file should be renamed as well, but will do that in a seperate pass). 
        - Update parser to return an Optional<ApplicationCacheManifest> rather than using bool + out
          parameter.
        - Adopt readCharactersForParsing to replace unnecessary call to StringView::upconvertedCharacters().
        - Adopt StringParsingBuffer and ParsingUtilities along with some refinements to the code
          to make the intent more clear.


        * html/parser/ParsingUtilities.h:
        (WebCore::skipUntil):
        Fix formatting, putting the whole signature on one line.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        Update for new parser function name and Optional return type.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::isManifestWhitespace):
        (WebCore::isManifestNewline):
        (WebCore::isManifestWhitespaceOrNewline):
        (WebCore::makeManifestURL):
        (WebCore::parseApplicationCacheManifest):
        * loader/appcache/ManifestParser.h:
        Update parsing logic to use readCharactersForParsing (to avoid upconvesion) and rework
        using StringParsingBuffer/ParsingUtilities to make things more clear.

2020-06-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Adjust baseline when the table cell itself establishes an IFC
        https://bugs.webkit.org/show_bug.cgi?id=213735

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-cell-baseline-offset-simple2.html

        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::usedBaselineForCell):

2020-06-29  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Adjust baseline offset for continuation
        https://bugs.webkit.org/show_bug.cgi?id=213732

        Reviewed by Antti Koivisto.

        Skip empty IFC generated for the "pre" part of the continuation (e.g. <span><div>text content</div></span>).

        Test: fast/layoutformattingcontext/table-cell-baseline-offset-simple.html

        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::usedBaselineForCell):

2020-06-29  Guowei Yang  <guowei_yang@apple.com>

        Adding Experimental Feature Flags for CoreImage backed SVG/CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=213578

        Reviewed by Darin Adler, Simon Fraser, Myles C. Maxfield. 

        Preparing to implement CoreImage backed filter rendering
        Needs Compiler guards and experimental feature guard.

        No tests are required because this is just a feature flag set up

        * page/Settings.yaml: added default settings for the feature flag. 
          Default value of the feature switch is off

2020-06-29  Stephan Szabo  <stephan.szabo@sony.com>

        Fix build when !ENABLE(ACCESSIBILITY) after r263673
        https://bugs.webkit.org/show_bug.cgi?id=213759

        Reviewed by Chris Fleizach.

        No new tests, build fix.

        * accessibility/AXObjectCache.h:

2020-06-29  Sam Weinig  <weinig@apple.com>

        Simplify Color's interface by removing isDark()
        https://bugs.webkit.org/show_bug.cgi?id=213707

        Reviewed by Darin Adler.

        - Move Color::isDark to RenderThemeIOS.mm, its one client and rename it
          to useConvexGradient() to indicate what it is actually determining.

        * platform/graphics/Color.cpp:
        (WebCore::Color::isDark const): Deleted.
        * platform/graphics/Color.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::useConvexGradient):
        (WebCore::RenderThemeIOS::paintPushButtonDecorations):
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):

2020-06-29  Peng Liu  <peng.liu6@apple.com>

        Video spills over PiP screen a little when using Picture in Picture
        https://bugs.webkit.org/show_bug.cgi?id=213658

        Reviewed by Eric Carlson.

        We need to provide video content dimensions instead of video element sizes to
        AVPlayerController to make sure that the Picture-in-Picture window will have
        the correct aspect ratio.

        Test: media/picture-in-picture/picture-in-picture-window-aspect-ratio.html

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setUpFullscreen):

2020-06-29  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove ENABLE_STREAMS_API compilation flag
        https://bugs.webkit.org/show_bug.cgi?id=213728

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::isDisturbed const):
        (WebCore::FetchBodyOwner::isDisturbedOrLocked const):
        (WebCore::FetchBodyOwner::blobLoadingSucceeded):
        (WebCore::FetchBodyOwner::blobLoadingFailed):
        (WebCore::FetchBodyOwner::blobChunk):
        * Modules/fetch/FetchBodyOwner.h:
        (WebCore::FetchBodyOwner::cancel):
        * Modules/fetch/FetchBodySource.cpp:
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):
        (WebCore::FetchResponse::BodyLoader::didReceiveData):
        * Modules/fetch/FetchResponse.h:
        * Modules/streams/ByteLengthQueuingStrategy.idl:
        * Modules/streams/ByteLengthQueuingStrategy.js:
        * Modules/streams/CountQueuingStrategy.idl:
        * Modules/streams/CountQueuingStrategy.js:
        * Modules/streams/ReadableByteStreamController.idl:
        * Modules/streams/ReadableByteStreamController.js:
        * Modules/streams/ReadableByteStreamInternals.js:
        * Modules/streams/ReadableStream.idl:
        * Modules/streams/ReadableStream.js:
        * Modules/streams/ReadableStreamBYOBReader.idl:
        * Modules/streams/ReadableStreamBYOBReader.js:
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamBYOBRequest.js:
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultController.js:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * Modules/streams/ReadableStreamDefaultReader.js:
        * Modules/streams/ReadableStreamInternals.js:
        * Modules/streams/ReadableStreamSink.cpp:
        * Modules/streams/ReadableStreamSink.h:
        * Modules/streams/ReadableStreamSink.idl:
        * Modules/streams/ReadableStreamSource.cpp:
        * Modules/streams/ReadableStreamSource.h:
        * Modules/streams/ReadableStreamSource.idl:
        * Modules/streams/StreamInternals.js:
        * Modules/streams/WritableStream.idl:
        * Modules/streams/WritableStream.js:
        * Modules/streams/WritableStreamInternals.js:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::isReadableByteStreamAPIEnabled):
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::writableStreamAPIEnabled const):
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-29  Sam Weinig  <weinig@apple.com>

        Remove remaining makeSimpleColorFrom* variants
        https://bugs.webkit.org/show_bug.cgi?id=213706

        Reviewed by Darin Adler.

        Removed makeSimpleColorFromFloats and makeSimpleColorFromCMYKA.
        - Updated callers that need to pass floats to use makeSimpleColor(SRGBA { ... });
        - Updated callers that don't need to pass floats, mostly compile time constant
          SimpleColors to use makeSimpleColor(...), passing in 0-255 based component
          values.
        - Updated callers of makeSimpleColorFromCMYKA to use makeSimpleColor(toSRGBA(CMYKA { ... })).
          This required adding CMYKA type to ColorTypes.h and moving conversion SRGBA to
          ColorUtilities with the other color conversion code.
        - Added deduction guides for color types to allow component type deduction. This allows 
          us to write:

               function(SRGBA { redFloat, greenFloat, blueFloat, alphaFloat })

          reather than the more cumbersome:

               function(SRGBA<float> { redFloat, greenFloat, blueFloat, alphaFloat })

        - Added operator==/operator!= for each color type. Only used by CMYKA at the moment,
          but generally useful, so added for all of them. For all types convertable to ColorComponents,
          the implementation uses the conversion to ColorComponents to avoid redundancy.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setStrokeColor):
        (WebCore::CanvasRenderingContext2DBase::setFillColor):
        Update to call new typed color based CanvasStyle functions.
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        Use makeSimpleColor rather than makeSimpleColorFromFloats/makeSimpleColorFromCMYKA.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        Replace constructors taking raw floats with ones taking typed colors (SRGBA<float>/CMYKA<float>)
        to make it more clear what the parameters mean. 
        (WebCore::CanvasStyle::isEquivalentColor const):
        Compare the cmyka components using new operator== implementation for CMYKA<float>.
        (WebCore::CanvasStyle::isEquivalent const):
        (WebCore::CanvasStyle::isEquivalentRGBA const): Deleted.
        (WebCore::CanvasStyle::isEquivalentCMYKA const): Deleted.
        Replace isEquivalentRGBA/isEquivalentCMYKA with overloaded isEquivalent.
        (WebCore::CanvasStyle::applyStrokeColor const):
        (WebCore::CanvasStyle::applyFillColor const):
        Update for new names of CMYKA members.
        * html/canvas/CanvasStyle.h:
        Use SRGBA<float> and CMYKA<float> to simplify interfaces
        
        * page/DebugPageOverlays.cpp:
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        Use makeSimpleColor rather than makeSimpleColorFromFloats, allowing for
        constant expression creation of SimpleColors.

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        Use makeSimpleColor(SRGBA { ... }) rather than makeSimpleColorFromFloats.

        (WebCore::Color::luminance const):
        Fix comment.

        (WebCore::blendWithoutPremultiply):
        Use makeSimpleColor(...) rather than makeSimpleColorFromFloats.

        * platform/graphics/ColorTypes.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        - Add deduction guides and operator==/operator!= for each color type.
        - Add CMYKA type. No conversion to ColorComponents yet, as ColorComponents
          only works with 4 component colors, not ones with 5 like CMYKA.

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::toSRGBA):
        Move conversion from CMYKA to SRGBA from makeSimpleColorFromCMYKA to here.

        * platform/graphics/ColorUtilities.h:
        (WebCore::convertPrescaledToComponentByte):
        (WebCore::convertToComponentByte):
        Use std::round rather than std::lroundf, since it will have the same result 
        and it reads nicer.

        * platform/graphics/SimpleColor.cpp:
        (WebCore::makeSimpleColorFromCMYKA): Deleted.
        * platform/graphics/SimpleColor.h:
        (WebCore::makeSimpleColor):
        (WebCore::makeSimpleColorFromFloats): Deleted.
        - Removed makeSimpleColorFromFloats and makeSimpleColorFromCMYKA.
        - Added constexpr overload of makeSimpleColor taking a const SRGBA<uint8_t>&.
        - Fixed forward declaration of makeSimpleColor that was taking ColorComponents 
          to actually take an SRGBA<float>, which is what the inline implementation actually
          takes.
 
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeSimpleColorFromARGBCFArray):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::interpolateColorStop):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeSimpleColorFromCGColor):
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::brushWithColor):
        Use makeSimpleColor(SRGBA { ... }) rather than makeSimpleColorFromFloats.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromUIColor):
        Use makeSimpleColor(SRGBA { ... }) rather than makeSimpleColorFromFloats. Casting to 
        float is needed, as the input types are CGFloat which is double in 64-bit environments
        and won't automatically narrow with the new types.

        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::colorForGridTileBorder const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        Use makeSimpleColor rather than makeSimpleColorFromFloats, allowing for
        constant expression creation of SimpleColors.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        Use Color::black/Color::white.colorWithAlpha(...) rather than makeSimpleColorFromFloats, 
        allowing for constant expression creation of SimpleColors.

2020-06-29  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-modal nodes wrapped in aria-hidden are not honored
        https://bugs.webkit.org/show_bug.cgi?id=212849
        <rdar://problem/64047019>

        Reviewed by Zalan Bujtas.

        Test: accessibility/aria-modal-in-aria-hidden.html

        If aria-modal was wrapped inside aria-hidden, we were still processing that as the modal node.
        Fixing that uncovered a host of very finicky issues related to aria-modal.
        1. We were processing modal status immediately instead of after a delay, so visibility requirements were not correct.
        2. In handleModalChange: We were processing multiple modal nodes perhaps incorrectly (the spec doesn't account for multiple modal nodes). 
             - had to update a test to turn off modal status before adding a new modal node
        3. Changed the modal node to a WeakPtr
        4. In isNodeAriaVisible: We stopped processing for visibile with aria-hidden as soon as we hit a renderable block, but that means it won't account
           for nodes higher in the tree with aria-hidden.
        5. In handleAttributeChange: if aria-hidden changes, we should update modal status if needed.
        6. In focusModalNodeTimerFired: we need to verify the element is still live, otherwise it can lead to a crash.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::findModalNodes):
        (WebCore::AXObjectCache::currentModalNode):
        (WebCore::AXObjectCache::modalNode):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::deferModalChange):
        (WebCore::AXObjectCache::focusModalNodeTimerFired):
        (WebCore::AXObjectCache::handleAttributeChange):
        (WebCore::AXObjectCache::handleModalChange):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::isNodeAriaVisible):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::handleModalChange):
        (WebCore::AXObjectCache::deferModalChange):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::firstChild const):
        (WebCore::AccessibilityRenderObject::lastChild const):

2020-06-29  Youenn Fablet  <youenn@apple.com>

        Support MediaRecorder.onstart
        https://bugs.webkit.org/show_bug.cgi?id=213720

        Reviewed by Darin Adler.

        Fire start event if MediaRecorder.start is successful.
        Do some WebIDL clean-up, in particular change timeSlice from long to unsigned long, as per spec.
        Covered by added test.

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::startRecording):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediarecorder/MediaRecorder.idl:

2020-06-29  Chris Dumez  <cdumez@apple.com>

        On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoader::commitProvisionalLoad()
        https://bugs.webkit.org/show_bug.cgi?id=213657

        Reviewed by Youenn Fablet.

        On load from back/forward cache, call checkCompleted() for ALL frames inside FrameLoader::commitProvisionalLoad().
        Previously, we were doing it for the main frame in FrameLoader::commitProvisionalLoad() and for subframes in
        FrameLoader::open(). Doing it all in one place results in more understandable code and is less error-prone.

        Note that calling checkCompleted() for subframes was new in r262221 and is covered by:
        fast/history/multiple-back-forward-navigations.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):

2020-06-09  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] WebKit mistakenly lets pointer events (click/hover/etc) pass through flex items, if they have negative margin
        https://bugs.webkit.org/show_bug.cgi?id=185771

        Reviewed by Javier Fernandez.

        When multiple child elements of a flexbox overlap (for example, due to negative margins), the element drawn in the
        foreground may not actually capture the hit if the element underneath it is hit-tested despite being occluded.
        This is because painting of flexbox children is done in order modified document order instead of raw document order.

        In order to achieve this we should inspect flex items in reverse order modified document order. As the OrderIterator
        cannot go backwards, we cache the reverse order of items when doing the layout in order to have fast hit testing in
        flexbox containers.

        As this behaviour is different to the one implemented in RenderBlock a new virtual method to perform hit testing of children
        was extracted from RenderBlock:nodeAtPoint() to a new method called RenderBlock::hitTestChildren. The RenderBlock 
        implementation is identical to the current one but flexbox containers overwrite it.

        Two WPT flexbox hittests are passing now thanks to this patch.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hitTestChildren): Implementation of the new virtual method extracted from nodeAtPoint.
        (WebCore::RenderBlock::nodeAtPoint): Moved code to hit test children to hitTestChildren()
        * rendering/RenderBlock.h: Added hitTestChildren new virtual method.
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::hitTestChildren): Implemented.
        (WebCore::RenderFlexibleBox::layoutFlexItems): Cache the reverse of the order iterator to be used by hit testing.
        * rendering/RenderFlexibleBox.h: Added hitTestChildren.

2020-06-29  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.https.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=213385

        Reviewed by Philippe Normand.

        Add a way to release the decryption resources when the player
        private is destroyed. That way we can release the secure memory
        allocated by libgcrypt and allow for more tests to get, which
        caused the crash.

        Tests: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-setMediaKeys-immediately.https.html.

        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::CDMProxy::releaseDecryptionResources):
        (WebCore::CDMInstanceSessionProxy::releaseDecryptionResources):
        (WebCore::CDMInstanceProxy::releaseDecryptionResources):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyClearKey::~CDMProxyClearKey):
        (WebCore::CDMProxyClearKey::releaseDecryptionResources):
        (WebCore::CDMProxyClearKey::closeGCryptHandle):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.h:

2020-06-29  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Rename MediaSourceGStreamer to MediaSourcePrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=213722

        Reviewed by Xabier Rodriguez-Calvar.

        It's about time to remove this FIXME:

        // FIXME: Should this be called MediaSourcePrivateGStreamer?

        Yes, it should. Because it's a MediaSourcePrivate, and that is an
        important fact. The MSE class diagram is confusing enough already,
        let's fix this.

        To rebase commits after this change use `git format-patch` first to
        get them in a patch format and then run:

        sed -i 's|\<MediaSourceGStreamer\>|MediaSourcePrivateGStreamer|g' *.patch

        This patch is a refactor that produces no behavior changes.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceSetup):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceGStreamer.cpp.
        (WebCore::MediaSourcePrivateGStreamer::open):
        (WebCore::MediaSourcePrivateGStreamer::MediaSourcePrivateGStreamer):
        (WebCore::MediaSourcePrivateGStreamer::~MediaSourcePrivateGStreamer):
        (WebCore::MediaSourcePrivateGStreamer::addSourceBuffer):
        (WebCore::MediaSourcePrivateGStreamer::removeSourceBuffer):
        (WebCore::MediaSourcePrivateGStreamer::durationChanged):
        (WebCore::MediaSourcePrivateGStreamer::markEndOfStream):
        (WebCore::MediaSourcePrivateGStreamer::unmarkEndOfStream):
        (WebCore::MediaSourcePrivateGStreamer::readyState const):
        (WebCore::MediaSourcePrivateGStreamer::setReadyState):
        (WebCore::MediaSourcePrivateGStreamer::waitForSeekCompleted):
        (WebCore::MediaSourcePrivateGStreamer::seekCompleted):
        (WebCore::MediaSourcePrivateGStreamer::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MediaSourcePrivateGStreamer::buffered):
        (WebCore::MediaSourcePrivateGStreamer::logChannel const):
        * platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h: Renamed from Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceGStreamer.h.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::create):
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:

2020-06-29  Youenn Fablet  <youenn@apple.com>

        RTCDataChannel.bufferedAmount should stay the same even if channel is closed
        https://bugs.webkit.org/show_bug.cgi?id=213698

        Reviewed by Darin Adler.

        bufferedAmount was set back to zero when closing.
        Instead, we should keep the value in RTCDataChannel and update it either when sending data
        or being notified or some data getting sent.

        Test: webrtc/datachannel/bufferedAmount-afterClose.html

        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        * platform/mock/RTCDataChannelHandlerMock.h:

2020-06-29  Antti Koivisto  <antti@apple.com>

        checked overflow in WebCore::findClosestFont
        https://bugs.webkit.org/show_bug.cgi?id=213719
        <rdar://47765225>

        Reviewed by David Kilzer.

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

        If indexOfBestCapabilities doesn't find anything it returns notFound and indexing to the vector overflows.

2020-06-29  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r262776): Leak of NSMutableURLRequest in -[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]
        <https://webkit.org/b/213690>
        <rdar://problem/64853619>

        Reviewed by Anders Carlsson.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        - Use RetainPtr<> for the mutable copy and autorelease the
          return value.

2020-06-29  Youenn Fablet  <youenn@apple.com>

        MediaRecorder.start() Method is Ignoring the "timeslice" Parameter
        https://bugs.webkit.org/show_bug.cgi?id=202233
        <rdar://problem/55720555>

        Reviewed by Eric Carlson.

        Use a timer to implement timeSlice parameter.
        Schedule timer either when start is called or as part of requestData callback.
        This should ensure that, if requestData is called by the application, the timer will be rescheduled appropriately.

        Test: http/wpt/mediarecorder/MediaRecorder-start-timeSlice.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:

2020-06-29  Rob Buis  <rbuis@igalia.com>

        window.location.replace with invalid urls should throw
        https://bugs.webkit.org/show_bug.cgi?id=153121

        Reviewed by Darin Adler.

        Throw SyntaxError if the url resulting from the
        location.replace operation is not valid.

        Behavior matches Firefox and Chrome.

        Tests: imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location_replace.html

        [1] https://html.spec.whatwg.org/multipage/history.html#dom-location-replace

        * page/Location.cpp:
        (WebCore::Location::replace):
        * page/Location.h:
        * page/Location.idl:

2020-06-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Adjust table content vertical position to match vertical-align
        https://bugs.webkit.org/show_bug.cgi?id=213692

        Reviewed by Antti Koivisto.

        Child boxes (and runs) are always in the coordinate system of the containing block's border box.
        The content box (where the child content lives) is inside the padding box, which is inside the border box.
        In order to compute the child box top/left position, we need to know both the padding and the border offsets.  

        <div style="border: 2px solid green; padding-top: 10px;"><div></div></div>
        The inner div's top left position is at [12px, 2px] (let's ignore margin collapsing for now).

        Normally by the time we start positioning the child content, we already have computed borders and paddings for the containing block.
        This is different with table cells where the final padding offset depends on the content height as we use
        the padding box to vertically align the table cell content.

        Let's adjust the child boxes and runs to match the new content box position.

        Test: fast/layoutformattingcontext/table-cell-vertical-alignment-simple.html

        * layout/displaytree/DisplayLineBox.h:
        (WebCore::Display::LineBox::moveVertically):
        * layout/displaytree/DisplayRun.h:
        (WebCore::Display::Run::moveVertically):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):

2020-06-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Painting] Use the table section as the paint container for table cells
        https://bugs.webkit.org/show_bug.cgi?id=213693

        Reviewed by Antti Koivisto.

        The cell's containing block is the table box (skipping both the row and the section),
        but it's positioned relative to the table section.

        Let's skip the row and go right to the section box when painting the cells.

        * layout/displaytree/DisplayPainter.cpp:
        (WebCore::Display::absoluteDisplayBox):

2020-06-28  Alexey Shvayka  <shvaikalesh@gmail.com>

        Improve error message for primitive callback interfaces
        https://bugs.webkit.org/show_bug.cgi?id=213684

        Reviewed by Darin Adler.

        This patch rewords TypeError message for non-object callback interfaces
        because apart from function, an object with certain method is also allowed.
        New error message matches Chrome and Firefox.

        Tests: fast/dom/createNodeIterator-parameters.html
               fast/dom/createTreeWalker-parameters.html

        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::throwArgumentMustBeObjectError):
        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetArgumentExceptionFunction):
        * bindings/scripts/test/*: Updated.

2020-06-28  Rob Buis  <rbuis@igalia.com>

        Setting url.search="??" (two questionmarks) has incorrect behavior
        https://bugs.webkit.org/show_bug.cgi?id=170452

        Reviewed by Darin Adler.

        There is no need to strip leading "?" character since
        URLParser expects it to be there. This differs from the
        specification algorithm [1], which relies on state override,
        which URLParser does not support.

        Behavior matches Firefox and Chrome.

        Test: imported/w3c/web-platform-tests/url/url-setters.html

        [1] https://url.spec.whatwg.org/#dom-url-search

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setSearch):

2020-06-28  Geoffrey Garen  <ggaren@apple.com>

        Rename initializeThreading to initialize
        https://bugs.webkit.org/show_bug.cgi?id=213674

        Reviewed by Mark Lam.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::openDatabase):
        * WebCore.order:
        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeMainThread):
        (WebCore::ScriptController::initializeThreading): Deleted.
        * bindings/js/ScriptController.h:
        * bridge/objc/WebScriptObject.mm:
        (+[WebScriptObject initialize]):
        * platform/cocoa/SharedBufferCocoa.mm:
        (+[WebCoreSharedBufferData initialize]):
        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread):

2020-06-28  Youenn Fablet  <youenn@apple.com>

        MediaRecorder stopRecorder() returns empty Blob after first use
        https://bugs.webkit.org/show_bug.cgi?id=212274
        <rdar://problem/63601298>

        Reviewed by Eric Carlson.

        Refactor code to create/destroy MediaRecorderPrivate on MediaRecorder start/stop.
        This allows reusing a MediaRecorder after a stop and restarting with a clean state.

        We introduce MediaRecorderPrivate::startRecording to do the initialization,
        which allows to fix a potential ref cycle as part of the error callback handling.

        Make some improvements to the platform implementation, in particular add default initialization to all fields.
        Align the code using AudioConverterRef to what is done in AudioSampleDataSource.
        Also call VTCompressionSessionInvalidate when destroying the VideoSampleBufferCompressor.

        Test: http/wpt/mediarecorder/MediaRecorder-multiple-start-stop.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::fetchData):
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::startRecording):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):

2020-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Replaced inline boxes sit on the baseline with their margins
        https://bugs.webkit.org/show_bug.cgi?id=213679

        Reviewed by Antti Koivisto.

        Take the margin box into account when computing the top position of a baseline aligned replaced inline box.

        Test: fast/layoutformattingcontext/replaced-box-with-margin-on-baseline.html

        * layout/inlineformatting/InlineLineBuilder.cpp:
        (WebCore::Layout::LineBuilder::alignContentVertically):

2020-06-27  Mark Lam  <mark.lam@apple.com>

        Fix missing exception check in createIDBKeyFromValue().
        https://bugs.webkit.org/show_bug.cgi?id=213681
        <rdar://problem/64804893>

        Reviewed by Chris Dumez.

        Test: storage/indexeddb/missing-exception-check-in-IDBKey.html

        Also fixed up miscellaneous other exception check related code to enable the
        new test to run with exception check validation.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::updateDocument):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        (WebCore::JSDOMWindow::defineOwnProperty):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScriptForWindowProxy):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttrGetter):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionBody):
        (WebCore::jsTestActiveDOMObjectPrototypeFunctionOverloadedMethodOverloadDispatcher):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2020-06-27  Jer Noble  <jer.noble@apple.com>

        iOS Safari incorrectly reports "AppleCoreMedia" as UA string
        https://bugs.webkit.org/show_bug.cgi?id=213245
        <rdar://problem/64471582>

        Reviewed by Youenn Fablet.

        Tests: TestWebKitAPI.MediaLoading.UserAgentStringCRABS
               TestWebKitAPI.MediaLoading.UserAgentStringHLS

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]):

2020-06-27  Rob Buis  <rbuis@igalia.com>

        Require <form> to be connected
        https://bugs.webkit.org/show_bug.cgi?id=177356

        Reviewed by Sam Weinig.

        Implement step 1 of [1], i.e. do not submit form if it
        is not connected.

        Test: imported/w3c/web-platform-tests/html/semantics/forms/form-submission-0/submission-checks.html

        [1] https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#concept-form-submit

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit):

2020-06-27  Youenn Fablet  <youenn@apple.com>

        Log capture device information in case of getUserMedia failing to select a device
        https://bugs.webkit.org/show_bug.cgi?id=213643

        Reviewed by Eric Carlson.

        Log constraints and device in case of a failing getUserMedia call.
        No obserable change, logging addition.

        * platform/mediastream/mac/CoreAudioCaptureDevice.cpp:
        (WebCore::getDeviceInfo):
        (WebCore::CoreAudioCaptureDevice::deviceClock):
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::isValidCaptureDevice):
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::MediaConstraint::log const):
        (WebCore::BooleanConstraint::logAsBoolean const):
        (WebCore::DoubleConstraint::logAsDouble const):
        (WebCore::IntConstraint::logAsInt const):
        * platform/mediastream/MediaConstraints.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeMediaSource::selectSettings):
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints):
        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::bestSupportedSizeAndFrameRate):
        * platform/mediastream/VideoPreset.h:
        (WebCore::VideoPreset::log const):

2020-06-27  Youenn Fablet  <youenn@apple.com>

        Protect SWServer::claim from a registration without active worker
        https://bugs.webkit.org/show_bug.cgi?id=213597

        Reviewed by Chris Dumez.

        SWServerWorker might be active while being terminated.
        If terminated as part of SWServerRegistration::clear, the registration no longer has a service worker.
        SWServer::claim should therefore check for registration active worker.
        This is difficult to test as one needs to claim at the time the service worker is being terminated but not yet terminated.

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

2020-06-27  Sam Weinig  <weinig@apple.com>

        Convert SVG related parsers over to using StringParsingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=213635

        Reviewed by Darin Adler.

        - Adopt StringParsingBuffer across SVG code.
        - Remove UTF-16 upconversions in SVGAnimationElement, SVGFitToViewBox, SVGLengthList, 
          SVGLengthValue, SVGNumberList, SVGParserUtilities, SVGPointList, SVGPreserveAspectRatioValue, 
          SVGStringList, SVGTransformList, SVGTransformable and SVGViewSpec.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Export ParsingUtilities.h, which is now included by SVGParserUtilities.h
        
        * Sources.txt:
        Add implementation files for SVGLengthList, SVGNumberList, SVGPointList, SVGStringList
        and SVGTransformList to hold large functions are unlikely to benefit from inlining.
        
        * html/parser/ParsingUtilities.h:
        (WebCore::skipCharactersExactly):
        Add new skipCharactersExactly, which takes a c-array (NOT null-terminated) of characters
        to compare against.

        * svg/SVGAngleValue.cpp:
        (WebCore::parseAngleType):
        (WebCore::SVGAngleValue::setValueAsString):
        Adopt StringParsingBuffer.

        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::parseAttribute):
        Adapt to new shared parseTransformType, which now returns an Optional and default to
        SVG_TRANSFORM_UNKNOWN on parse failure as the old parseTransformType did.
        
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters()
        
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::parseViewBoxGeneric):
        * svg/SVGFitToViewBox.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters()

        * svg/SVGLengthList.cpp: Added.
        (WebCore::SVGLengthList::parse):
        (WebCore::SVGLengthList::valueAsString const):
        * svg/SVGLengthList.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse and valueAsString out of line.

        * svg/SVGLengthValue.cpp:
        (WebCore::parseLengthType):
        (WebCore::SVGLengthValue::construct):
        (WebCore::SVGLengthValue::setValueAsString):
        * svg/SVGLengthValue.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters()

        * svg/SVGNumberList.cpp: Added.
        (WebCore::SVGNumberList::parse):
        (WebCore::SVGNumberList::valueAsString const):
        * svg/SVGNumberList.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse and valueAsString out of line.

        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber):
        (WebCore::parseNumber):
        (WebCore::genericParseArcFlag):
        (WebCore::parseArcFlag):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parsePoint):
        (WebCore::parseRect):
        (WebCore::parseGlyphName):
        (WebCore::parseUnicodeRange):
        (WebCore::parseKerningUnicodeString):
        (WebCore::genericParseFloatPoint):
        (WebCore::parseFloatPoint):
        * svg/SVGParserUtilities.h:
        (WebCore::isSVGSpaceOrComma):
        (WebCore::skipOptionalSVGSpaces):
        (WebCore::skipOptionalSVGSpacesOrDelimiter):
        (WebCore::skipString): Deleted.
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse and valueAsString out of line.

        * svg/SVGPathSource.h:
        Add missing include, which is now needed do to removing unncessary includes in other files.

        * svg/SVGPathStringSource.cpp:
        (WebCore::SVGPathStringSource::SVGPathStringSource):
        (WebCore::SVGPathStringSource::hasMoreData const):
        (WebCore::SVGPathStringSource::moveToNextToken):
        (WebCore::nextCommandHelper):
        (WebCore::SVGPathStringSource::nextCommand):
        (WebCore::SVGPathStringSource::parse):
        (WebCore::SVGPathStringSource::parseSVGSegmentType):
        (WebCore::SVGPathStringSource::parseMoveToSegment):
        (WebCore::SVGPathStringSource::parseLineToSegment):
        (WebCore::SVGPathStringSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathStringSource::parseLineToVerticalSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathStringSource::parseArcToSegment):
        (WebCore::parseSVGSegmentTypeHelper): Deleted.
        * svg/SVGPathStringSource.h:
        Adopt StringParsingBuffer. Replace existing set of unions with a single
        union of StringParsingBuffers.
    
        * svg/SVGPointList.cpp: Added.
        (WebCore::SVGPointList::parse):
        (WebCore::SVGPointList::valueAsString const):
        * svg/SVGPointList.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse and valueAsString out of line.

        * svg/SVGPreserveAspectRatioValue.cpp:
        (WebCore::SVGPreserveAspectRatioValue::SVGPreserveAspectRatioValue):
        (WebCore::SVGPreserveAspectRatioValue::parse):
        (WebCore::SVGPreserveAspectRatioValue::parseInternal):
        (WebCore::SVGPreserveAspectRatioValue::valueAsString const):
        * svg/SVGPreserveAspectRatioValue.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). 

        * svg/SVGStringList.cpp: Added.
        (WebCore::SVGStringList::parse):
        (WebCore::SVGStringList::valueAsString const):
        * svg/SVGStringList.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse and valueAsString out of line.

        * svg/SVGTransformList.cpp: Added.
        (WebCore::SVGTransformList::consolidate):
        (WebCore::SVGTransformList::concatenate const):
        (WebCore::SVGTransformList::parseGeneric):
        (WebCore::SVGTransformList::parse):
        (WebCore::SVGTransformList::valueAsString const):
        * svg/SVGTransformList.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Move parse, valueAsString, consolidate and 
        concatenate out of line.

        * svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        (WebCore::parseTransformValueGeneric):
        (WebCore::SVGTransformable::parseTransformValue):
        (WebCore::parseTransformTypeGeneric):
        (WebCore::SVGTransformable::parseTransformType):
        (WebCore::SVGTransformable::parseAndSkipType): Deleted.
        * svg/SVGTransformable.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Unify parseTransformType implementations to all
        use a single implementation and return an Optional<SVGTransformType>.

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGViewSpec.h:
        Adopt StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters().

        * svg/SVGZoomAndPan.cpp:
        (WebCore::parseZoomAndPanGeneric):
        (WebCore::SVGZoomAndPan::parseZoomAndPan):
        * svg/SVGZoomAndPan.h:
        Adopt StringParsingBuffer.

2020-06-26  Jer Noble  <jer.noble@apple.com>

        CRASH: incompatible downcast<> operation in SourceBufferPrivateAVFObjC::setCDMInstance()
        https://bugs.webkit.org/show_bug.cgi?id=213660
        <rdar://problem/63831593>

        Reviewed by Eric Carlson.

        Test: platform/mac/media/encrypted-media/fps-clearkey-crash.html

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::setCDMInstance):

2020-06-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for <center>
        https://bugs.webkit.org/show_bug.cgi?id=213649

        Reviewed by Antti Koivisto.

        Adjust the margin box to center the block content (this is very similar to [style="margin-left: auto; margin-right: auto;"]).

        Test: fast/layoutformattingcontext/center-alignment-with-block-content-simple.html

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

2020-06-26  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r263511, r263514, and r263565.

        r263511 caused MediaRecorder test crashes on internal testers.

        Reverted changesets:

        "MediaRecorder stopRecorder() returns empty Blob after first
        use"
        https://bugs.webkit.org/show_bug.cgi?id=212274
        https://trac.webkit.org/changeset/263511

        "Unreviewed iOS build fix after r263511."
        https://trac.webkit.org/changeset/263514

        "MediaRecorder.start() Method is Ignoring the "timeslice"
        Parameter"
        https://bugs.webkit.org/show_bug.cgi?id=202233
        https://trac.webkit.org/changeset/263565

2020-06-26  Sam Weinig  <weinig@apple.com>

        Convert ContentSecurityPolicy related parsers over to using StringParsingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=213631

        Reviewed by Darin Adler.

        - Adopt StringParsingBuffer across CSP code.
        - Remove UTF-16 upconversions in ContentSecurityPolicy, ContentSecurityPolicyDirectiveList,
          ContentSecurityPolicyMediaListDirective and ContentSecurityPolicySourceList.

        * html/parser/ParsingUtilities.h:
        (WebCore::isNotASCIISpace):
        (WebCore::skipExactly):
        (WebCore::characterPredicate):
        (WebCore::skipUntil):
        (WebCore::skipExactlyIgnoringASCIICase):
        Add overloads for each helper that take a StringParsingBuffer.

        * loader/ResourceCryptographicDigest.cpp:
        (WebCore::parseHashAlgorithmAdvancingPosition):
        Convert to use an Optional return value rather than outparameter + bool.

        (WebCore::parseCryptographicDigestImpl):
        (WebCore::parseCryptographicDigest):
        (WebCore::parseEncodedCryptographicDigestImpl):
        (WebCore::parseEncodedCryptographicDigest):
        * loader/ResourceCryptographicDigest.h:
        Use StringParsingBuffer rather than raw pointers for parsing.
 
        * loader/SubresourceIntegrity.cpp:
        (WebCore::splitOnSpaces):
        (WebCore::parseIntegrityMetadata):
        Use StringParsingBuffer and readCharactersForParsing rather than raw pointers for parsing.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        Use StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters().

        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::isDirectiveNameCharacter):
        (WebCore::isDirectiveValueCharacter):
        (WebCore::ContentSecurityPolicyDirectiveList::parse):
        (WebCore::ContentSecurityPolicyDirectiveList::parseDirective):
        (WebCore::ContentSecurityPolicyDirectiveList::parseReportURI):
        (WebCore::ContentSecurityPolicyDirectiveList::setCSPDirective):
        (WebCore::ContentSecurityPolicyDirectiveList::applySandboxPolicy):
        (WebCore::ContentSecurityPolicyDirectiveList::setUpgradeInsecureRequests):
        (WebCore::ContentSecurityPolicyDirectiveList::setBlockAllMixedContentEnabled):
        (WebCore::ContentSecurityPolicyDirectiveList::addDirective):
        * page/csp/ContentSecurityPolicyDirectiveList.h:
        Use StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Also switch to using Optional for return values
        rather than outparameter + bool. To make things read more cleanly, package up name
        and value pair into a new ParsedDirective struct that can be passed around more easily.

        * page/csp/ContentSecurityPolicyMediaListDirective.cpp:
        (WebCore::isMediaTypeCharacter): 
        (WebCore::ContentSecurityPolicyMediaListDirective::parse):
        Use StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters().

        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::isSourceCharacter):
        (WebCore::isHostCharacter):
        (WebCore::isPathComponentCharacter):
        (WebCore::isSchemeContinuationCharacter):
        (WebCore::isNotColonOrSlash):
        (WebCore::isSourceListNone):
        (WebCore::ContentSecurityPolicySourceList::parse):
        (WebCore::ContentSecurityPolicySourceList::parseSource):
        (WebCore::ContentSecurityPolicySourceList::parseScheme):
        (WebCore::ContentSecurityPolicySourceList::parseHost):
        (WebCore::ContentSecurityPolicySourceList::parsePath):
        (WebCore::ContentSecurityPolicySourceList::parsePort):
        (WebCore::isNonceCharacter):
        (WebCore::ContentSecurityPolicySourceList::parseNonceSource):
        (WebCore::ContentSecurityPolicySourceList::parseHashSource):
        * page/csp/ContentSecurityPolicySourceList.h:
        Use StringParsingBuffer and readCharactersForParsing to replace unnecessary call to
        StringView::upconvertedCharacters(). Also switch to using Optional for return values
        rather than outparameter + bool. To make things read more cleanly, package up source
        return values into structs that can be more easily returned / passed around.

2020-06-26  Simon Fraser  <simon.fraser@apple.com>

        Content sometimes missing in nested scrollers with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=213580
        <rdar://problem/64460373>

        Reviewed by Zalan Bujtas.
        
        RenderLayer::clipToRect() has a special case for clips involving border-radius,
        involving an ancestor tree walk which applies the rounded clips.

        When inside composited overflow, don't include the border-radius from the scroller since
        that does its own clipping.

        Test: compositing/clipping/nested-overflow-with-border-radius.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2020-06-26  Geoffrey Garen  <ggaren@apple.com>

        Initializing the main thread should initialize the main run loop
        https://bugs.webkit.org/show_bug.cgi?id=213637

        Reviewed by Anders Carlsson.

        * platform/ios/wak/WebCoreThread.mm:
        (RunWebThread): Removed call to initializeMainThread() because the main
        thread calls it before starting the web thread, so it's a no-op. (And if
        it were an op, it would be broken.)
        (StartWebThread): Merged RunLoop::initializeMain and initializeThreading
        into initializeMainThread.

2020-06-26  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in AXIsolatedObject::relativeFrame.
        https://bugs.webkit.org/show_bug.cgi?id=213363

        Reviewed by Chris Fleizach.

        Covered by existing testss.

        Between the time an isolated object dispatches the method to the main
        thread and the time the lambda is executed, the isolated object is
        detached and hence its object ID becomes invalid. Thus, trying to get
        the associated AX object results in an assert/crash.

        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-06-26  Andres Gonzalez  <andresg_22@apple.com>

        Access to AXIsolatedTree:m_readerThreadNodeMap should happen only on the secondary AX thread.
        https://bugs.webkit.org/show_bug.cgi?id=213575

        Reviewed by Chris Fleizach.

        After calling AXObjectCache::initializeSecondaryAXThread, there may
        still be some client requests coming in on the main thread. Thus
        AXIsolatedTree::applyPendingchanges and nodeForID can be called on the
        main thread. Since these two methods access the member variable
        m_readerThreadNodeMap which should be accessed only on the secondary AX
        thread, we now check for this condition and bail out if needed.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/isolatedtree/AXIsolatedTree.h: Reordered private methods
        above member variables to comply with WebKit coding conventions,
        pointed out by Darin Adler in review for https://bugs.webkit.org/show_bug.cgi?id=213435.

2020-06-26  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in accessibility/roles-exposed.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=213648

        Reviewed by Chris Fleizach.

        LayoutTest: accessibility/roles-exposed.html.

        - In layout tests, when AXObjectCache::notificationPostTimerFired is
        triggered, and we try to update the isolated tree, some of the
        underlying objects may already be gone. So this change ensure we don't
        try to update an isolated object that corresponds to an already detached
        live object.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::cacheAndInitializeWrapper): Sanity check.
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren): m_renderer can be null
        when trying to update the isolated tree.
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::computeAccessibilityIsIgnored const):
        Parent object may be gone when trying to update the isolated tree.
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateChildrenIDs):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::updateChildren):

2020-06-26  Youenn Fablet  <youenn@apple.com>

        MediaRecorder.start() Method is Ignoring the "timeslice" Parameter
        https://bugs.webkit.org/show_bug.cgi?id=202233
        <rdar://problem/55720555>

        Reviewed by Eric Carlson.

        Use a timer to implement timeSlice parameter.
        Schedule timer either when start is called or as part of requestData callback.
        This should ensure that, if requestData is called by the application, the timer will be rescheduled appropriately.

        Test: http/wpt/mediarecorder/MediaRecorder-start-timeSlice.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:

2020-06-26  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: (it != m_map.end()) in TreeScopeOrderedMap::remove
        https://bugs.webkit.org/show_bug.cgi?id=213611
        <rdar://problem/64493506>

        Reviewed by Geoffrey Garen.

        In function HTMLImageElement::parseAttribute(), empty name attribute is considered valid
        which makes the function skip handling of subsequent name changes. Modified the check of 
        name attribute so only non-empty name is considered valid. This code change is to match
        <https://trac.webkit.org/changeset/262360>.

        Test: fast/images/img-change-name-assert.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):

2020-06-26  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation should observe adjacent elements with new renderer together
        https://bugs.webkit.org/show_bug.cgi?id=213333

        Reviewed by Geoffrey Garen.

        TextManipulationController only keeps track of manipulated Elements. For other types of Node, like Text, 
        TextManipulationController does not mark them as manipulated and may manipulate it again. r263132 tried to solve
        the problem by marking Element with only manipulated children as manipulated, but it did not iterate all 
        children of Element. So, if one Element has children in different paragraphs, it may fail to mark the Element 
        manipulated. See updated test.
        To fix this issue completely, TextManipulationController now tracks all manipulated Nodes, so it can skip the 
        manipulated Nodes during observation.

        For elements with new renderer, TextManipulationController observes them one by one. However, adjacent elements
        can be in the same paragraph, if there is no delimiter in their text, and should be observed together. To solve 
        this problem, TextManipulationController now starts observing from the common ancestor of these elements. If a
        Node in range is manipulated, split the paragrph there. This makes sure content in paragraph is not manipulated.
        Relevant test is updated for this new behavior.

        Tests: TextManipulation.StartTextManipulationFindNewlyDisplayedParagraph
               TextManipulation.CompleteTextManipulationAvoidExtractingManipulatedTextAfterManipulation

        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::didCreateRendererForElement):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::updateInsertions):
        (WebCore::TextManipulationController::replace):
        (WebCore::TextManipulationController::removeNode):
        (WebCore::makePositionTuple): Deleted.
        (WebCore::makeHashablePositionRange): Deleted.
        * editing/TextManipulationController.h:

2020-06-26  Simon Fraser  <simon.fraser@apple.com>

        Clean up some PaintBehavior-related code in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=213634

        Reviewed by Sam Weinig.

        Move the computation of paintBehavior into a lambda, and share the flags between
        normal painting and mask painting.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2020-06-26  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Initialize m_currentState and m_oldState
        https://bugs.webkit.org/show_bug.cgi?id=213604

        Reviewed by Eric Carlson.

        MediaPlayerPrivateGStreamer was not initializing m_currentState and
        m_oldState, causing them to be checked e.g. updateStates() while they
        still contain garbage.

        Because the biggest uninitialized usage is a != comparison, in
        practice things still worked, but that's still a bug. I detected the
        bug after seeing this in the logs:

        playbin3SendSelectStreamsIfAppropriate:<media-player-0> Checking if to send SELECT_STREAMS, m_waitingForStreamsSelectedEvent = false, haveDifferentStreamIds = false, m_currentState = UNKNOWN!(-8421505)...  shouldSendSelectStreams = false

        This patch fixes a slight memory error which doesn't alter
        TestExpectations.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2020-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263537.
        https://bugs.webkit.org/show_bug.cgi?id=213640

        Broke watchOS and tvOS builds

        Reverted changeset:

        "iOS Safari incorrectly reports "AppleCoreMedia" as UA string"
        https://bugs.webkit.org/show_bug.cgi?id=213245
        https://trac.webkit.org/changeset/263537

2020-06-25  Zalan Bujtas  <zalan@apple.com>

        [Inline] Overlapping content when margin-right is present
        https://bugs.webkit.org/show_bug.cgi?id=213629
        <rdar://problem/64391403>

        Reviewed by Simon Fraser.

        1. computeInlineDirectionPositionsForSegment loops through the Bidi runs and computes their logical widths.
        2. Text measuring needs the current logical left position in order to compute the run width properly (e.g tab size)
        3. The current logical left includes margins, boders and paddings (e.g <span style="margin: 100px;">text content</span> 'text content' starts at 100px -ignore the line offset for now)
        4. The BiDi loop jumps over empty inline containers (e.g. text<span style="border: 10px solid green"></span>content) and it lacks the information to be able to resolve nested inline containers.

        This patch pre-computes the spacing offset for each InlineTextBox so that we could use it later to compute the logical left position for the text measuring.

        <span style="margin-right: 1px">[1]<span style="margin: 2px">[2]</span>[3]</span>[4]
        [1] -> 0px offset
        [2] -> 2px offset
        [3] -> 4px offset
        [4] -> 5px offset

        Test: fast/inline/incorrect-tab-position.html

        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::computeInlineDirectionPositionsForSegment):

2020-06-25  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r256166, r260596) WKNavigationAction.request.allHTTPHeaderFields needs to contain User-Agent and Accept
        https://bugs.webkit.org/show_bug.cgi?id=213626
        <rdar://problem/62374208>

        Reviewed by Darin Adler.

        Those two revisions seemed to just subtly move things around, but they caused API-breaking changes that caused real problems.
        This effectively reverts the parts of those changes that caused the breakages.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::acceptHeaderValueFromType):
        (WebCore::acceptHeaderValueFromType): Deleted.
        * loader/cache/CachedResourceRequest.h:

2020-06-25  Simon Fraser  <simon.fraser@apple.com>

        Convert the PaintLayerFlag enum to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=213624

        Reviewed by Zalan Bujtas.

        Convert enum PaintLayerFlag to an enum class.

        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::paintForFixedRootBackground):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerWithEffects):
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::filtersForPainting const):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintFlagsForLayer const):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):

2020-06-25  Daniel Bates  <dabates@apple.com>

        [iOS] Event region briefly missing editable element after typing second character in question field on discussions.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=213618
        <rdar://problem/62656131>

        Reviewed by Simon Fraser.

        Ensure the event region is updated for the foreground layer, if there is one. The foreground layer paints
        into a different backing and so will not be included in normal layer paint (i.e. RenderLayer::paintLayer()
        will bail out).  A "z-index: -1" can create such a layer. An element with "z-index: -1" is above the
        background, but below other content. Although the original reported bug was only concerned about the
        editable region the fix is applicable to all regions tracked by EventRegion. I included a test for touch-action
        region too.

        Tests: editing/editable-region/text-field-inside-composited-negative-z-index-layer.html
               pointerevents/ios/touch-action-none-relative-inside-composited-negative-z-index-layer.html

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

2020-06-25  Jer Noble  <jer.noble@apple.com>

        iOS Safari incorrectly reports "AppleCoreMedia" as UA string
        https://bugs.webkit.org/show_bug.cgi?id=213245
        <rdar://problem/64471582>

        Reviewed by Youenn Fablet.

        Tests: TestWebKitAPI.MediaLoading.UserAgentStringCRABS
               TestWebKitAPI.MediaLoading.UserAgentStringHLS

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask initWithSession:identifier:request:]):

2020-06-25  Megan Gardner  <megan_gardner@apple.com>

        Unreviewed. Fixing misspellings of 'position'.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::smartDeleteParagraphSpacers):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):

2020-06-25  Daniel Bates  <dabates@apple.com>

        [iOS] -_requestTextInputContextsInRect cannot find empty Quip spreadsheet title
        https://bugs.webkit.org/show_bug.cgi?id=213564
        <rdar://problem/59355847>

        Reviewed by Simon Fraser.

        Special case for a focused editable inline element that has no line box, which is
        what the Quip spreadsheet title can become if its contents are deleted. The engine
        optimizes to avoid creating lines and line boxes for empty inlines, hit testing,
        and painting them. It's complicated to patch all this up with a 100% correct
        solution without forcing more line box creation. So, just add a special case.

        * page/Page.cpp:
        (WebCore::Page::editableElementsInRect const): Add the root editable element of
        the focused element to the result set if its rect intersects the search rect. Note
        that its rect can be empty e.g. <span contenteditable="true"></span>. So, I use
        a new function on FloatRect to perform the intersection test. I also updated the
        ASSERT() to also use this new function. This was not necessary, but I did it to
        future the proof this code should hit testing one day return empty inlines.
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::inclusivelyIntersects const): Added.
        (WebCore::FloatRect::intersects const): While I was in this file I fixed up a comment
        in this function to be more precise.
        * platform/graphics/FloatRect.h:

2020-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the macOS 11 build after r263519

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

2020-06-25  Megan Gardner  <megan_gardner@apple.com>

        Cannot delete last line of Mail Message
        https://bugs.webkit.org/show_bug.cgi?id=213536
        <rdar://problem/63420928>

        Reviewed by Wenson Hsieh.

        LayoutTests/editing/deleting/smart-delete-paragraph-005.html

        The smart paragraph deletion code did not take into account that
        the previous blank line could be the start of editable content without
        a paragraph before it. If this was the case, the deletion code backed up
        too far, and the delete command failed. This case should be handled
        in the same way that the deleting the last paragraph in editable content is
        handled, by checking if we are already at the beginning of the editable
        content when expanding the selection for smart paragraph deletion.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::smartDeleteParagraphSpacers):

2020-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should exclude text rendered using icon-only fonts
        https://bugs.webkit.org/show_bug.cgi?id=213446
        <rdar://problem/63734298>

        Reviewed by Myles Maxfield.

        See below for more details.

        Test: TextManipulation.StartTextManipulationExcludesTextRenderedAsIcons

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::shouldExcludeNodeBasedOnStyle):
        (WebCore::TextManipulationController::parse):

        Augment token exclusion rules so that we're able to exclude certain text nodes from text manipulation, based on
        their style (more specifically, based on their font family). Ask the text node's primary font if it is likely to
        be used only for rendering icons, and cache the result in TextManipulationController to avoid running the
        heuristic an excessive number of times for each font that appears in the document. We currently only run this
        for the node's primary font when initiating translation, though we may want to change this in the future so that
        node exclusion is recomputed when the primary font of a node changes.

        Note that in the case where an icon font fails to load, we won't exclude the text node from translation,
        since the primary font will be a fallback. This is intentional, since the node would appear in the document as
        normally rendered text (rather than icons), which should be translated.

        * editing/TextManipulationController.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::isProbablyOnlyUsedToRenderIcons const):
        * platform/graphics/Font.h:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::familyName const):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::isProbablyOnlyUsedToRenderIcons const):

        Add a heuristic to detect whether a platform font should be excluded from text manipulation. For now, we only
        return true if we suspect that this font is an "icon-only" font (for instance, the "Material Icons" font). We
        guess that a font is *probably* an icon-only font if the font supports only characters from the basic or PUA
        unicode planes, and the glyph bounds for the set of supported non-control basic latin characters are all empty.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::familyName const):

        Add a platform `familyName()` helper method on `FontPlatformData`. On Cocoa platforms, this wraps a call to
        `CTFontCopyFamilyName`.

2020-06-25  Kate Cheney  <katherine_cheney@apple.com>

        App-bound domain service worker registrations should be limited
        https://bugs.webkit.org/show_bug.cgi?id=213601
        <rdar://problem/64717589>

        Reviewed by Brent Fulgham.

        Limit number of service worker registrations for app-bound domains.
        The current proposal is 3, but this could be changed in the future.

        No new tests, currently TestWebKitAPI is unable to test failed
        service worker registration (test will timeout). Confirmed behavior
        manually.

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

2020-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Upstream macOS 11 additions to RenderThemeMac.mm and ThemeMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=213608
        <rdar://problem/64758299>

        Reviewed by Darin Adler.

        Replace WebKitAdditions imports with the imported code. No change in behavior.

        * css/html.css:
        (input::-webkit-contacts-auto-fill-button):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::supportsLargeFormControls):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::createAttachmentPlaceholderImage):
        (WebCore::RenderThemeMac::extraDefaultStyleSheet): Deleted.

        Remove the override for extraDefaultStyleSheet altogether, since this was only used to temporarily hide the new
        contact AutoFill button appearance from open source WebKit.

2020-06-25  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix for WebXR enabled non-OpenXR builds.

        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::Instance::Impl::enumerateApiLayerProperties const): Guard method with USE_OPENXR.
        (PlatformXR::Instance::Impl::enumerateInstanceExtensionProperties const): Ditto.
        (PlatformXR::Instance::Impl::Impl): Guard method body with USE_OPENXR.
        (PlatformXR::Instance::Impl::~Impl): Ditto.

2020-06-25  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r263511.

        * platform/mediastream/MediaStreamPrivate.h:

2020-06-25  Youenn Fablet  <youenn@apple.com>

        MediaRecorder stopRecorder() returns empty Blob after first use
        https://bugs.webkit.org/show_bug.cgi?id=212274
        <rdar://problem/63601298>

        Reviewed by Eric Carlson.

        Refactor code to create/destroy MediaRecorderPrivate on MediaRecorder start/stop.
        This allows reusing a MediaRecorder after a stop and restarting with a clean state.

        We introduce MediaRecorderPrivate::startRecording to do the initialization,
        which allows to fix a potential ref cycle as part of the error callback handling.

        Make some improvements to the platform implementation, in particular add default initialization to all fields.
        Align the code using AudioConverterRef to what is done in AudioSampleDataSource.
        Also call VTCompressionSessionInvalidate when destroying the VideoSampleBufferCompressor.

        Test: http/wpt/mediarecorder/MediaRecorder-multiple-start-stop.html

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::startRecording):
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::requestData):
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::startRecording):
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):

2020-06-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Use the flexing value as the base for the available horizontal space distribution
        https://bugs.webkit.org/show_bug.cgi?id=213599

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-min-max-flex-distribution-simple.html

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

2020-06-25  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r260360): easing curves are broken on JS-originated animations
        https://bugs.webkit.org/show_bug.cgi?id=213495
        <rdar://problem/64649747>

        Reviewed by Darin Adler.

        Prior to Web Animations, there was no way for an animation to set an animation-wide timing function while
        also setting a per-keyframe timing function. As such GraphicsLayerCA would sometimes decide to set the
        timing function on keyframes or on the entire CAAnimation. However, we can no longer do this with Web
        Animations where an animation can set an animation-wide timing function and also keyframe-specific
        timing functions.

        In this patch we create CAKeyframeAnimation objects for any animation that has at least two keyframes
        if Web Animations are enabled, whereas the legacy code path requires at least three keyframes. We allow
        PlatformCAAnimation::setTimingFunction() to be called in the Web Animations code path only under
        GraphicsLayerCA::setupAnimation() while leaving the only call sites in place only for the legacy code
        path.

        Finally, we modify GraphicsLayerCA::timingFunctionForAnimationValue() to only ever return a keyframe-
        specific timing function or fall back to a default linear timing function in the Web Animations code
        path, leaving the function to behave the same way as it used to in the legacy code path. 

        Test: webanimations/accelerated-animation-with-easing.html

        * platform/animation/TimingFunction.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::isKeyframe):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2020-06-25  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, WPE Debug build fix after r263503.

        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::OpenXRDevice::OpenXRDevice): Use m_instance instead of m_impl->xrInstance().

2020-06-25  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Don't invalidate MainThreadNotifier until the streaming threads are joined
        https://bugs.webkit.org/show_bug.cgi?id=213197

        Reviewed by Xabier Rodriguez-Calvar.

        ~MediaPlayerPrivateGStreamer() used to call m_notifier->invalidate()
        before setting the pipeline to NULL state. This caused a race where
        the streaming threads could post a task to the MainThreadNotifier
        between these two events and cause a crash in
        ASSERT(m_isValid.load()) -- that is, the notifier was used while
        invalidated.

        Fixing this is actually easy. ~MediaPlayerPrivateGStreamer() is always
        run from the main thread, so no MainThreadNotifier tasks will be run
        before the destructor is complete. By moving the
        m_notifier->invalidate() call to after the pipeline has been set to
        NULL (and therefore all streaming threads torn down) we are ensuring
        no more taks will be posted, and since the MainThreadNotifier is
        invalidated by that point, already posted tasks will not be run.

        The race fixed by this patch is rare and wide-arching, so this patch
        doesn't introduce TestExpectations changes, but it should avoid
        further crashes like the ones reported in the Bugzilla issue attached.

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

2020-06-23  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Check device orientation support when requesting a reference space
        https://bugs.webkit.org/show_bug.cgi?id=213519

        Reviewed by Carlos Garcia Campos.

        When requesting a local reference space the specs mandate us to check whether or not the device
        supports orientation tracking. This was not implemented in the OpenXR backend, so we were unconditionally
        returning true.

        The OpenXR devices now properly check whether or not orientation tracking is initialized. We took the chance
        to refactor a bit the OpenXR backend moving all the device initialization code to the OpenXRDevice class.

        The current tests already check this functionality.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::referenceSpaceIsSupported const): Call supportsOrientationTracking() on device.
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::supportsOrientationTracking const): Added.
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::Instance::enumerateImmersiveXRDevices): Just create the OpenXR device, it will automatically
        initialize itself.
        (PlatformXR::OpenXRDevice::OpenXRDevice): Get XrSystem and XrInstance as parametters.
        (PlatformXR::OpenXRDevice::collectSupportedSessionModes): Moved from Instance::Impl.
        (PlatformXR::Instance::Impl::collectSupportedSessionModes): Deleted.
        * platform/xr/openxr/PlatformXROpenXR.h:
        * testing/WebFakeXRDevice.h: Mark the SimulatedXRDevice as supporting orientation tracking.

2020-06-24  James Savage  <james.savage@apple.com>

        Upstream iPadOS 13.0 multi-window support
        https://bugs.webkit.org/show_bug.cgi?id=213590

        Reviewed by Alexey Proskuryakov.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::doSetup): Always construct a UIWindow
        using the expected UIWindowScene.
        (makeWindowFromView): Deleted.

2020-06-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Running spellcheck on https://developer.apple.com/forums/thread/650317 hangs the web process
        https://bugs.webkit.org/show_bug.cgi?id=213585
        <rdar://problem/64681632>

        Reviewed by Simon Fraser.

        In `TextCheckingHelper::findFirstMisspellingOrBadGrammar`, we attempt to find the first misspelled piece of text
        by iterating over the current paragraph range; when we exhaust the current paragraph range, we try to move on to
        the next paragraph range by setting the current paragraph range to the start and end of the next paragraph,
        using `startOfNextParagraph`.

        However, `startOfNextParagraph` may return the null position in some cases (as seen in this bug, and the
        associated layout test). This logic isn't robust against this possibility, and will end up looping infinitely in
        the while loop, since `setStart` and `setEnd` are no-ops when given a null position, and so the current
        paragraph remains the same.

        Make this logic for finding the next misspelled word more robust by allowing us to bail out of the while loop in
        the case where setStart or setEnd failed to advance the paragraph range (e.g. due to a null position, or DOM
        exception).

        Test: editing/mac/spelling/advance-to-next-misspelling.html

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        * testing/Internals.cpp:
        (WebCore::Internals::advanceToNextMisspelling):

        Add an internal testing hook to advance to the next misspelling.

        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-24  David Kilzer  <ddkilzer@apple.com>

        Use ObjectIdentifier<>instead of WebCore::nextPlaybackTargetClientContextId() in Document.cpp
        <https://webkit.org/b/213546>
        <rdar://problem/61803576>

        Reviewed by Youenn Fablet.

        Switch from uint64_t to WebCore::PlaybackTargetClientContextIdentifier
        for contextId values.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        - Add PlaybackTargetClientContextIdentifier.h to the project.

        * Modules/mediasession/PlaybackTargetClientContextIdentifier.h: Add.
        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::ClientState::ClientState):
        (WebCore::WebMediaSessionLogger::logAlways const):
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        (WebCore::WebMediaSessionManager::clientStateDidChange):
        (WebCore::WebMediaSessionManager::find):
        * Modules/mediasession/WebMediaSessionManager.h:
        * Modules/mediasession/WebMediaSessionManagerClient.h:
        * dom/Document.cpp:
        (WebCore::Document::addPlaybackTargetPickerClient):
        (WebCore::Document::removePlaybackTargetPickerClient):
        (WebCore::Document::playbackTargetAvailabilityDidChange):
        (WebCore::Document::setPlaybackTarget):
        (WebCore::Document::setShouldPlayToPlaybackTarget):
        (WebCore::Document::playbackTargetPickerWasDismissed):
        (WebCore::nextPlaybackTargetClientContextId): Delete.
        - Replace with PlaybackTargetClientContextIdentifier::generate().
        * dom/Document.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::addPlaybackTargetPickerClient):
        (WebCore::ChromeClient::removePlaybackTargetPickerClient):
        (WebCore::ChromeClient::showPlaybackTargetPicker):
        (WebCore::ChromeClient::playbackTargetPickerClientStateDidChange):
        * page/Page.cpp:
        (WebCore::Page::addPlaybackTargetPickerClient):
        (WebCore::Page::removePlaybackTargetPickerClient):
        (WebCore::Page::showPlaybackTargetPicker):
        (WebCore::Page::playbackTargetPickerClientStateDidChange):
        (WebCore::Page::setPlaybackTarget):
        (WebCore::Page::playbackTargetAvailabilityDidChange):
        (WebCore::Page::setShouldPlayToPlaybackTarget):
        (WebCore::Page::playbackTargetPickerWasDismissed):
        * page/Page.h:

2020-06-24  Clark Wang  <clark_wang@apple.com>

        Removed unrestricted keyword from attributes in PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=213523

        Updated refDistance, maxDistance, rolloffFactor, coneOuterGain, coneInnerAngle, coneOuterAngle attributes according to spec:
        https://www.w3.org/TR/webaudio/#PannerNode-attributes.

        Reviewed by Darin Adler.

        Test: webaudio/prefixed-pannernode-basic.html

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::setRefDistance):
        (WebCore::PannerNode::setMaxDistance):
        (WebCore::PannerNode::setRolloffFactor):
        (WebCore::PannerNode::setConeOuterGain):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:

2020-06-24  Peng Liu  <peng.liu6@apple.com>

        Black rectangle appears when closing PIP on iPhone
        https://bugs.webkit.org/show_bug.cgi?id=213570

        Reviewed by Eric Carlson.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        Don't unhide the window and view of WebAVPlayerViewController before exiting Picture-in-Picture.

2020-06-24  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r260276): Scrolling through shelves on music.apple.com is not smooth
        https://bugs.webkit.org/show_bug.cgi?id=213572

        Reviewed by Wenson Hsieh.

        The scroll position for an overflow:scroll element with scroll-snap could jump around
        during scrolling, if layout triggered a call to ScrollableArea::updateScrollSnapState().
        The crux of the issue is that isScrollSnapInProgress() returned false for overflow:scrollers
        which are scrolling asynchronously.

        Fix by extending the existing ScrollingTree::isScrollSnapInProgress() to track all scrolling
        nodes by storing a HashSet<ScrollingNodeID> rather than just a flag for the main frame.

        RenderLayer::isScrollSnapInProgress() then consults the ScrollingCoordinator, which consults
        the scrolling tree for this state.

        Add the ability to test via internals.isScrollSnapInProgress().

        Test: fast/scrolling/mac/scroll-snapping-in-progress.html

        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollSnapInProgress const): The main thread can run snapping logic
        even for async-scrollable frames, so consult the ScrollingCoordinator and FrameView's ScrollAnimator.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::isScrollSnapInProgress const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::isScrollSnapInProgress const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::isScrollSnapInProgressForNode):
        (WebCore::ScrollingTree::setNodeScrollSnapInProgress):
        (WebCore::ScrollingTree::isScrollSnapInProgress): Deleted.
        (WebCore::ScrollingTree::setMainFrameIsScrollSnapping): Deleted.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::setScrollSnapInProgress):
        (WebCore::ScrollingTreeScrollingNode::isScrollSnapInProgress const):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::willStartScrollSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopScrollSnapAnimation):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::requestScrollPositionUpdate):
        (WebCore::RenderLayer::isScrollSnapInProgress const):
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        * testing/Internals.cpp:
        (WebCore:: const):
        (WebCore::Internals::scrollSnapOffsets):
        (WebCore::Internals::isScrollSnapInProgress):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-24  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r263466.

        This commit caused 50+ crashes on multiple queues internally.

        Reverted changeset:

        "REGRESSION (r260360): easing curves are broken on JS-
        originated animations"
        https://bugs.webkit.org/show_bug.cgi?id=213495
        https://trac.webkit.org/changeset/263466

2020-06-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow the async clipboard API to write data when copying via menu action or key binding
        https://bugs.webkit.org/show_bug.cgi?id=213568
        <rdar://problem/64711653>

        Reviewed by Darin Adler.

        Makes a couple of minor adjustments to allow `clipboard.write` and `clipboard.writeText` to work during a user-
        triggered copy event (that is, from menu or key binding). See below for more details.

        Test: editing/async-clipboard/clipboard-write-in-copy-event-handler.html

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

        Add a mechanism to keep track of when Editor is handling a copy or cut event that is the result of interacting
        with a key binding or menu action. Use this mechanism to grant write access via the async clipboard API.

        * editing/Editor.cpp:
        (WebCore::dispatchClipboardEvent):

        Only attempt to commit the static pasteboard to the platform pasteboard during a copy event when preventing
        default if the StaticPasteboard-backed DataTransfer actually contains data. This fixes a race condition when
        writing to the pasteboard using the async clipboard API during the "copy" event, where the changeCount when
        beginning to write is incremented due to the pasteboard getting cleared.

        This change will also make it so that calling `preventDefault()` on the copy event will result in no change to
        the system pasteboard, instead of clearing out any existing content on the pasteboard.

        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        * editing/Editor.h:
        (WebCore::Editor::isCopyingFromMenuOrKeyBinding const):
        * editing/EditorCommand.cpp:
        (WebCore::executeCopy):
        (WebCore::executeCut):

2020-06-24  Umar Iqbal  <uiqbal@apple.com>

        We should resurrect the older patch that collects some statistics of web API calls
        https://bugs.webkit.org/show_bug.cgi?id=213319

        Reviewed by Brent Fulgham.

        No new tests. Enabled existing tests.
        Enabled http/tests/webAPIStatistics that test the functionality behind WEB_API_STATISTICS flag.
        
        + Brought back WebCore::encodeHashSet(KeyedEncoder& encoder, const String& label,
        const String& key, const HashSet<String>& hashSet) because it was needed by
         WebCore::encodeFontHashSet(KeyedEncoder& encoder, const String& label, const HashSet<String>& hashSet)
        + Changed the type of HashCountedSet to HashSet because of earlier patch
         (https://bugs.webkit.org/attachment.cgi?id=363033) updated other HashCountedSet to HashSet,
         stating that the counted statistics were never used (see change log in the mentioned patch).
        + Also changed the type of topFrameRegistrableDomainsWhichAccessedWebAPIs HashSet
        from String to RegistrableDomain. See the earlier bug (https://bugs.webkit.org/show_bug.cgi?id=194791)
        that explains the switch from String to RegistrableDomain for eTLD+1's
        + Enabled WEB_API_STATISTICS flag in FeatureDefines.xcconfig and PlatformEnableCocoa.h
        + Added WTF::EnumTraits<> for OptionSet<> enum in ResourceLoadStatistics.h due to an earlier change.
        
        * loader/ResourceLoadStatistics.h:
        * Configurations/FeatureDefines.xcconfig:
        * loader/CanvasActivityRecord.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashSet):
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::decodeHashSet):
        (WebCore::decodeCanvasActivityRecord):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::appendHashSet):
        (WebCore::ResourceLoadStatistics::toString const):

2020-06-24  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Null Ptr Deref READ @ WTF::Optional<WTF::Seconds>::clear
        https://bugs.webkit.org/show_bug.cgi?id=213543

        Reviewed by Geoffrey Garen.

        While performing an animation request, the callback functions modifies the iframe's srcdoc attribute, leading to domWindow being null during
        rendering, and resulting into crash.

        Test: fast/rendering/iframe-window-animation-modifies-iframe-srcdoc-crash.html

        * page/Page.cpp:
        (WebCore::Page::updateRendering):

2020-06-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] -webkit-font-smoothing:antialiased makes fonts blurry
        https://bugs.webkit.org/show_bug.cgi?id=206573

        Reviewed by Alex Christensen.

        After -webkit-font-smoothing support was added to Cairo port in
        r254506 (Bug 54763), fonts looks jaggy and faint in WinCairo port
        in some web sites using -webkit-font-smoothing:antialiased, for
        example Google News, GMail, https://apple.com.

        'antialiased' of -webkit-font-smoothing was mapped to
        CAIRO_ANTIALIAS_GRAY. And, CAIRO_ANTIALIAS_GRAY is mapped to
        ANTIALIASED_QUALITY in cairo-win32-font.c. ANTIALIASED_QUALITY
        makes fonts jaggy and faint.

        Use CAIRO_ANTIALIAS_SUBPIXEL instead of CAIRO_ANTIALIAS_GRAY for
        'antialiased' as well as 'subpixel-antialiased' does.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawGlyphsToContext): Don't use CAIRO_ANTIALIAS_GRAY for Win32 Cairo.

2020-06-24  Antoine Quint  <graouts@webkit.org>

        REGRESSION (r260360): easing curves are broken on JS-originated animations
        https://bugs.webkit.org/show_bug.cgi?id=213495
        <rdar://problem/64649747>

        Reviewed by Darin Adler.

        Prior to Web Animations, there was no way for an animation to set an animation-wide timing function while
        also setting a per-keyframe timing function. As such GraphicsLayerCA would sometimes decide to set the
        timing function on keyframes or on the entire CAAnimation. However, we can no longer do this with Web
        Animations where an animation can set an animation-wide timing function and also keyframe-specific
        timing functions.

        In this patch we create CAKeyframeAnimation objects for any animation that has at least two keyframes
        if Web Animations are enabled, whereas the legacy code path requires at least three keyframes. We allow
        PlatformCAAnimation::setTimingFunction() to be called in the Web Animations code path only under
        GraphicsLayerCA::setupAnimation() while leaving the only call sites in place only for the legacy code
        path.

        Finally, we modify GraphicsLayerCA::timingFunctionForAnimationValue() to only ever return a keyframe-
        specific timing function or fall back to a default linear timing function in the Web Animations code
        path, leaving the function to behave the same way as it used to in the legacy code path. 

        Test: webanimations/accelerated-animation-with-easing.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::isKeyframe):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):

2020-06-24  Antoine Quint  <graouts@webkit.org>

        REGRESSION: Delayed updating of the parallax images on pacificvoyages.net/posts
        https://bugs.webkit.org/show_bug.cgi?id=212213
        <rdar://problem/63497946>

        Reviewed by Simon Fraser.

        Test: webanimations/css-transition-retargeting-during-ready-promise.html

        When a transition's ready promise is resolved, its start time is the same as the timeline's current time. This means
        that retargeting a transition at that moment will yield a progress of zero even though the transition was started before
        the current animation frame. This means that retargeting a property on each page rendering may start a new transition
        with the same from value, which can have an undesirable effect such as on the website reported in this bug.

        We now keep track of the timeline time when a transition is created and use this time as a start time override when
        applying the animation to compute the before-change style in AnimationTimeline::updateCSSTransitionsForElementAndProperty().

        To do so, we pass an optional start time all the way from WebAnimation::resolve() through to WebAnimation::currentTime() and
        via the animation effect timing computation.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::getBasicTiming const):
        (WebCore::AnimationEffect::getComputedTiming const):
        * animation/AnimationEffect.h:
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElementAndProperty):
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::CSSTransition):
        (WebCore::CSSTransition::resolve):
        * animation/CSSTransition.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::apply):
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::currentTime const):
        (WebCore::WebAnimation::resolve):
        * animation/WebAnimation.h:

2020-06-24  Eric Carlson  <eric.carlson@apple.com>

        Don't claim to support fullscreen mode unless fullScreenEnabled setting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=213142
        <rdar://63753327>

        Reviewed by Jer Noble.

        Test: media/video-supports-fullscreen.html

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen const): Check settings.fullScreenEnabled.

2020-06-24  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webrtc/disable-encryption.html is a crashing flaky
        https://bugs.webkit.org/show_bug.cgi?id=211166
        <rdar://problem/63223973>

        Reviewed by Xabier Rodriguez-Calvar.

        Simplify the process to create internal appsrc elements. I suspect something bad was ongoing
        with these moves of GRefPtr.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::_WebKitMediaStreamSrc::SourceData::ensureAppSrc):
        (WebCore::webkitMediaStreamSrcSetupAppSrc):
        (WebCore::_WebKitMediaStreamSrc::SourceData::setSrc): Deleted.

2020-06-24  Antti Koivisto  <antti@apple.com>

        Style resolution sometimes fails to create all style resolvers for shadow trees.
        https://bugs.webkit.org/show_bug.cgi?id=212946
        <rdar://problem/60916215>>

        Reviewed by Anders Carlsson.

        This can cause problems later.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Scope::Scope):

        Ensure all style resolvers are constructed before traversing.

2020-06-24  Youenn Fablet  <youenn@apple.com>

        Add logging to WebRTC video pipeline to check for frame rate stability
        https://bugs.webkit.org/show_bug.cgi?id=213369

        Reviewed by Eric Carlson.

        Add a FrameRateMonitor class to compute frame stability.
        Use this class at end of the video pipeline (LocalSampleBufferDisplayLayer).
        Log messages in case a frame gets frozen at LocalSampleBufferDisplayLayer time.
        We compute that a frame takes too long by checking whether it is delayed by more than three expected frames.
        This logging is complemented with encoded frame reception logging (at the beginning of the video pipeline)
        and WebRTC stats logging (freezeCount, totalFreezeDuration, shortly after decoding the frames).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FrameRateMonitor.cpp: Added.
        (WebCore::FrameRateMonitor::newFrame):
        * platform/FrameRateMonitor.h: Added.
        (WebCore::FrameRateMonitor::frameRate const):
        (WebCore::FrameRateMonitor::frameCount const):
        (WebCore::FrameRateMonitor::FrameRateMonitor):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::LocalSampleBufferDisplayLayer):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSampleBuffer):
        (WebCore::LocalSampleBufferDisplayLayer::onFrameRateNotification):
        * platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.h:
        Unified build fix.

2020-06-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove [CallbackNeedsOperatorEqual] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=213538

        Reviewed by Chris Dumez.

        This change removes now unused [CallbackNeedsOperatorEqual] extended attribute.
        It was added to accommodate MediaQueryListListener, which was removed in r260243.

        We are safe to remove [CallbackNeedsOperatorEqual] since its implementation
        expects certain constructor signature, and callback interfaces are considered
        legacy by spec authors anyway.

        Also, this patch removes 2 resolved FIXMEs:
        1. OrdinaryDefineOwnProperty() is performed correctly, no dynamic dispatch there.
        2. Set() is performed correctly, with `false` as last argument.
           (changed in https://github.com/heycam/webidl/pull/832, covered by WPT)

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefineOwnProperty):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateCallbackHeaderContent):
        (GenerateCallbackImplementationContent):
        * bindings/scripts/IDLAttributes.json:

2020-06-23  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Fix PlatformXR initialization/destruction
        https://bugs.webkit.org/show_bug.cgi?id=213509

        Reviewed by Youenn Fablet.

        There were two different issues, one at creation time and the other one at destruction. At creation
        time we were not calling construct() for the LazyNeverDestroyed object. That was making the WebProcess
        crash in Debug builds. At destruction time we were calling xrDestroyInstance() without checking that the
        passed instance was a valid one, although OpenXR implementations deal with it the spec is pretty clear.

        * platform/xr/PlatformXR.h: Mark LazyNeverDestroyed as friend and default constructor&destructor.
        * platform/xr/openxr/PlatformXROpenXR.cpp:
        (PlatformXR::Instance::Impl::~Impl): Check that instance is not XR_NULL_HANDLE before destroying.
        (PlatformXR::Instance::singleton): Call construct() on the Lazy instance.

2020-06-24  Youenn Fablet  <youenn@apple.com>

        Use signalling thread as worker thread instead of network thread
        https://bugs.webkit.org/show_bug.cgi?id=213512

        Reviewed by Eric Carlson.

        This is probably better since network thread is always busy
        while the siganlling thread is mostly busy at negotiation time.
        This also aligns with Chromium current setup.
        No change of behavior.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnectionFactory):

2020-06-24  Rob Buis  <rbuis@igalia.com>

        Add referrerpolicy attribute support for <link>
        https://bugs.webkit.org/show_bug.cgi?id=213342

        Reviewed by Darin Adler.

        Give the referrer policy member a clear default.

        * loader/LinkLoader.h:

2020-06-23  Zalan Bujtas  <zalan@apple.com>

        [Multicol] Reset the childrenInline state on the RenderBlockFlow when destroying the multicolumn context
        https://bugs.webkit.org/show_bug.cgi?id=213535
        <rdar://problem/64541835>

        Reviewed by Simon Fraser.

        The "childrenInline" flags tells the tree builder whether a newly inserted inline content needs an anonymous block wrapper or not.
        RenderBlockFlows with multicolumn content have this flag set to false as the RenderMultiColumnFlowThread is a block renderer.
        As part of the mulicolumn context destruction, we move all the descendants from RenderMultiColumnFlowThread back to
        the original parent (the parent of the RenderMultiColumnFlowThread renderer).
        This patch sets this flag back to the initial value of true so that we don't end up constructing redundant wrappers for the incoming inline content.

        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):

2020-06-23  Geoffrey Garen  <ggaren@apple.com>

        Remove WTF::setMainThreadCallbacksPaused
        https://bugs.webkit.org/show_bug.cgi?id=213112

        Reviewed by Tim Horton.

        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):

2020-06-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update xcfilelist files after some recent WebXR changes.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2020-06-23  Chris Dumez  <cdumez@apple.com>

        Remove a lot of unnecessary calls to Ref::copyRef()
        https://bugs.webkit.org/show_bug.cgi?id=213533

        Reviewed by Darin Adler.

        Remove a lot of unnecessary calls to Ref::copyRef() now that Ref is copyable.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::doRequestOpenCursor):
        (WebCore::IDBTransaction::requestGetAllObjectStoreRecords):
        (WebCore::IDBTransaction::requestGetAllIndexRecords):
        (WebCore::IDBTransaction::requestGetRecord):
        (WebCore::IDBTransaction::requestIndexRecord):
        (WebCore::IDBTransaction::requestCount):
        (WebCore::IDBTransaction::requestDeleteRecord):
        (WebCore::IDBTransaction::requestClearObjectStore):
        (WebCore::IDBTransaction::requestPutOrAdd):
        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::create):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::create):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::scheduleTransactionCallback):
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpgradeURL):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeAsynchronousUserAgentScriptInWorld):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::wrapKey):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::startAsyncDecodingQueue):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didProvideRequests):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::wrapCryptoKey):
        (WebCore::WorkerGlobalScope::unwrapCryptoKey):
        * workers/service/WorkerSWClientConnection.cpp:
        (WebCore::WorkerSWClientConnection::matchRegistration):
        (WebCore::WorkerSWClientConnection::getRegistrations):
        (WebCore::WorkerSWClientConnection::whenRegistrationReady):
        (WebCore::WorkerSWClientConnection::scheduleUnregisterJobInServer):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFireFetchEvent):
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFireActivateEvent):

2020-06-23  Chris Dumez  <cdumez@apple.com>

        Drop AudioContextBase class
        https://bugs.webkit.org/show_bug.cgi?id=213522

        Reviewed by Geoffrey Garen.

        Drop AudioContextBase class and have WebKitAudioContext subclass the new BaseAudioContext class instead.
        We recently introduced BaseAudioContext to match the specification and keeping AudioContextBase is now confusing.

        No new tests, this simplifies our code but there is no Web-facing behavior change.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::create):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        * Modules/webaudio/AudioNode.h:
        (WebCore::AudioNode::context):
        (WebCore::AudioNode::context const):
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioNodeOutput.h:
        (WebCore::AudioNodeOutput::context):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::AudioParam):
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valueForContextTime):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::AudioSummingJunction):
        * Modules/webaudio/AudioSummingJunction.h:
        (WebCore::AudioSummingJunction::context):
        * Modules/webaudio/BaseAudioContext.cpp:
        (WebCore::BaseAudioContext::BaseAudioContext):
        (WebCore::BaseAudioContext::document const):
        (WebCore::BaseAudioContext::scriptExecutionContext const):
        * Modules/webaudio/BaseAudioContext.h:
        (WebCore::BaseAudioContext::isOfflineContext const):
        (WebCore::BaseAudioContext::isWebKitAudioContext const):
        (WebCore::BaseAudioContext::currentSampleFrame const):
        (WebCore::BaseAudioContext::currentTime const):
        (WebCore::BaseAudioContext::sampleRate const):
        (WebCore::BaseAudioContext::incrementConnectionCount):
        (WebCore::BaseAudioContext::setAudioThread):
        (WebCore::BaseAudioContext::isAudioThreadFinished):
        (WebCore::BaseAudioContext::behaviorRestrictions const):
        (WebCore::BaseAudioContext::addBehaviorRestriction):
        (WebCore::BaseAudioContext::removeBehaviorRestriction):
        (WebCore::BaseAudioContext::nextAudioNodeLogIdentifier):
        (WebCore::BaseAudioContext::nextAudioParameterLogIdentifier):
        (WebCore::BaseAudioContext::isStopped const):
        (WebCore::BaseAudioContext::AutoLocker::AutoLocker):
        (WebCore::BaseAudioContext::AutoLocker::~AutoLocker):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadFilterNode.h:
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        (WebCore::DelayNode::create):
        * Modules/webaudio/DelayNode.h:
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::DelayProcessor):
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::create):
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::create):
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNodeBase::PannerNodeBase):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperNode.h:
        * Modules/webaudio/WebKitAudioContext.cpp:
        (WebCore::WebKitAudioContext::WebKitAudioContext):
        (WebCore::WebKitAudioContext::createMediaElementSource):
        (WebCore::WebKitAudioContext::createMediaStreamSource):
        (WebCore::WebKitAudioContext::createMediaStreamDestination):
        (WebCore::WebKitAudioContext::createWebKitPanner):
        (WebCore::WebKitAudioContext::close):
        * Modules/webaudio/WebKitAudioContext.h:
        (isType):
        * Modules/webaudio/WebKitAudioContext.idl:
        * dom/EventTargetFactory.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setAudioContextRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-22  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Introducing XRLayer
        https://bugs.webkit.org/show_bug.cgi?id=213462

        Reviewed by Youenn Fablet.

        The most recent drafts of the WebXR spec have added a new object called XRLayer which is the base class
        of the already known XRWebGLLayer. The spec only defines the latter but future extensions might define
        some other layer subclasses.

        This patch fixes several checks in the IDL tests.

        * CMakeLists.txt: Added new files.
        * DerivedSources.make: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * Modules/webxr/WebXRLayer.cpp: Added.
        (WebCore::WebXRLayer::WebXRLayer):
        * Modules/webxr/WebXRLayer.h: Ditto.
        * Modules/webxr/WebXRLayer.idl:  Ditto.
        * Modules/webxr/WebXRSession.h: Export scriptExecutionContext() so it could be used from the outside.
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::WebXRWebGLLayer): Call the superclass.
        * Modules/webxr/WebXRWebGLLayer.h: Inherit from WebXRLayer.
        * Modules/webxr/WebXRWebGLLayer.idl: Ditto.
        * Sources.txt: Added new files.
        * bindings/js/WebCoreBuiltinNames.h: Added XRLayer.
        * dom/EventTargetFactory.in: Ditto.

2020-06-23  Devin Rousso  <drousso@apple.com>

        Keyframe animation doesn't 't show up in the Animations timeline
        https://bugs.webkit.org/show_bug.cgi?id=213441

        Reviewed by Brian Burg.

        Test: inspector/animation/lifecycle-css-animation.html

        * inspector/agents/InspectorAnimationAgent.cpp:
        (WebCore::buildObjectForEffect):

2020-06-23  Sergio Villar Senin  <svillar@igalia.com>

        [css-flex] Allow indefinite size flex items to be definite wrt resolving percentages inside them
        https://bugs.webkit.org/show_bug.cgi?id=212264

        Reviewed by Manuel Rego Casasnovas.

        Implement https://github.com/w3c/csswg-drafts/commit/5b5db39d21f3658ae2f4d7992daaf822aca178d8 which modified
        the way percentages were resolved in flexible items with indefinite sizes. From now on we can pretend that
        they're really definite.

        This allows us to mark 3 tests which were testing percentages in flex items as correct.

        Based on Blink's crrev.com/1247184 by <cbiesinger@chromium.org>

        This is a reland of r262124 which got reverted due to the bug fixed in r263389.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution): Do only check flex container main size
        definiteness when computing the main size for percentage resolution, no need to check flex basis at all.

2020-06-18  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION (r262124): Twitter videos go blank after exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=213110

        Reviewed by Darin Adler.

        Test: fullscreen/video-inside-flex-item.html

        Setting/unsetting position:absolute on a flex/grid item can potentially create/remove flex/grid items because
        absolutely positioned children of those containers are out-of-flow and thus, do not generate flex/grid items.
        Flex/grid items are potentially stretched by their containers so the style recalculation is not enough to get
        a correct layout because the override size set by flex/grid containers is not reset.
        In the particular case of this bug we had this hierarchy (highly simplified from twitter page):

        Flexbox container
        |___DIV (absolutelly positioned)
            |___<video> (height: 100% width: 100%)

        When the <video> goes fullscreen the FullscreenManager replaces the
        style of the DIV because it inserts a RenderFullScreen object in between
        the DIV and the <video> (along with some anonymous blocks). This means
        that the DIV which was not a flex item (as it was absolutely positioned)
        became a flex item and thus its size is stretched as the flexbox
        container mandates. When exiting fullscreen, the original style is
        restored (and thus the position absolute). The DIV is then no longer a
        flex item but the stretched size (overrideContentSize) is still set,
        causing issues with the sizes of the <video>.

        Note that it isn't possible to reproduce this bug with the current trunk because there is a bug in the flexbox
        implementation (see bug 212264) preventing this to happen. However it becomes 100% reproducible with the patch for bug 212264
        which is correct and fixes several tests related to wrapping in flexbox. It's also reproducible when the FULLSCREEN_API is
        enabled, otherwise the codepath for full screen is totally different (there are no placeholders).

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): clear the override sizes for grid/flex when flex/grid items become out-of-flow,
        for example by changing position to absolute.

2020-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r258741): [GTK] anchor-file-blob-download-includes-backslash.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=209329

        Reviewed by Adrian Perez de Castro.

        Sanitize the suggested filename. We replace characters that can be problematic in filenames with '_' to match
        what Chromium and Firefox do.

        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::sanitizeFilename):
        (WebCore::ResourceResponse::platformSuggestedFilename const):

2020-06-22  John Wilander  <wilander@apple.com>

        Storage Access API: Add the capability to call the Storage Access API as a quirk, on behalf of websites that should be doing it themselves
        https://bugs.webkit.org/show_bug.cgi?id=213418
        <rdar://problem/64549429>

        Reviewed by Alex Christensen.

        No new tests. This patch adds quirks for specific websites.
        The general functionality that's touched has tests under
        LayoutTests/http/tests/storageAccess/.

        * dom/Document.h:
        (WebCore::Document::isTopDocument const):
            New convenience function.
        (WebCore::Document::setUserDidInteractWithPage):
            Use of the new convenience function.
        (WebCore::Document::userDidInteractWithPage const):
            Use of the new convenience function.
        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::hasStorageAccessQuickCheck):
        (WebCore::DocumentStorageAccess::hasStorageAccess):
        (WebCore::DocumentStorageAccess::hasStorageAccessForDocumentQuirk):
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        (WebCore::DocumentStorageAccess::requestStorageAccessQuickCheck):
        (WebCore::DocumentStorageAccess::requestStorageAccessForDocumentQuirk):
        (WebCore::DocumentStorageAccess::requestStorageAccessForNonDocumentQuirk):
        (WebCore::DocumentStorageAccess::requestStorageAccessQuirk):
            These functions are split up to allow quirks to call directly into the
            implementation of the Storage Access API without the JavaScript
            promise that goes with the web API. It also allows for quirks to call
            the API without an iframe document.
        * dom/DocumentStorageAccess.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
            The two existing quirks are for click events.
        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::setDomainsWithUserInteraction):
        (WebCore::ResourceLoadObserver::hasHadUserInteraction const):
            These two new functions allow the Storage Access API quirks
            to synchronously check if it's worth calling the API or not.
            If there has been no user interaction for the requesting
            domain, there is no need to call the API.
        * page/Quirks.cpp:
        (WebCore::Quirks::triggerOptionalStorageAccessQuirk const):
            This is the new quirks function, hiding the specifics of
            certain elements clicked and for which websites. It also
            calls the Storage Access API.
        * page/Quirks.h:

2020-06-22  Chris Dumez  <cdumez@apple.com>

        Introduce BaseAudioContext interface
        https://bugs.webkit.org/show_bug.cgi?id=213491

        Reviewed by Geoffrey Garen.

        Introduce BaseAudioContext interface as per W3C WebAudio specification:
        - https://www.w3.org/TR/webaudio/#BaseAudioContext

        No new tests, rebaselined existing test.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::close):
        (WebCore::AudioContext::createMediaElementSource):
        (WebCore::AudioContext::createMediaStreamSource):
        (WebCore::AudioContext::createMediaStreamDestination):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::contextForBindings const):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/BaseAudioContext.cpp: Copied from Source/WebCore/Modules/webaudio/AudioContext.cpp.
        (WebCore::BaseAudioContext::isSampleRateRangeGood):
        (WebCore::AudioContextBase::AudioContextBase):
        (WebCore::BaseAudioContext::BaseAudioContext):
        (WebCore::BaseAudioContext::constructCommon):
        (WebCore::BaseAudioContext::~BaseAudioContext):
        (WebCore::BaseAudioContext::lazyInitialize):
        (WebCore::BaseAudioContext::clear):
        (WebCore::BaseAudioContext::uninitialize):
        (WebCore::BaseAudioContext::isInitialized const):
        (WebCore::BaseAudioContext::addReaction):
        (WebCore::BaseAudioContext::setState):
        (WebCore::BaseAudioContext::stop):
        (WebCore::BaseAudioContext::suspend):
        (WebCore::BaseAudioContext::resume):
        (WebCore::BaseAudioContext::activeDOMObjectName const):
        (WebCore::AudioContextBase::document const):
        (WebCore::BaseAudioContext::hostingDocumentIdentifier const):
        (WebCore::BaseAudioContext::isSuspended const):
        (WebCore::BaseAudioContext::visibilityStateChanged):
        (WebCore::BaseAudioContext::wouldTaintOrigin const):
        (WebCore::BaseAudioContext::createBuffer):
        (WebCore::BaseAudioContext::decodeAudioData):
        (WebCore::BaseAudioContext::createBufferSource):
        (WebCore::BaseAudioContext::createScriptProcessor):
        (WebCore::BaseAudioContext::createBiquadFilter):
        (WebCore::BaseAudioContext::createWaveShaper):
        (WebCore::BaseAudioContext::createPanner):
        (WebCore::BaseAudioContext::createConvolver):
        (WebCore::BaseAudioContext::createDynamicsCompressor):
        (WebCore::BaseAudioContext::createAnalyser):
        (WebCore::BaseAudioContext::createGain):
        (WebCore::BaseAudioContext::createDelay):
        (WebCore::BaseAudioContext::createChannelSplitter):
        (WebCore::BaseAudioContext::createChannelMerger):
        (WebCore::BaseAudioContext::createOscillator):
        (WebCore::BaseAudioContext::createPeriodicWave):
        (WebCore::BaseAudioContext::notifyNodeFinishedProcessing):
        (WebCore::BaseAudioContext::derefFinishedSourceNodes):
        (WebCore::BaseAudioContext::refNode):
        (WebCore::BaseAudioContext::derefNode):
        (WebCore::BaseAudioContext::derefUnfinishedSourceNodes):
        (WebCore::BaseAudioContext::lock):
        (WebCore::BaseAudioContext::tryLock):
        (WebCore::BaseAudioContext::unlock):
        (WebCore::BaseAudioContext::isAudioThread const):
        (WebCore::BaseAudioContext::isGraphOwner const):
        (WebCore::BaseAudioContext::addDeferredFinishDeref):
        (WebCore::BaseAudioContext::handlePreRenderTasks):
        (WebCore::BaseAudioContext::handlePostRenderTasks):
        (WebCore::BaseAudioContext::handleDeferredFinishDerefs):
        (WebCore::BaseAudioContext::markForDeletion):
        (WebCore::BaseAudioContext::scheduleNodeDeletion):
        (WebCore::BaseAudioContext::deleteMarkedNodes):
        (WebCore::BaseAudioContext::markSummingJunctionDirty):
        (WebCore::BaseAudioContext::removeMarkedSummingJunction):
        (WebCore::BaseAudioContext::eventTargetInterface const):
        (WebCore::BaseAudioContext::markAudioNodeOutputDirty):
        (WebCore::BaseAudioContext::handleDirtyAudioSummingJunctions):
        (WebCore::BaseAudioContext::handleDirtyAudioNodeOutputs):
        (WebCore::BaseAudioContext::addAutomaticPullNode):
        (WebCore::BaseAudioContext::removeAutomaticPullNode):
        (WebCore::BaseAudioContext::updateAutomaticPullNodes):
        (WebCore::BaseAudioContext::processAutomaticPullNodes):
        (WebCore::AudioContextBase::scriptExecutionContext const):
        (WebCore::BaseAudioContext::nodeWillBeginPlayback):
        (WebCore::shouldDocumentAllowWebAudioToAutoPlay):
        (WebCore::BaseAudioContext::willBeginPlayback):
        (WebCore::BaseAudioContext::willPausePlayback):
        (WebCore::BaseAudioContext::startRendering):
        (WebCore::BaseAudioContext::mediaCanStart):
        (WebCore::BaseAudioContext::mediaState const):
        (WebCore::BaseAudioContext::pageMutedStateDidChange):
        (WebCore::BaseAudioContext::isPlayingAudioDidChange):
        (WebCore::BaseAudioContext::finishedRendering):
        (WebCore::BaseAudioContext::dispatchEvent):
        (WebCore::BaseAudioContext::incrementActiveSourceCount):
        (WebCore::BaseAudioContext::decrementActiveSourceCount):
        (WebCore::BaseAudioContext::suspendRendering):
        (WebCore::BaseAudioContext::resumeRendering):
        (WebCore::BaseAudioContext::suspendPlayback):
        (WebCore::BaseAudioContext::mayResumePlayback):
        (WebCore::BaseAudioContext::postTask):
        (WebCore::BaseAudioContext::origin const):
        (WebCore::BaseAudioContext::addConsoleMessage):
        (WebCore::BaseAudioContext::clearPendingActivity):
        (WebCore::BaseAudioContext::makePendingActivity):
        (WebCore::BaseAudioContext::logChannel const):
        * Modules/webaudio/BaseAudioContext.h: Copied from Source/WebCore/Modules/webaudio/AudioContext.h.
        (WebCore::AudioContextBase::AutoLocker::AutoLocker):
        (WebCore::AudioContextBase::AutoLocker::~AutoLocker):
        (WebCore::BaseAudioContext::destination):
        (WebCore::BaseAudioContext::activeSourceCount const):
        (WebCore::BaseAudioContext::listener):
        (WebCore::BaseAudioContext::state const):
        (WebCore::BaseAudioContext::isClosed const):
        (WebCore::BaseAudioContext::connectionCount const):
        (WebCore::BaseAudioContext::audioThread const):
        (WebCore::BaseAudioContext::maxNumberOfChannels):
        (WebCore::BaseAudioContext::destinationNode const):
        (WebCore::BaseAudioContext::userGestureRequiredForAudioStart const):
        (WebCore::BaseAudioContext::pageConsentRequiredForAudioStart const):
        (isType):
        * Modules/webaudio/BaseAudioContext.idl: Copied from Source/WebCore/Modules/webaudio/AudioContext.idl.
        * Modules/webaudio/OfflineAudioContext.cpp:
        (WebCore::OfflineAudioContext::OfflineAudioContext):
        * Modules/webaudio/OfflineAudioContext.h:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/PannerNode.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:
        * testing/Internals.cpp:
        (WebCore::Internals::setAudioContextRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-22  Andres Gonzalez  <andresg_22@apple.com>

        AXIsolatedTree::generateSubtree should properly assign the generated subtree to its parent node.
        https://bugs.webkit.org/show_bug.cgi?id=213435

        Reviewed by Darin Adler.

        AXIsolatedTree::generateSubtree now properly updates the children IDs
        of the parent node of the subtree being generated.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::generateIsolatedTree):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateChildrenIDs):
        (WebCore::AXIsolatedTree::generateSubtree): Takes the parent object
        instead of the parent ID. This allows to retrieve the children IDs of
        the parent object.
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateSubtree):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::setRootNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::appendNodeChanges): R-value parameter instead
        of by reference.
        * accessibility/isolatedtree/AXIsolatedTree.h:

2020-06-22  Tim Horton  <timothy_horton@apple.com>

        Update macOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=213484

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-06-22  Clark Wang  <clark_wang@apple.com>

        Added getFloatTimeDomainData method to AnalyserNode
        https://bugs.webkit.org/show_bug.cgi?id=213393

        Reviewed by Chris Dumez.

        Added getFloatTimeDomainData method, as per spec: https://www.w3.org/TR/webaudio/#analysernode.
        Implementation of RealtimeAnalyser::getFloatTimeDomainData(Float32Array* destinationArray) is based on:
        https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/modules/webaudio/realtime_analyser.cc.
        Removed nullable option from some AnalyserNode methods.

        Re-baselined existing tests to show new passing test.

        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::getFloatFrequencyData):
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getFloatTimeDomainData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * Modules/webaudio/RealtimeAnalyser.h:

2020-06-22  Rob Buis  <rbuis@igalia.com>

        Add referrerpolicy attribute support for <link>
        https://bugs.webkit.org/show_bug.cgi?id=213342

        Reviewed by Darin Adler.

        Add support for referrerpolicy attribute handling on
        link prefetch/preload/stylesheet.

        Tests: http/tests/security/referrer-policy-attribute-style-no-referrer.html
               http/wpt/preload/refferer-policy.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::setReferrerPolicyForBindings):
        (WebCore::HTMLLinkElement::referrerPolicyForBindings const):
        (WebCore::HTMLLinkElement::referrerPolicy const):
        * html/HTMLLinkElement.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader):
        (WebCore::LinkLoader::preloadIfNeeded):
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/LinkLoader.h:

2020-06-22  Simon Fraser  <simon.fraser@apple.com>

        Fix build error with release build and "#define LOG_DISABLED 0"
        https://bugs.webkit.org/show_bug.cgi?id=213420

        Reviewed by Sam Weinig.

        AnimationBase::updateStateMachine() uses LOG_ERROR so needs to test ERROR_DISABLED not LOG_DISABLED.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2020-06-22  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Fix the case of "null type Blob slice" in wpt/FileAPI/blob/Blob-slice.html
        https://bugs.webkit.org/show_bug.cgi?id=213370

        Reviewed by Darin Adler.

        * fileapi/Blob.h:
        (WebCore::Blob::slice const):
        Remove unnecessary default arguments
        These default arguments are introduced in r83873
        but we don't need them because WebIDL binding handles them.

        * fileapi/Blob.idl:
        - Update the definition of `Blob.slice()` to match the latest spec.
          https://w3c.github.io/FileAPI/#blob-section

        - We should use empty string as a default value by step 4-a of
          https://w3c.github.io/FileAPI/#dfn-slice

        - In the previous code, we use `optional DOMString?` for the
          _contentType_ arguments for `Blob.slice()`.
          Then, our codegen generates a code which uses `convert<IDLNullable<IDLDOMString>>`
          and it returns `String()` if the JS value is `null`.
          This caused the failure case in this change.


2020-06-22  Andres Gonzalez  <andresg_22@apple.com>

        Code cleanup in WebAccessibilityObjectWrapper updateObjectBackingStore and position.
        https://bugs.webkit.org/show_bug.cgi?id=213438

        Reviewed by Darin Adler.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):
        Removed unnecessary call to axBackingObject.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper position]):
        Check for isIsolatedTreeEnabled instead of for the request thread,
        since isolated tree mode = 1 runs on the main thread.

2020-06-22  Youenn Fablet  <youenn@apple.com>

        [WebRTC] Add support for freeze/pause receiver stats
        https://bugs.webkit.org/show_bug.cgi?id=212938
        <rdar://problem/64141493>

        Reviewed by Eric Carlson.

        Covered by updated tests.

        Receiver stats are useful to check for freezes.
        Let's introduce it in 'track' stats for now, we will later on move all
        'receiver' stats to its own object once we fully align with spec.

        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCMediaStreamTrackStats):

2020-06-22  Rob Buis  <rbuis@igalia.com>

        Image `crossorigin` mutations should be considered "relevant mutations"
        https://bugs.webkit.org/show_bug.cgi?id=213335

        Reviewed by Darin Adler.

        As follow up to r263345, this check is not needed after all since the for loop
        already does the same check.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):

2020-06-22  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r263331.

        This commit was causing 50+ iOS debug tests to crash.

        Reverted changeset:

        "Convert DateComponents parsing code to use Optional based
        return values rather than out-parameters"
        https://bugs.webkit.org/show_bug.cgi?id=213440
        https://trac.webkit.org/changeset/263331

2020-06-10  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Add a preliminary implementation of XRWebGLLayer
        https://bugs.webkit.org/show_bug.cgi?id=213022

        Reviewed by Carlos Garcia Campos.

        Added a preliminary implementation of XRWebGLLayer. It does not have any functionality at the moment so
        it cannot be used to render WebXR stuff. This patch adds all the machinery required to create and properly
        initialize the layer according to the spec.

        Two new wpt tests are passing now.

        * Modules/webxr/WebXRSession.h: Expose session mode.
        * Modules/webxr/WebXRWebGLLayer.cpp:
        (WebCore::WebXRWebGLLayer::create): Implemented spec for XRWebGLLayer creation.
        (WebCore::WebXRWebGLLayer::computeNativeWebGLFramebufferResolution): Added with mock implementation.
        (WebCore::WebXRWebGLLayer::computeRecommendedWebGLFramebufferResolution): Added.
        (WebCore::WebXRWebGLLayer::WebXRWebGLLayer):
        (WebCore::WebXRWebGLLayer::framebuffer const): Returned type should be a pointer.
        (WebCore::WebXRWebGLLayer::framebufferWidth const): Return framebuffer width if available, otherwise return
        the base context width.
        (WebCore::WebXRWebGLLayer::framebufferHeight const): Ditto but with heights.
        (WebCore::WebXRWebGLLayer::getNativeFramebufferScaleFactor): Implemented.
        * Modules/webxr/WebXRWebGLLayer.h: New methods and type adjustments.

2020-06-22  Rob Buis  <rbuis@igalia.com>

        Image `crossorigin` mutations should be considered "relevant mutations"
        https://bugs.webkit.org/show_bug.cgi?id=213335

        Reviewed by Darin Adler.

        Make crossorigin attribute's state changes relevant mutations [1]. This change
        also fixes several picture related mutations to be relevant [2].

        Test: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html

        [1] https://html.spec.whatwg.org/#reacting-to-dom-mutations:attr-img-crossorigin
        [2] https://html.spec.whatwg.org/#reacting-to-dom-mutations

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        (WebCore::HTMLImageElement::evaluateDynamicMediaQueryDependencies):
        (WebCore::HTMLImageElement::selectImageSource):
        (WebCore::parseCrossoriginState):
        (WebCore::HTMLImageElement::attributeChanged):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedIntoAncestor):
        (WebCore::HTMLImageElement::removedFromAncestor):
        * html/HTMLImageElement.h:
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::sourcesChanged):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedIntoAncestor):
        (WebCore::HTMLSourceElement::removedFromAncestor):
        (WebCore::HTMLSourceElement::parseAttribute):
        * html/HTMLSourceElement.h:
        * loader/ImageLoader.h:

2020-06-21  Sam Weinig  <weinig@apple.com>

        Convert much of the SVG string parsing code to use Optional based return values rather than out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=213416

        Reviewed by Darin Adler.

        Update SVG parsers to use Optional style return programming rather than out parameters.
        To make things even nicer, SVGPathSource based parsers now have a type per-parse function,
        which makes working with them much easier. In the future, we should consider exanding these
        new types to be used by SVGPathConsumer family of classes as well.

        * WebCore.xcodeproj/project.pbxproj:
        Add SVGPathSegValue.h, which was missing from the Xcode project.

        * svg/SVGAngleValue.cpp:
        (WebCore::parseAngleType): 
        (WebCore::SVGAngleValue::setValueAsString):
        Adopt updated parseNumber() function, and do a drive by removal of an easy to remove
        upconvertedCharacters.
 
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::calculateToAtEndOfDurationValue):
        (WebCore::SVGAnimateMotionElement::calculateFromAndToValues):
        (WebCore::SVGAnimateMotionElement::calculateFromAndByValues):
        (WebCore::SVGAnimateMotionElement::calculateDistance):
        Now uses new parsePoint() function. Using Optional.valueOr() where
        the old code would have had parsePoint() doing the clearing.
    
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):
        Now returns an Optional<Vector<UnitBezier>>.
        (WebCore::SVGAnimationElement::parseAttribute):
        Now uses new parseKeySplines, and does an explicit clear on parse failure (old code 
        did it implicitly in the parse function).

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        Adopt Optional based parseNumberOptionalNumber.

        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::parseAttribute):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::parseAttribute):
        Simplify by using the SVGPreserveAspectRatioValue constructor
        which calls parse. No need for three lines.

        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseAttribute):
        Adopt new Optional based parseViewBox.
        Simplify by using the SVGPreserveAspectRatioValue constructor
        which calls parse. No need for three lines.

        (WebCore::SVGFitToViewBox::parseViewBox):
        Convert to be Optional based, and adopt new parseNumber functions.

        * svg/SVGFitToViewBox.h:
        Updated signatures for new Optional based functions.

        * svg/SVGGlyphRefElement.cpp:
        (WebCore::parseFloat):
        Adopt Optional based parseNumber.
        
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::buildHorizontalKerningPair const):
        * svg/SVGHKernElement.h:
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::buildVerticalKerningPair const):
        * svg/SVGVKernElement.h:
        Convert to be Optional based. Update a few callers to use makeString.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::addKerningPair const):
        (WebCore::SVGToOTFFontConverter::appendKERNSubtable):
        Adopt new Optional based kerning pair builders. Add some moves
        to avoid some copies.

        * svg/SVGLengthValue.cpp:
        (WebCore::SVGLengthValue::setValueAsString):
        Adopt Optional based parseNumber.

        * svg/SVGNumberList.h:
        (WebCore::SVGNumberList::parse):
        Adopt Optional based parseNumber.

        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber):
        (WebCore::parseNumber):
        (WebCore::genericParseArcFlag):
        (WebCore::parseArcFlag):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parsePoint):
        (WebCore::parseRect):
        (WebCore::parseGlyphName):
        (WebCore::parseUnicodeRange):
        (WebCore::parseKerningUnicodeString):
        (WebCore::genericParseFloatPoint):
        (WebCore::parseFloatPoint):
        (WebCore::parseSVGNumber): Deleted.
        (WebCore::parseNumberFromString): Deleted.
        (WebCore::parseDelimitedString): Deleted.
        (WebCore::parseFloatPoint2): Deleted.
        (WebCore::parseFloatPoint3): Deleted.
        * svg/SVGParserUtilities.h:
        (WebCore::isSVGSpace):
        (WebCore::skipOptionalSVGSpaces):
        (WebCore::skipOptionalSVGSpacesOrDelimiter):
        - Converts parse* functions to return Optional values rather than using outparameters.
        - Removes unused parseSVGNumber and parseDelimitedString.
        - Removes parseFloatPoint2 and parseFloatPoint3. They weren't useful enough to keep around.
        - Renames parseNumberFromString to parseNumber. The argument is a String, it's clear enough.
        - Replace boolean skip parameters with new enum SuffixSkippingPolicy.
        - Make parseFloatPoint have two overloads rather than being templatized to be consistent.


        * svg/SVGPathBlender.cpp:
        (WebCore::pullFromSources):
        (WebCore::SVGPathBlender::blendMoveToSegment):
        (WebCore::SVGPathBlender::blendLineToSegment):
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        (WebCore::SVGPathBlender::canBlendPaths):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        Update to adopt new SVGPathSource interface. Added pullFromSources helper
        which substantially simplifies pulling from both the from and to source at
        the same time and is now possible due to all the SVGPathSource functions
        returning the segment types rather than taking them as out parameters.

        * svg/SVGPathByteStreamSource.cpp:
        (WebCore::SVGPathByteStreamSource::nextCommand):
        (WebCore::SVGPathByteStreamSource::parseSVGSegmentType):
        (WebCore::SVGPathByteStreamSource::parseMoveToSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToVerticalSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToCubicSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathByteStreamSource::parseArcToSegment):
        * svg/SVGPathByteStreamSource.h:
        Adopt new SVGPathSource interface.

        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parseMoveToSegment):
        (WebCore::SVGPathParser::parseLineToSegment):
        (WebCore::SVGPathParser::parseLineToHorizontalSegment):
        (WebCore::SVGPathParser::parseLineToVerticalSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::parseArcToSegment):
        (WebCore::SVGPathParser::parsePathData):
        Adapt to new SVGPathSource interface. Code reads a bit nicer now
        that we don't have a ton of local variables in each method. Could
        be made nicer in the future by adopting Segment types in the path
        consumer code.

        * svg/SVGPathSegListSource.cpp:
        (WebCore::SVGPathSegListSource::nextCommand):
        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
        (WebCore::SVGPathSegListSource::parseMoveToSegment):
        (WebCore::SVGPathSegListSource::parseLineToSegment):
        (WebCore::SVGPathSegListSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathSegListSource::parseLineToVerticalSegment):
        (WebCore::SVGPathSegListSource::parseCurveToCubicSegment):
        (WebCore::SVGPathSegListSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathSegListSource::parseArcToSegment):
        * svg/SVGPathSegListSource.h:
        Adopt new SVGPathSource interface.

        * svg/SVGPathSource.h:
        Update interface to return Optionals, with a specific type for
        segment kind that be parsed.

        * svg/SVGPathStringSource.cpp:
        (WebCore::nextCommandHelper):
        (WebCore::SVGPathStringSource::nextCommand):
        (WebCore::parseSVGSegmentTypeHelper):
        (WebCore::SVGPathStringSource::parseSVGSegmentType):
        (WebCore::SVGPathStringSource::parseMoveToSegment):
        (WebCore::SVGPathStringSource::parseLineToSegment):
        (WebCore::SVGPathStringSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathStringSource::parseLineToVerticalSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathStringSource::parseArcToSegment):
        (WebCore::parseArcToSegmentHelper): Deleted.
        * svg/SVGPathStringSource.h:
        Adopt new SVGPathSource interface. Replace out of line helpers (or use of things
        like parseFloatPoint2) with generic lambda helpers, helping to keep the code more
        localized.
    
        * svg/SVGPointList.h:
        (WebCore::SVGPointList::parse):
        Adopt Optional based parseNumber.

        * svg/SVGTransformList.h:
        * svg/SVGTransformable.cpp:
        (WebCore::parseTransformParamList):
        (WebCore::SVGTransformable::parseTransformValue):
        (WebCore::SVGTransformable::parseAndSkipType):
        (WebCore::SVGTransformable::parseTransformType):
        * svg/SVGTransformable.h:
        Convert parseTransformValue/parseAndSkipType to be Optional based.

        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        Adopt Optional based parseViewBox.

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        Adopt Optional based parseNumber.

        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<float>::fromString):
        (WebCore::SVGPropertyTraits<float>::parse):
        (WebCore::SVGPropertyTraits<FloatPoint>::fromString):
        (WebCore::SVGPropertyTraits<FloatPoint>::parse):
        (WebCore::SVGPropertyTraits<FloatRect>::fromString):
        (WebCore::SVGPropertyTraits<FloatRect>::parse):
        Adopt Optional based parsers.

2020-06-21  Sam Weinig  <weinig@apple.com>

        Convert DateComponents parsing code to use Optional based return values rather than out-parameters
        https://bugs.webkit.org/show_bug.cgi?id=213440

        Reviewed by Darin Adler.

        Rework DateComponents and Date/Time related InputTypes to use Optional based programming
        for parsing results. Also take the opportunity to remove unicode upconversion from 
        DateComponent parsing and instead separate UChar and LChar variants via templates. 

        * html/BaseDateAndTimeInputType.cpp:
        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
            - Removes parseToDateComponentsInternal. No need it and parseToDateComponents.
            - Makes parseToDateComponents pure virtual. The old code had a default implementations
              down in InputType, but it had no callers.
            - Remove iOS vs. non-iOS difference for dateType(). It is now available on InputType
              on all platforms. 
            - Make setMillisecondToDateComponents and parseToDateComponents return an Optional.
        
        * platform/DateComponents.cpp:
        * platform/DateComponents.h:
            - Replace member function based interfaces for parsing/setting explicit time offsets
              with new factory functions that return Optional<DateComponents>.
            - These factories are implemented using the existing member functions, which are
              now private.
            - Make max/min constants constexpr.
            - Make parse* member functions templates to allow factory parse functions to
              call them without upconverting.
            - Replace header guard with #pragma once.

2020-06-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add basic support for width: fit-content
        https://bugs.webkit.org/show_bug.cgi?id=213444

        Reviewed by Antti Koivisto.

        At this point this is just a shrink-to-fit sizing (missing the case when the available horizontal space is not specified).

        Test: fast/layoutformattingcontext/fit-content-width-simple.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedWidthValue):

2020-06-21  Jer Noble  <jer.noble@apple.com>

        WebKit fails to leave audio routing arbitration during navigation, closing.
        https://bugs.webkit.org/show_bug.cgi?id=213426
        <rdar://problem/64395051>

        Reviewed by Eric Carlson.

        When setting the AudioSession category, make sure to leave routing arbitration before bailing out early. Also,
        HTMLMediaElement::canProduceAudio() should return `false` when the element's document is suspended or stopped.
        Otherwise, the AudioSession will continue in the `MediaPlayback` category indefinitely, and routing arbitration
        will remain active.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canProduceAudio const):
        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSession::setCategory):

2020-06-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for percentage min/max-width
        https://bugs.webkit.org/show_bug.cgi?id=213436

        Reviewed by Antti Koivisto.

        1. The table generates a principal block container box called the table wrapper box that contains the table box itself and any caption boxes.
        2. The table wrapper box establishes a block formatting context, and the table box establishes a table formatting context.
        3. The computed values of properties 'position', 'float', 'margin-*', 'top', 'right', 'bottom', and 'left' on
           the table element are used on the table wrapper box and not the table box; all other values of non-inheritable
           properties are used on the table box and not the table wrapper box.
        4. In a block formatting context, each box's left outer edge touches the left edge of the containing block.
           This is true even in the presence of floats, unless the box establishes a new block formatting context (in which case the
           box itself may become narrower due to the floats)

        Now consider the following case:
        <div style="display: block; width: 500px;">
            <div style="float: left; width: 100px;"></div>
            <div style="display: table; width: 10%;"></div>
        </div>
        1. We create a table wrapper box to wrap the "display: table" block level box (#1).
        2. The table wrapper box's width property is set to auto (#3).
        3. Since it establishes a new block formatting context, the available horizontal space gets shrunk by the float (#4)
        4. The table wrapper box's used width computes to 500px - 100px -> 400px;

        Now we are inside the BFC established by the table wrapper box and try to resolve the table's width -> %10.
        According to the normal BFC rules, it should compute to 10% of the containing block's logical width: 400px -> 40px.
        However in practice it computes to 50px (10% of 500px).

        Similar setup with non-table content would resolve the inner block level box's width to 40px;
        <div style="display: block; width: 500px">
            <div style="float: left; width: 100px;"></div>
            <div style="display: block; overflow: hidden;">
                <div style="display: block; width: 10%"></div>
            </div>
        </div>
        This needs clarification.

        Test: fast/layoutformattingcontext/float-avoider-available-horizontal-space3.html

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::isTableWrapperBlockFormattingContext const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h:

2020-06-20  Jer Noble  <jer.noble@apple.com>

        RecoveryOS: PAL::getAVPlayerLayerClass() will crash when AVFoundation is missing
        https://bugs.webkit.org/show_bug.cgi?id=213437
        <rdar://problem/64563064>

        Reviewed by Eric Carlson.

        Check PAL::isAVFoundationAvailable() before calling PAL::getAVPlayerLayerClass();

        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm:
        (WebCore::VideoLayerManagerObjC::setVideoLayer):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::layerTypeForPlatformLayer):
        (WebCore::PlatformCALayerCocoa::PlatformCALayerCocoa):
        (WebCore::PlatformCALayerCocoa::clone const):
        (WebCore::PlatformCALayerCocoa::avPlayerLayer const):

2020-06-20  Simon Fraser  <simon.fraser@apple.com>

        Crash under ScrollController::startSnapRubberbandTimer() firing
        https://bugs.webkit.org/show_bug.cgi?id=213439
        <rdar://problem/63986013>

        Reviewed by Tim Horton.

        A wholesale destruction of the ScrollingTree (e.g. via ScrollingCoordinatorMac::pageDestroyed()) never
        ran the code to stop CFRunLoopTimers in ScrollController, which could lead to this crash.
        Fix by calling removeAllNodes() in ThreadedScrollingTree::invalidate().

        Add an assertion in ScrollController's destructor that stopAllTimers() has been called, and have
        ScrollAnimator's destructor call stopAllTimers() too.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::invalidate):
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::~ScrollAnimator):
        * platform/cocoa/ScrollController.h:
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::~ScrollController):
        (WebCore::ScrollController::stopAllTimers):

2020-06-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC][Quirk] Table height needs quirk handling
        https://bugs.webkit.org/show_bug.cgi?id=213430

        Reviewed by Antti Koivisto.

        In quirks mode the used table height of an empty table is 0, while in standards mode
        we take the specified value into account and size the table accordingly.   

        Tests: fast/layoutformattingcontext/empty-table-with-specified-height-quirk-simple.html
               fast/layoutformattingcontext/empty-table-with-specified-height-standards-simple.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Quirks::geometry const):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h:
        (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::Quirks):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContextQuirks.cpp: Copied from Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h.
        (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::usedTableHeight const):

2020-06-19  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Delay issuing ManagedSession & Network Extension sandbox extensions until a load is actually issued
        https://bugs.webkit.org/show_bug.cgi?id=213414
        <rdar://problem/64548684>

        Reviewed by Per Arne Vollan.

        setHasConsumedSandboxExtensions() can now get called several times, every time a WebPage is created.
        Once a sandbox extension has been consumed, there is no going back so return early if the state is
        already "Consumed".

        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::setHasConsumedSandboxExtensions):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::setHasConsumedSandboxExtension):

2020-06-19  Zalan Bujtas  <zalan@apple.com>

        [AutoSizing] Resolve viewport units against the preferred content size
        https://bugs.webkit.org/show_bug.cgi?id=213408
        <rdar://problem/64267539>

        Reviewed by Tim Horton.

        Instead of resolving the viewport units against the maximum content size constraints, let's use the preferred content size.
        It ensures that content with vw, vh units does not grow beyond the preferred content size.

        Test: fast/dynamic/size-to-content-autosize-with-viewport-units.html

        * page/FrameView.cpp:
        (WebCore::FrameView::performSizeToContentAutoSize):
        (WebCore::FrameView::enableAutoSizeMode): Let's "ignore" viewport units during the initial
        pass and use the preferred width to finalize the vw vh unit values (we don't really ignore them, but they are resolved against a [ 1, 1 ] viewport).
        This approach fails if the main content has 100vw with overflow hidden. Such content would end up with a [ 1, 1 ] size (we might want to detect it 
        and resolved the values against the horizontal constraint).
        (WebCore::FrameView::overrideViewportWidthForCSSViewportUnits):
        (WebCore::FrameView::resetOverriddenViewportWidthForCSSViewportUnits):
        * page/FrameView.h:
        * testing/Internals.cpp:
        (WebCore::Internals::enableSizeToContentAutoSizeMode):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Move progress bar painting code off of Carbon API
        https://bugs.webkit.org/show_bug.cgi?id=213405
        <rdar://problem/63958537>

        Reviewed by Tim Horton.

        Adopts CoreUI constants and AppKit SPI (`-[NSAppearance _drawInRect:context:options:]`) when painting progress
        elements. This is being done in light of recent changes around how `HIThemeDrawTrack` draws progress bars on
        recent versions of macOS; it has been recommended to us that we move away from using Carbon, and instead use
        AppKit.

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

        The `NSControlSize` to `CUISize` mapping here looks counterintuitive, but matches our current behavior. This is
        because `kThemeLargeProgressBar` and `kThemeLargeIndeterminateBar` both map to `kCUISizeRegular`, while
        `kThemeMediumIndeterminateBar` and `kThemeMediumProgressBar` map to `kCUISizeSmall`.

2020-06-19  Clark Wang  <clark_wang@apple.com>

        Remove setVelocity() from PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=213360

        Reviewed by Chris Dumez.

        Removed setVelocity() and other velocity dependencies, as per spec: https://www.w3.org/TR/webaudio/#pannernode.
        Simplified dopplerRate, since sourceVelocity is always zero.

        Re-baselined previous test that now passes with velocity removed.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::dopplerRate):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:

2020-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION (r263253): Search field results and cancel buttons have their own focus rings
        https://bugs.webkit.org/show_bug.cgi?id=213413
        <rdar://problem/64548419>

        Reviewed by Tim Horton.

        After r263253, `paintCellAndSetFocusedElementNeedsRepaintIfNecessary` is used when painting the buttons in a
        search field's shadow root. However, the renderer that is passed in (which is used to determine whether we
        should additionally draw focus rings) is the input element's renderer rather than the renderers of the results
        and cancel buttons themselves. This means that when the search field is focused, we will draw focus rings around
        each of the buttons in the shadow root as well.

        Address this by using `box` (the buttons' RenderBoxes) instead.

        Test: fast/forms/search-field-buttons-do-not-have-focus-rings.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2020-06-19  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Crash in WebCore::Range::borderAndTextRects
        https://bugs.webkit.org/show_bug.cgi?id=209379

        Reviewed by Darin Adler.

        When a parentless node is moved to a new document, then all ranges associated with this node and its children also should
        be updated with new document information.

        Test woould be submitted later. 

        * dom/Document.cpp:
        (WebCore::Document::parentlessNodeMoveToNewDocument):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::moveNodeToNewDocument):
        * dom/Range.cpp:
        (WebCore::Range::parentlessNodeMoveToNewDocumentAffectsRange):
        (WebCore::Range::updateRangeForParentlessNodeMoveToNewDocument):
        * dom/Range.h:

2020-06-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r263121.

        Broke media/video-fullscreen-only-playback.html on Catalina
        Debug

        Reverted changeset:

        "Don't claim to support fullscreen mode unless
        fullScreenEnabled setting is enabled"
        https://bugs.webkit.org/show_bug.cgi?id=213142
        https://trac.webkit.org/changeset/263121

2020-06-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] REGRESSION (r256892): Luminance SVG mask is not applied when accelerated drawing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=213403
        <rdar://problem/64489419>

        Reviewed by Simon Fraser.

        Test: svg/masking/mask-css-luminance.html

        If the ImageBuffer is backed by an IOSurface, its context has to be flushed
        out before convertToLuminanceMask() can access its data.

        * platform/graphics/ConcreteImageBuffer.h:

2020-06-19  Chris Dumez  <cdumez@apple.com>

        Avoid initializing RenderTheme singleton unnecessarily in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=213406

        Reviewed by Per Arne Vollan.

        Avoid initializing RenderTheme singleton unnecessarily in the UIProcess. Instead, introduce
        a static function to get the focus ring color on iOS.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemFocusRingColor):
        (WebCore::RenderThemeIOS::platformFocusRingColor const):

2020-06-19  Andres Gonzalez  <andresg_22@apple.com>

        AX: web process crash in AXObjectCache::postNotification.
        https://bugs.webkit.org/show_bug.cgi?id=213398

        Reviewed by Chris Fleizach.

        AXObjectCache was being instantiated on the AX secondary thread.
        Therefore the timers for the different delayed notifications where
        initialized with the secondary thread. When postNotification was triggered
        on the main thread as it should, and the timer was accessed, the timer
        would assert/crash for being accessed in a thread different than where
        it was created. This change guaranties that AXObjectCache is always
        created on the main thread.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::enableAccessibility):
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::postNotification):

2020-06-19  Chris Dumez  <cdumez@apple.com>

        [iOS] RenderThemeIOS::cssValueToSystemColorMap() does an unnecessary linear search under systemColorFromCSSValueID()
        https://bugs.webkit.org/show_bug.cgi?id=213396

        Reviewed by Timothy Hatcher.

        RenderThemeIOS::cssValueToSystemColorMap() does an unnecessary linear search under systemColorFromCSSValueID().
        cssValueToSystemColorMap() already has the selector, yet it passes a CSSValueID to systemColorFromCSSValueID() which
        then does a linear search to match the CSSValueID to a selector. This was very inefficient / unfortunate.

        This patch introduces a systemColorFromCSSValueIDSelector() which takes in a selector instead of a CSSValueID. I have
        also moved the constructor of the LocalCurrentTraitCollection variable to the call site so that we don't keep
        constructing / destroying it for each loop iteration. The traces show us spending a lot of time in its constructor /
        destructor.

        * rendering/RenderThemeIOS.mm:
        (WebCore::systemColorFromCSSValueIDSelector):
        (WebCore::RenderThemeIOS::cssValueToSystemColorMap):

2020-06-19  James Darpinian  <jdarpinian@chromium.org>

        [WebGL2] Uniform Buffer Objects
        https://bugs.webkit.org/show_bug.cgi?id=209518

        Reviewed by Dean Jackson.

        All uniform buffer object conformance tests pass.

        Implemented Uniform Buffer Object related functions:
        bindBufferBase, bindBufferRange, getUniformIndices, getActiveUniforms, getUniformBlockIndex,
        getActiveUniformBlockParameter, getActiveUniformBlockName, uniformBlockBinding

        Additionally, fixed many tangentially related issues:
        getIntegeri_v and getInteger64i_v were not present.
        drawArraysInstances and drawElementsInstanced did not work for WebGL 2.
        drawRangeElements was not implemented.
        WebGLAny did not support Vector<unsigned>, so Uint32Arrays could not be returned from WebGL functions.
        The maximum uniform location length was wrong for WebGL 2.
        Transform feedback indexed binding points weren't being tracked.
        Some functions in ExtensionsGLANGLE didn't call makeContextCurrent.
        New WebGL 2 buffer usage types COPY and READ weren't supported in bufferData.
        pause/resumeTransformFeedback were unimplemented.
        getParameter(READ_BUFFER) was unimplemented.
        readBuffer conformance test was incorrect.

        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::~WebGL2RenderingContext):
        (WebCore::WebGL2RenderingContext::initializeNewContext):
        (WebCore::WebGL2RenderingContext::drawRangeElements):
        (WebCore::WebGL2RenderingContext::setIndexedBufferBinding):
        (WebCore::WebGL2RenderingContext::bindBufferBase):
        (WebCore::WebGL2RenderingContext::bindBufferRange):
        (WebCore::WebGL2RenderingContext::getIndexedParameter):
        (WebCore::WebGL2RenderingContext::getUniformIndices):
        (WebCore::WebGL2RenderingContext::getActiveUniforms):
        (WebCore::WebGL2RenderingContext::getUniformBlockIndex):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockParameter):
        (WebCore::WebGL2RenderingContext::getActiveUniformBlockName):
        (WebCore::WebGL2RenderingContext::uniformBlockBinding):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLAny.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateLocationLength):
        (WebCore::WebGLRenderingContextBase::validateBufferDataParameters):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::getTranslatedShaderSourceANGLE):
        (WebCore::ExtensionsGLANGLE::blitFramebuffer):
        (WebCore::ExtensionsGLANGLE::renderbufferStorageMultisample):
        (WebCore::ExtensionsGLANGLE::drawBuffersEXT):
        (WebCore::ExtensionsGLANGLE::getBooleanvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getBufferParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getFloatvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getFramebufferAttachmentParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getIntegervRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getProgramivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getRenderbufferParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getShaderivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexParameterfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getUniformfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getUniformivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getVertexAttribfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getVertexAttribivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getVertexAttribPointervRobustANGLE):
        (WebCore::ExtensionsGLANGLE::readPixelsRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texImage2DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texParameterfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texSubImage2DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::compressedTexImage2DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::compressedTexSubImage2DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::compressedTexImage3DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::compressedTexSubImage3DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texImage3DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texSubImage3DRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjectuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getBufferPointervRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getIntegeri_vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getInternalformativRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getVertexAttribIivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getVertexAttribIuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getUniformuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getActiveUniformBlockivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getInteger64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getInteger64i_vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getBufferParameteri64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::samplerParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::samplerParameterfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getSamplerParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getSamplerParameterfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getFramebufferParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getProgramInterfaceivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getBooleani_vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getMultisamplefvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexLevelParameterivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexLevelParameterfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getPointervRobustANGLERobustANGLE):
        (WebCore::ExtensionsGLANGLE::readnPixelsRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getnUniformfvRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getnUniformivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getnUniformuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texParameterIivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::texParameterIuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexParameterIivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getTexParameterIuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::samplerParameterIivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::samplerParameterIuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getSamplerParameterIivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getSamplerParameterIuivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjectivRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjecti64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjectui64vRobustANGLE):
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::getIntegeri_v):
        (WebCore::GraphicsContextGLOpenGL::getInteger64v):
        (WebCore::GraphicsContextGLOpenGL::getInteger64i_v):
        (WebCore::GraphicsContextGLOpenGL::drawArraysInstanced):
        (WebCore::GraphicsContextGLOpenGL::drawElementsInstanced):
        (WebCore::GraphicsContextGLOpenGL::getUniformBlockIndex):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockiv):
        (WebCore::GraphicsContextGLOpenGL::getActiveUniformBlockName):
        (WebCore::GraphicsContextGLOpenGL::uniformBlockBinding):
        (WebCore::GraphicsContextGLOpenGL::drawRangeElements):
        (WebCore::GraphicsContextGLOpenGL::pauseTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::resumeTransformFeedback):
        (WebCore::GraphicsContextGLOpenGL::bindBufferRange):
        (WebCore::GraphicsContextGLOpenGL::getUniformIndices):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLBase.cpp:
        (WebCore::GraphicsContextGLOpenGL::getIntegeri_v):
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::getInteger64v):
        (WebCore::GraphicsContextGLOpenGL::getInteger64i_v):

2020-06-19  Chris Dumez  <cdumez@apple.com>

        [iOS] Drop std::call_once() from RenderThemeIOS::cssValueToSystemColorMap()
        https://bugs.webkit.org/show_bug.cgi?id=213392

        Reviewed by Geoffrey Garen.

        Drop std::call_once() from RenderThemeIOS::cssValueToSystemColorMap() since this function
        is always called from the main thread.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::cssValueToSystemColorMap):

2020-06-19  Rob Buis  <rbuis@igalia.com>

        Enable referrer policy attribute support by default
        https://bugs.webkit.org/show_bug.cgi?id=213285

        Reviewed by Youenn Fablet.

        Enable referrer policy attribute support by default by flipping the switch.

        * page/RuntimeEnabledFeatures.h:

2020-06-19  Chris Dumez  <cdumez@apple.com>

        Move Prefixed WebAudio interfaces behind their own feature flag
        https://bugs.webkit.org/show_bug.cgi?id=213356

        Reviewed by Darin Adler.

        Move Prefixed WebAudio interfaces behind their own feature flag, on by default. This will
        allow us to easily disable the prefixed API and will also allow it to live independently
        from the unprefixed API.

        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/WebKitAudioContext.idl:
        * Modules/webaudio/WebKitAudioPannerNode.idl:
        * Modules/webaudio/WebKitOfflineAudioContext.idl:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/Settings.yaml:

2020-06-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Do not special-case empty tables
        https://bugs.webkit.org/show_bug.cgi?id=213378

        Reviewed by Antti Koivisto.

        Now that min/max-width support is added, empty tables can just go through the normal width computation path. 

        Test: fast/layoutformattingcontext/table-min-max-width-empty-content-simple.html

        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):

2020-06-10  Sergio Villar Senin  <svillar@igalia.com>

        REGRESSION(r262254?): [WPE] imported/w3c/web-platform-tests/webxr/idlharness.https.window.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212897

        Reviewed by Youenn Fablet.

        WPT tests were updated in r262254 and they already include the latest changes in the specs. Among others the
        XR interface was renamed to XRSystem. We were already using that name in the C++ code but not in the JS interface.
        The WPT update brings in another set of changes like the new XRLayer which is already not supported (I am
        adding it soon in another patch). Last but not least, the new tests include checks for the XRPermissionStatus interface
        which is not going to be implemented soon as it requires the Permission API which is not supported in WebKit yet. All in
        all, this patch renames XR to XRSystem and marks as failing the XRLayer (temporarily) and XRPermissionStatus checks.

        No new tests as there is no change in functionality.

        * Modules/webxr/WebXRSystem.idl: Rename XR to XRSystem.
        * bindings/js/WebCoreBuiltinNames.h: Ditto.

2020-06-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Min/max-width should always be resolved against the containing block width
        https://bugs.webkit.org/show_bug.cgi?id=213365

        Reviewed by Antti Koivisto.

        Even when neighboring floats shrink the available horizontal space, the min/max(normal) widths should
        be resolved against the containing block's logical width.

        Test: fast/layoutformattingcontext/float-avoider-available-horizontal-space2.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::computedWidthAndMargin):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):

2020-06-10  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] unsigned long in IDL should be translated as unsigned in C++ code
        https://bugs.webkit.org/show_bug.cgi?id=213020

        Reviewed by Darin Adler.

        The "unsigned long" type definition in IDL must be translated to unsigned in C++ code.

        I'm also replacing the very long XRFrameRequestCallback::Identifier by simply unsigned as it
        isn't adding anything.

        No new test required as there is no change in functionality, just removing an alias.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::requestAnimationFrame):
        (WebCore::WebXRSession::cancelAnimationFrame):
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/XRFrameRequestCallback.h:
        (WebCore::XRFrameRequestCallback::callbackId):
        (WebCore::XRFrameRequestCallback::setCallbackId):

2020-06-19  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Unify "font:" CSS shorthand values between macOS and iOS family
        https://bugs.webkit.org/show_bug.cgi?id=213332
        <rdar://problem/64479189>

        Reviewed by Tim Horton and Darin Adler.

        They exist on all Cocoa platforms, so we might as well hook them up.

        This unifies the shorthand CSS value handling from RenderThemeMac and
        RenderThemeIOS into RenderThemeCocoa. This has two effects:

        - It hooks up the -apple-system keywords on macOS (they previously were
          only implemented for the iOS family).
        - It hooks up the CSS2 keywords (caption, menu, etc.) on the iOS family
          (they previously were only implemented on Mac).

        All these fonts have been around since Mojave, so there is no need to
        introduce any new platform guards.

        Tests: fast/text/text-styles/-apple-system/-apple-system-body.html
               fast/text/text-styles/-apple-system/-apple-system-caption1.html
               fast/text/text-styles/-apple-system/-apple-system-caption2.html
               fast/text/text-styles/-apple-system/-apple-system-footnote.html
               fast/text/text-styles/-apple-system/-apple-system-headline.html
               fast/text/text-styles/-apple-system/-apple-system-short-body.html
               fast/text/text-styles/-apple-system/-apple-system-short-caption1.html
               fast/text/text-styles/-apple-system/-apple-system-short-footnote.html
               fast/text/text-styles/-apple-system/-apple-system-short-headline.html
               fast/text/text-styles/-apple-system/-apple-system-short-subheadline.html
               fast/text/text-styles/-apple-system/-apple-system-subheadline.html
               fast/text/text-styles/-apple-system/-apple-system-tall-body.html
               fast/text/text-styles/-apple-system/-apple-system-title0.html
               fast/text/text-styles/-apple-system/-apple-system-title1.html
               fast/text/text-styles/-apple-system/-apple-system-title2.html
               fast/text/text-styles/-apple-system/-apple-system-title3.html
               fast/text/text-styles/-apple-system/-apple-system-title4.html
               fast/text/text-styles/-webkit-control.html
               fast/text/text-styles/-webkit-mini-control.html
               fast/text/text-styles/-webkit-small-control.html
               fast/text/text-styles/bogus.html
               fast/text/text-styles/caption.html
               fast/text/text-styles/icon.html
               fast/text/text-styles/menu.html
               fast/text/text-styles/message-box.html
               fast/text/text-styles/small-caption.html
               fast/text/text-styles/status-bar.html

        * css/CSSValueKeywords.in: All Cocoa ports should be able to parse these values
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontWithFamilySpecialCase): Move code that used to be in the Mac and
        iOS implementations of platformFontWithFamilySpecialCase() (inside FontCacheMac.mm
        and FontCacheIOS.mm) to be shared to be shared inside fontWithFamilySpecialCase().
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp: Remove platform guards.
        (WebCore::convertArray):
        (WebCore::matchSystemFontUse):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp: Ditto.
        (WebCore::SystemFontDatabaseCoreText::createTextStyleFont):
        * platform/graphics/ios/FontCacheIOS.mm: Move code from here into FontCacheCoreText.
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm: Ditto.
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/mac/ThemeMac.h: Delete systemFontSizeFor(NSControlSize) because
        <rdar://problem/60350699> is fixed.
        * platform/mac/ThemeMac.mm: Ditto.
        (WebCore::ThemeMac::controlFont const):
        (WebCore::ThemeMac::systemFontSizeFor): Deleted.
        * rendering/RenderThemeCocoa.h: Previously, code was calling
        RenderThemeIOS::contentSizeCategory(), which was a static function. Now, both Mac
        and iOS need to be able to call this. However, the implementation of this function
        is different between Mac and iOS. So, turn it from a static function in RenderThemeIOS
        into a method in RenderThemeCocoa, and give RenderThemeCocoa a singleton() function
        that downcasts the return of RenderTheme::singleton(). This way, instead of calling
        RenderThemeIOS::contentSizeCategory(), code can call
        RenderThemeCocoa::singleton().contentSizeCategory().
        * rendering/RenderThemeCocoa.mm: Move code from RenderThemeIOS and RenderThemeMac
        into RenderThemeCocoa.
        (WebCore::RenderThemeCocoa::singleton):
        (WebCore::RenderThemeCocoa::cachedSystemFontDescription const):
        (WebCore::cssWeightOfSystemFont):
        (WebCore::RenderThemeCocoa::updateCachedSystemFontDescription const):
        * rendering/RenderThemeIOS.h: Ditto.
        * rendering/RenderThemeIOS.mm: Ditto.
        (WebCore::RenderThemeIOS::contentSizeCategory const):
        (WebCore::attachmentActionFont):
        (WebCore::attachmentTitleFont):
        (WebCore::RenderThemeIOS::contentSizeCategory): Deleted.
        (WebCore::RenderThemeIOS::cachedSystemFontDescription const): Deleted.
        (WebCore::cssWeightOfSystemFont): Deleted.
        (WebCore::RenderThemeIOS::updateCachedSystemFontDescription const): Deleted.
        * rendering/RenderThemeMac.h: Ditto.
        * rendering/RenderThemeMac.mm: Ditto.
        (WebCore::RenderThemeMac::contentSizeCategory const):
        (WebCore::RenderThemeMac::setFontFromControlSize const):
        (WebCore::RenderThemeMac::controlSizeForSystemFont const):
        (WebCore::toFontWeight): Deleted.
        (WebCore::RenderThemeMac::updateCachedSystemFontDescription const): Deleted.

2020-06-18  Doug Kelly  <dougk@apple.com>

        Use paintCellAndSetFocusedElementNeedsRepaintIfNecessary() for search field buttons
        https://bugs.webkit.org/show_bug.cgi?id=213352
        <rdar://problem/57129008>

        Reviewed by Simon Fraser.

        The search fields cancel and results buttons should use the common
        paintCellAndSetFocusedElementNeedsRepaintIfNecessary() function instead of directly painting the cell.
        This allows for an image buffer to be used for drawing specifically in cases when it becomes needed,
        when a scale (either via zoom or CSS transform) is applied.

        This also moves the logic for determining if an image buffer should be used into
        ThemeMac::drawCellOrFocusRingWithViewIntoContext(), which uses the current user-defined CTM
        (inverting the base CTM to negate the effect of a device-specific scale factor).  This also negates
        the need for the page scale factor and the effective zoom applied to the renderer style, since it is
        computed into the CTM already.

        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        (WebCore::paintColorWell):
        (WebCore::ThemeMac::paint):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2020-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: ASSERTION FAILED: decodedLength >= dataLength at WebCore::NetworkResourcesData::ResourceData::decodeDataToContent()
        https://bugs.webkit.org/show_bug.cgi?id=213271
        <rdar://problem/64168350>

        Reviewed by Brian Burg.

        Remove the invalid `ASSERT(decodedLength >= dataLength)` as it's very possible for decoded
        content to be smaller than encoded content (e.g. something gzipped).

        Use `String::sizeInBytes` instead of `StringImpl::sizeInBytes` as the latter also includes
        `sizeof(*this)`, which is not really part of the resource's size, as it's really more of an
        implementation detail.

        * inspector/NetworkResourcesData.h:
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::removeContent):
        (WebCore::NetworkResourcesData::ResourceData::decodeDataToContent):
        (WebCore::NetworkResourcesData::setResourceContent):
        (WebCore::NetworkResourcesData::maybeDecodeDataToContent):
        (WebCore::contentSizeInBytes): Deleted.

2020-06-18  Andy Estes  <aestes@apple.com>

        [Apple Pay] Fix a log message typo in PaymentCoordinator::didAuthorizePayment

        Rubber-stamped by Beth Dakin.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::didAuthorizePayment): Logged the correct function name.

2020-06-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Available space computation for the float avoider needs coordinate mapping
        https://bugs.webkit.org/show_bug.cgi?id=213339

        Reviewed by Antti Koivisto.

        The FloatConstraints position values are in formatting root coordinates but the available space
        requires containing block coordinates.

        Test: fast/layoutformattingcontext/float-avoider-available-horizontal-space.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider):

2020-06-18  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Build fix for errors with structured bindings to const structure
        https://bugs.webkit.org/show_bug.cgi?id=213323

        Reviewed by Fujii Hironori.

        Our system seems to have trouble with these structured bindings,
        similar to what was previously seen for clang-cl.

        No new tests, build fix.

        * inspector/agents/InspectorNetworkAgent.cpp:

2020-06-18  Youenn Fablet  <youenn@apple.com>

        REGRESSION (r263098): [Win10] http/tests/security/cross-origin-clean-css-resource-timing.html and http/tests/security/cross-origin-css-resource-timing.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=213303
        <rdar://problem/64452203>

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * loader/ResourceLoaderOptions.h:
        Reverting part of https://trac.webkit.org/changeset/263098/webkit that might have broken win10 bots.

2020-06-18  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GStreamer] Avoid setting GstContext twice in GLVideoSinkGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=213029

        Reviewed by Xabier Rodriguez-Calvar.

        There is a reported issued in GStrearGL < 1.17 for GLBaseFilter
        can't handle its GLContext and Display reassignation. This patch
        aims to to avoid setting Display or GL Context in GL video sink
        multiple times by checking if the video sink bin already has those
        contexts.

        Also, instead of relying on an assert if something goes wrong at
        fetching the GL parameters, it returns an error at state change.

        No new tests required.

        * platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
        (requestGLContext):
        (setGLContext): new function.
        (webKitGLVideoSinkChangeState):

2020-06-18  Doug Kelly  <dougk@apple.com>

        Clamp text run width to zero
        https://bugs.webkit.org/show_bug.cgi?id=212655
        <rdar://problem/61462335>

        Reviewed by Said Abou-Hallawa.

        It's possible to end up with a text run with negative width, if the text run is relatively short
        and the character spacing is relatively large (but negative).  If this occurs, clamp the value to
        zero.  This also adds additional asserts and checks to ensure the value remains non-negative.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * rendering/ComplexLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::width const):

2020-06-18  David Kilzer  <ddkilzer@apple.com>

        Fix misspellings of "namespace" in comments

        * page/SpatialNavigation.h:
        * platform/gtk/RenderThemeScrollbar.cpp:

2020-06-18  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] OptionSet<> values should be validated
        <https://webkit.org/b/213199>
        <rdar://problem/64369963>

        Reviewed by Anders Carlsson.

        Summary:
        - Add WTF::EnumTraits<> for all OptionSet<> enums.
        - Specify unsigned backing types for enum classes.

        * loader/CrossOriginAccessControl.h:
        * page/ActivityState.h:
        * page/AutoplayEvent.h:
        * page/CrossSiteNavigationDataTransfer.h:
        * page/LayoutMilestone.h:
        * page/TextIndicator.h:
        * platform/PlatformEvent.h:
        * platform/graphics/GraphicsContext.h:

2020-06-17  Clark Wang  <clark_wang@apple.com>

        Added missing orientation attributes to PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=213301

        Reviewed by Chris Dumez.

        Implemented orientation attributes in PannerNode interface, as per spec: https://www.w3.org/TR/webaudio/#pannernode.
        Added FIXME comments for removing velocity later.

        Re-baselined previous tests that now have passing test cases.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::orientation const):
        (WebCore::PannerNode::setOrientation):
        (WebCore::PannerNode::distanceConeGain):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:

2020-06-17  Chris Dumez  <cdumez@apple.com>

        Add experimental feature flag for modern & unprefixed WebAudio API
        https://bugs.webkit.org/show_bug.cgi?id=213268

        Reviewed by Jer Noble.

        Add experimental feature flag for modern & unprefixed WebAudio API,
        off by default.

        This patch split the AudioContext, OfflineAudioContext and PannerNode
        IDL interfaces into their prefixed and unprefixed versions. The
        unprefixed versions are behind the new experimental feature flag that
        is currently off by default but automatically gets turned on in the
        context of layout tests.

        This will give us more flexibility when working on the modern and
        unprefixed WebAudio API as we will not have to worry about backward
        compatibility. This also allows us to easily turn it on or off via
        the experimental features menu in Safari.

        No new tests, rebaselined existing tests.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::create):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::setBuffer):
        (WebCore::AudioBufferSourceNode::setPannerNode):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContextBase::AudioContextBase):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContextBase::document const):
        (WebCore::AudioContextBase::scriptExecutionContext const):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContextBase::AutoLocker::AutoLocker):
        (WebCore::AudioContextBase::AutoLocker::~AutoLocker):
        (WebCore::AudioContext::maxNumberOfChannels):
        (isType):
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioContextState.h: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/AudioContextState.idl: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        (WebCore::AudioNode::deref):
        (WebCore::AudioNode::contextForBindings const):
        * Modules/webaudio/AudioNode.h:
        (WebCore::AudioNode::context):
        (WebCore::AudioNode::context const):
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioNodeOutput.h:
        (WebCore::AudioNodeOutput::context):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::AudioParam):
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valueForContextTime):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
        * Modules/webaudio/AudioScheduledSourceNode.h:
        * Modules/webaudio/AudioSummingJunction.cpp:
        (WebCore::AudioSummingJunction::AudioSummingJunction):
        * Modules/webaudio/AudioSummingJunction.h:
        (WebCore::AudioSummingJunction::context):
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadFilterNode.h:
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::BiquadProcessor):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::create):
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::create):
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.cpp:
        (WebCore::DefaultAudioDestinationNode::DefaultAudioDestinationNode):
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        (WebCore::DelayNode::create):
        * Modules/webaudio/DelayNode.h:
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::DelayProcessor):
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DistanceModelType.h: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/DistanceModelType.idl: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::create):
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::create):
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::create):
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNodeBase::PannerNodeBase):
        (WebCore::PannerNode::PannerNode):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/PanningModelType.h: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/PanningModelType.idl: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::create):
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperNode.h:
        * Modules/webaudio/WebKitAudioContext.cpp: Copied from Source/WebCore/Modules/webaudio/AudioContext.cpp.
        (WebCore::WebKitAudioContext::isSampleRateRangeGood):
        (WebCore::WebKitAudioContext::create):
        (WebCore::WebKitAudioContext::WebKitAudioContext):
        (WebCore::WebKitAudioContext::constructCommon):
        (WebCore::WebKitAudioContext::~WebKitAudioContext):
        (WebCore::WebKitAudioContext::lazyInitialize):
        (WebCore::WebKitAudioContext::clear):
        (WebCore::WebKitAudioContext::uninitialize):
        (WebCore::WebKitAudioContext::isInitialized const):
        (WebCore::WebKitAudioContext::addReaction):
        (WebCore::WebKitAudioContext::setState):
        (WebCore::WebKitAudioContext::stop):
        (WebCore::WebKitAudioContext::suspend):
        (WebCore::WebKitAudioContext::resume):
        (WebCore::WebKitAudioContext::activeDOMObjectName const):
        (WebCore::WebKitAudioContext::hostingDocumentIdentifier const):
        (WebCore::WebKitAudioContext::isSuspended const):
        (WebCore::WebKitAudioContext::visibilityStateChanged):
        (WebCore::WebKitAudioContext::wouldTaintOrigin const):
        (WebCore::WebKitAudioContext::createBuffer):
        (WebCore::WebKitAudioContext::decodeAudioData):
        (WebCore::WebKitAudioContext::createBufferSource):
        (WebCore::WebKitAudioContext::createMediaElementSource):
        (WebCore::WebKitAudioContext::createMediaStreamSource):
        (WebCore::WebKitAudioContext::createMediaStreamDestination):
        (WebCore::WebKitAudioContext::createScriptProcessor):
        (WebCore::WebKitAudioContext::createBiquadFilter):
        (WebCore::WebKitAudioContext::createWaveShaper):
        (WebCore::WebKitAudioContext::createPanner):
        (WebCore::WebKitAudioContext::createConvolver):
        (WebCore::WebKitAudioContext::createDynamicsCompressor):
        (WebCore::WebKitAudioContext::createAnalyser):
        (WebCore::WebKitAudioContext::createGain):
        (WebCore::WebKitAudioContext::createDelay):
        (WebCore::WebKitAudioContext::createChannelSplitter):
        (WebCore::WebKitAudioContext::createChannelMerger):
        (WebCore::WebKitAudioContext::createOscillator):
        (WebCore::WebKitAudioContext::createPeriodicWave):
        (WebCore::WebKitAudioContext::notifyNodeFinishedProcessing):
        (WebCore::WebKitAudioContext::derefFinishedSourceNodes):
        (WebCore::WebKitAudioContext::refNode):
        (WebCore::WebKitAudioContext::derefNode):
        (WebCore::WebKitAudioContext::derefUnfinishedSourceNodes):
        (WebCore::WebKitAudioContext::lock):
        (WebCore::WebKitAudioContext::tryLock):
        (WebCore::WebKitAudioContext::unlock):
        (WebCore::WebKitAudioContext::isAudioThread const):
        (WebCore::WebKitAudioContext::isGraphOwner const):
        (WebCore::WebKitAudioContext::addDeferredFinishDeref):
        (WebCore::WebKitAudioContext::handlePreRenderTasks):
        (WebCore::WebKitAudioContext::handlePostRenderTasks):
        (WebCore::WebKitAudioContext::handleDeferredFinishDerefs):
        (WebCore::WebKitAudioContext::markForDeletion):
        (WebCore::WebKitAudioContext::scheduleNodeDeletion):
        (WebCore::WebKitAudioContext::deleteMarkedNodes):
        (WebCore::WebKitAudioContext::markSummingJunctionDirty):
        (WebCore::WebKitAudioContext::removeMarkedSummingJunction):
        (WebCore::WebKitAudioContext::markAudioNodeOutputDirty):
        (WebCore::WebKitAudioContext::handleDirtyAudioSummingJunctions):
        (WebCore::WebKitAudioContext::handleDirtyAudioNodeOutputs):
        (WebCore::WebKitAudioContext::addAutomaticPullNode):
        (WebCore::WebKitAudioContext::removeAutomaticPullNode):
        (WebCore::WebKitAudioContext::updateAutomaticPullNodes):
        (WebCore::WebKitAudioContext::processAutomaticPullNodes):
        (WebCore::WebKitAudioContext::nodeWillBeginPlayback):
        (WebCore::shouldDocumentAllowWebAudioToAutoPlay):
        (WebCore::WebKitAudioContext::willBeginPlayback):
        (WebCore::WebKitAudioContext::willPausePlayback):
        (WebCore::WebKitAudioContext::startRendering):
        (WebCore::WebKitAudioContext::mediaCanStart):
        (WebCore::WebKitAudioContext::mediaState const):
        (WebCore::WebKitAudioContext::pageMutedStateDidChange):
        (WebCore::WebKitAudioContext::isPlayingAudioDidChange):
        (WebCore::WebKitAudioContext::finishedRendering):
        (WebCore::WebKitAudioContext::dispatchEvent):
        (WebCore::WebKitAudioContext::incrementActiveSourceCount):
        (WebCore::WebKitAudioContext::decrementActiveSourceCount):
        (WebCore::WebKitAudioContext::suspendRendering):
        (WebCore::WebKitAudioContext::resumeRendering):
        (WebCore::WebKitAudioContext::close):
        (WebCore::WebKitAudioContext::suspendPlayback):
        (WebCore::WebKitAudioContext::mayResumePlayback):
        (WebCore::WebKitAudioContext::postTask):
        (WebCore::WebKitAudioContext::origin const):
        (WebCore::WebKitAudioContext::addConsoleMessage):
        (WebCore::WebKitAudioContext::clearPendingActivity):
        (WebCore::WebKitAudioContext::makePendingActivity):
        (WebCore::WebKitAudioContext::logChannel const):
        * Modules/webaudio/WebKitAudioContext.h: Copied from Source/WebCore/Modules/webaudio/AudioContext.h.
        (WebCore::WebKitAudioContext::destination):
        (WebCore::WebKitAudioContext::activeSourceCount const):
        (WebCore::WebKitAudioContext::listener):
        (WebCore::WebKitAudioContext::isClosed const):
        (WebCore::WebKitAudioContext::connectionCount const):
        (WebCore::WebKitAudioContext::audioThread const):
        (WebCore::WebKitAudioContext::maxNumberOfChannels):
        (WebCore::WebKitAudioContext::userGestureRequiredForAudioStart const):
        (WebCore::WebKitAudioContext::pageConsentRequiredForAudioStart const):
        (WebCore::WebKitAudioContext::state const):
        (isType):
        * Modules/webaudio/WebKitAudioContext.idl: Copied from Source/WebCore/Modules/webaudio/AudioContext.idl.
        * Modules/webaudio/WebKitAudioPannerNode.cpp: Copied from Source/WebCore/Modules/webaudio/PannerNode.cpp.
        (WebCore::fixNANs):
        (WebCore::WebKitAudioPannerNode::WebKitAudioPannerNode):
        (WebCore::WebKitAudioPannerNode::~WebKitAudioPannerNode):
        (WebCore::WebKitAudioPannerNode::pullInputs):
        (WebCore::WebKitAudioPannerNode::process):
        (WebCore::WebKitAudioPannerNode::reset):
        (WebCore::WebKitAudioPannerNode::initialize):
        (WebCore::WebKitAudioPannerNode::uninitialize):
        (WebCore::WebKitAudioPannerNode::listener):
        (WebCore::WebKitAudioPannerNode::setPanningModel):
        (WebCore::WebKitAudioPannerNode::distanceModel const):
        (WebCore::WebKitAudioPannerNode::setDistanceModel):
        (WebCore::WebKitAudioPannerNode::getAzimuthElevation):
        (WebCore::WebKitAudioPannerNode::dopplerRate):
        (WebCore::WebKitAudioPannerNode::distanceConeGain):
        (WebCore::WebKitAudioPannerNode::notifyAudioSourcesConnectedToNode):
        * Modules/webaudio/WebKitAudioPannerNode.h: Copied from Source/WebCore/Modules/webaudio/PannerNode.h.
        * Modules/webaudio/WebKitAudioPannerNode.idl: Copied from Source/WebCore/Modules/webaudio/PannerNode.idl.
        * Modules/webaudio/WebKitOfflineAudioContext.cpp: Copied from Source/WebCore/Modules/webaudio/DelayNode.cpp.
        (WebCore::WebKitOfflineAudioContext::WebKitOfflineAudioContext):
        (WebCore::WebKitOfflineAudioContext::create):
        * Modules/webaudio/WebKitOfflineAudioContext.h: Copied from Source/WebCore/Modules/webaudio/DelayNode.h.
        * Modules/webaudio/WebKitOfflineAudioContext.idl: Copied from Source/WebCore/Modules/webaudio/OfflineAudioContext.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventTargetFactory.in:
        * page/Settings.yaml:
        * testing/Internals.cpp:
        (WebCore::Internals::setAudioContextRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Shift-tab in a bullet list in Mail Compose jumps back to Subject field
        https://bugs.webkit.org/show_bug.cgi?id=213320
        <rdar://problem/63831962>

        Reviewed by Tim Horton.

        After the changes in r262051, pressing shift-tab in a bulleted list in Mail compose on macOS no longer triggers
        an outdent command. This is because the default behavior of the "keydown" event will now relinquish focus to the
        embedding client (i.e. the "chrome"). In this case, Mail makes the Subject field above the compose web view the
        first responder.

        This is necessary on iOS, where Mail does not attempt to intercept shift+tab and move focus to the subject line.
        However, Mail on macOS intercepts the keypress event, and either triggers outdent (if the selection is inside a
        list or blockquote) or focuses the Subject line. Since focus is relinquished during "keydown", this logic no
        longer runs, and hitting shift+tab in a list always relinquishes focus.

        To address this, refactor the changes made in r262051 so that we treat the default behavior of the "keypress"
        event (rather than "keydown") as relinquishing focus. See WebKit/ChangeLog for more details.

        Test: WebKit.ShiftTabDoesNotTakeFocusFromEditableWebViewWhenPreventingKeyPress

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

        Remove a call to relinquish focus when handling tab.

        * page/FocusController.h:

2020-06-16  Antoine Quint  <graouts@webkit.org>

        quikr.com: unable to select item from dropdown
        https://bugs.webkit.org/show_bug.cgi?id=213260
        <rdar://problem/58106011>

        Reviewed by Zalan Bujtas.

        Only account for box-shadow when computing the background rect if the clipping element itself has non-zero used width and height.

        Tests: fast/box-shadow/hit-test-box-shadow-and-margin-on-zero-height-clipping-container.html
               fast/box-shadow/hit-test-box-shadow-and-margin-on-zero-width-clipping-container.html
               fast/box-shadow/hit-test-box-shadow-on-zero-height-clipping-container.html
               fast/box-shadow/hit-test-box-shadow-on-zero-width-clipping-container.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::addVisualEffectOverflow):

2020-06-17  David Kilzer  <ddkilzer@apple.com>

        Replace OptionSetTraits/OptionSetValues with EnumTraits/EnumValues
        <https://webkit.org/b/213264>

        Reviewed by Brent Fulgham.

        * page/DragActions.h:
        (EnumTraits<WebCore::DragDestinationAction>):
        - Rename from OptionSetTraits<WebCore::DragDestinationAction>.
        (OptionSetTraits<WebCore::DragOperation>):
        (OptionSetTraits<WebCore::DragSourceAction>):
        - Remove since EnumTraits<> already exist for both.

2020-06-17  Geoffrey Garen  <ggaren@apple.com>

        media/remoteplayback-target-availability.html was a flaky failure after r262904
        https://bugs.webkit.org/show_bug.cgi?id=213294

        Reviewed by Sam Weinig.

        AirPlay availability is a global that depends on a timer (and/or an
        external piece of hardware). Therefore, the first value RemotePlayback
        sees for AirPlay availability, while usually 'unavailable', is sometimes
        'available'. Flaky!

        In this case, media/remoteplayback-prompt.html triggered an AirPlay
        availability check, and then media/remoteplayback-target-availability.html,
        if run in the same process, sometimes saw 'available' as its initial
        availability state.

        Make RemotePlayback's initial availability state deterministic by
        recording availability state at the time we enqueue our task, rather
        than at the time we dequeue our task. (By specification and
        implementation, RemotePlayback's initial availability state is always
        'unavailable', regardless of AirPlay state.) This is OK to do because,
        if the state ever changes after we enqueue our task, we'll get an update
        notification and enqueue a new task.

        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::watchAvailability): Copy the availability
        state when we enqueue our task, and do not update it when we dequeue our
        task. This is the heart of the bug fix.

        Make sure to manually update availability state when we first register
        to monitor availability, since we never got an update notification for
        the current state.

        (WebCore::RemotePlayback::prompt): For consistency with
        watchAvailability, do not update availability state when we dequeue our
        task. (This means that prompting before watching availability is always
        an error, which is fine, and consistent with the spec, which says, "If
        the user agent stops monitoring the list of available remote playback
        devices... It SHOULD also set the availability value for all media
        elements to false.")

        Make sure to manually update availability state when we first register
        to monitor availability, since we never got an update notification for
        the current state.

        (WebCore::RemotePlayback::availabilityChanged): For consistency with
        watchAvailability, do not update availability state when we dequeue our
        task.

        (WebCore::RemotePlayback::updateAvailability): Deleted. We never
        synchronously update our state anymore. All state changes are queued and
        processed in order.
        * Modules/remoteplayback/RemotePlayback.h:

2020-06-17  Rob Buis  <rbuis@igalia.com>

        Image `referrerpolicy` mutations should be considered "relevant mutations"
        https://bugs.webkit.org/show_bug.cgi?id=209970

        Reviewed by Youenn Fablet.

        Make referrerpolicy state changes a relevant mutation [1]. In order to indicate
        that we are dealing with a relevant mutation add an enum to updateFromElement, in
        order to run "update the image data" algorithm [2] in case it is a relevant mutation.

        Tests: imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/relevant-mutations.html
               imported/w3c/web-platform-tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-referrerpolicy-change.sub.html

        [1] https://html.spec.whatwg.org/#reacting-to-dom-mutations:attr-img-referrerpolicy
        [2] https://html.spec.whatwg.org/#when-to-obtain-images

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::attributeChanged):
        * html/HTMLImageElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::updateFromElementIgnoringPreviousError):
        (WebCore::ImageLoader::loadDeferredImage):
        * loader/ImageLoader.h:

2020-06-17  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix internal macOS build after r263157.

        * rendering/RenderThemeMac.mm:

2020-06-17  Sam Weinig  <weinig@apple.com>

        Use constructor operations in WebIDL
        https://bugs.webkit.org/show_bug.cgi?id=201397

        Reviewed by Eric Carlson.
        
        Add support for constructor syntax in WebIDL (https://heycam.github.io/webidl/#idl-constructors)
        
        - [Constructor(...)] extended attributes become constructor(...) operations
        - [JSBuiltinConstructor] becomes [JSBuiltin] constructor(...)
        - [CustomConstructor] becomes [Custom] constructor(...)
        - [ConstructorMayThrowException] becomes [MayThrowException] constructor(...) and can 
          now be unique per-overload
        - [ConstructorCallWith=Foo] becomes [CallWith=Foo] constructor(...) and can now also be
          unique per-overload
          
        This change leaves NamedConstructor as is, but a subsequent change will replace it with the
        specified LegacyFactoryFunction extended attribute. 

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/async-clipboard/ClipboardItem.idl:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.idl:
        * Modules/fetch/FetchHeaders.idl:
        * Modules/fetch/FetchRequest.idl:
        * Modules/fetch/FetchResponse.idl:
        * Modules/gamepad/GamepadEvent.idl:
        * Modules/highlight/HighlightMap.idl:
        * Modules/highlight/HighlightRangeGroup.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/mediarecorder/BlobEvent.idl:
        * Modules/mediarecorder/MediaRecorder.idl:
        * Modules/mediarecorder/MediaRecorderErrorEvent.idl:
        * Modules/mediasession/MediaRemoteControls.idl:
        * Modules/mediasession/MediaSession.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/OverconstrainedError.idl:
        * Modules/mediastream/OverconstrainedErrorEvent.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionIceEvent.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCTrackEvent.idl:
        * Modules/notifications/Notification.idl:
        * Modules/paymentrequest/MerchantValidationEvent.idl:
        * Modules/paymentrequest/PaymentMethodChangeEvent.idl:
        * Modules/paymentrequest/PaymentRequest.idl:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.idl:
        * Modules/pictureinpicture/EnterPictureInPictureEvent.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/streams/ByteLengthQueuingStrategy.idl:
        * Modules/streams/CountQueuingStrategy.idl:
        * Modules/streams/ReadableByteStreamController.idl:
        * Modules/streams/ReadableStream.idl:
        * Modules/streams/ReadableStreamBYOBReader.idl:
        * Modules/streams/ReadableStreamBYOBRequest.idl:
        * Modules/streams/ReadableStreamDefaultController.idl:
        * Modules/streams/ReadableStreamDefaultReader.idl:
        * Modules/streams/WritableStream.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webgpu/GPUOutOfMemoryError.idl:
        * Modules/webgpu/GPUUncapturedErrorEvent.idl:
        * Modules/webgpu/GPUValidationError.idl:
        * Modules/websockets/CloseEvent.idl:
        * Modules/websockets/WebSocket.idl:
        * Modules/webxr/WebXRRigidTransform.idl:
        * Modules/webxr/WebXRWebGLLayer.idl:
        * Modules/webxr/XRInputSourceEvent.idl:
        * Modules/webxr/XRInputSourcesChangeEvent.idl:
        * Modules/webxr/XRReferenceSpaceEvent.idl:
        * Modules/webxr/XRSessionEvent.idl:
        * animation/AnimationPlaybackEvent.idl:
        * animation/DocumentTimeline.idl:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (ShouldGenerateToJSDeclaration):
        (GetFullyQualifiedImplementationCallName):
        (GenerateParametersCheck):
        (GetConstructorTemplateClassName):
        (GenerateConstructorDefinition):
        (GenerateConstructorHelperMethods):
        (HasCustomConstructor):
        (IsConstructable):
        (HasJSBuiltinConstructor):
        (AddJSBuiltinIncludesIfNeeded):
        (IsJSBuiltinConstructor): Deleted.
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/IDLParser.pm:
        (assertExtendedAttributesValidForContext):
        (copyExtendedAttributes):
        (cloneOperation):
        (applyTypedefs):
        (parseInterfaceMember):
        (parseConstructor):
        (parseExtendedAttributeRest):
        (applyMemberList):
        (applyExtendedAttributeList):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
        * bindings/scripts/test/TestClassWithJSBuiltinConstructor.idl:
        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestJSBuiltinConstructor.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestOverloadedConstructors.idl:
        * bindings/scripts/test/TestOverloadedConstructorsWithSequence.idl:
        * bindings/scripts/test/TestPromiseRejectionEvent.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/DOMMatrix.idl:
        * css/DOMMatrixReadOnly.idl:
        * css/FontFace.idl:
        * css/FontFaceSet.idl:
        * css/MediaQueryListEvent.idl:
        * css/WebKitCSSMatrix.idl:
        * css/typedom/TypedOMCSSUnitValue.idl:
        * css/typedom/TypedOMCSSUnparsedValue.idl:
        * dom/AbortController.idl:
        * dom/AnimationEvent.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/ClipboardEvent.idl:
        * dom/Comment.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMException.idl:
        * dom/DOMPoint.idl:
        * dom/DOMPointReadOnly.idl:
        * dom/DOMQuad.idl:
        * dom/DOMRect.idl:
        * dom/DOMRectReadOnly.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DragEvent.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/FocusEvent.idl:
        * dom/HashChangeEvent.idl:
        * dom/InputEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/MouseEvent.idl:
        * dom/MutationObserver.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PointerEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProgressEvent.idl:
        * dom/PromiseRejectionEvent.idl:
        * dom/Range.idl:
        * dom/SecurityPolicyViolationEvent.idl:
        * dom/StaticRange.idl:
        * dom/Text.idl:
        * dom/TextDecoder.idl:
        * dom/TextEncoder.idl:
        * dom/TransitionEvent.idl:
        * dom/UIEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitTransitionEvent.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/File.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMURL.idl:
        * html/HTMLElement.idl:
        * html/HTMLOptionElement.idl:
        * html/ImageData.idl:
        * html/MediaController.idl:
        * html/MediaEncryptedEvent.idl:
        * html/OffscreenCanvas.idl:
        * html/URLSearchParams.idl:
        * html/canvas/Path2D.idl:
        * html/canvas/WebGLContextEvent.idl:
        * html/track/DataCue.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TrackEvent.idl:
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.idl:
        * page/EventSource.idl:
        * page/IntersectionObserver.idl:
        * page/IntersectionObserverEntry.idl:
        * page/PerformanceObserver.idl:
        * page/ResizeObserver.idl:
        * page/UndoItem.idl:
        * page/WebKitPoint.idl:
        * storage/StorageEvent.idl:
        * workers/Worker.idl:
        * workers/service/ExtendableEvent.idl:
        * workers/service/ExtendableMessageEvent.idl:
        * workers/service/FetchEvent.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XSLTProcessor.idl:

2020-06-17  Darryl Pogue  <darryl@dpogue.ca>

        IndexedDB: Support IDBFactory databases method
        https://bugs.webkit.org/show_bug.cgi?id=211043

        Reviewed by Youenn Fablet.

        Add support for fetching the list of IDB database names and versions
        from the IDBServer, and expose the functionality as
        `IDBFactory.prototype.databases()`.

        Spec: https://w3c.github.io/IndexedDB/#dom-idbfactory-databases

        * Headers.cmake:
        * Modules/indexeddb/IDBActiveDOMObject.h:
        (WebCore::IDBActiveDOMObject::performCallbackOnOriginThread):
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.cpp: Added.
        (WebCore::IDBDatabaseNameAndVersionRequest::create):
        (WebCore::IDBDatabaseNameAndVersionRequest::IDBDatabaseNameAndVersionRequest):
        (WebCore::IDBDatabaseNameAndVersionRequest::~IDBDatabaseNameAndVersionRequest):
        (WebCore::IDBDatabaseNameAndVersionRequest::complete):
        (WebCore::IDBDatabaseNameAndVersionRequest::activeDOMObjectName const):
        (WebCore::IDBDatabaseNameAndVersionRequest::virtualHasPendingActivity const):
        (WebCore::IDBDatabaseNameAndVersionRequest::stop):
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.h: Added.
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::databases):
        (WebCore::IDBFactory::getAllDatabaseNames):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::connectionToServerLost):
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::forgetActivityForCurrentThread):
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNames): Deleted.
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionToServer::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames): Deleted.
        (WebCore::IDBClient::IDBConnectionToServer::didGetAllDatabaseNames): Deleted.
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames): Deleted.
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllDatabaseNamesAndVersions):
        (WebCore::IDBServer::IDBServer::getAllDatabaseNames): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameAndVersionFromFile):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromFile): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/shared/IDBDatabaseNameAndVersion.h: Added.
        (WebCore::IDBDatabaseNameAndVersion::encode const):
        (WebCore::IDBDatabaseNameAndVersion::decode):
        (WebCore::IDBDatabaseNameAndVersion::isolatedCopy const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        * loader/EmptyClients.cpp:

2020-06-17  Sam Weinig  <weinig@apple.com>

        [WPT] infrastructure/assumptions/html-elements.html fails due to changes in style when all: initial is used
        https://bugs.webkit.org/show_bug.cgi?id=213171

        Reviewed by Antti Koivisto.

        Update existing test results that now pass.

        * css/CSSProperties.json:
        Use initialStrokeColor (the default) rather than hardcoding the incorrect currentColor. The spec (and initialStrokeColor)
        say this should be transparent.

        * style/StyleBuilderCustom.h:
        (WebCore::Style::ApplyPropertyBorderImageModifier::applyInitialValue):
        Match the mask image NinePieceImage constructor, and set fill to true for mask image slices.

2020-06-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][Float] Move float avoiders' final position compute next to when the static position is computed
        https://bugs.webkit.org/show_bug.cgi?id=213250

        Reviewed by Antti Koivisto.

        Now that the float avoider's final position has no dependecy on the computed height, we can
        move it all the way up, next to where we computed the static position.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForAncestors): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:

2020-06-17  Antoine Quint  <graouts@webkit.org>

        [Modern Media Controls] CSS "cursor" property shoud be respected in media controls shadow root
        https://bugs.webkit.org/show_bug.cgi?id=213295
        <rdar://problem/61911638>

        Reviewed by Timothy Hatcher.

        Allow the "cursor" property to be inherited in the media controls shadow root, but still overriden
        for interactive objects in the media controls as well as placard text.

        Test: media/modern-media-controls/css/cursor.html

        * Modules/modern-media-controls/controls/controls-bar.css:
        (.controls-bar):
        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls-container):
        (.media-controls):
        * Modules/modern-media-controls/controls/placard.css:
        (.placard .title,):

2020-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] Enable layout tests on more platforms
        https://bugs.webkit.org/show_bug.cgi?id=212955
        <rdar://problem/64174156>

        Reviewed by Alex Christensen.

        Added runtime checks to determine the Apple Pay API version when installments are enabled.

        Enabled tests in http/tests/ssl/applepay on iOS.

        * Modules/applepay/ApplePayInstallmentConfiguration.idl:
        * Modules/applepay/ApplePayInstallmentConfigurationWebCore.h:
        * Modules/applepay/ApplePayInstallmentItem.h:
        * Modules/applepay/ApplePayInstallmentItem.idl:
        * Modules/applepay/ApplePayInstallmentItemType.h:
        * Modules/applepay/ApplePayInstallmentItemType.idl:
        * Modules/applepay/ApplePayInstallmentRetailChannel.h:
        * Modules/applepay/ApplePayInstallmentRetailChannel.idl: Removed uses of
        APPLE_PAY_INSTALLMENT_IDENTIFIERS and APPLE_PAY_INSTALLMENT_ITEMS (or replaced with
        APPLE_PAY_INSTALLMENTS).

        * Modules/applepay/PaymentAPIVersion.h:
        * Modules/applepay/cocoa/PaymentAPIVersionCocoa.mm:
        (WebCore::PaymentAPIVersion::current): Moved the computation of current API version from
        PaymentCoordinatorClient::supportsVersion to here. Added runtime checks to determine the
        level of PassKit installments support since we don't have enough information to tell at
        compile time.

        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion): Changed to call
        PaymentAPIVersion::current.

        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        (WebCore::makeNSArrayElement):
        (WebCore::createPlatformConfiguration):
        (WebCore::PaymentInstallmentConfiguration::create):
        (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const): Removed
        uses of HAVE_PASSKIT_INSTALLMENT_ITEMS and HAVE_PASSKIT_INSTALLMENT_IDENTIFIERS. Used
        runtime checks to determine support for PKPaymentInstallmentConfiguration and
        PKPaymentInstallmentItem.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj: Added source files for PaymentAPIVersion.

2020-06-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove redundant mapping functions
        https://bugs.webkit.org/show_bug.cgi?id=213249

        Reviewed by Antti Koivisto.

        It's incorrect to map the entire display box when the height is no even computed yet.

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForNonFloatingFloatAvoider const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::append):
        (WebCore::Layout::FloatingContext::absoluteDisplayBoxCoordinates const):
        (WebCore::Layout::FloatingContext::mapTopLeftToFloatingStateRoot const):
        (WebCore::Layout::FloatingContext::mapToFloatingStateRoot const): Deleted.
        (WebCore::Layout::FloatingContext::mapTopToFloatingStateRoot const): Deleted.
        * layout/floats/FloatingContext.h:

2020-06-17  Zalan Bujtas  <zalan@apple.com>

        [LFC]Floats] Cleanup FloatAvoider interface
        https://bugs.webkit.org/show_bug.cgi?id=213195

        Reviewed by Antti Koivisto.

        Remove redundant functions/parameters.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::topLeftInContainingBlock const): Deleted.
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::findAvailablePosition):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForNonFloatingFloatAvoider const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const): Deleted.
        (WebCore::Layout::FloatingContext::findPositionForFloatBox const): Deleted.
        * layout/floats/FloatingContext.h:

2020-06-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Remove FloatBox class
        https://bugs.webkit.org/show_bug.cgi?id=213184

        Reviewed by Antti Koivisto.

        Apparently the only difference between a non-floating float avoider (regular formatting context root)
        and a float box is that while float boxes intersect their margin box, simple float avoiders use their border box.
        We can do that without subclassing FloatAvoider.

        This patch is also in preparation for moving "computeFloatPosition" next to the static position computation when
        the height value is not computed yet. So instead of passing in the display box, let's just pass in top/left and width.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::setHorizontalPosition):
        (WebCore::Layout::FloatAvoider::setVerticalPosition):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        (WebCore::Layout::FloatAvoider::overflowsContainingBlock const):
        (WebCore::Layout::FloatAvoider::topLeftInContainingBlock const):
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints): Deleted.
        (WebCore::Layout::FloatAvoider::setVerticalConstraint): Deleted.
        (WebCore::Layout::FloatAvoider::horizontalPositionCandidate): Deleted.
        (WebCore::Layout::FloatAvoider::verticalPositionCandidate): Deleted.
        (WebCore::Layout::FloatAvoider::rectInContainingBlock const): Deleted.
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::resetHorizontalPosition):
        (WebCore::Layout::FloatAvoider::isLeftAligned const):
        (WebCore::Layout::FloatAvoider::borderBoxWidth const):
        (WebCore::Layout::FloatAvoider::marginBefore const):
        (WebCore::Layout::FloatAvoider::marginAfter const):
        (WebCore::Layout::FloatAvoider::marginStart const):
        (WebCore::Layout::FloatAvoider::marginEnd const):
        (WebCore::Layout::FloatAvoider::marginBoxWidth const):
        (WebCore::Layout::FloatAvoider::isFloatingBox const):
        (WebCore::Layout::FloatAvoider::layoutBox const):
        (WebCore::Layout::FloatAvoider::top const):
        (WebCore::Layout::FloatAvoider::left const):
        (WebCore::Layout::FloatAvoider::right const):
        (WebCore::Layout::FloatAvoider::rect const): Deleted.
        (WebCore::Layout::FloatAvoider::displayBox const): Deleted.
        (WebCore::Layout::FloatAvoider::displayBox): Deleted.
        * layout/floats/FloatBox.cpp: Removed.
        * layout/floats/FloatBox.h: Removed.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::positionForFormattingContextRoot const):
        (WebCore::Layout::findAvailablePosition):
        (WebCore::Layout::FloatingContext::findPositionForFloatBox const):
        (WebCore::Layout::FloatingContext::findPositionForFormattingContextRoot const):
        (WebCore::Layout::FloatPair::intersects const):
        (WebCore::Layout::FloatPair::horizontalConstraints const):
        * layout/floats/FloatingContext.h:

2020-06-17  Youenn Fablet  <youenn@apple.com>

        Make ReadableStream robust against user code
        https://bugs.webkit.org/show_bug.cgi?id=212915
        <rdar://problem/64133221>

        Reviewed by Darin Adler.

        Create tee source with private slots instead of public ones.
        When source has one of this private slot, we directly go to the creation of a ReadableStream.
        Covered by existing tests.

        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        * Modules/streams/ReadableStreamInternals.js:
        (setupReadableStreamDefaultController):
        (readableStreamTee):
        (readableStreamDefaultControllerCallPullIfNeeded):
        (readableStreamDefaultControllerCancel):
        * Modules/streams/StreamInternals.js:
        (promiseInvokeOrNoopMethodNoCatch):
        (promiseInvokeOrNoopNoCatch):
        (promiseInvokeOrNoopMethod):
        (promiseInvokeOrNoop):
        * bindings/js/WebCoreBuiltinNames.h:

2020-06-17  Antti Koivisto  <antti@apple.com>

        Fix spelling of evaluteDynamicMediaQueryRules
        https://bugs.webkit.org/show_bug.cgi?id=213287

        Unreviewed.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRulesFromSheet):
        (WebCore::Style::RuleSet::evaluateDynamicMediaQueryRules):
        (WebCore::Style::RuleSet::evaluteDynamicMediaQueryRules): Deleted.
        * style/RuleSet.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::evaluateDynamicMediaQueries):
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::evaluateDynamicMediaQueryRules):
        (WebCore::Style::ScopeRuleSets::evaluteDynamicMediaQueryRules): Deleted.
        * style/StyleScopeRuleSets.h:

2020-06-17  Diego Pino Garcia  <dpino@igalia.com>

        REGRESSION(r262994): [GTK] More than 100 tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=213173

        Unreviewed gardening.

        Add default initialization for WebCore::PluginInfo::clientLoadPolicy and
        WebCore::PluginInfo::isApplicationPlugin.

        * plugins/PluginData.h:

2020-06-16  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r255037): Broken position while comparing watch bands on www.apple.com/shop/studio/apple-watch
        https://bugs.webkit.org/show_bug.cgi?id=213282

        Reviewed by Antti Koivisto.

        Test: fast/scrolling/ios/user-then-programmatic-scroll.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::applyLayerPositionsAfterCommit):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::setNeedsApplyLayerPositionsAfterCommit):
        (WebCore::ScrollingTree::didScrollByDelegatedScrolling): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::wasScrolledByDelegatedScrolling):

2020-06-16  Zalan Bujtas  <zalan@apple.com>

        [Subpixel] Replaced content bleeds over content box when border radius is set
        https://bugs.webkit.org/show_bug.cgi?id=213275
        <rdar://problem/64320995>

        Reviewed by Simon Fraser.

        Snap the border to device pixels on the replaced box when border radius is set.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):

2020-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should not re-extract elements whose children have been manipulated
        https://bugs.webkit.org/show_bug.cgi?id=213276
        <rdar://problem/64193446>

        Reviewed by Tim Horton.

        After an element has undergone text manipulation, we have a mechanism for not extracting that element again,
        if the element is later hidden and shown, or relocated in the DOM. This works by adding the inserted text
        manipulation node to a weak element map (`m_manipulatedElements`) if the inserted node is an element. However,
        this mechanism is bypassed in the case where text nodes are inserted, since these child nodes are not elements.
        This means that if the element containing this manipulated text is hidden and later shown, we'll attempt to re-
        extract its contents, which is problematic for text manipulation clients.

        To mitigate this, when inserting content during text manipulation, if a new parent of the inserted content
        contains _only_ manipulated child nodes, then avoid trying to manipulate it in the future by adding it to
        `m_manipulatedElements`.

        Test: TextManipulation.CompleteTextManipulationAvoidExtractingManipulatedTextAfterManipulation

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::updateInsertions):

        Drive-by style fix: add a space after the assignment operator.

        (WebCore::TextManipulationController::replace):

        If the parent node that we're inserting a text manipulation node underneath has only 1 child (i.e. the node that
        we've just inserted), then flag it as having only manipulated children. This parent may be un-flagged later when
        applying `NodeInsertion`s, if the `NodeInsertion`'s child has not been manipulated.

2020-06-16  Andy Estes  <aestes@apple.com>

        FileListCreator should only be used for resolving directories
        https://bugs.webkit.org/show_bug.cgi?id=213259
        <rdar://problem/64375709>

        Reviewed by David Kilzer.

        Depending on whether directories should be resolved, FileListCreator::create would either
        synchronously execute its completion handler then return nullptr or asynchronously dispatch
        its completion handler then return a non-null RefPtr. Interfaces with sometimes-synchronous
        callbacks can be hard to use correctly; e.g., r262962 fixes a problem where
        FileInputType::m_fileListCreator was being modified in an unexpected order.

        This patch makes the interface between FileInputType and FileListCreator less error-prone
        and more explicit by renaming FileListCreator to DirectoryFileListCreator, making its job
        solely to create directory FileLists on a background queue, and giving it an explicit start
        member function. For non-directories, FileInputType::filesChosen now bypasses
        DirectoryFileListCreator and directly converts from Vector<FileChooserFileInfo> to FileList.

        Covered by existing tests.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * html/DirectoryFileListCreator.cpp: Renamed from html/FileListCreator.cpp.
        (WebCore::createFileList): Removed the template and ShouldResolveDirectories parameter.
        (WebCore::DirectoryFileListCreator::DirectoryFileListCreator): Moved the work queue
        dispatching to DirectoryFileListCreator::start.
        (WebCore::DirectoryFileListCreator::start): Added; moved the work queue dispatching here
        from the ctor.

        * html/DirectoryFileListCreator.h: Renamed from html/FileListCreator.h.
        (WebCore::DirectoryFileListCreator::create): Stopped performing non-directory creation and
        changed the return value back to Ref<>.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesChosen): Moved most of the work done in the FileListCreator
        completion handler to didCreateFileList. When !FileInputType::allowsDirectories, used
        Vector::map to convert paths to a Vector<Ref<File>>, used that to create a FileList, then
        called didCreateFileList. Otherwise, created and started a DirectoryFileListCreator that
        calls didCreateFileList in its completion handler.
        (WebCore::FileInputType::didCreateFileList): Added; sets the new file list and icon and
        clears m_directoryFileListCreator.

        * html/FileInputType.h:

2020-06-16  Dean Jackson  <dino@apple.com>

        REGRESSION (r262643): DumpRenderTree at com.apple.WebCore: WebCore::Document::prepareCanvasesForDisplayIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=213221
        rdar://64260400

        Reviewed by Simon Fraser.

        A Document could still be holding a pointer to an HTMLCanvasElement after the
        canvas had been deleted because the CanvasObserver protocol was disconnected
        too early. The fix is to explicitly clear the canvas from the Document as it
        stops observing.

        Test: webgl/preparation-removed-from-document.html

        * dom/Document.cpp:
        (WebCore::Document::prepareCanvasesForDisplayIfNeeded): Copy the HashSet to a Vector
        just in case something weird happens to the set during iteration.
        (WebCore::Document::clearCanvasPreparation): Remove the canvas from the list of
        of elements that need preparation.
        * dom/Document.h: Add the new clearCanvasPreparation method.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement): Clear the document.
        (WebCore::HTMLCanvasElement::didMoveToNewDocument): Ditto.
        (WebCore::HTMLCanvasElement::removedFromAncestor): Ditto.

2020-06-16  Dean Jackson  <dino@apple.com>

        [WebGL] Lose the context if IOSurface allocation fails
        https://bugs.webkit.org/show_bug.cgi?id=213265
        <rdar://problem/64424742>

        Reviewed by Simon Fraser.

        If we are unable to allocate the backing store for the WebGL
        content, we should immediately lose the context.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs): Lose the context if the
        call to allocateIOSurfaceBackingStore didn't work.
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::allocateIOSurfaceBackingStore):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]): Return a boolean
        so that we can detect if the allocation failed.
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGLBase.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs):

2020-06-16  Eric Carlson  <eric.carlson@apple.com>

        Don't claim to support fullscreen mode unless fullScreenEnabled setting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=213142
        <rdar://63753327>

        Reviewed by Jer Noble.

        Test: media/video-supports-fullscreen.html

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::supportsFullscreen const): Check settings.fullScreenEnabled.

2020-06-16  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility/textarea-selected-text-range.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=213257

        Reviewed by Chris Fleizach.

        accessibility/textarea-selected-text-range.html.

        Implementation of AXIsolatedObject::selectedTextRange.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::selectedTextRange const):
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-06-16  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: replace completion handler with a function in interception.
        https://bugs.webkit.org/show_bug.cgi?id=213252

        Reviewed by Devin Rousso.

        Don't use a `CompletionHandler` as it asserts that it's been called when it's destroyed.
        Both `Network.interceptRequestWithResponse` and `Network.interceptRequestWithError` essentially
        "skip" the network pipeline, so the `CompletionHandler` is not invoked for those commands.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::interceptRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::interceptRequest):
        * inspector/InspectorInstrumentationWebKit.cpp:
        (WebCore::InspectorInstrumentationWebKit::interceptRequestInternal):
        * inspector/InspectorInstrumentationWebKit.h:
        (WebCore::InspectorInstrumentationWebKit::interceptRequest):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::interceptRequest):
        (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
        (WebCore::InspectorNetworkAgent::interceptRequestWithError):
        * inspector/agents/InspectorNetworkAgent.h:
        (WebCore::InspectorNetworkAgent::PendingInterceptRequest::PendingInterceptRequest):
        (WebCore::InspectorNetworkAgent::PendingInterceptRequest::continueAsHandled):

2020-06-16  Clark Wang  <clark_wang@apple.com>

        Added missing position attributes to PannerNode
        https://bugs.webkit.org/show_bug.cgi?id=213151

        Reviewed by Chris Dumez.

        Implemented position attributes in PannerNode interface, as per spec: 
        https://www.w3.org/TR/webaudio/#pannernode.

        Re-baselined tests previous tests that either now pass, or fail at a further stage than before.

        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::position const):
        (WebCore::PannerNode::setPosition):
        (WebCore::PannerNode::getAzimuthElevation):
        (WebCore::PannerNode::dopplerRate):
        (WebCore::PannerNode::distanceConeGain):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PannerNode.idl:

2020-06-16  Mark Lam  <mark.lam@apple.com>

        Make Options::useJIT() be the canonical source of truth on whether we should use the JIT.
        https://bugs.webkit.org/show_bug.cgi?id=212556
        <rdar://problem/63780436>

        Reviewed by Saam Barati.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::compileSelector):

2020-06-16  Sam Weinig  <weinig@apple.com>

        [WPT] form.action does not return document.url when unset (part of https://wpt.live/html/dom/reflection-forms.html)
        https://bugs.webkit.org/show_bug.cgi?id=213205

        Reviewed by David Kilzer.

        Update existing test results that now pass.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formAction const):
        Call document.completeURL() directly rather than getURLAttribute() as that 
        will cause the attribute to have to be looked up again.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::action const):
        Match HTMLFormControlElement::formAction (and the spec) and return the document's
        url if the attribute value is missing.

        * html/HTMLFormElement.idl:
        Remove Reflect/URL extended attributes, as we need custom handling for the empty
        case.

2020-06-16  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r262994): Web Inspector is killed when context-clicking anywhere
        <https://webkit.org/b/213224>
        <rdar://problem/64383320>

        Reviewed by Darin Adler.

        Test: TestWebKitAPI.WebCore.ContextMenuAction_IsValidEnum

        The issue is that using WTF::isValidEnum() with
        WTF::EnumTraits<WebCore::ContextMenuAction> didn't explicitly
        list all 1000 custom tags, or any application tags (besides the
        base), so the unlisted tags were marked as invalid during enum
        validation.

        The fix is to define a custom validation function for
        WebCore::ContextMenuAction enum values.

        * platform/ContextMenuItem.h:
        (WTF::isValidEnum):

        * platform/ContextMenuItem.cpp:
        (WebCore::isValidContextMenuAction): Add.
        - Validates CustomTag and ApplicationTag ranges.
        * platform/ContextMenuItem.h:
        (WebCore::isValidContextMenuAction): Add declaration.
        (WTF::EnumTraits<WebCore::ContextMenuAction>): Delete.
        (WTF::HasCustomIsValidEnum<WebCore::ContextMenuAction>): Add.
        (WTF::isValidEnum): Add.
        - Call WebCore::isValidContextMenuAction() to validate all enum
          values.

2020-06-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Visual Studio] CSSPropertyNames.h is generated twice in WebCore.vcxproj and WebCore_CopyPrivateHeaders.vcxproj
        https://bugs.webkit.org/show_bug.cgi?id=213226

        Reviewed by Don Olmstead.

        WebCore_CopyPrivateHeaders needs to have a direct or indirect
        dependency of WebCore target for CMake Visual Studio generator to
        eliminate duplicated custom commands.

        * CMakeLists.txt: Added add_dependencies(WebCore_CopyPrivateHeaders WebCore).

2020-06-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should handle nested item boundary elements
        https://bugs.webkit.org/show_bug.cgi?id=213251
        <rdar://problem/63371514>

        Reviewed by Sihui Liu.

        In the case where there are nested item boundary elements (e.g. block-level list items or links), text
        manipulation will currently only observe that we've crossed the top-level item boundary, and proceed to extract
        text from the nested boundary elements as tokens in the same item.

        Address this by maintaining a stack of boundary elements rather than just a single item. Additionally, create
        and add an item when crossing into a new item boundary, rather than only when we exit a boundary; this handles
        the case where we descend from one boundary element into another boundary element that is a child.

        Test: TextManipulation.StartTextManipulationTreatsNestedInlineBlockListItemsAndLinksAsParagraphs

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

2020-06-16  Youenn Fablet  <youenn@apple.com>

        Loads triggered by an opaque stylesheet should not be visible to service workers
        https://bugs.webkit.org/show_bug.cgi?id=213246

        Reviewed by Alex Christensen.

        Test: http/wpt/service-workers/no-cors-css-with-subresources.https.html

        * loader/ResourceLoaderOptions.h:
        Move it to boolean

2020-06-16  Chris Fleizach  <cfleizach@apple.com>

        AX: <address> element should no longer map to ARIA `contentinfo` role
        https://bugs.webkit.org/show_bug.cgi?id=212617
        <rdar://problem/63848604>

        Reviewed by Joanmarie Diggs.

        Change the mapping of <address> to be a basic group. Update tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2020-06-16  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r263079.

        Broke Internal builds.

        Reverted changeset:

        "IndexedDB: Support IDBFactory databases method"
        https://bugs.webkit.org/show_bug.cgi?id=211043
        https://trac.webkit.org/changeset/263079

2020-06-16  Antti Koivisto  <antti@apple.com>

        O(n^2) behavior in media query resolution
        https://bugs.webkit.org/show_bug.cgi?id=213243

        Reviewed by Anders Carlsson.

        We were traversing all rules in a RuleSet inside a loop over all media queries that change value.
        This becomes problematic when you have thousands of media queries.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::evaluteDynamicMediaQueryRules):

        Instead collect the rule positions that need flipping into a map and then traverse only once
        to do the actual flipping.

        Longer term we should maintain a data stucture that can map directly from a position to RuleDatas.
        This will require some data structure rethink so this patch takes a simpler approach.

        (WebCore::Style::RuleSet::MediaQueryCollector::pop):
        * style/RuleSet.h:

2020-06-16  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Collecting screen properties in the UI process introduced a Safari launch time regression.
        https://bugs.webkit.org/show_bug.cgi?id=213217
        <rdar://problem/64374461>

        Reviewed by Brent Fulgham.

        Calling collectScreenProperties() in WebProcessPool::platformInitializeWebProcess() introduced a Safari launch time regression on iOS.
        It turns out that calling screenIsMonochrome on iOS is expensive, but this call can still be done in the WebContent process, since there
        are no sandbox restrictions making that call fail in the WebContent process. Call this function in the WebContent process instead of in
        the UI process.

        No new tests, since this change should not introduce a change in behavior. It goes back to calling the screenIsMonochrome function in the
        WebContent process.

        * platform/ScreenProperties.h:
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenIsMonochrome):
        (WebCore::collectScreenProperties):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):

2020-06-16  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] Create CDMProxyFactory
        https://bugs.webkit.org/show_bug.cgi?id=212695

        Reviewed by Youenn Fablet.

        Currently in the GStreamer port we have the CDMProxy cabled in the
        player private and set to the instance. Setting this too late can
        create key sync issues that are worked around. This does not seem
        to be needed because it can be created in the constructor from a
        CDMProxyFactory if we just use the key system that we already
        have.

        This patch declares a CDMProxyFactory that is used in the
        CDMInstanceProxy to instantiate the proper CDMProxy in its
        constructor.

        CDMProxyFactoryClearKey is created and added to the GStreamer
        platform CDMProxyFactories.

        Initializing too fast creates flakyness in several ClearKey tests
        because of asking for protected memory so we need to initialize it
        in a lazy way.

        No new tests, just a rework.

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMProxyFactory::registerFactory):
        (WebCore::CDMProxyFactory::unregisterFactory):
        (WebCore::CDMProxyFactory::createCDMProxyForKeySystem):
        (WebCore::CDMProxyFactory::platformRegisterFactories):
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::CDMProxyFactory::~CDMProxyFactory):
        (WebCore::CDMInstanceProxy::CDMInstanceProxy):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::CDMInstanceClearKey):
        (WebCore::CDMInstanceClearKey::keySystem const):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::cdmInstanceAttached):
        * platform/graphics/gstreamer/eme/CDMFactoryGStreamer.cpp:
        (WebCore::CDMProxyFactory::platformRegisterFactories):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.cpp:
        (WebCore::CDMProxyFactoryClearKey::singleton):
        (WebCore::CDMProxyFactoryClearKey::createCDMProxy):
        (WebCore::CDMProxyFactoryClearKey::supportsKeySystem):
        * platform/graphics/gstreamer/eme/CDMProxyClearKey.h:

2020-06-16  youenn fablet  <youenn@apple.com>

        Make sure MediaRecorder.requestData returns data with the new writer backend
        https://bugs.webkit.org/show_bug.cgi?id=206929

        Reviewed by Darin Adler.

        Test: http/wpt/mediarecorder/MediaRecorder-requestData.html

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::fetchData):
        Flush data whenever calling fetchData.

2020-06-16  Darryl Pogue  <darryl@dpogue.ca>

        IndexedDB: Support IDBFactory databases method
        https://bugs.webkit.org/show_bug.cgi?id=211043

        Reviewed by Youenn Fablet.

        Add support for fetching the list of IDB database names and versions
        from the IDBServer, and expose the functionality as
        `IDBFactory.prototype.databases()`.

        Spec: https://w3c.github.io/IndexedDB/#dom-idbfactory-databases

        * Headers.cmake:
        * Modules/indexeddb/IDBActiveDOMObject.h:
        (WebCore::IDBActiveDOMObject::performCallbackOnOriginThread):
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.cpp: Added.
        (WebCore::IDBDatabaseNameAndVersionRequest::create):
        (WebCore::IDBDatabaseNameAndVersionRequest::IDBDatabaseNameAndVersionRequest):
        (WebCore::IDBDatabaseNameAndVersionRequest::~IDBDatabaseNameAndVersionRequest):
        (WebCore::IDBDatabaseNameAndVersionRequest::complete):
        (WebCore::IDBDatabaseNameAndVersionRequest::activeDOMObjectName const):
        (WebCore::IDBDatabaseNameAndVersionRequest::virtualHasPendingActivity const):
        (WebCore::IDBDatabaseNameAndVersionRequest::stop):
        * Modules/indexeddb/IDBDatabaseNameAndVersionRequest.h: Added.
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::databases):
        (WebCore::IDBFactory::getAllDatabaseNames):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::connectionToServerLost):
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionProxy::forgetActivityForCurrentThread):
        (WebCore::IDBClient::IDBConnectionProxy::getAllDatabaseNames): Deleted.
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionToServer::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames): Deleted.
        (WebCore::IDBClient::IDBConnectionToServer::didGetAllDatabaseNames): Deleted.
        * Modules/indexeddb/client/IDBConnectionToServer.h:
        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNamesAndVersions):
        (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames): Deleted.
        * Modules/indexeddb/server/IDBConnectionToClient.h:
        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::getAllDatabaseNamesAndVersions):
        (WebCore::IDBServer::IDBServer::getAllDatabaseNames): Deleted.
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameAndVersionFromFile):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromFile): Deleted.
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/shared/IDBDatabaseNameAndVersion.h: Added.
        (WebCore::IDBDatabaseNameAndVersion::encode const):
        (WebCore::IDBDatabaseNameAndVersion::decode):
        (WebCore::IDBDatabaseNameAndVersion::isolatedCopy const):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        * loader/EmptyClients.cpp:

2020-06-15  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Rename GC3D to GCGL.
        https://bugs.webkit.org/show_bug.cgi?id=211117

        Reviewed by Fujii Hironori.

        GraphicsContext3D has been renamed to GraphicsContextGL after r254103 but some files
        still follow the old name. This change reflects the new name to them for consistency.

        No new tests because of no new functionalities.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/texmap/NicosiaGCGLANGLELayer.cpp: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGC3DANGLELayer.cpp.
        (Nicosia::GCGLANGLELayer::ANGLEContext::errorString):
        (Nicosia::GCGLANGLELayer::ANGLEContext::lastErrorString):
        (Nicosia::GCGLANGLELayer::ANGLEContext::createContext):
        (Nicosia::GCGLANGLELayer::ANGLEContext::ANGLEContext):
        (Nicosia::GCGLANGLELayer::ANGLEContext::~ANGLEContext):
        (Nicosia::GCGLANGLELayer::ANGLEContext::makeContextCurrent):
        (Nicosia::GCGLANGLELayer::ANGLEContext::platformContext const):
        (Nicosia::GCGLANGLELayer::GCGLANGLELayer):
        (Nicosia::GCGLANGLELayer::~GCGLANGLELayer):
        (Nicosia::GCGLANGLELayer::makeContextCurrent):
        (Nicosia::GCGLANGLELayer::platformContext const):
        * platform/graphics/nicosia/texmap/NicosiaGCGLANGLELayer.h: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGC3DANGLELayer.h.
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.cpp: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGC3DLayer.cpp.
        (Nicosia::GCGLLayer::GCGLLayer):
        (Nicosia::GCGLLayer::~GCGLLayer):
        (Nicosia::GCGLLayer::makeContextCurrent):
        (Nicosia::GCGLLayer::platformContext const):
        (Nicosia::GCGLLayer::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaGCGLLayer.h: Renamed from Source/WebCore/platform/graphics/nicosia/texmap/NicosiaGC3DLayer.h.
        (Nicosia::GCGLLayer::contentLayer const):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/texmap/GraphicsContextGLTextureMapper.cpp:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        * platform/graphics/texmap/TextureMapperGCGLPlatformLayer.cpp: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp.
        (WebCore::TextureMapperGCGLPlatformLayer::TextureMapperGCGLPlatformLayer):
        (WebCore::TextureMapperGCGLPlatformLayer::~TextureMapperGCGLPlatformLayer):
        (WebCore::TextureMapperGCGLPlatformLayer::makeContextCurrent):
        (WebCore::TextureMapperGCGLPlatformLayer::platformContext const):
        (WebCore::TextureMapperGCGLPlatformLayer::proxy const):
        (WebCore::TextureMapperGCGLPlatformLayer::swapBuffersIfNeeded):
        (WebCore::TextureMapperGCGLPlatformLayer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperGCGLPlatformLayer.h: Renamed from Source/WebCore/platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h.

2020-06-15  Megan Gardner  <megan_gardner@apple.com>

        Text form controls can scroll by 1px when value is the same length as size. No scrolling should happen.
        https://bugs.webkit.org/show_bug.cgi?id=212856
        <rdar://problem/63541707>

        Reviewed by Zalan Bujtas.

        We were only adding caret width to an input when determining if the input should start to be scrolled,
        but that additional width was not included in the initial calculation, which could result in fields being
        scrollable by 1px when they had the same number of fixed-width characters as the size of the field. This was
        incorrect, and caused fast/forms/password-scrolled-after-caps-lock-toggled.html to fail when the default size
        of the security dots increased to be the same as the average character width. Adding the caret width when the
        size of the input field is calculated brings consistency to when an input field is scrollable.

        Tested by fixing:
        fast/forms/password-scrolled-after-caps-lock-toggled.html
        
        And rebasing:
        * editing/editable-region/overflow-scroll-text-field-and-contenteditable-expected.txt:
        * editing/editable-region/search-field-basic-expected.txt:
        * editing/editable-region/text-field-basic-expected.txt:
        * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly-expected.html:
        * fast/forms/auto-fill-button/hide-auto-fill-button-when-input-becomes-readonly.html:
        * fast/forms/auto-fill-button/input-credit-card-auto-fill-button-expected.txt:
        * fast/forms/fieldset/fieldset-elements-htmlcollection-expected.txt:
        * fast/forms/fieldset/fieldset-elements-htmlcollection.html:
        * fast/forms/search/search-cancel-button-visible-when-input-becomes-disabled-expected.html:
        * fast/forms/search/search-cancel-button-visible-when-input-becomes-disabled.html:
        * fast/forms/search/search-cancel-button-visible-when-input-becomes-readonly-expected.html:
        * fast/forms/search/search-cancel-button-visible-when-input-becomes-readonly.html:
        * platform/ios-simulator/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt:
        * platform/ios-simulator/fast/forms/auto-fill-button/input-credit-card-auto-fill-button-expected.txt:
        * platform/ios-simulator/fast/forms/auto-fill-button/input-strong-password-viewable-expected.txt:
        * platform/ios-simulator/fast/forms/datalist/datalist-searchinput-appearance-expected.txt:
        * platform/ios-simulator/fast/forms/datalist/datalist-textinput-appearance-expected.txt:
        * platform/ios-wk2/editing/input/caret-at-the-edge-of-contenteditable-expected.txt:
        * platform/ios-wk2/editing/input/caret-at-the-edge-of-input-expected.txt:
        * platform/ios-wk2/editing/inserting/before-after-input-element-expected.txt:
        * platform/ios-wk2/editing/pasteboard/input-field-1-expected.txt:
        * platform/ios-wk2/editing/selection/4895428-3-expected.txt:
        * platform/ios-wk2/editing/selection/drag-select-1-expected.txt:
        * platform/ios-wk2/editing/selection/select-from-textfield-outwards-expected.txt:
        * platform/ios-wk2/fast/forms/input-appearance-preventDefault-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-click-inside-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-click-outside-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-double-click-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-drag-down-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-option-delete-expected.txt:
        * platform/ios-wk2/fast/forms/input-text-self-emptying-click-expected.txt:
        * platform/ios-wk2/fast/forms/tabbing-input-iframe-expected.txt:
        * platform/ios-wk2/fast/forms/textfield-outline-expected.txt:
        * platform/ios-wk2/fast/overflow/overflow-focus-ring-expected.txt:
        * platform/ios-wk2/fast/repaint/placeholder-after-caps-lock-hidden-expected.txt:
        * platform/ios-wk2/fast/transforms/transformed-focused-text-input-expected.txt:
        * platform/ios/editing/pasteboard/4806874-expected.txt:
        * platform/ios/editing/selection/3690703-2-expected.txt:
        * platform/ios/editing/selection/3690703-expected.txt:
        * platform/ios/editing/selection/3690719-expected.txt:
        * platform/ios/editing/selection/4975120-expected.txt:
        * platform/ios/fast/clip/outline-overflowClip-expected.txt:
        * platform/ios/fast/css/focus-ring-exists-for-search-field-expected.txt:
        * platform/ios/fast/css/input-search-padding-expected.txt:
        * platform/ios/fast/css/line-height-expected.txt:
        * platform/ios/fast/css/text-overflow-input-expected.txt:
        * platform/ios/fast/events/context-no-deselect-expected.txt:
        * platform/ios/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt:
        * platform/ios/fast/forms/basic-inputs-expected.txt:
        * platform/ios/fast/forms/box-shadow-override-expected.txt:
        * platform/ios/fast/forms/control-restrict-line-height-expected.txt:
        * platform/ios/fast/forms/encoding-test-expected.txt:
        * platform/ios/fast/forms/fieldset-align-expected.txt:
        * platform/ios/fast/forms/form-element-geometry-expected.txt:
        * platform/ios/fast/forms/input-align-expected.txt:
        * platform/ios/fast/forms/input-appearance-bkcolor-expected.txt:
        * platform/ios/fast/forms/input-appearance-default-bkcolor-expected.txt:
        * platform/ios/fast/forms/input-appearance-focus-expected.txt:
        * platform/ios/fast/forms/input-appearance-height-expected.txt:
        * platform/ios/fast/forms/input-appearance-selection-expected.txt:
        * platform/ios/fast/forms/input-appearance-visibility-expected.txt:
        * platform/ios/fast/forms/input-appearance-width-expected.txt:
        * platform/ios/fast/forms/input-disabled-color-expected.txt:
        * platform/ios/fast/forms/input-double-click-selection-gap-bug-expected.txt:
        * platform/ios/fast/forms/input-placeholder-visibility-1-expected.txt:
        * platform/ios/fast/forms/input-placeholder-visibility-3-expected.txt:
        * platform/ios/fast/forms/input-spaces-expected.txt:
        * platform/ios/fast/forms/input-table-expected.txt:
        * platform/ios/fast/forms/input-text-click-inside-expected.txt:
        * platform/ios/fast/forms/input-text-scroll-left-on-blur-expected.txt:
        * platform/ios/fast/forms/input-text-self-emptying-click-expected.txt:
        * platform/ios/fast/forms/input-type-text-min-width-expected.txt:
        * platform/ios/fast/forms/input-value-expected.txt:
        * platform/ios/fast/forms/input-width-expected.txt:
        * platform/ios/fast/forms/minWidthPercent-expected.txt:
        * platform/ios/fast/forms/number/number-appearance-rtl-expected.txt:
        * platform/ios/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt:
        * platform/ios/fast/forms/number/number-appearance-spinbutton-layer-expected.txt:
        * platform/ios/fast/forms/placeholder-pseudo-style-expected.txt:
        * platform/ios/fast/forms/search-cancel-button-style-sharing-expected.txt:
        * platform/ios/fast/forms/search-display-none-cancel-button-expected.txt:
        * platform/ios/fast/forms/search-input-rtl-expected.txt:
        * platform/ios/fast/forms/search-styled-expected.txt:
        * platform/ios/fast/forms/tabbing-input-iframe-expected.txt:
        * platform/ios/fast/forms/text-control-intrinsic-widths-expected.txt:
        * platform/ios/fast/forms/textfield-focus-ring-expected.txt:
        * platform/ios/fast/forms/textfield-overflow-expected.txt:
        * platform/ios/fast/frames/take-focus-from-iframe-expected.txt:
        * platform/ios/fast/html/details-no-summary4-expected.txt:
        * platform/ios/fast/html/details-open-javascript-expected.txt:
        * platform/ios/fast/html/details-open2-expected.txt:
        * platform/ios/fast/html/details-open4-expected.txt:
        * platform/ios/fast/lists/dynamic-marker-crash-expected.txt:
        * platform/ios/fast/replaced/replaced-breaking-expected.txt:
        * platform/ios/fast/replaced/replaced-breaking-mixture-expected.txt:
        * platform/ios/fast/table/colspanMinWidth-expected.txt:
        * platform/ios/fast/table/spanOverlapRepaint-expected.txt:
        * platform/ios/fast/table/text-field-baseline-expected.txt:
        * platform/ios/svg/custom/inline-svg-in-xhtml-expected.txt:
        * platform/ios/svg/hixie/mixed/003-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug1188-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug12384-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug18359-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug24200-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug2479-2-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug2479-3-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug2479-4-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug28928-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug4382-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug4527-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug46368-1-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug46368-2-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug51037-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug55545-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug59354-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug7342-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug96334-expected.txt:
        * platform/ios/tables/mozilla/bugs/bug99948-expected.txt:
        * platform/ios/tables/mozilla/dom/tableDom-expected.txt:
        * platform/ios/tables/mozilla/other/move_row-expected.txt:
        * platform/ios/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:
        * platform/ios/tables/mozilla_expected_failures/bugs/bug92647-1-expected.txt:
        * platform/ios/transforms/3d/general/perspective-non-layer-expected.txt:
        * platform/mac-mojave/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:
        * platform/mac/editing/input/caret-at-the-edge-of-input-expected.txt:
        * platform/mac/editing/inserting/before-after-input-element-expected.txt:
        * platform/mac/editing/pasteboard/4806874-expected.txt:
        * platform/mac/editing/pasteboard/drop-text-without-selection-expected.txt:
        * platform/mac/editing/pasteboard/input-field-1-expected.txt:
        * platform/mac/editing/selection/3690703-2-expected.txt:
        * platform/mac/editing/selection/3690703-expected.txt:
        * platform/mac/editing/selection/3690719-expected.txt:
        * platform/mac/editing/selection/4895428-3-expected.txt:
        * platform/mac/editing/selection/4975120-expected.txt:
        * platform/mac/editing/selection/drag-select-1-expected.txt:
        * platform/mac/editing/selection/select-from-textfield-outwards-expected.txt:
        * platform/mac/fast/css/focus-ring-exists-for-search-field-expected.txt:
        * platform/mac/fast/css/line-height-expected.txt:
        * platform/mac/fast/css/text-overflow-input-expected.txt:
        * platform/mac/fast/events/context-no-deselect-expected.txt:
        * platform/mac/fast/forms/auto-fill-button/hide-auto-fill-strong-password-viewable-treatment-when-form-is-reset-expected.txt:
        * platform/mac/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt:
        * platform/mac/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt:
        * platform/mac/fast/forms/auto-fill-button/input-strong-password-viewable-expected.txt:
        * platform/mac/fast/forms/basic-inputs-expected.txt:
        * platform/mac/fast/forms/box-shadow-override-expected.txt:
        * platform/mac/fast/forms/control-restrict-line-height-expected.txt:
        * platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt:
        * platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt:
        * platform/mac/fast/forms/encoding-test-expected.txt:
        * platform/mac/fast/forms/fieldset-align-expected.txt:
        * platform/mac/fast/forms/form-element-geometry-expected.txt:
        * platform/mac/fast/forms/input-align-expected.txt:
        * platform/mac/fast/forms/input-appearance-bkcolor-expected.txt:
        * platform/mac/fast/forms/input-appearance-default-bkcolor-expected.txt:
        * platform/mac/fast/forms/input-appearance-focus-expected.txt:
        * platform/mac/fast/forms/input-appearance-height-expected.txt:
        * platform/mac/fast/forms/input-appearance-preventDefault-expected.txt:
        * platform/mac/fast/forms/input-appearance-selection-expected.txt:
        * platform/mac/fast/forms/input-appearance-spinbutton-expected.txt:
        * platform/mac/fast/forms/input-appearance-spinbutton-up-expected.txt:
        * platform/mac/fast/forms/input-appearance-visibility-expected.txt:
        * platform/mac/fast/forms/input-appearance-width-expected.txt:
        * platform/mac/fast/forms/input-baseline-expected.txt:
        * platform/mac/fast/forms/input-disabled-color-expected.txt:
        * platform/mac/fast/forms/input-double-click-selection-gap-bug-expected.txt:
        * platform/mac/fast/forms/input-placeholder-visibility-1-expected.txt:
        * platform/mac/fast/forms/input-placeholder-visibility-3-expected.txt:
        * platform/mac/fast/forms/input-spaces-expected.txt:
        * platform/mac/fast/forms/input-table-expected.txt:
        * platform/mac/fast/forms/input-text-click-inside-expected.txt:
        * platform/mac/fast/forms/input-text-click-outside-expected.txt:
        * platform/mac/fast/forms/input-text-double-click-expected.txt:
        * platform/mac/fast/forms/input-text-drag-down-expected.txt:
        * platform/mac/fast/forms/input-text-option-delete-expected.txt:
        * platform/mac/fast/forms/input-text-scroll-left-on-blur-expected.txt:
        * platform/mac/fast/forms/input-text-self-emptying-click-expected.txt:
        * platform/mac/fast/forms/input-text-word-wrap-expected.txt:
        * platform/mac/fast/forms/input-type-text-min-width-expected.txt:
        * platform/mac/fast/forms/input-value-expected.txt:
        * platform/mac/fast/forms/input-width-expected.txt:
        * platform/mac/fast/forms/number/number-appearance-rtl-expected.txt:
        * platform/mac/fast/forms/number/number-appearance-spinbutton-disabled-readonly-expected.txt:
        * platform/mac/fast/forms/number/number-appearance-spinbutton-layer-expected.txt:
        * platform/mac/fast/forms/placeholder-position-expected.txt:
        * platform/mac/fast/forms/placeholder-pseudo-style-expected.txt:
        * platform/mac/fast/forms/search-cancel-button-style-sharing-expected.txt:
        * platform/mac/fast/forms/search-display-none-cancel-button-expected.txt:
        * platform/mac/fast/forms/search-input-rtl-expected.txt:
        * platform/mac/fast/forms/search-styled-expected.txt:
        * platform/mac/fast/forms/search-vertical-alignment-expected.txt:
        * platform/mac/fast/forms/search/search-padding-cancel-results-buttons-expected.txt:
        * platform/mac/fast/forms/search/search-size-with-decorations-expected.txt:
        * platform/mac/fast/forms/tabbing-input-iframe-expected.txt:
        * platform/mac/fast/forms/text-control-intrinsic-widths-expected.txt:
        * platform/mac/fast/forms/textfield-focus-ring-expected.txt:
        * platform/mac/fast/forms/textfield-outline-expected.txt:
        * platform/mac/fast/forms/textfield-overflow-expected.txt:
        * platform/mac/fast/forms/visual-hebrew-text-field-expected.txt:
        * platform/mac/fast/frames/take-focus-from-iframe-expected.txt:
        * platform/mac/fast/html/details-no-summary4-expected.txt:
        * platform/mac/fast/html/details-open-javascript-expected.txt:
        * platform/mac/fast/html/details-open2-expected.txt:
        * platform/mac/fast/html/details-open4-expected.txt:
        * platform/mac/fast/lists/dynamic-marker-crash-expected.txt:
        * platform/mac/fast/repaint/renderer-destruction-by-invalidateSelection-crash-expected.txt:
        * platform/mac/fast/repaint/search-field-cancel-expected.txt:
        * platform/mac/fast/repaint/subtree-root-skipped-expected.txt:
        * platform/mac/fast/replaced/replaced-breaking-expected.txt:
        * platform/mac/fast/replaced/replaced-breaking-mixture-expected.txt:
        * platform/mac/fast/table/colspanMinWidth-expected.txt:
        * platform/mac/fast/table/spanOverlapRepaint-expected.txt:
        * platform/mac/fast/table/text-field-baseline-expected.txt:
        * platform/mac/fast/text/textIteratorNilRenderer-expected.txt:
        * platform/mac/fast/transforms/transformed-focused-text-input-expected.txt:
        * platform/mac/http/tests/navigation/javascriptlink-frames-expected.txt:
        * platform/mac/plugins/mouse-click-plugin-clears-selection-expected.txt:
        * platform/mac/svg/custom/inline-svg-in-xhtml-expected.txt:
        * platform/mac/svg/hixie/mixed/003-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug1188-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug12384-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug18359-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug24200-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug2479-2-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug2479-3-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug2479-4-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug28928-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug4382-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug4527-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug46368-1-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug46368-2-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug51037-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug55545-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug59354-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug7342-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug96334-expected.txt:
        * platform/mac/tables/mozilla/bugs/bug99948-expected.txt:
        * platform/mac/tables/mozilla/dom/tableDom-expected.txt:
        * platform/mac/tables/mozilla/other/move_row-expected.txt:
        * platform/mac/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:
        * platform/mac/tables/mozilla_expected_failures/bugs/bug92647-1-expected.txt:
        * platform/mac/transforms/3d/general/perspective-non-layer-expected.txt:
        * platform/win/editing/input/caret-at-the-edge-of-input-expected.txt:
        * platform/win/editing/inserting/before-after-input-element-expected.txt:
        * platform/win/fast/css/focus-ring-exists-for-search-field-expected.txt:
        * platform/win/fast/events/context-no-deselect-expected.txt:
        * platform/win/fast/forms/auto-fill-button/input-auto-fill-button-expected.txt:
        * platform/win/fast/forms/auto-fill-button/input-contacts-auto-fill-button-expected.txt:
        * platform/win/fast/forms/auto-fill-button/input-credit-card-auto-fill-button-expected.txt:
        * platform/win/fast/forms/basic-inputs-expected.txt:
        * platform/win/fast/forms/box-shadow-override-expected.txt:
        * platform/win/fast/forms/control-restrict-line-height-expected.txt:
        * platform/win/fast/forms/encoding-test-expected.txt:
        * platform/win/fast/forms/fieldset-align-expected.txt:
        * platform/win/fast/forms/form-element-geometry-expected.txt:
        * platform/win/fast/forms/input-align-expected.txt:
        * platform/win/fast/forms/input-appearance-bkcolor-expected.txt:
        * platform/win/fast/forms/input-appearance-default-bkcolor-expected.txt:
        * platform/win/fast/forms/input-appearance-disabled-expected.txt:
        * platform/win/fast/forms/input-appearance-focus-expected.txt:
        * platform/win/fast/forms/input-appearance-height-expected.txt:
        * platform/win/fast/forms/input-appearance-readonly-expected.txt:
        * platform/win/fast/forms/input-appearance-selection-expected.txt:
        * platform/win/fast/forms/input-appearance-visibility-expected.txt:
        * platform/win/fast/forms/input-appearance-width-expected.txt:
        * platform/win/fast/forms/input-baseline-expected.txt:
        * platform/win/fast/forms/input-disabled-color-expected.txt:
        * platform/win/fast/forms/input-double-click-selection-gap-bug-expected.txt:
        * platform/win/fast/forms/input-placeholder-visibility-1-expected.txt:
        * platform/win/fast/forms/input-placeholder-visibility-3-expected.txt:
        * platform/win/fast/forms/input-readonly-autoscroll-expected.txt:
        * platform/win/fast/forms/input-readonly-dimmed-expected.txt:
        * platform/win/fast/forms/input-readonly-empty-expected.txt:
        * platform/win/fast/forms/input-spaces-expected.txt:
        * platform/win/fast/forms/input-table-expected.txt:
        * platform/win/fast/forms/input-text-click-inside-expected.txt:
        * platform/win/fast/forms/input-text-click-outside-expected.txt:
        * platform/win/fast/forms/input-text-double-click-expected.txt:
        * platform/win/fast/forms/input-text-drag-down-expected.txt:
        * platform/win/fast/forms/input-text-option-delete-expected.txt:
        * platform/win/fast/forms/input-text-scroll-left-on-blur-expected.txt:
        * platform/win/fast/forms/input-text-self-emptying-click-expected.txt:
        * platform/win/fast/forms/input-text-word-wrap-expected.txt:
        * platform/win/fast/forms/input-type-text-min-width-expected.txt:
        * platform/win/fast/forms/input-value-expected.txt:
        * platform/win/fast/forms/input-width-expected.txt:
        * platform/win/fast/forms/placeholder-pseudo-style-expected.txt:
        * platform/win/fast/forms/search-cancel-button-style-sharing-expected.txt:
        * platform/win/fast/forms/search-display-none-cancel-button-expected.txt:
        * platform/win/fast/forms/search-styled-expected.txt:
        * platform/win/fast/forms/search-vertical-alignment-expected.txt:
        * platform/win/fast/forms/search/search-size-with-decorations-expected.txt:
        * platform/win/fast/forms/tabbing-input-iframe-expected.txt:
        * platform/win/fast/forms/text-control-intrinsic-widths-expected.txt:
        * platform/win/fast/forms/textfield-focus-ring-expected.txt:
        * platform/win/fast/forms/textfield-outline-expected.txt:
        * platform/win/fast/forms/textfield-overflow-expected.txt:
        * platform/win/fast/forms/visual-hebrew-text-field-expected.txt:
        * platform/win/fast/frames/take-focus-from-iframe-expected.txt:
        * platform/win/fast/html/details-no-summary4-expected.txt:
        * platform/win/fast/html/details-open-javascript-expected.txt:
        * platform/win/fast/html/details-open2-expected.txt:
        * platform/win/fast/html/details-open4-expected.txt:
        * platform/win/fast/lists/dynamic-marker-crash-expected.txt:
        * platform/win/fast/replaced/replaced-breaking-expected.txt:
        * platform/win/fast/replaced/replaced-breaking-mixture-expected.txt:
        * platform/win/fast/table/colspanMinWidth-expected.txt:
        * platform/win/fast/table/spanOverlapRepaint-expected.txt:
        * platform/win/fast/table/text-field-baseline-expected.txt:
        * platform/win/fast/text/textIteratorNilRenderer-expected.txt:
        * platform/win/fast/transforms/transformed-focused-text-input-expected.txt:
        * platform/win/svg/hixie/mixed/003-expected.txt:
        * platform/win/tables/mozilla/bugs/bug1188-expected.txt:
        * platform/win/tables/mozilla/bugs/bug12384-expected.txt:
        * platform/win/tables/mozilla/bugs/bug18359-expected.txt:
        * platform/win/tables/mozilla/bugs/bug24200-expected.txt:
        * platform/win/tables/mozilla/bugs/bug2479-2-expected.txt:
        * platform/win/tables/mozilla/bugs/bug2479-3-expected.txt:
        * platform/win/tables/mozilla/bugs/bug2479-4-expected.txt:
        * platform/win/tables/mozilla/bugs/bug28928-expected.txt:
        * platform/win/tables/mozilla/bugs/bug4382-expected.txt:
        * platform/win/tables/mozilla/bugs/bug4527-expected.txt:
        * platform/win/tables/mozilla/bugs/bug46368-1-expected.txt:
        * platform/win/tables/mozilla/bugs/bug46368-2-expected.txt:
        * platform/win/tables/mozilla/bugs/bug51037-expected.txt:
        * platform/win/tables/mozilla/bugs/bug55545-expected.txt:
        * platform/win/tables/mozilla/bugs/bug59354-expected.txt:
        * platform/win/tables/mozilla/bugs/bug7342-expected.txt:
        * platform/win/tables/mozilla/bugs/bug96334-expected.txt:
        * platform/win/tables/mozilla/bugs/bug99948-expected.txt:
        * platform/win/tables/mozilla/dom/tableDom-expected.txt:
        * platform/win/tables/mozilla/other/move_row-expected.txt:
        * platform/win/tables/mozilla_expected_failures/bugs/bug2479-5-expected.txt:
        * platform/win/tables/mozilla_expected_failures/bugs/bug92647-1-expected.txt:

        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::addOverflowFromInlineChildren):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::endPaddingWidthForCaret const):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth const):

2020-06-15  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: introduce request interception
        https://bugs.webkit.org/show_bug.cgi?id=207446

        Reviewed by Devin Rousso.

        This change introduces network request interception to the Network 
        protocol domain. It adds Network.interceptWithRequest notification that
        can be continued, modified or fulfilled. NetworkStage enum can now have
        'request' and 'response' values.

        Tests: http/tests/inspector/network/intercept-aborted-request.html
               http/tests/inspector/network/intercept-request-continue.html
               http/tests/inspector/network/intercept-request-fragment.html
               http/tests/inspector/network/intercept-request-main-resource-with-response.html
               http/tests/inspector/network/intercept-request-main-resource.html
               http/tests/inspector/network/intercept-request-properties.html
               http/tests/inspector/network/intercept-request-subresource-with-error.html
               http/tests/inspector/network/intercept-request-subresource-with-response.html
               http/tests/inspector/network/intercept-request-subresource.html
               http/tests/inspector/network/intercept-request-with-response.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInterceptImpl):
        (WebCore::InspectorInstrumentation::shouldInterceptRequestImpl):
        (WebCore::InspectorInstrumentation::interceptRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willIntercept):
        (WebCore::InspectorInstrumentation::shouldInterceptRequest):
        (WebCore::InspectorInstrumentation::interceptRequest):
        * inspector/InspectorInstrumentationWebKit.cpp:
        (WebCore::InspectorInstrumentationWebKit::shouldInterceptRequestInternal):
        (WebCore::InspectorInstrumentationWebKit::interceptRequestInternal):
        * inspector/InspectorInstrumentationWebKit.h:
        (WebCore::InspectorInstrumentationWebKit::shouldInterceptRequest):
        (WebCore::InspectorInstrumentationWebKit::interceptRequest):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::disable):
        (WebCore::InspectorNetworkAgent::shouldIntercept):
        (WebCore::InspectorNetworkAgent::continuePendingRequests):
        (WebCore::InspectorNetworkAgent::setInterceptionEnabled):
        (WebCore::InspectorNetworkAgent::addInterception):
        (WebCore::InspectorNetworkAgent::removeInterception):
        (WebCore::InspectorNetworkAgent::willIntercept):
        (WebCore::InspectorNetworkAgent::shouldInterceptRequest):
        (WebCore::InspectorNetworkAgent::shouldInterceptResponse):
        (WebCore::InspectorNetworkAgent::interceptRequest):
        (WebCore::InspectorNetworkAgent::interceptContinue):
        (WebCore::InspectorNetworkAgent::interceptWithRequest):
        (WebCore::InspectorNetworkAgent::interceptRequestWithResponse):
        (WebCore::InspectorNetworkAgent::interceptRequestWithError):
        * inspector/agents/InspectorNetworkAgent.h:
        (WebCore::InspectorNetworkAgent::PendingInterceptRequest::PendingInterceptRequest):
        (WebCore::InspectorNetworkAgent::PendingInterceptRequest::continueWithOriginalRequest):
        (WebCore::InspectorNetworkAgent::PendingInterceptRequest::continueWithRequest):
        (WebCore::InspectorNetworkAgent::Intercept::operator== const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::preload):

2020-06-15  Keith Miller  <keith_miller@apple.com>

        JIT thunks should work on arm64_32
        https://bugs.webkit.org/show_bug.cgi?id=213103

        Reviewed by Saam Barati.

        Refactor timesPtr() to ScalePtr.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasClasses):

2020-06-15  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation does not observe newly displayed element inside previously observed content
        https://bugs.webkit.org/show_bug.cgi?id=213156

        Reviewed by Darin Adler.

        Fix two issues:
        1. Some inserted nodes are marked as manipulated, but they are inserted because they get removed in the
        replacement process, not because they are manipulated or in the range of item.
        2. TextManipulationController does not perform manipulation on an element if its ancestor is manipulated. This
        means the newly inserted/displayed children of a manipulated element are ruled out for manipulation.

        Test: TextManipulation.CompleteTextManipulationForNewlyDisplayedParagraph

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::didCreateRendererForElement):
        (WebCore::TextManipulationController::updateInsertions):
        (WebCore::TextManipulationController::replace):
        (WebCore::TextManipulationController::isInManipulatedElement): Deleted.
        * editing/TextManipulationController.h:

2020-06-15  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Suppress compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=213034

        Reviewed by Darin Adler.

        Use PRIu64 formatter for uint64_t instead of %llu.

        No functional changes.

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

2020-06-15  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Use GRefPtr for ManetteMonitor
        https://bugs.webkit.org/show_bug.cgi?id=213094

        Reviewed by Carlos Garcia Campos.

        We should use GRefPtr for ManetteMonitor, but not GUniquePtr. Because it is a gobject instance.

        No new tests because of no functionality changed.

        * platform/gamepad/manette/ManetteGamepadProvider.h:

2020-06-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        super should not depend on __proto__
        https://bugs.webkit.org/show_bug.cgi?id=157972

        Reviewed by Saam Barati.

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Set OverridesGetPrototype structure flag for CustomGetPrototype IDL attribute.

2020-06-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] ImageDecoder hits Debug ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=213178

        Reviewed by Xabier Rodriguez-Calvar.

        Pass a reference of the decoder to its inner implementation instead of a WeakPtr, which
        can't be used across multiple threads.

        Covered by fast/images/animated-image-mp4{,-crash}.html tests.

        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:

2020-06-15  Youenn Fablet  <youenn@apple.com>

        Simplify MediaRecorderPrivateWriterCocoa threading logic
        https://bugs.webkit.org/show_bug.cgi?id=213126

        Reviewed by Eric Carlson.

        Always hop to the main thread when receiving compressed samples.
        This makes the threading model simpler and pushing enqueued samples in the writer is not very performance sensitive.

        Add handling of the special case of video samples being pushed but no compressed sample is yet produced.
        In that case, when stopping recording, the samples will be pushed and we will start the writer.

        Minor refactoring to remove some unnecessary checks and make sure some of the member fields gets initialized in their declaration.
        Covered by existing tests.

        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm:
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::compressedVideoOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::compressedAudioOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.h:
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm:
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):

2020-06-15  Youenn Fablet  <youenn@apple.com>

        Add a quirk to allow starting AudioContext if document was interacted
        https://bugs.webkit.org/show_bug.cgi?id=213118

        Reviewed by Eric Carlson.

        Manually tested on bing.com.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::isDocumentAllowingAutoplayWebAudio):
        (WebCore::AudioContext::willBeginPlayback):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldAutoplayWebAudioForArbitraryUserGesture const):
        * page/Quirks.h:

2020-06-15  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Move textFromUTF8() to TextResourceDecoder from FetchBodyConsumer
        https://bugs.webkit.org/show_bug.cgi?id=213170

        Reviewed by Youenn Fablet.

        This function abstracts https://encoding.spec.whatwg.org/#utf-8-decode
        so I think it's better to place to `TextResourceDecoder`.

        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::resolveWithTypeAndData):
        (WebCore::FetchBodyConsumer::takeAsText):
        * loader/TextResourceDecoder.cpp:
        (WebCore::shouldPrependBOM):
        (WebCore::TextResourceDecoder::textFromUTF8):
        * loader/TextResourceDecoder.h:

2020-06-15  Youenn Fablet  <youenn@apple.com>

        MediaRecorder should not be collectable when fetching data from its backend
        https://bugs.webkit.org/show_bug.cgi?id=213121

        Reviewed by Eric Carlson.

        Take a pending activity when fetching data since we might want dispatch an event when receiving the fetch data.
        Covered by existing tests no longer crashing in debug.

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::stopRecording):
        (WebCore::MediaRecorder::requestData):

2020-06-14  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, reverting r262124.

        Twitter videos go blank after exiting fullscreen

        Reverted changeset:

        "[css-flex] Allow indefinite size flex items to be definite
        wrt resolving percentages inside them"
        https://bugs.webkit.org/show_bug.cgi?id=212264
        https://trac.webkit.org/changeset/262124

2020-06-14  Sam Weinig  <weinig@apple.com>

        [WPT] html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html fails due to lack of caching of Plugin objects
        https://bugs.webkit.org/show_bug.cgi?id=213185

        Reviewed by Darin Adler.

        Tests:
        - Updates results for web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-pluginarray.html
          which now passes.
        - Splits up http/tests/plugins/plugin-javascript-access.html, adding 
          http/tests/plugins/plugin-javascript-access-allow-all-plugins.html
          which tests the internals.setShowAllPlugins(true) case. This was
          required now that the plugin and mimetype arrays are immutable after
          creation.

        Overhaul web exposed plugin APIs:
        - All DOMPlugin and DOMMimeTypes are now created together (along with the DOMPluginArray and 
          DOMMimeTypeArray) on first access of either navigator.plugins or navigator.mimeTypes.
        - DOMPlugins are created and stored in the DOMPluginArray (fixing the initial lack of caching issue)
        - DOMMimeTypes are created and stored in the DOMMimeTypeArray.
        - DOMPlugins hold a strong reference to their associated DOMMimeType. The DOMMimeType has
          a weak reference back to the DOMPlugin. This means for a single executation context, we only
          ever create one DOMPlugin / DOMMimeType for each underlying plugin / mimetype.
        - Update GC so that DOMPlugin and DOMMimeType (in addition to DOMPluginArray and DOMMimeTypeArray
          which were already doing this) use navigator reachability for their lifetime. This is almost
          correct, except if we ever implement DOMPluginArray.refresh(false) to match the spec, in which
          case you could end up with some DOMPlugins and DOMMimeTypes that are marked as reachable when
          they really are not, but only plugins that were removed. This seems so unlikely to matter that
          implementing a more strict reachability function seems like the wrong way to go.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        Add NavigatorPlugins.idl

        * loader/SubframeLoader.cpp:
        (WebCore::findPluginMIMETypeFromURL):
        (WebCore::logPluginRequest):
        Simplify and cleanup code making use of the new webVisibleMimeTypes() rather than the
        clunky getWebVisibleMimesAndPluginIndices().

        * page/Navigator.cpp:
        * page/Navigator.h:
        (WebCore::Navigator::initializePluginAndMIMETypeArrays):
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        Fully initialize Navigator.plugins/mimeTypes on first access of either, following
        the specified behavior that they should not change after initial access for a script
        execution context. This also ensures we always return the same wrappers for these
        objects on multiple accesses, something the spec mandates but we failed to do prior.
        In addition, we now correctly sort the plugins by name and mimeTypes by type, also as
        specified.

        * page/Navigator.idl:
        * page/NavigatorPlugins.idl: Added.
        Split NavigatorPlugins out of Navigator.idl as specified. No functional change but
        makes things nicer when we match the spec closer.

        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::DOMMimeType):
        (WebCore::DOMMimeType::suffixes const):
        (WebCore::DOMMimeType::enabledPlugin const):
        * plugins/DOMMimeType.h:
        (WebCore::DOMMimeType::create):
        (WebCore::DOMMimeType::navigator):
        * plugins/DOMMimeType.idl:
        * plugins/DOMMimeTypeArray.cpp:
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        (WebCore::DOMMimeTypeArray::length const):
        (WebCore::DOMMimeTypeArray::item):
        (WebCore::DOMMimeTypeArray::namedItem):
        (WebCore::DOMMimeTypeArray::supportedPropertyNames):
        (WebCore::DOMMimeTypeArray::getPluginData const): Deleted.
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.cpp:
        (WebCore::DOMPlugin::DOMPlugin):
        (WebCore::DOMPlugin::item):
        (WebCore::DOMPlugin::namedItem):
        (WebCore::DOMPlugin::supportedPropertyNames):
        * plugins/DOMPlugin.h:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.cpp:
        (WebCore::DOMPluginArray::DOMPluginArray):
        (WebCore::DOMPluginArray::length const):
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::namedItem):
        (WebCore::DOMPluginArray::supportedPropertyNames):
        (WebCore::DOMPluginArray::pluginData const): Deleted.
        * plugins/DOMPluginArray.h:
        Rather than dynamically accessing plugin information through Page
        on each interaction with the DOM plugin objects, we now fully initialize
        them on creation, allowing for correct wrapper caching and behavior if
        plugins are added / removed (e.g. the arrays should not change).
        
        * plugins/PluginData.cpp:
        (WebCore::PluginData::initPlugins):
        (WebCore::PluginData::publiclyVisiblePluginsAndAdditionalWebVisiblePlugins const):
        (WebCore::PluginData::webVisibleMimeTypes const):
        (WebCore::supportsMimeTypeForPlugins):
        (WebCore::PluginData::supportsMimeType const):
        (WebCore::PluginData::supportsWebVisibleMimeType const):
        (WebCore::PluginData::supportsWebVisibleMimeTypeForURL const):
        (WebCore::PluginData::pluginFileForWebVisibleMimeType const):
        (WebCore::PluginData::publiclyVisiblePlugins const): Deleted.
        (WebCore::PluginData::getWebVisibleMimesAndPluginIndices const): Deleted.
        (WebCore::PluginData::getMimesAndPluginIndices const): Deleted.
        (WebCore::PluginData::getMimesAndPluginIndiciesForPlugins const): Deleted.
        (WebCore::PluginData::getPluginInfoForWebVisibleMimeType const): Deleted.
        * plugins/PluginData.h:
        Simplify interface by removing out parameter based getWebVisibleMimesAndPluginIndices
        (and helpers) and adding more straigtword alternatives. getWebVisibleMimesAndPluginIndices
        was useful for the old DOM plugin model, but now that the arrays are initialized all 
        together, it no longer provides an optimization. Instead, all callers really just want
        a either a list of MimeClassInfos or to know if one is supported under a specific scenario,
        so we now just expose that.

2020-06-14  Sam Weinig  <weinig@apple.com>

        [WPT] websockets/Close-reason-unpaired-surrogates.any.html fails due to failure to convert unpaired surrogates to replacement character for close reason
        https://bugs.webkit.org/show_bug.cgi?id=213182

        Reviewed by Darin Adler.

        Now passing the following tests:
            imported/w3c/web-platform-tests/websockets/Close-reason-unpaired-surrogates.any.html
            imported/w3c/web-platform-tests/websockets/Close-reason-unpaired-surrogates.any.worker.html
            imported/w3c/web-platform-tests/websockets/Secure-Close-Reason-Unpaired-surrogates.any.html
            imported/w3c/web-platform-tests/websockets/Secure-Close-Reason-Unpaired-surrogates.any.worker.html

        * Modules/websockets/WebSocket.idl:
        Match spec (https://html.spec.whatwg.org/multipage/web-sockets.html#the-websocket-interface)
        by making the reason argument in close() a USVString rather than a DOMString. This causes 
        all unpaired surrogates to be replaced with \uFFFD, the replacement character.

2020-06-14  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Withdraw FileReaderSync from ServiceWorker
        https://bugs.webkit.org/show_bug.cgi?id=213136

        Reviewed by Darin Adler.

        `FileReaderSync` is not exposed for ServiceWorker.

            - https://w3c.github.io/FileAPI/#FileReaderSync
            - https://github.com/w3c/FileAPI/issues/16

        We does not support SharedWorker. We don't have to care about it.


        * fileapi/FileReaderSync.idl:

2020-06-13  Rob Buis  <rbuis@igalia.com>

        https://bugs.webkit.org/show_bug.cgi?id=213166
        Rename executeIfJavaScriptURL to executeJavaScriptURL

        Reviewed by Darin Adler.

        Rename executeIfJavaScriptURL to executeJavaScriptURL in order to make the function
        unconditional, i.e.  the passed url is expected to have the javascript protocol, this
        is asserted first thing in the method.  This allows us to remove the return parameter
        since the remaining return statements all return true.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeJavaScriptURL):
        (WebCore::ScriptController::executeIfJavaScriptURL): Deleted.
        * bindings/js/ScriptController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::submitForm):
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::requestFrame):

2020-06-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floats] Floating positioned box is always a float avoider.
        https://bugs.webkit.org/show_bug.cgi?id=213162

        Reviewed by Darin Adler.

        Test: fast/layoutformattingcontext/inline-float-simple.html

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isFloatAvoider const): also fix the independent formatting context case.

2020-06-13  Sam Weinig  <weinig@apple.com>

        [WPT] dom/nodes/Document-createCDATASection-xhtml.xhtml fails due to missing exception in Document.createCDATASection()
        https://bugs.webkit.org/show_bug.cgi?id=213167

        Reviewed by Yusuke Suzuki.

        Tested by existing (formerly failing) test: imported/w3c/web-platform-tests/dom/nodes/Document-createCDATASection-xhtml.xhtml

        Throw an "InvalidCharacterError" DOMException if the data passed to createCDATASection
        contains the string "]]>" as specified by https://dom.spec.whatwg.org/#dom-document-createcdatasection

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

2020-06-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Obsolete comment in FontCustomPlatformDataFreeType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=213169

        Unreviewed, remove the stale comment.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::defaultFontconfigOptions):

2020-06-13  Sam Weinig  <weinig@apple.com>

        Extended Color: Experiment with strongly typed ColorComponents
        https://bugs.webkit.org/show_bug.cgi?id=212396

        Reviewed by Darin Adler.

        Adds simple explicit types for sRGBA, LinearSRGBA, DisplayP3, 
        LinearDisplayP3, XYZA and HSLA colors. Conversion to/from
        ColorComponents<float> is easy but explicit to make conversions
        easier to spot.

        The goal is to add type clarity (you know when you are dealing
        with an sRGB color vs. a DisplayP3 color) and make dealing with
        the colors nicer (color.red rather than color[0]). It also allows
        us to simplify the naming of functions that convert between color 
        types as now only the output type needs to be in the function name.
 
        * Headers.cmake:
        Add new header, ColorTypes.h

        * WebCore.xcodeproj/project.pbxproj:
        Add new header, ColorTypes.h

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        Switch from hslToSRGB({ ... }) to toSRGBA(HSLAColor { ... })

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        Update to use toHSLA() and HSLA<float> making the code a bit more readable.

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::isDark const):
        (WebCore::Color::lightness const):
        (WebCore::Color::luminance const):
        (WebCore::Color::colorSpaceAndComponents const):
        (WebCore::Color::toSRGBASimpleColorLossy const):
        (WebCore::Color::toSRGBALossy const):
        (WebCore::Color::toSRGBAComponentsLossy const): Deleted.
        * platform/graphics/Color.h:
        Renames toSRGBAComponentsLossy() to toSRGBALossy() which now returns
        a SRGBA<float>.
        
        * platform/graphics/ColorMatrix.h:
        (WebCore::ColorMatrix::transformColorComponents const): Deleted.
        Remove transformColorComponents, keeping just transformedColorComponents
        to simplify the interface. With late conversion to ColorComponents, the
        latter is more straightforward to use in most cases anyway.
        
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::linearToRGBColorComponent):
        (WebCore::rgbToLinearColorComponent):
        (WebCore::toLinearSRGBA):
        (WebCore::toSRGBA):
        (WebCore::toLinearDisplayP3):
        (WebCore::toDisplayP3):
        (WebCore::toXYZ):
        (WebCore::lightness):
        (WebCore::luminance):
        (WebCore::contrastRatio):
        (WebCore::toHSLA):
        (WebCore::premultiplied):
        (WebCore::rgbToLinearComponents): Deleted.
        (WebCore::linearToRGBComponents): Deleted.
        (WebCore::xyzToLinearSRGB): Deleted.
        (WebCore::linearSRGBToXYZ): Deleted.
        (WebCore::XYZToLinearP3): Deleted.
        (WebCore::linearP3ToXYZ): Deleted.
        (WebCore::p3ToSRGB): Deleted.
        (WebCore::sRGBToP3): Deleted.
        (WebCore::sRGBToHSL): Deleted.
        (WebCore::hslToSRGB): Deleted.
        * platform/graphics/ColorUtilities.h:
        Rename / rework conversion and utility functions to operate on explicit Color 
        types. In doing so, simplify the names of the conversion functions so only name
        the output type. For instance:

            ColorComponents<float> p3ToSRGB(const ColorComponents<float>&);
            
        is now 
        
            SRGBA<float> toSRGBA(const DisplayP3<float>&);
        
        as the input type is implicit in the call. A little duplication was needed 
        for linearToRGBColorComponent/rgbToLinearColorComponent (as it was used for
        both sRGB and DisplayP3 linearization), but mostly things stay the same.
        
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::toSRGBALossy const):
        (WebCore::ExtendedColor::toSRGBAComponentsLossy const): Deleted.
        * platform/graphics/ExtendedColor.h:
        Renamed toSRGBAComponentsLossy() to toSRGBALossy() and have it
        return a SRGBA<float>.

        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::asSRGBA const):
        (WebCore::makeSimpleColor):
        (WebCore::SimpleColor::asSRGBFloatComponents const): Deleted.
        Rename asSRGBFloatComponents() to asSRGBA<T>() and have it 
        return a SRGBA<float>. Replace makeSimpleColor taking FloatComponents
        with one taking a SRGBA<float>, making it much clearer that this
        is only valid for sRGB.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        Rework to support seperate types for SRGB<float> and LinearSRGBA<float>.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::transformColor const):
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::transformColor const):
        (WebCore::FilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        Use SRGBA<float> rather than ColorComponents<float> to make it clear
        that the filters only work on sRGB colors right now.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::setSourceRGBAFromColor):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::addColorStopRGBA):
        (WebCore::setCornerColorRGBA):
        (WebCore::interpolateColorStop):
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
        (WebCore::TextureMapperGL::clearColor):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_COLOR_F const):
        (WebCore::Color::operator D2D1_VECTOR_4F const):
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::colorWithGlobalAlpha const):
        Update to call toSRGBALossy() rather than toSRGBAComponentsLossy().

2020-06-13  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove FileError.h
        https://bugs.webkit.org/show_bug.cgi?id=213119

        Reviewed by Chris Dumez.

        * Headers.cmake:
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::didFail):
        * Modules/async-clipboard/ClipboardItemBindingsDataSource.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::createMessageQueue):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::abortOutgoingFrameQueue):
        * Modules/websockets/WebSocketChannel.h:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobLoader.h:
        (WebCore::BlobLoader::didFail):
        * fileapi/FileError.h: Removed.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::didFail):
        * fileapi/FileReader.h:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):
        (WebCore::FileReaderLoader::cancel):
        (WebCore::FileReaderLoader::cleanup):
        (WebCore::FileReaderLoader::didReceiveResponse):
        (WebCore::FileReaderLoader::didReceiveData):
        (WebCore::FileReaderLoader::didFail):
        (WebCore::FileReaderLoader::failed):
        (WebCore::FileReaderLoader::toErrorCode):
        (WebCore::FileReaderLoader::httpStatusCodeToErrorCode):
        (WebCore::FileReaderLoader::arrayBufferResult const):
        (WebCore::FileReaderLoader::stringResult):
        * fileapi/FileReaderLoader.h:
        (WebCore::FileReaderLoader::errorCode const):
        * fileapi/FileReaderLoaderClient.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::startLoading):
        * fileapi/FileReaderSync.h:
        * fileapi/NetworkSendQueue.cpp:
        (WebCore::NetworkSendQueue::processMessages):
        * fileapi/NetworkSendQueue.h:
        * html/ImageBitmap.cpp:

2020-06-12  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION(r261985): Unable to respond to large comments on Bugzilla with always-on scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=213135
        <rdar://problem/64302086>

        Reviewed by Tim Horton.
        
        The combination of programmatic scrolls (e.g. anchor click, reveal selection) and user scrolling
        could result in a mismatch between the main thread and scrolling thread scroll positions, resulting
        in missing tiles and offset cursor handling.
        
        This happened if a programmatic scroll occurred and 'scrolledSinceLastCommit' was true for
        the equivalent scrolling node at the start of a rendering update. synchronizeStateFromScrollingTree()
        would take the scrolling thread's notion of the scroll position, clobbering the position resulting
        from the programmatic scroll.

        To fix this, call commitTreeStateIfNeeded() before synchronizeStateFromScrollingTree() to ensure that
        any programmatic scrolls have been pushed to the scrolling tree before we fetch its state.
        
        Some infrastructure is needed for testing; getting into the state where a programmatic
        scroll and 'scrolledSinceLastCommit' happened in the same event loop cycle required adding
        internals.scrollBySimulatingWheelEvent(), which just pokes the scrolling tree directly
        without the complexities of wheel events dispatched via the UI process.

        Test: scrollingcoordinator/mac/reveal-selection-tile-coverage.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollBySimulatingWheelEventForTesting):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::scrollBySimulatingWheelEventForTesting):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::scrollBySimulatingWheelEventForTesting):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::willStartRenderingUpdate):
        * testing/Internals.cpp:
        (WebCore::Internals::scrollBySimulatingWheelEvent):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-12  David Kilzer  <ddkilzer@apple.com>

        [IPC hardening] Check enum values in IPC::Decoder::decodeEnum() an IPC::Encoder::encodeEnum()
        <https://webkit.org/b/211988>
        <rdar://problem/63137695>

        Reviewed by Darin Adler.

        Replace decodeEnum() with decode() and encodeEnum() with
        operator<<().

        * Modules/applicationmanifest/ApplicationManifest.h:
        (WebCore::ApplicationManifest::decode):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::encode const):
        (WebCore::IDBKeyData::decode):
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        (WebCore::IDBCursorInfo::encode const):
        (WebCore::IDBCursorInfo::decode):
        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::encode const):
        (WebCore::IDBError::decode):
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:
        (WebCore::IDBGetAllRecordsData::encode const):
        (WebCore::IDBGetAllRecordsData::decode):
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        (WebCore::IDBGetRecordData::encode const):
        (WebCore::IDBGetRecordData::decode):
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        (WebCore::IDBIterateCursorData::encode const):
        (WebCore::IDBIterateCursorData::decode):
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::encode const):
        (WebCore::IDBRequestData::decode):
        * Modules/indexeddb/shared/IDBResultData.h:
        (WebCore::IDBResultData::encode const):
        (WebCore::IDBResultData::decode):
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        (WebCore::IDBTransactionInfo::encode const):
        (WebCore::IDBTransactionInfo::decode):
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::Parameters::decode):
        (WebCore::PublicKeyCredentialCreationOptions::AuthenticatorSelectionCriteria::decode):
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        (WebCore::PublicKeyCredentialDescriptor::decode):
        * dom/ExceptionData.h:
        (WebCore::ExceptionData::encode const):
        (WebCore::ExceptionData::decode):
        * html/DataListSuggestionInformation.h:
        (WebCore::DataListSuggestionInformation::encode const):
        (WebCore::DataListSuggestionInformation::decode):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::encode const):
        (WebCore::SecurityOrigin::decode):
        * platform/ContextMenuItem.h:
        (WTF::EnumTraits<WebCore::ContextMenuAction>):
        - Add missing ContextMenuItemTagPasteAsPlainText that was added
          in r261800.
        * platform/LinkIcon.h:
        (WebCore::LinkIcon::encode const):
        (WebCore::LinkIcon::decode):
        * platform/PasteboardItemInfo.h:
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):
        * platform/ScreenProperties.h:
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/InbandGenericCue.h:
        (WebCore::GenericCueData::encode const):
        * platform/graphics/Path.h:
        (WebCore::Path::encode const):
        (WebCore::Path::decode):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::SetState::encode const):
        (WebCore::DisplayList::SetState::decode):
        (WebCore::DisplayList::DrawTiledScaledImage::encode const):
        (WebCore::DisplayList::DrawTiledScaledImage::decode):
        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::encode const):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaConstraint::encode const):
        (WebCore::MediaConstraint::decode):
        * platform/mediastream/MediaStreamRequest.h:
        (WebCore::MediaStreamRequest::encode const):
        (WebCore::MediaStreamRequest::decode):
        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        (WebCore::CapabilityValueOrRange::encode const):
        (WebCore::CapabilityValueOrRange::decode):
        (WebCore::RealtimeMediaSourceCapabilities::encode const):
        (WebCore::RealtimeMediaSourceCapabilities::decode):
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::encode const):
        (WebCore::RealtimeMediaSourceSettings::decode):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockDisplayProperties::encode const):
        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::CommonHeader::encode const):
        (WebCore::HTTPHeaderMap::CommonHeader::decode):
        * testing/MockWebAuthenticationConfiguration.h:
        (WebCore::MockWebAuthenticationConfiguration::HidConfiguration::decode):
        (WebCore::MockWebAuthenticationConfiguration::NfcConfiguration::decode):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):

2020-06-12  Chris Dumez  <cdumez@apple.com>

        Stop allowing pages served over HTTPS with "Cache-Control: no-store" into the back/forward cache
        https://bugs.webkit.org/show_bug.cgi?id=213147
        <rdar://problem/64249683>

        Reviewed by Geoffrey Garen.

        Stop allowing pages served over HTTPS with "Cache-Control: no-store" into the back/forward cache.
        This is a revert of r250437 due to push back from Web developers.

        No new tests, updated existing tests.

        * history/BackForwardCache.cpp:
        (WebCore::canCacheFrame):

2020-06-12  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Stop to use ActiveDOMObject::setPendingActivity() for Modules/fetch
        https://bugs.webkit.org/show_bug.cgi?id=213037

        Reviewed by Youenn Fablet.

        By ActiveDOMObject's comments,
        these methods should be replaced with using makePendingActivity().

        `JSFetchRequest`/`JSFetchResponse` (as derived class of `JSDOMWrapper`) hold
        `FetchRequest`/`FetchResponse`, and they have `FetchBodyOwner`
        as a base class and keep alive it. We can replace
        `setPendingActivity()` calling from `FetchBodyOwner`.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::loadBlob):
        (WebCore::FetchBodyOwner::finishBlobLoading):
        (WebCore::FetchBodyOwner::virtualHasPendingActivity const):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::setActive):
        (WebCore::FetchBodySource::setInactive):
        * Modules/fetch/FetchBodySource.h:


2020-06-12  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Reviewed by Don Olmstead.

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        Tests: http/tests/resourceLoadStatistics/

        * CMakeLists.txt:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        (WebCore::CookieJarDB::setCookie):
        (WebCore::CookieJarDB::allDomains):
        (WebCore::CookieJarDB::deleteCookiesForHostname):
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):

2020-06-12  Andres Gonzalez  <andresg_22@apple.com>

        In isolated tree mode 2, AXIsolatedObject::setChildrenIDs should be called only on secondary thread.
        https://bugs.webkit.org/show_bug.cgi?id=213124

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        - AXIsolatedTree::createSubtree was calling AXIsolatedObject::setChildrenIDs
        which should be called only on the secondary thread. Now it is queueing
        the children update under lock.
        - The unsigned int range for object IDs was being overrun for large
        number of objects like in the case of the sample page in <rdar://problem/59331146>.
        Increased the size of AXID to size_t.
        - Better handle the case of invalid object IDs, although this needs
        more work, since we should never encounter this case.

        * accessibility/AccessibilityObjectInterface.h: AXID are now size_t instead of unsigned ints.
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::AXIsolatedObject):
        (WebCore::AXIsolatedObject::setChildrenIDs): Inlined in header.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::createSubtree):

2020-06-12  Andy Estes  <aestes@apple.com>

        FileInputType should use WeakPtr for FileListCreator lambdas
        https://bugs.webkit.org/show_bug.cgi?id=213130
        <rdar://problem/64276591>

        Reviewed by David Kilzer.

        FileInputType::filesChosen was passing a completion handler to FileListCreator::create that
        captured |this|. If the FileListCreator instance still existed when |this| was destroyed,
        FileInputType::~FileInputType would clear the captured |this| by calling
        FileListCreator::clear. This can be simplified by having the FileListCreator completion
        handler capture a WeakPtr to |this|.

        Also, when FileInputType::allowsDirectories is false, m_fileListCreator would not be
        properly cleared after creating the file list. The FileListCreator completion handler would
        set m_fileListCreator to nullptr, but would be executed *before* FileListCreator::create
        returned and set m_fileListCreator to the newly-created FileListCreator object. Fixed this
        by having FileListCreator::create execute the completion handler immediately and return
        nullptr in cases where a FileListCreator does not need to be created for directory
        resolution.

        Covered by existing tests.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::~FileInputType):
        (WebCore::FileInputType::filesChosen):
        * html/FileInputType.h:
        * html/FileListCreator.cpp:
        (WebCore::createFileList):
        (WebCore::FileListCreator::create):
        (WebCore::FileListCreator::FileListCreator):
        (WebCore::FileListCreator::createFileList):
        * html/FileListCreator.h:
        (WebCore::FileListCreator::create): Deleted.

2020-06-12  Antti Koivisto  <antti@apple.com>

        REGRESSION (r262618): Very slow typing in a github issue
        https://bugs.webkit.org/show_bug.cgi?id=213137
        <rdar://problem/64214117>

        Reviewed by Darin Adler.

        Test: fast/media/media-query-keyframes-resolution-count.html

        If a stylesheet had multiple media queries and one of them forced static resolution
        (by containing @keyframes rule for example) we would end up reseting the style multiple
        times and forcing unneeded style resolutions.

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::evaluteDynamicMediaQueryRules):

        We can't bail out from the loop. Even though the result is known we still need to loop to
        save the evaluation result for all media queries.

2020-06-12  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        FileReader.error should be DOMException now
        https://bugs.webkit.org/show_bug.cgi?id=213117

        Reviewed by Chris Dumez.

        By the [lastest spec](https://w3c.github.io/FileAPI/),
        `FileReader.error` should return `DOMException`
        and this remove obsoleted `FileError` from exposed interfaces.

        Internally, our codebase still depends on `fileapi/FileError.h`
        in everywhere. I'll plan to create a patch to refactor them.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.order:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/FileError.idl: Removed.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::abort):
        (WebCore::FileReader::didFail):
        * fileapi/FileReader.h:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::errorCodeToException):
        * fileapi/FileReaderSync.h:

2020-06-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for min/max-width
        https://bugs.webkit.org/show_bug.cgi?id=213111

        Reviewed by Antti Koivisto.

        Apply min/max-width to constrain the available width for the table content. 

        Test: fast/layoutformattingcontext/table-min-max-width-simple.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::computedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):

2020-06-12  Antti Koivisto  <antti@apple.com>

        Relative font size values (em) within CSS animations compound
        https://bugs.webkit.org/show_bug.cgi?id=194749
        <rdar://problem/48171898>

        Reviewed by Antoine Quint.

        The em unit should be relative to the font size of the parent style when resolving 'font-size' property.
        We weren't passing the parent style when resolving keyframes.

        Test case by Scott Kellum.

        Test: animations/keyframe-em-unit.html

        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):
        * style/StyleResolver.h:
        (WebCore::Style::Resolver::overrideDocumentElementStyle const):
        (WebCore::Style::Resolver::setOverrideDocumentElementStyle):
        (WebCore::Style::Resolver::setParentElementStyleForKeyframes):

        Add a way to pass the parent element style directly to the style resolver.
        This should really be passed via the animation system like other context but that requires
        lots of refactoring.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

        Pass it.

2020-06-11  Sam Weinig  <weinig@apple.com>

        Document.currentScript does not work for SVGScriptElements
        https://bugs.webkit.org/show_bug.cgi?id=213104

        Reviewed by Yusuke Suzuki.

        Updates results for existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        Add CurrentScriptIncrementer.h to the Xcode project as it was missing.

        * dom/CurrentScriptIncrementer.h:
        (WebCore::CurrentScriptIncrementer::CurrentScriptIncrementer):
        (WebCore::CurrentScriptIncrementer::~CurrentScriptIncrementer):
        Re-work using ScriptElement, removing the HTMLScriptElement checks. Also changes
        scriptType check to explicitly check that against classic scripts, as they are
        the only supported type, and if any types other than modules are added in the 
        future, we would not want this to change behavior.

        * dom/Document.cpp:
        (WebCore::Document::pushCurrentScript):
        * dom/Document.h:
        (WebCore::Document::currentScript const):
        Use an Element, rather than an HTMLScriptElement for currentScript/currentScriptStack
        so that either an HTMLScriptElement or an SVGScriptElement can be stored. Using a 
        ScriptElement would be possible, but would complicate the implementation unnecessarily
        by requiring currentScript to have an additional checks before extracting the Element.
        Variant<RefPtr<HTMLScriptElement>, RefPtr<SVGScriptElement>> could also have been used
        but also would unnecessarily complicated the interface and caused more memory to be used. 

        * dom/Document.idl:
        Update interface to use Element rather HTMLScriptElement with a comment explaining why we
        are not using HTMLOrSVGScriptElement but retaining the same observable behavior.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeClassicScript):
        (WebCore::ScriptElement::executeModuleScript):
        Pass *this directly to CurrentScriptIncrementer to simplify implementation.

2020-06-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make WebDriver work
        https://bugs.webkit.org/show_bug.cgi?id=212316

        Reviewed by Adrian Perez de Castro.

        Add helper gtk definitions to avoid ifdefs and implement currentScreenMonitor() for GTK4.

        * platform/gtk/GtkVersioning.h:
        (gtk_window_move):
        (gtk_window_minimize):
        (gtk_window_unminimize):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::currentScreenMonitor):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::getCurrentScreenMonitor): Deleted.

2020-06-11  David Kilzer  <ddkilzer@apple.com>

        [IPC] Add WTF::EnumTraits<> for every enum type used in IPC
        <https://webkit.org/b/213093>

        Reviewed by Darin Adler.

        Summary:
        - Change underlying type of enum class to `bool` when there are
          only two values.  In some cases, reorder the two values so the
          mapping to 0 and 1 makes more sense.  Converting every enum to
          an enum class is not a goal of this patch, so some two-value
          enums stil have WTF::EnumTraits<> defined as noted below.
        - Add WTF::EnumTraits<> for the remaining enum types that are
          used by IPC::Encoder::encodeEnum() and
          IPC::Decoder::decodeEnum() so that WTF::isValidEnum<>() checks
          may be added next.
        - Add #include <WebCore/LibWebRTCEnumTraits.h> as needed.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        - Add LibWebRTCEnumTraits.h to project. Keep these definitions
          separate from the libwebrtc project cut down on changes to
          re-merge after updating.

        * platform/mediastream/libwebrtc/LibWebRTCEnumTraits.h: Add.

        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        * Modules/indexeddb/IDBTransactionMode.h:
        * Modules/indexeddb/IndexedDB.h:
        (WTF::EnumTraits<WebCore::IndexedDB::IndexRecordType>):
        - Remove after changing enum class to bool.
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        * Modules/indexeddb/shared/IDBResultData.h:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ExceptionCode.h:
        * editing/CompositionUnderline.h:
        * html/Autofill.h:
        * html/DataListSuggestionInformation.h:
        * html/EnterKeyHint.h:
        * html/LinkIconType.h:
        * loader/FrameLoaderTypes.h:
        - Alphabetize WTF::EnumTraits<> definitions.
        * loader/ResourceLoaderOptions.h:
        * page/SecurityOrigin.h:
        * page/UserStyleSheetTypes.h:
        (WTF::EnumTraits<WebCore::UserStyleLevel>):
        - Define this since UserStyleLevel is not an enum class.
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/FileChooser.h:
        * platform/PopupMenuStyle.h:
        * platform/ScreenProperties.h:
        * platform/ScrollTypes.h:
        * platform/SerializedPlatformDataCueValue.h:
        (WebCore::SerializedPlatformDataCueValue::PlatformType):
        - Convert from enum to enum class.
        * platform/UserInterfaceLayoutDirection.h:
        * platform/animation/TimingFunction.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsTypes.h:
        - Alphabetize WTF::EnumTraits<> definitions.
        * platform/graphics/Image.h:
        * platform/graphics/Path.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/mediastream/MediaConstraints.h:
        * platform/mediastream/MediaStreamRequest.h:
        (WTF::EnumTraits<WebCore::MediaStreamRequest::Type>):
        - Fix EnumTraits definition (missing "::Type").
        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:
        * platform/network/CredentialBase.h:
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/ResourceErrorBase.h:
        * platform/network/soup/SoupNetworkProxySettings.h:
        * platform/text/TextChecking.h:
        (WTF::EnumTraits<WebCore::TextCheckingProcessType):
        - Define this since TextCheckingProcessType is not an enum class.
        * platform/text/WritingMode.h:
        * rendering/Pagination.h:
        * workers/service/ServiceWorkerJobType.h:

2020-06-11  Beth Dakin  <bdakin@apple.com>

        Fix comment after blocklist transition
        https://bugs.webkit.org/show_bug.cgi?id=213100

        Reviewed by Wenson Hsieh.

        * platform/mac/PasteboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):

2020-06-11  Rob Buis  <rbuis@igalia.com>

        REGRESSION (r262776): Flaky crash under -[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]
        https://bugs.webkit.org/show_bug.cgi?id=213059

        Reviewed by Alex Christensen.

        My r262776 patch did not null check m_handle and it can cause crashes
        in some cases, so add the check.

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

2020-06-11  Beth Dakin  <bdakin@apple.com>

        Replace instances of whitelist in WebCore with allowlist
        https://bugs.webkit.org/show_bug.cgi?id=213068

        Reviewed by Tim Horton.

        * Modules/webdatabase/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::addAllowedFunctions):
        (WebCore::DatabaseAuthorizer::allowFunction):
        (WebCore::DatabaseAuthorizer::addWhitelistedFunctions): Deleted.
        * Modules/webdatabase/DatabaseAuthorizer.h:
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlSimpleRequestMethodAllowlist):
        (WebCore::isSimpleCrossOriginAccessRequest):
        (WebCore::isOnAccessControlSimpleRequestMethodWhitelist): Deleted.
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod const):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::setOnlineAllowlist):
        (WebCore::ApplicationCache::isURLInOnlineAllowlist):
        (WebCore::ApplicationCache::setOnlineWhitelist): Deleted.
        (WebCore::ApplicationCache::isURLInOnlineWhitelist): Deleted.
        * loader/appcache/ApplicationCache.h:
        (WebCore::ApplicationCache::onlineAllowlist const):
        (WebCore::ApplicationCache::onlineWhitelist const): Deleted.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::openDatabase):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/appcache/ManifestParser.h:
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canRequest const):
        (WebCore::SecurityOrigin::canDisplay const):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::isAccessAllowed):
        (WebCore::SecurityPolicy::addOriginAccessAllowlistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessAllowlistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessAllowlists):
        (WebCore::SecurityPolicy::isAccessWhiteListed): Deleted.
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry): Deleted.
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry): Deleted.
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists): Deleted.
        * page/SecurityPolicy.h:
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::allowlist const):
        (WebCore::UserScript::encode const):
        (WebCore::UserScript::decode):
        (WebCore::UserScript::whitelist const): Deleted.
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::allowlist const):
        (WebCore::UserStyleSheet::whitelist const): Deleted.
        * platform/graphics/FontCache.h:
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::fontAllowlist):
        (WebCore::FontCache::setFontAllowlist):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::fontWhitelist): Deleted.
        (WebCore::FontCache::setFontWhitelist): Deleted.
        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidAcceptHeaderValue):
        * rendering/FloatingObjects.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::transferMatchedRules):
        * style/ElementRuleCollector.h:
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::addMatch):
        * style/RuleData.cpp:
        (WebCore::Style::determinePropertyAllowlistType):
        (WebCore::Style::RuleData::RuleData):
        (WebCore::Style::determinePropertyWhitelistType): Deleted.
        * style/RuleData.h:
        (WebCore::Style::RuleData::propertyAllowlistType const):
        (WebCore::Style::RuleData::propertyWhitelistType const): Deleted.

2020-06-11  Andy Estes  <aestes@apple.com>

        [iOS] nullptr deref in FileInputType::iconLoaded when the input's type attribute is modified by a change event listener
        https://bugs.webkit.org/show_bug.cgi?id=208244
        <rdar://problem/41855350>

        Reviewed by Wenson Hsieh.

        When an <input> element's type attribute changes, its existing InputType is detached from
        the HTMLInputElement by nulling InputType::m_element. When FileInputType::filesChosen is
        called, it dispatches the input and change events, which can run arbitrary JavaScript that
        might modify the element's type attribute. If this happens, FileInputType::m_element will be
        null after returning from FileInputType::setFiles and if there is an icon will be
        dereferenced by FileInputType::iconLoaded.

        Fixed this by checking for a non-null m_element before calling iconLoaded. While here, also
        fixed a bug where we sometimes checked the length of m_fileList before FileListCreator had
        finished setting m_fileList. This bug resulted in missing file icons whenever an
        <input type=file> had the webkitdirectory attribute.

        Tests: fast/forms/file/file-input-type-detached-on-change.html
               fast/forms/file/file-input-webkitdirectory-icon.html

        * html/FileInputType.cpp:
        (WebCore::FileInputType::filesChosen):

2020-06-11  Beth Dakin  <bdakin@apple.com>

        Remove references to "slave" in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=213085

        Reviewed by Wenson Hsieh.

        This feature is referred to as a mediagroup in html, so let's use that terminology here as 
        well.
        * html/MediaController.cpp:
        (WebCore::MediaController::buffered const):
        (WebCore::MediaController::seekable const):
        (WebCore::MediaController::played):
        (WebCore::MediaController::duration const):
        (WebCore::MediaController::setCurrentTime):
        (WebCore::MediaController::play):
        (WebCore::MediaController::updateReadyState):
        (WebCore::MediaController::updatePlaybackState):
        (WebCore::MediaController::isBlocked const):
        (WebCore::MediaController::hasEnded const):

2020-06-11  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for DragSourceAction
        <https://webkit.org/b/212885>
        <rdar://problem/64094134>

        Reviewed by Darin Adler.

        Summary:
        - Convert DragSourceAction to enum class.
        - Remove DragSourceActionNone by using Optional<> and
          OptionSet<> (as dictated by how the code used the value).
        - Remove DragSourceActionAny and replace (as needed) with
          anyDragSourceAction(). (Some--but not all--uses were removed.)
        - Add both WTF::EnumTraits<> and WTF::OptionSetTraits<> for
          DragSourceAction since both Optional<> and OptionSet<> are
          used with IPC.

        * loader/EmptyClients.cpp:
        * page/DragActions.h:
        (WebCore::DragSourceAction):
        - Convert to enum class.
        (WebCore::anyDragSourceAction): Add.
        - Replaces WebCore::DragSourceActionAny.
        (WTF::EnumTraits<WebCore::DragSourceAction>): Add.
        (WTF::OptionSetTraits<WebCore::DragSourceAction>): Add.
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::delegateDragSourceAction):
        (WebCore::DragController::draggableElement const):
        (WebCore::DragController::prepareForDragStart const):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doSystemDrag):
        - Use OptionSet<>::toSingleValue() and add ASSERT() that it does
          not return WTF::nullopt.
        * page/DragController.h:
        (WebCore::DragController::dragSourceAction const):
        * page/DragState.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateDragSourceActionsAllowed const):
        (WebCore::EventHandler::dragHysteresisExceeded const):
        - Use OptionSet<>::toSingleValue() and add ASSERT() that it does
          not return WTF::nullopt.
        - Remove case statements for DragSourceActionNone and
          DragSourceActionAny, along with ASSERT_NOT_REACHED(). The
          ASSERT() for toSingleValue() replaces the DragSourceActionNone
          case.
        (WebCore::EventHandler::didStartDrag):
        (WebCore::ExactlyOneBitSet): Delete.
        - Move to WTF::OptionSet<>::hasExactlyOneBitSet().
        (WebCore::EventHandler::handleDrag):
        - Add code to #ifndef NDEBUG/#endif instead of modifying
          dragState().type in-place since it seemed weird to modify it
          just to check an ASSERT(), even though it was overwritten
          immediately after that.
        * page/EventHandler.h:
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):
        - Stop using decodeEnum()/encodeEnum() with
          Optional<DragSourceAction>.

2020-06-11  Youenn Fablet  <youenn@apple.com>

        End a remote MediaStreamTrack if its source is ended
        https://bugs.webkit.org/show_bug.cgi?id=213074

        Reviewed by Eric Carlson.

        Make remote audio/video source observers of their webrtc source.
        In case the webrtc source ends, end the source, thus its related tracks as well.
        This is covered by the above test.

        Test: webrtc/receiver-track-should-stay-live-even-if-receiver-is-inactive.html

        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::~RealtimeIncomingAudioSource):
        (WebCore::RealtimeIncomingAudioSource::startProducingData):
        (WebCore::RealtimeIncomingAudioSource::stopProducingData):
        (WebCore::RealtimeIncomingAudioSource::OnChanged):
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::~RealtimeIncomingVideoSource):
        (WebCore::RealtimeIncomingVideoSource::startProducingData):
        (WebCore::RealtimeIncomingVideoSource::stopProducingData):
        (WebCore::RealtimeIncomingVideoSource::OnChanged):
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::requestToEnd):
        (WebCore::RealtimeMediaSource::end):
        * platform/mediastream/RealtimeMediaSource.h:

2020-06-11  Rob Buis  <rbuis@igalia.com>

        Improve url-setters.html WPT test
        https://bugs.webkit.org/show_bug.cgi?id=213046

        Reviewed by Darin Adler.

        Improve url-setters.html WPT test by testing for failure that can occur
        when setting host or hostname [1].

        [1] https://url.spec.whatwg.org/#host-state

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):
        (WebCore::URLDecomposition::setHostname):

2020-06-11  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement button-press-event, button-release-event, and absolute-axis-event of GAMEPAD API.
        https://bugs.webkit.org/show_bug.cgi?id=133850

        Reviewed by Carlos Garcia Campos.

        This is a follow-up change after r261965, implementing the rest of missing GAMEPAD API
        for the gtk port. Buttons and analog sticks of standard gamepads work with this change.

        No new tests since existing tests can cover this change.

        * html/OffscreenCanvas.h:
        * platform/gamepad/manette/ManetteGamepad.cpp:
        (WebCore::toStandardGamepadAxis):
        (WebCore::onAbsoluteAxisEvent):
        (WebCore::toStandardGamepadButton):
        (WebCore::onButtonPressEvent):
        (WebCore::onButtonReleaseEvent):
        (WebCore::ManetteGamepad::ManetteGamepad):
        (WebCore::ManetteGamepad::~ManetteGamepad):
        (WebCore::ManetteGamepad::buttonPressedOrReleased):
        (WebCore::ManetteGamepad::absoluteAxisChanged):
        * platform/gamepad/manette/ManetteGamepad.h:
        * platform/gamepad/manette/ManetteGamepadProvider.cpp:
        (WebCore::ManetteGamepadProvider::ManetteGamepadProvider):
        (WebCore::ManetteGamepadProvider::~ManetteGamepadProvider):
        (WebCore::ManetteGamepadProvider::gamepadHadInput):
        (WebCore::ManetteGamepadProvider::inputNotificationTimerFired):
        * platform/gamepad/manette/ManetteGamepadProvider.h:

2020-06-10  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Pass an unsigned long to cancelAnimationCallback() as handle
        https://bugs.webkit.org/show_bug.cgi?id=212529

        Reviewed by Youenn Fablet.

        The type of the handle returned by XRSession::requestAnimationFrame() was recently changed
        to unsigned long from long as there was no point in using signed integers for that. However
        we forgot to update the cancelAnimationFrame() in the specs as well as it receives the handle
        returned by requestAnimationFrame().

        We landed https://github.com/immersive-web/webxr/pull/1069 in the WebXR specs so we can now
        safely also replace signed by unsigned integers in our implementation.

        No new tests as there is no change in functionality.

        Reland r262718.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::cancelAnimationFrame): Use unsigned ids.
        * Modules/webxr/WebXRSession.h: Ditto.
        * Modules/webxr/WebXRSession.idl: Ditto.

2020-06-11  Antoine Quint  <graouts@webkit.org>

        [Web Animations] Setting the style at the last style change event to null should not create an ElementAnimationRareData object
        https://bugs.webkit.org/show_bug.cgi?id=213070
        <rdar://problem/63841893>

        Reviewed by Tim Horton.

        In r262154 we added code that records the pre-animation style for a given element in
        Style::TreeResolver::createAnimatedElementUpdate(), which is in Web Animations spec
        parlance the style at the last style change event. This style is set on the backing
        ElementAnimationRareData object for the given Element. For any element that did not
        actually have any animations, we would set this style to null, but the function on
        Element acting as a go-between would always create the backing ElementAnimationRareData
        even though it would set a null value. We now only creaste the ElementAnimationRareData
        object if there is a value to be stored, which fixes a performance regression in the
        Speedometer2 test.

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

2020-06-10  Beth Dakin  <bdakin@apple.com>

        Replace instances of blacklist in WebCore with blocklist
        https://bugs.webkit.org/show_bug.cgi?id=213064

        Reviewed by Tim Horton.

        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/UserContentURLPattern.h:
        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::blocklist const):
        (WebCore::UserScript::encode const):
        (WebCore::UserScript::decode):
        (WebCore::UserScript::blacklist const): Deleted.
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::blocklist const):
        (WebCore::UserStyleSheet::blacklist const): Deleted.
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::checkGPUStatus):
        * platform/mac/PasteboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlocklistedCodecs):
        (WebCore::extendTextCodecMaps):
        (WebCore::pruneBlacklistedCodecs): Deleted.

2020-06-10  Frank Yang  <guowei_yang@apple.com>

        Multiple SVG Filters Unexpectedly lightens image using linearRGB
        https://bugs.webkit.org/show_bug.cgi?id=212649

        Reviewed by Myles C. Maxfield, Simon Fraser, Darin Adler

        Added color space conversion of input FilterEffect ImageBuffer and ImageData
        for filters that directly manipulates pixel values. The conversion
        is missing only on CG platforms because on CG platforms,
        FilterEffect::transformResultColorSpace doesn't perform any operations
        Its author assumed all filters are using CG ImageBuffers, and that
        CG will handle the conversion which is not the case. The following filters
        operates on the raw pixels inside an ImageBuffer, and this requires an explicit
        color space conversion of the pixel values when the ImageData are retrieved
        by calling FilterEffect::copy{Pre/Un}multipliedData(). 

        The filters affected are feComponentTransfer, feComposite, feConvolveMatrix
        feGaussianBlur, FELighting, feMorphology. The conversion is done 
        by CG, by drawing the input ImageBuffer to a new ImageBuffer that 
        has the correct color space tag. The ImageData is then pulled from 
        this new ImageBuffer and used in platformApplySoftware() 

        Tests: svg/filters/feComponentTransfer-clipped-expected.svg
               svg/filters/feComponentTransfer-clipped.svg
               svg/filters/feComposite-clipped-expected.svg
               svg/filters/feComposite-clipped.svg
               svg/filters/feConvolveMatrix-clipped-expected.svg
               svg/filters/feConvolveMatrix-clipped.svg
               svg/filters/feGaussianBlur-clipped-expected.svg
               svg/filters/feGaussianBlur-clipped.svg
               svg/filters/feLighting-clipped-expected.svg
               svg/filters/feLighting-clipped.svg
               svg/filters/feMorphology-clipped-expected.svg
               svg/filters/feMorphology-clipped.svg

        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::platformApplySoftware): Modified function call to
             FilterEffect::premultipliedResult, color space conversion is required on CG 
             platforms, so operatingColorSpace is passed in and input will be converted to 
             that color space
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::platformApplySoftware): Similarly, color space conversion 
             Required on CG color space conversion is required on CG 
             platforms, so operatingColorSpace is passed in and input will be converted to 
             that color space
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::platformApplySoftware): converting to operating space
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::platformApplySoftware): converting to operating space
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplySoftware): converting to operating space
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyDegenerate): converting to operating space
        (WebCore::FEMorphology::platformApplySoftware): converting to operating space
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::unmultipliedResult): modified function signature so that 
             The Optional ColorSpace enum could be passed in to copyUnmultipliedResult()
        (WebCore::FilterEffect::premultipliedResult): modified function signature so that 
             The Optional ColorSpace enum could be passed in to copyUnmultipliedResult()
        (WebCore::FilterEffect::convertImageDataToColorSpace): helper function that takes an ImageData ptr 
             as input, put it into an ImageBuffer, and calls convertImageBufferToColorSpace to
             perform color conversion, and returns the converted ImageData
        (WebCore::FilterEffect::convertImageBufferToColorSpace): helper function that takes an ImageBuffer ptr 
             as input, create a new ImageBuffer with target color space, write input ImageBuffer to this new buffer
             (CG backend handles the conversion) and returns the ImageData in the buffer.
        (WebCore::FilterEffect::copyConvertedImageBufferToDestination): helper function that copies data from ImageBuffer
             whose data is converted to the correct color space, to the destination array
        (WebCore::FilterEffect::copyConvertedImageDataToDestination): helper function that copies data from ImageData
             whose data is converted to the correct color space, to the destination array
        (WebCore::FilterEffect::copyUnmultipliedResult): added an optional argument, colorSpace, which will be passed 
             into requiresAdditionalColorSpaceConversion, in order to determine if color space conversion is required
             when obtaining the unmultiplied result. Then, added code to convert color space before writing to the 
             destination array
        (WebCore::FilterEffect::copyPremultipliedResult): added an optional argument, colorSpace, which will be passed
             into requiresAdditionalColorSpaceConversion, in order to determine if color space conversion is required
             when obtaining the premultiplied result. Then, added code to convert color space before writing to the
             destination array.
        (WebCore::FilterEffect::requiresImageDataColorSpaceConversion): unction that only returns true 
              when 1) destination color space is non-null and is different than current color space AND 
                   2) the code is running on CG platforms
              This function will only be called inside copy{Un, Pre}multipliedResult, to address the issue
              where color space is needed for filters that modifies raw pixels.
        * platform/graphics/filters/FilterEffect.h: Added function declarations

2020-06-10  Zalan Bujtas  <zalan@apple.com>

        [Line clamp] Do not apply the special anchor handling when the anchor content is visible after clamping
        https://bugs.webkit.org/show_bug.cgi?id=213052
        <rdar://problem/59739131>

        Reviewed by Simon Fraser.

        Line clamping tries to preserve the anchor text if it is at the bottom of the paragraph to support cases like "... Read more", where the "read more" is an actual link.
        This patch makes sure that we only apply the special case handling if the anchor text get clamped.

        Test: fast/flexbox/line-clamp-with-anchor-content-only.html

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):

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

        [Cocoa] CRASH: imported/w3c/web-platform-tests/remote-playback/watch-availability-initial-callback.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=213044
        <rdar://problem/62317723>

        Reviewed by Eric Carlson.

        Add null-checks around previously non-null-checked derefs of WeakPtr<HTMLMediaElement>.

        * Modules/remoteplayback/RemotePlayback.cpp:
        (WebCore::RemotePlayback::watchAvailability):
        (WebCore::RemotePlayback::shouldPlayToRemoteTargetChanged):
        (WebCore::RemotePlayback::playbackTargetPickerWasDismissed):

2020-06-10  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation does not observe inserted elements that are invisible
        https://bugs.webkit.org/show_bug.cgi?id=213057
        <rdar://problem/63768253>

        Reviewed by Wenson Hsieh.

        TextManipulationController gets notification when renderer of an element is created and starts observing the 
        element. It currently sets the observing range to be the visible start position and visible end position of the 
        element. When the invisible content becomes visible later, TextManipulationController does not get notification 
        and will miss the content. Therefore, TextManipulationController should use the actual start and end positions 
        of the element for range.

        Test: TextManipulation.StartTextManipulationFindsInsertedClippedText

        * editing/TextManipulationController.cpp:
        (WebCore::makeHashablePositionRange):
        (WebCore::TextManipulationController::scheduleObservationUpdate):

2020-06-10  Geoffrey Garen  <ggaren@apple.com>

        Some style improvements to main thread code
        https://bugs.webkit.org/show_bug.cgi?id=213051

        Reviewed by Darin Adler.

        Updated for rename.

        * WebCore.order:
        * platform/ios/wak/WebCoreThread.mm:
        (StartWebThread):

2020-06-10  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Release Assert @ WebCore::RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212714

        Reviewed by Geoffrey Garen.

        Replaced call to WTFMove(widgetNewParentMap()) with std::exchange(widgetNewParentMap(), { }) in the 
        WidgetHierarchyUpdatesSuspensionScope::moveWidgets(), thereby making it explicit to set the source map empty.

        Test would be added later.

        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):

2020-06-10  Brent Fulgham  <bfulgham@apple.com>

        Improve CSP compliance under PSON
        https://bugs.webkit.org/show_bug.cgi?id=212995
        <rdar://problem/62996186>

        Reviewed by Chris Dumez.

        Tests: http/tests/security/contentSecurityPolicy/1.1/form-action-src-self-blocked.html

        The form submission logic was only considering CSP if the form
        action was a JavaScript URL. This is incorrect, as CSP might
        apply to any URL.

        This is also covered by the existing form-action CSP tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): All URLs should be evaluted for
        compliance with CSP.

2020-06-10  Brian Burg  <bburg@apple.com>

        WebDriver on non-iOS ports cannot perform ActionChain which has scrolling down to the element and click it
        https://bugs.webkit.org/show_bug.cgi?id=208232
        <rdar://problem/59859491>

        Reviewed by Devin Rousso.

        * platform/ScrollView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToContents const):
        Create a version of this function that works with FloatPoint.

2020-06-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262718.
        https://bugs.webkit.org/show_bug.cgi?id=213047

        Broke WPE Debug too

        Reverted changeset:

        "[WebXR] Pass an unsigned long to cancelAnimationCallback() as
        handle"
        https://bugs.webkit.org/show_bug.cgi?id=212529
        https://trac.webkit.org/changeset/262718

2020-06-10  Antoine Quint  <graouts@webkit.org>

        Subframes should not autosize independently
        https://bugs.webkit.org/show_bug.cgi?id=212984
        <rdar://problem/64175493>

        Reviewed by Simon Fraser.

        * page/FrameView.cpp:
        (WebCore::FrameView::enableAutoSizeMode):

2020-06-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE Debug build fix attempt after r262838.

        Second attempt. :) Still broken because of r262718 though...

        * platform/xr/openxr/PlatformXROpenXR.cpp:

2020-06-10  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, WPE Debug build fix attempt after r262838.

        Still broken because of r262718 though...
        
        * platform/xr/openxr/PlatformXROpenXR.cpp:

2020-06-10  Youenn Fablet  <youenn@apple.com>

        BaseAudioSharedUnit does not need to restart its audio unit at resume time.
        https://bugs.webkit.org/show_bug.cgi?id=213021

        Reviewed by Eric Carlson.

        Removing a case that should not happen, and was guarded by ASSERT.
        Keeping ASSERT to make sure we do not break this assumption.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::resume):
        (WebCore::BaseAudioSharedUnit::suspend):

2020-06-10  Youenn Fablet  <youenn@apple.com>

        REGRESSION(r262798): fast/mediastream/media-stream-track-interrupted.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=213011

        Reviewed by Eric Carlson.

        Before the patch, a source that is muted and for which its observers get ended will not be ended.
        This is a potential issue as the source can get unmuted, in which case, the audio shared unit might be asked to restart.
        This is crashing in debug as we would not have the AudioSession correct category for audio capture.

        Test: fast/mediastream/track-ended-while-muted.html
        Also covered by fast/mediastream/media-stream-track-interrupted.html no longer flakily crashing in debug.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::requestToEnd):
        End the source even if muted.
        * platform/mediastream/RealtimeMediaSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isMediaStreamSourceEnded const):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add necessary test infrastructure.

2020-06-05  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Refactor OpenXR platform code
        https://bugs.webkit.org/show_bug.cgi?id=212470

        Reviewed by Youenn Fablet.

        Refactored a bit the platform code because we want to extend the PlatformXR::Device for the OpenXR
        library. Also we're removing all the device id code because there is no need to expose it.

        The idea from now on is to only define interfaces in PlatformXR.h and then add all the OpenXR specifics
        in the newly renamed PlatformXROpenXR.[ch] files. We're also renaming PlatformXR.cpp to
        PlatformXROpenXR.cpp to clearly state that it's the OpenXR implementation and to differentiate it from
        the implementation agnostic PlatformXR.h file.

        No new tests as there is no change in functionality.

        * Sources.txt: Added renamed files. Removed PlatformXR.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/xr/PlatformXR.cpp: Removed.
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::id const): Deleted.
        (PlatformXR::Device::operator== const): Deleted.
        * platform/xr/openxr/PlatformXROpenXR.cpp: Renamed from Source/WebCore/platform/xr/openxr/PlatformXR.cpp.
        (PlatformXR::Instance::Impl::~Impl): Call xrDestroyInstance() on m_instance.
        (PlatformXR::Instance::Impl::collectSupportedSessionModes): Do not pass XrSystemId as argument
        as it's stored in the OpenXRDevice object.
        (PlatformXR::Instance::enumerateImmersiveXRDevices): Create an OpenXRDevice instead of a Device.
        * platform/xr/openxr/PlatformXROpenXR.h: Added.

2020-06-09  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Release Assert @ WebCore::RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212714

        Reviewed by Geoffrey Garen.

        Made change in the WidgetHierarchyUpdatesSuspensionScope::moveWidgets() to handle all widgets scheduled to move,
        including new widgets scheduled during moveWidgets().

        Test would be added later.

        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):

2020-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, reverting r262791.

        WinCairo WebKit1 is crashing.

        Reverted changeset:

        "[Curl] Implement functions to use ResourceLoadStatistics."
        https://bugs.webkit.org/show_bug.cgi?id=207692
        https://trac.webkit.org/changeset/262791

2020-06-09  Simon Fraser  <simon.fraser@apple.com>

        Minor overflow layers cleanup
        https://bugs.webkit.org/show_bug.cgi?id=213002

        Reviewed by Zalan Bujtas.

        Now that we parent scrollbar and scroll corner layers into the overflowControlsContainer
        layer, we no need to parent these layers in RenderLayerCompositor::updateBackingAndHierarchy().

        Also rename overflowControlsHostLayerBox to overflowControlsHostLayerRect to avoid
        ambiguity with RenderBox.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        (WebCore::overflowControlsHostLayerRect):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::overflowControlsHostLayerBox): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):

2020-06-09  Mark Lam  <mark.lam@apple.com>

        Disambiguate the OverridesGetPropertyNames structure flag
        https://bugs.webkit.org/show_bug.cgi?id=212909
        <rdar://problem/63823557>

        Reviewed by Saam Barati.

        1. JSDOMWindowProperties was not defining its Base.  As a result, its
           StructureFlags was inheriting from JSDOMObject's Base instead of from JSDOMObject
           as one would expect.  This turns out to be harmless because JSDOMObject did not
           define any StructureFlags.  Regardless, this is not fixed so that if JSDOMObject
           adds any StructureFlags, it will be inherited properly by JSDOMWindowProperties.

        2. Updated CodeGeneratorJS.pm and rebased the binding test results.

        * bindings/js/JSDOMWindowProperties.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestEventTarget.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:
        * bridge/runtime_array.h:
        * bridge/runtime_object.h:

2020-06-09  Dean Jackson  <dino@apple.com>

        Stop using discriminatory names for WebGL and Plugin blocking
        https://bugs.webkit.org/show_bug.cgi?id=213000

        Reviewed by Simon Fraser.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/BlocklistUpdater.h: Renamed from Source/WebCore/platform/mac/BlacklistUpdater.h.
        (WebCore::BlocklistUpdater::pluginBlocklist):
        (WebCore::BlocklistUpdater::webGLBlocklist):
        * platform/mac/BlocklistUpdater.mm: Renamed from Source/WebCore/platform/mac/BlacklistUpdater.mm.
        (WebCore::BlocklistUpdater::readBlocklistData):
        (WebCore::BlocklistUpdater::reloadIfNecessary):
        (WebCore::BlocklistUpdater::initializeQueue):
        * platform/mac/PluginBlocklist.h: Renamed from Source/WebCore/platform/mac/PluginBlacklist.h.
        * platform/mac/PluginBlocklist.mm: Renamed from Source/WebCore/platform/mac/PluginBlacklist.mm.
        (WebCore::PluginBlocklist::loadPolicyForPluginVersion):
        (WebCore::PluginBlocklist::isPluginUpdateAvailable):
        (WebCore::PluginBlocklist::create):
        (WebCore::PluginBlocklist::~PluginBlocklist):
        (WebCore::PluginBlocklist::splitOSVersion):
        (WebCore::PluginBlocklist::loadPolicyForPlugin const):
        (WebCore::PluginBlocklist::isUpdateAvailable const):
        (WebCore::PluginBlocklist::PluginBlocklist):
        * platform/mac/WebGLBlocklist.h: Renamed from Source/WebCore/platform/mac/WebGLBlacklist.h.
        * platform/mac/WebGLBlocklist.mm: Renamed from Source/WebCore/platform/mac/WebGLBlacklist.mm.
        (WebCore::buildInfoFromOSBuildString):
        (WebCore::WebGLBlocklist::shouldBlockWebGL):
        (WebCore::WebGLBlocklist::shouldSuggestBlockingWebGL):
        (WebCore::matchesBuildInfo):
        (WebCore::WebGLBlocklist::create):
        (WebCore::WebGLBlocklist::shouldBlock const):
        (WebCore::WebGLBlocklist::shouldSuggestBlocking const):
        (WebCore::WebGLBlocklist::WebGLBlocklist):
        (WebCore::WebGLBlocklist::~WebGLBlocklist):

2020-06-09  Simon Fraser  <simon.fraser@apple.com>

        Logging and tree dumping crash fix
        https://bugs.webkit.org/show_bug.cgi?id=212988

        Reviewed by Zalan Bujtas.

        Add scrolling logging to RenderLayer::requestScrollPositionUpdate().

        Null-check the scrollerImp in ScrollbarThemeMac::isLayoutDirectionRTL, because this is
        called from renderTreeAsText() which can be invoked from the debugger, and should not crash.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::isLayoutDirectionRTL):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::requestScrollPositionUpdate):

2020-06-09  Andy Estes  <aestes@apple.com>

        Unreviewed change for post-commit feedback after r262682.

        * DerivedSources.make: Replaced tabs with spaces.

2020-06-09  Frank Yang  <guowei_yang@apple.com>

        WebKit Crashes when SVG Filter Logging is Turned On
        https://bugs.webkit.org/show_bug.cgi?id=212415

        Reviewed by Darin Adler.

        No new tests are required because this is just 
        fixing a simple pointer access inside logging code

        * html/ImageData.cpp:
        (WebCore::operator<<): Overloaded << operator to print the 
               address of pixel data it stores
        * html/ImageData.h: Declare overloaded << operator
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::imageBufferResult): Modified logging code
               so that it does a null check by calling ValueOrNull on 
               m_premultipliedImageResult and m_unmultipliedImageResult
        (WebCore::FilterEffect::copyUnmultipliedResult):  Modified logging code
               so that it does a null check by calling ValueOrNull on
               m_premultipliedImageResult and m_unmultipliedImageResult
        (WebCore::FilterEffect::copyPremultipliedResult):  Modified logging code
               so that it does a null check by calling ValueOrNull on
               m_premultipliedImageResult and m_unmultipliedImageResult

2020-06-09  Dean Jackson  <dino@apple.com>

        REGRESSION: [Safari Mojave for High Sierra] Accessing some of the featured pages on apple.com causes the webpage to crash
        https://bugs.webkit.org/show_bug.cgi?id=212940
        rdar://63839405

        Reviewed by Tim Horton.

        The code to use the singleton for a SwitchingGPUClient was assuming it
        has always been set, which was not the case when
        ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) was not true.

        * platform/graphics/opengl/GraphicsContextGLOpenGLManager.cpp: Check the state of the
        singleton before calling it.
        (WebCore::GraphicsContextGLOpenGLManager::updateHighPerformanceState):
        (WebCore::GraphicsContextGLOpenGLManager::disableHighPerformanceGPUTimerFired):
        * platform/graphics/mac/SwitchingGPUClient.h: Return a pointer to the singleton which
        will allow the code to check for its existence.
        (WebCore::SwitchingGPUClient::singletonIfExists):

2020-06-09  Sam Weinig  <weinig@apple.com>

        Extended Color: Streamline SimpleColor premulitply/unpremultiply code
        https://bugs.webkit.org/show_bug.cgi?id=212945

        Reviewed by Darin Adler.

        Simplify / streamline the premulitply/unpremultiply code by:
        - Removing the overloads that didn't take individual components, keeping 
          only the ones taking a SimpleColor.
        - Replacing the "ceiling" bool in makePremultipliedSimpleColor and converting
          it into two functions.
        - Simplifying the names from makePremultipliedSimpleColor/makeUnpremultipliedSimpleColor
          to premultiplyFlooring/premultiplyCeiling/unpremultiply.
        - Where component order is important, use valueAsARGB() explicitly to
          show what the resulting value's format will be.

        * platform/graphics/Color.cpp:
        (WebCore::blend):
        Update to call premultiplyCeiling/unpremultiply.

        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::blendPixel):
        (WebCore::ImageBackingStore::pixelValue const):
        Update to call premultiplyFlooring/unpremultiply and valueAsARGB().

        * platform/graphics/SimpleColor.h:
        * platform/graphics/SimpleColor.cpp:
        (WebCore::premultiplyFlooring):
        (WebCore::premultiplyCeiling):
        (WebCore::unpremultiplyChannel):
        (WebCore::unpremultiply):
        (WebCore::premultipliedChannel): Deleted.
        (WebCore::unpremultipliedChannel): Deleted.
        (WebCore::makePremultipliedSimpleColor): Deleted.
        (WebCore::makeUnpremultipliedSimpleColor): Deleted.
        Simplify premulitply/unpremultiply interfaces. Use structured bindings to make
        the code a bit easier to follow as well.
        
        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
        Update to call premultiplyFlooring/unpremultiply and valueAsARGB().

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        Update to call premultiplyFlooring/unpremultiply and valueAsARGB(). Also removes
        reinterpret cast to SimpleColor, instead following the model in ImageBufferCairoImageSurfaceBackend
        and casting to unsigned, and building the SimpleColor from that. This will allow 
        SimpleColor to change its underlying representation in the future without breaking things.

2020-06-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r261841.
        https://bugs.webkit.org/show_bug.cgi?id=212991

        Caused spotify pages to scroll to the top
        (<http://webkit.org/b/212983|webkit.org/b/212983>)

        Reverted changeset:

        "[css-grid] Clear the override width for computing percent
        margins"
        https://bugs.webkit.org/show_bug.cgi?id=209461
        https://trac.webkit.org/changeset/261841

2020-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] ComplexTextControllerUniscribe: Retry ScriptShape with SCRIPT_UNDEFINED if it failed as USP_E_SCRIPT_NOT_IN_FONT
        https://bugs.webkit.org/show_bug.cgi?id=212947

        Reviewed by Don Olmstead.

        If the given font doesn't support the givin text, ScriptShape API
        fails as USP_E_SCRIPT_NOT_IN_FONT. In the case, the complex run
        was simply ignored and nothing was drawn for the text.

        According to Uniscribe document, We should retry ScriptShape with
        SCRIPT_UNDEFINED to get missing glyphs.
        <https://docs.microsoft.com/en-us/windows/win32/intl/displaying-text-with-uniscribe>

        * platform/graphics/win/ComplexTextControllerUniscribe.cpp:
        (WebCore::shapeByUniscribe):

2020-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        ComplexTextController: Use std::sort to calculate m_runIndices
        https://bugs.webkit.org/show_bug.cgi?id=212944

        Reviewed by Myles C. Maxfield.

        ComplexTextController was using O(n²) sort to lazily calculate
        m_runIndices. And, exact matching stringBegin and stringEnd can
        cause infinite loop (Bug 212670 and Bug 108877).

        Use std::sort instead.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::finishConstruction):
        (WebCore::ComplexTextController::indexOfCurrentRun):

2020-06-09  Youenn Fablet  <youenn@apple.com>

        BaseAudioSharedUnit should unmute its clients in case of suspension even if not having any audio unit
        https://bugs.webkit.org/show_bug.cgi?id=212970

        Reviewed by Eric Carlson.

        CoreAudioCaptureSource(s), when muted, are now calling stopProducingData.
        This will, in turn, make the BaseAudioSharedUnit stop and no longer have any audio unit.
        In that case, when resume is called on the BaseAudioSharedUnit, it will exit early as the audio unit is null.
        This will prevent to unmute the CoreAudioCaptureSource(s).

        Fix this by removing the audio unit check in BaseAudioSharedUnit::resume.
        Add infrastructure testing to be able to write a test.

        Covered by added test.

        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::resume):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::setInterruptedForTesting):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isMediaStreamSourceInterrupted const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-09  Myles C. Maxfield  <mmaxfield@apple.com>

        lang=zh needs to defer to system preferences to know whether it should be simplified or traditional
        https://bugs.webkit.org/show_bug.cgi?id=212626
        <rdar://problem/60227623>

        Reviewed by Darin Adler.

        If the content says lang="zh" font-family: sans-serif, we have no signal for whether
        the content should be traditional or simplified. In this case, we should pick based
        on system preferences to make it more likely that we get the right answer.

        This is actually what some Cocoa platform text functions were doing, but not all of them.
        We need to do it at our level in WebKit to make sure that all our calls to the platform
        have consistent behavior. Also, we can cache the result at our level, which is more
        performant than if the platform cached it at each platform entry point.

        We already started consulting with system preferences to make this decision in r189038.
        This patch extends that and fixes it to throughout WebKit.

        This doesn't expose any new fingerprinting data, because this information was already
        exposed (e.g. by drawing fallback fonts to the canvas and then reading back the pixels).

        Tests: fast/text/locale-getComputedStyle.html
               fast/text/international/generic-font-family-language-traditional.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
        * css/CSSFontSelector.cpp:
        (WebCore::resolveGenericFamily):
        * css/CSSProperties.json:
        * layout/inlineformatting/InlineLineBreaker.cpp:
        (WebCore::Layout::LineBreaker::wordBreakBehavior const):
        (WebCore::Layout::LineBreaker::tryBreakingTextRun const):
        * platform/graphics/Font.cpp:
        (WebCore::Font::systemFallbackFontForCharacter const):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::FontDescriptionKey):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthForSimpleText const):
        * platform/graphics/FontCascadeDescription.cpp:
        * platform/graphics/FontCascadeDescription.h:
        (WebCore::FontCascadeDescription::initialSpecifiedLocale):
        (WebCore::FontCascadeDescription::initialLocale): Deleted.
        * platform/graphics/FontDescription.cpp:
        (WebCore::computeSpecializedChineseLocale):
        (WebCore::cachedSpecializedChineseLocale):
        (WebCore::fontDescriptionLanguageChanged):
        (WebCore::specializedChineseLocale):
        (WebCore::FontDescription::setSpecifiedLocale):
        (WebCore::FontDescription::setLocale): Deleted.
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::computedLocale const):
        (WebCore::FontDescription::specifiedLocale const):
        (WebCore::FontDescription::operator== const):
        (WebCore::FontDescription::encode const):
        (WebCore::FontDescription::decode):
        (WebCore::FontDescription::locale const): Deleted.
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::FontDescription::platformResolveGenericFamily):
        (WebCore::computeSpecializedChineseLocale): Deleted.
        (WebCore::cachedSpecializedChineseLocale): Deleted.
        (WebCore::languageChanged): Deleted.
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::computeText const):
        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::applyTextTransform):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::paintApplePayButton):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::computedLocale const):
        (WebCore::RenderStyle::specifiedLocale const):
        (WebCore::RenderStyle::locale const): Deleted.
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyValueWebkitLocale):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2020-06-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for empty table
        https://bugs.webkit.org/show_bug.cgi?id=212971

        Reviewed by Antti Koivisto.

        No need to run formatting context layout when the table box has no descendant.

        Test: fast/layoutformattingcontext/empty-table-box.html

        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::isEmpty const):

2020-06-09  Youenn Fablet  <youenn@apple.com>

        Forward declare MediaKeys/MediaKeySession in Internals.h
        https://bugs.webkit.org/show_bug.cgi?id=212965

        Reviewed by Xabier Rodriguez-Calvar.

        No change of behavior.

        * testing/Internals.cpp:
        * testing/Internals.h:

2020-06-09  Youenn Fablet  <youenn@apple.com>

        Fix two MediaStream tests
        https://bugs.webkit.org/show_bug.cgi?id=208926
        <rdar://problem/60329008>

        Reviewed by Eric Carlson.

        Previously, the mock capture sample rate was the one of the mock audio shared unit, which is the sample rate of the audio session by default.
        This sample rate may change according the bots.
        For that reason, explicitly set the mock shared unit sample rate to the default sample rate of the device, just before creating the source.
        MediaConstraints may still apply after this step.

        Fix an issue where we would use the real core audio unit in CoreAudioCaptureSource constructor.
        We now pass the unit override if any in constructor.

        Covered by unflaked tests.

        * platform/mediastream/mac/BaseAudioSharedUnit.cpp:
        (WebCore::BaseAudioSharedUnit::BaseAudioSharedUnit):
        * platform/mediastream/mac/BaseAudioSharedUnit.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::initializeCoreAudioCaptureSource):
        (WebCore::CoreAudioSharedUnit::CoreAudioSharedUnit):
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSource::createForTesting):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockAudioSharedUnit::MockAudioSharedUnit):
        Do not disable echo cancellation to mimick what the real unit is doing.

2020-06-09  Zalan Bujtas  <zalan@apple.com>

        [LFC][Table][Floats] Multi-pass table layout needs clean floating state
        https://bugs.webkit.org/show_bug.cgi?id=212889

        Reviewed by Antti Koivisto.

        When laying out the cell content multiple times to accommodate flex table layout,
        the float state needs be cleared to avoid having redundant float content.

        Test: fast/layoutformattingcontext/float-inside-table-cell-simple.html

        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::floatBox const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):

2020-06-09  Takashi Komori  <Takashi.Komori@sony.com>

        [Curl] Implement functions to use ResourceLoadStatistics.
        https://bugs.webkit.org/show_bug.cgi?id=207692

        Reviewed by Don Olmstead.

        Implement functions which are required to implement ResourceLoadStatistics for Curl port.

        Tests: http/tests/resourceLoadStatistics/

        * CMakeLists.txt:
        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::openDatabase):
        (WebCore::CookieJarDB::setCookie):
        (WebCore::CookieJarDB::allDomains):
        (WebCore::CookieJarDB::deleteCookiesForHostname):
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):

2020-06-09  Sam Weinig  <weinig@apple.com>

        Extended Color: Switch ColorMac.mm's nsColor() function over to using TinyLRUCache
        https://bugs.webkit.org/show_bug.cgi?id=212918

        Reviewed by Darin Adler.

        * platform/graphics/Color.h:
        (WebCore::Color::isExtended const):
        Make asSimple() public, so nsColor() can use it. This also allows us to unfriend cachedCGColor().

        * platform/graphics/mac/ColorMac.mm:
        (WTF::RetainPtr<NSColor>>::createValueForKey):
        (WebCore::nsColor):
        Mimic the structure of cachedCGColor() by switching over simpleColor values for common
        colors and using a 32 value TinyLRUCache for the rest.

2020-06-09  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] CDMProxyInstance should not keep CDMInstanceSessions hard referenced
        https://bugs.webkit.org/show_bug.cgi?id=212689

        Reviewed by Youenn Fablet.

        Sessions are now tracked as WeakPtr inside the CDMInstanceProxy
        instead of RefPtr because this creates referencing issues as the
        internal objects should be released when the backing JS object is
        garbage collected.

        Test: media/encrypted-media/clearKey/clearKey-session-life-cycle.html

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/encryptedmedia/MediaKeys.idl:
        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMInstanceProxy::trackSession):
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::CDMInstanceProxy::trackSession):
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::createSession):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaKeysInternalInstanceObjectRefCount const):
        (WebCore::Internals::mediaKeySessionInternalInstanceSessionObjectRefCount const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-09  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController range of paragraph may be wrong after r262601
        https://bugs.webkit.org/show_bug.cgi?id=212874

        Reviewed by Wenson Hsieh.

        Start and end position of item are not properly set in r262601.

        Test: TextManipulation.CompleteTextManipulationSuccedsWhenContentOutOfParagraphIsAdded

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::addItemIfPossible):

2020-06-08  Sihui Liu  <sihui_liu@apple.com>

        TextManipulation should only convert text from Node's text content to tokens
        https://bugs.webkit.org/show_bug.cgi?id=212928

        Reviewed by Wenson Hsieh.

        TextIterator may emit text like line breaks between nodes. This kind of text is generated based on the range of 
        TextIterator and style of node. We need this text for splitting tokens or splitting paragraphs, but we should 
        not convert it to normal tokens. This is because tokens should be created from content of node and text 
        manipulation fails if content does not match. The change of this kind of text does not indicate change in 
        content and we may still be able to finish text manipulation.

        Test: TextManipulation.CompleteTextManipulationReplaceTwoSimpleParagraphs

        * editing/TextManipulationController.cpp:
        (WebCore::isInPrivateUseArea):
        (WebCore::isTokenDelimiter):
        (WebCore::ParagraphContentIterator::currentContent):
        (WebCore::ParagraphContentIterator::appendToText):
        (WebCore::ParagraphContentIterator::advanceIteratorNodeAndUpdateText):
        (WebCore::TextManipulationController::createUnit):
        (WebCore::TextManipulationController::parse):
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::replace):
        * editing/TextManipulationController.h:

2020-06-08  Rob Buis  <rbuis@igalia.com>

        XMLHTTPRequest.send should not send Content-Type headers when Blob has no type
        https://bugs.webkit.org/show_bug.cgi?id=211999

        Reviewed by Alex Christensen.

        XMLHTTPRequest.send should not send Content-Type headers when Blob has no type [1, 2].
        This behavior overrides the behavior of the File API spec [3].

        Behavior matches Firefox and Chrome.

        Test: imported/w3c/web-platform-tests/xhr/send-blob-with-no-mime-type.html

        [1] https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send
        [2] https://fetch.spec.whatwg.org/#concept-bodyinit-extract
        [3] http://dev.w3.org/2006/webapi/FileAPI/#dfn-type

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2020-06-08  Simon Fraser  <simon.fraser@apple.com>

        Horizontally scrolling elements are broken when revealed by toggling visibility
        https://bugs.webkit.org/show_bug.cgi?id=212439
        <rdar://problem/63739559>

        Reviewed by Zalan Bujtas.

        When revealing an overflow:scroll by toggling the visibility property, make sure that
        we use composited scrolling.

        computeScrollDimensions() is only updated on layout, so we need to recompute m_hasCompositedScrollableOverflow
        on style change as well.

        Test: compositing/scrolling/async-overflow-scrolling/toggle-visibility-on-scroller.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::computeHasCompositedScrollableOverflow):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Rename Color::lighten() and Color::darken() to Color::lightened() and Color::darkened()
        https://bugs.webkit.org/show_bug.cgi?id=212917

        Reviewed by Darin Adler.

        Addresses feedback from Darin.

        * platform/graphics/Color.cpp:
        (WebCore::Color::lightened const):
        (WebCore::Color::darkened const):
        (WebCore::Color::lighten const): Deleted.
        (WebCore::Color::darken const): Deleted.
        * platform/graphics/Color.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::calculateBorderStyleColor):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        * rendering/TextPaintStyle.cpp:
        (WebCore::adjustColorForVisibilityOnBackground):

2020-06-08  Devin Rousso  <drousso@apple.com>

        Remove unnecessary variable in `WindowProxy::createJSWindowProxy`
        https://bugs.webkit.org/show_bug.cgi?id=212929

        Reviewed by Darin Adler.

        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::createJSWindowProxy):

2020-06-08  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Release Assert @ WebCore::RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212714

        Reviewed by Geoffrey Garen.

        Widget removal in the middle of building a Render Tree causes side effects, leading to Release Assert. Moved the scope for suspension of widgets
        update to RenderTreeBuilder instead of having it in RenderTreeUpdater.

        Test would be added later.

        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2020-06-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Use usual promise in readableStreamTee
        https://bugs.webkit.org/show_bug.cgi?id=212715

        Reviewed by Mark Lam.

        The spec[1] is organized to be OK to use usual promises here. This patch uses usual promises instead of internal ones.

        [1]: https://streams.spec.whatwg.org/#readable-stream-tee

        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamTee):

2020-06-08  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for DragOperation
        <https://webkit.org/b/212870>
        <rdar://problem/64069940>

        Reviewed by Darin Adler.

        * dom/DataTransfer.cpp:
        (WebCore::dragOpFromIEOp):
        (WebCore::IEOpFromDragOp):
        (WebCore::DataTransfer::sourceOperationMask const):
        (WebCore::DataTransfer::destinationOperationMask const):
        (WebCore::DataTransfer::setSourceOperationMask):
        (WebCore::DataTransfer::setDestinationOperationMask):
        (WebCore::DataTransfer::setEffectAllowed):
        * page/DragActions.h:
        (WebCore::DragOperation):
        - Convert to enum class.
        (WebCore::anyDragOperation):
        * page/DragController.cpp:
        (WebCore::DragController::platformGenericDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::convertDropZoneOperationToDragOperation):
        (WebCore::convertDragOperationToDropZoneOperation):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        (WebCore::DragController::platformGenericDragOperation):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::dragOperation):
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::gdkDragActionToDragOperation):
        (WebCore::dragOperationToGdkDragActions):
        (WebCore::dragOperationToSingleGdkDragAction):

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Unify rounding / clamping conversions between 0-1 float components and 0-255 byte components
        https://bugs.webkit.org/show_bug.cgi?id=212871

        Reviewed by Simon Fraser.
        
        Unify all conversions of 0.0f - 1.0f float based color components to 0-255 int based color components
        to use the new convertToComponentByte() function which scales, rounds (using lroundf) and clamps the
        value. For consistency, a convertToComponentFloat() function, which just scales down an int based value
        to a float based value, is also added.
        
        - Removes *UsingAlternativeRounding variants (actually, we now only have this variant) for color functions
          which allowed callers to pick from truncation vs. rounding when overriding alpha.
        - Replaces all uses of scaleRoundAndClampColorChannel() with convertToComponentByte() (really just a rename).
        - Replaces uses of nextafter(256, 0) based conversions with convertToComponentByte().
        
        Also:
        - Moves roundAndClampColorChannel() functions to SVGAnimationAdditiveValueFunctionImpl.h, which was
          the only places they were used.
        - Removes areEssentiallyEqual() overload taking ColorComponents<float>. It was ununsed.
        - Removes makeSimpleColorFromHSLA(...) and just inlines makeSimpleColor(hslToSRGB(...)) which now
          does the same thing.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::clampRGBComponent):
        Use convertPrescaledToComponentByte() to round and clamp the components.

        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        Use uint8_t more consistently now that helpers ensure that is the return type
        of conversion functions.

        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        Switch to using makeSimpleColor(hslToSRGB(...)) directly.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        Switch to using makeSimpleColor(hslToSRGB(...)) directly.

        * html/HTMLElement.cpp:
        (WebCore::parseLegacyColorValue):
        Use uint8_t since that is what toASCIIHexValue() returns.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setStrokeStyle):
        (WebCore::CanvasRenderingContext2DBase::setFillStyle):
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        Replaces uses of colorWithAlphaUsingAlternativeRounding() with colorWithAlpha().

        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        Use convertToComponentByte() rather than a simple truncating cast.

        * platform/graphics/Color.cpp:
        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        Use makeSimpleColorFromFloats() rather than nextafterf(256.0f, 0.0f) conversion.

        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::invertedColorWithAlpha const):
        Use convertToComponentByte() for alpha conversion.
        
        (WebCore::Color::toSRGBASimpleColorLossy const):
        Call asExtended().toSRGBAComponentsLossy() directly to avoid unnecessary branch.
        
        (WebCore::Color::colorWithAlphaMultipliedBy const): Deleted.
        (WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
        Remove UsingAlternativeRounding variants.

        * platform/graphics/Color.h:
        (WebCore::Color::alpha const):
        Use convertToComponentByte() for alpha conversion.

        (WebCore::Color::invertedColorWithAlpha const):
        Add an overload taking an Optional<float> for consistency.

        (WebCore::Color::colorWithAlphaMultipliedBy const):
        (WebCore::Color::colorWithAlpha const):
        Simplify by inlining all variants except the main colorWithAlpha().

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::areEssentiallyEqual): Deleted.
        Remove unused function.

        * platform/graphics/ColorUtilities.h:
        (WebCore::convertPrescaledToComponentByte):
        Added. Useful for callers who already have prescaled values but need rounding/clamping.

        (WebCore::convertToComponentByte):
        Added. Bottleneck for float to byte based color component conversions.
        (WebCore::convertToComponentFloat):
        Added. Bottleneck for byte to float based color component conversions.

        * platform/graphics/SimpleColor.cpp:
        (WebCore::makeSimpleColorFromCMYKA):
        Use makeSimpleColorFromFloats() rather than nextafterf(256.0f, 0.0f) conversion. Eventually,
        when we probably want this to go away and store CMYKA colors as ExtendedColors with their own
        color space. 

        (WebCore::makeSimpleColorFromFloats): 
        Moved to header.

        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::alphaComponentAsFloat const):
        Use convertToComponentFloat().

        (WebCore::SimpleColor::asSRGBFloatComponents const):
        Use convertToComponentFloat().

        (WebCore::makeSimpleColor):
        Avoid unncessary clamping of the alpha component by calling constructor directly.

        (WebCore::makeSimpleColorFromFloats):
        Inlined. Calls convertToComponentByte now rather than the older (identical) scaleRoundAndClampColorChannel().

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::prepareCairoContextSource):
        Replaces use of colorWithAlphaMultipliedByUsingAlternativeRounding with colorWithAlphaMultipliedBy().

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeSimpleColorFromCGColor):
        Use makeSimpleColorFromFloats() rather than nextafter(256.0, 0.0) conversion.

        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        Replaces use of colorWithAlphaMultipliedByUsingAlternativeRounding with colorWithAlphaMultipliedBy().

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        Use makeSimpleColorFromFloats() rather than nextafter(256.0, 0.0) conversion.

        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromUIColor):
        Use makeSimpleColorFromFloats() rather than nextafter(256.0, 0.0) conversion.

        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):
        Replaces use of colorWithAlphaMultipliedByUsingAlternativeRounding with colorWithAlphaMultipliedBy().

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::roundAndClampColorChannel):
        Moved from ColorUtilities.h as this was the only use.

2020-06-08  Sam Weinig  <weinig@apple.com>

        Extended Color: Replace uses of differenceSquared() with luminance based computations
        https://bugs.webkit.org/show_bug.cgi?id=212872

        Reviewed by Darin Adler.

        Replace all uses of differenceSquared() with luminance based comparisons. This is
        possible because all of the uses of differenceSquared() were about identifying a
        distance from black or white to determine relative brightness. It is more accurate
        to do this in terms of luminance, and has the added benefit of being something that
        is expressible in all colorspaces (since luminance is defined as the Y-component 
        of the XYZ colorspace which all colorspaces are convertable to). 

        * platform/graphics/Color.cpp:
        (WebCore::Color::lighten const):
        Renamed Color::light() to Color::lighten(), which makes more sense. The algorithm
        used should be updated at some point to also use luminance, but is unchanged for
        now.

        (WebCore::Color::darken const):
        Renamed Color::dark() to Color::darken(), which makes more sense. The algorithm
        used should be updated at some point to also use luminance, but is unchanged for
        now.

        (WebCore::Color::luminance const):
        Added. Converts to sRGB for now, but can be updated to work with other color spaces
        when needed.

        * platform/graphics/Color.h:
        Removed differenceSquared.

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::luminance):
        Updated to use the standard conversion to linear-sRGB. While there are certainly
        some places that specify a 0.03928 cutoff, the much more accepted value (and value
        specified by the IEC) is 0.04045, which we use for all other gamma correction.
        (See https://entropymine.com/imageworsener/srgbformula/ or https://en.wikipedia.org/wiki/SRGB#The_forward_transformation_(CIE_XYZ_to_sRGB)
        for more information on this).

        Also added a FIXME about how in the future we can avoid hardcoding the specific values
        multiple times by extracting them from the linear-sRGB to XYZ matrix.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::calculateBorderStyleColor):
        Use luminance, rather than distance as a better comparison for whether the color
        is too dark or too light for modification.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::disabledTextColor const):
        Use luminance, rather than distance as a better comparison for whether the color
        is too dark or too light for modification. Also us the contrastRatio utility
        function to determine illegibility issues due to contrast, picking a new minimum
        that roughly matches the old one based fast/forms/input-disabled-color.html

        * rendering/TextPaintStyle.cpp:
        (WebCore::adjustColorForVisibilityOnBackground):
        Use luminance, rather than distance as a better comparison for whether the color
        is too dark or too light for modification.

2020-06-08  Youenn Fablet  <youenn@apple.com>

        Missing WebRTC Metrics in iOS Safari
        https://bugs.webkit.org/show_bug.cgi?id=212668
        <rdar://problem/63902458>

        Reviewed by Eric Carlson.

        Expose more transports related stats.
        Covered by updated test.

        * Modules/mediastream/RTCStatsReport.h:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCTransportStats):

2020-06-08  Youenn Fablet  <youenn@apple.com>

        Add missed WebRTC media-source and remote-inbound-rtp stats
        https://bugs.webkit.org/show_bug.cgi?id=206645
        <rdar://problem/58833958>

        Reviewed by Eric Carlson.

        Update stats according latest spec and webrtc backend.
        We still expose obsolete trackId for consistency with existing WPT tests.
        Covered by existing and updated tests.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::InboundRtpStreamStats::InboundRtpStreamStats):
        (WebCore::RTCStatsReport::RemoteInboundRtpStreamStats::RemoteInboundRtpStreamStats):
        (WebCore::RTCStatsReport::OutboundRtpStreamStats::OutboundRtpStreamStats):
        (WebCore::RTCStatsReport::InboundRTPStreamStats::InboundRTPStreamStats): Deleted.
        (WebCore::RTCStatsReport::OutboundRTPStreamStats::OutboundRTPStreamStats): Deleted.
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRtpStreamStats):
        (WebCore::fillReceivedRtpStreamStats):
        (WebCore::fillInboundRtpStreamStats):
        (WebCore::fillRemoteInboundRtpStreamStats):
        (WebCore::fillSentRtpStreamStats):
        (WebCore::fillOutboundRtpStreamStats):
        (WebCore::initializeRTCStatsReportBackingMap):
        (WebCore::fillRTCRTPStreamStats): Deleted.
        (WebCore::fillInboundRTPStreamStats): Deleted.
        (WebCore::fillOutboundRTPStreamStats): Deleted.

2020-06-08  Jonathan Bedard  <jbedard@apple.com>

        WebCore: Add tvOS and watchOS SPI headers
        https://bugs.webkit.org/show_bug.cgi?id=212853
        <rdar://problem/64048485>

        Reviewed by Andy Estes.

        No new tests, no behavior changed.

        * platform/ios/WebCoreMotionManager.h: Forward-declare CMMotionManager.
        * platform/ios/WebCoreMotionManager.mm: Include CoreMotionSPI.h.

2020-06-08  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add support for min/max-width/height
        https://bugs.webkit.org/show_bug.cgi?id=212904

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/inline-max-width-height-simple.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedWidthValue): Adjust assert to check inline, non-replaced boxes only (inline-block is an
        inline level element but not an inline element) 
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):

2020-06-05  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Add missing interfaces from the AR module
        https://bugs.webkit.org/show_bug.cgi?id=212826

        Reviewed by Youenn Fablet.

        Added the XRInteractionMode partial interface from the WebXR AR module spec. This spec
        https://immersive-web.github.io/webxr-ar-module/ expands the WebXR Device API with
        functionality available in AR hardware.

        Some WebXR wpt tests are now passing.

        * CMakeLists.txt: Added new files.
        * DerivedSources.make: Ditto.
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::interactionMode const): Added.
        * Modules/webxr/WebXRSession.h: Added interactionMode attribute and getter;
        * Modules/webxr/WebXRSession.idl: Added interactionMode attribute;
        * Modules/webxr/XRInteractionMode.h: Added.
        * Modules/webxr/XRInteractionMode.idl: Added.
        * Sources.txt: Added new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2020-05-29  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Pass an unsigned long to cancelAnimationCallback() as handle
        https://bugs.webkit.org/show_bug.cgi?id=212529

        Reviewed by Youenn Fablet.

        The type of the handle returned by XRSession::requestAnimationFrame() was recently changed
        to unsigned long from long as there was no point in using signed integers for that. However
        we forgot to update the cancelAnimationFrame() in the specs as well as it receives the handle
        returned by requestAnimationFrame().

        We landed https://github.com/immersive-web/webxr/pull/1069 in the WebXR specs so we can now
        safely also replace signed by unsigned integers in our implementation.

        No new tests as there is no change in functionality.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::cancelAnimationFrame): Use unsigned ids.
        * Modules/webxr/WebXRSession.h: Ditto.
        * Modules/webxr/WebXRSession.idl: Ditto.

2020-06-01  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] align-content should apply even when there's just a single line
        https://bugs.webkit.org/show_bug.cgi?id=209871

        Reviewed by Manuel Rego Casasnovas.

        The 'align-content' property should have no effect on single line flex containers according to
        the specs https://drafts.csswg.org/css-flexbox/#propdef-align-content. The current code was not
        differentiating between single-line containers and multi-line containers with just 1 line.

        Also in order not to introduce regressions and properly support replaced elements as flex items
        we replaced the computation of child's width for 'flex-direction:column' by a direct call to
        computeLogicalWidthForFragment() which already properly handles all the cases. It used to be
        just the shrink-to-fit computation but that was not enough for replaced elements for example or
        elements with min/max-size restrictions.

        Several align-content-wrap-* subtests are working now. Updated expectations.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::initialAlignContentOffset): Removed check for #lines <= 1, as it is incorrect because it
        is true for multi-line containers with just 1 line.
        (WebCore::RenderFlexibleBox::alignFlexLines): Use isMultiline() instead of "#lines == 1".
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth const): Replace shrink-to-fit computation
        by a call computeLogicalWidthForFragment().
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): Use the whole crossAxisExtent
        for single line containers. Moved from alignFlexLines() as it fits much better here.


2020-06-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove ENABLE_APPLE_PAY_SETUP, ENABLE_APPLE_PAY_SESSION_V7, and HAVE_PASSKIT_PAYMENT_SETUP
        https://bugs.webkit.org/show_bug.cgi?id=212883
        <rdar://problem/64090763>

        Reviewed by Youenn Fablet.

        These macros evaluate to true whenever ENABLE(APPLE_PAY) is true on platforms supported by
        trunk WebKit, so we can either remove them or replace them with ENABLE(APPLE_PAY).

        * Modules/applepay/ApplePaySetup.cpp:
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/applepay/ApplePaySetupConfiguration.h:
        * Modules/applepay/ApplePaySetupConfiguration.idl:
        * Modules/applepay/ApplePaySetupFeature.idl:
        * Modules/applepay/ApplePaySetupFeature.mm:
        * Modules/applepay/ApplePaySetupFeatureState.h:
        * Modules/applepay/ApplePaySetupFeatureState.idl:
        * Modules/applepay/ApplePaySetupFeatureType.idl:
        * Modules/applepay/ApplePaySetupFeatureTypeWebCore.h:
        * Modules/applepay/ApplePaySetupFeatureWebCore.h:
        * Modules/applepay/ApplePaySetupWebCore.h:
        * Modules/applepay/PaymentCoordinator.cpp:
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::endApplePaySetup):
        * testing/MockApplePaySetupFeature.cpp:
        * testing/MockApplePaySetupFeature.h:
        * testing/MockPaymentCoordinator.cpp:
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2020-06-08  Antti Koivisto  <antti@apple.com>

        Pseudo-elements (::after) in shadow roots don't animate
        https://bugs.webkit.org/show_bug.cgi?id=173027
        <rdar://problem/42842994>

        Reviewed by Antoine Quint.

        Test: animations/keyframe-pseudo-shadow.html

        * animation/AnimationTimeline.cpp:
        (WebCore::shouldConsiderAnimation):

        We should use the actual element instead of the PseudoElement when calling Style::Scope::forOrdinal.
        The keyframe code that computes the style already does this correctly.

2020-06-08  Youenn Fablet  <youenn@apple.com>

        Use one audio unit for all tracks of a given process
        https://bugs.webkit.org/show_bug.cgi?id=212406

        Reviewed by Eric Carlson.

        Before the patch, we were creating one audio unit per track to render.
        This is potentially inefficient as this requires to IPC on iOS each audio data.
        Instead, we could have one single remote unit that will receive the mixed content of all tracks.
        For that purpose, introduce AudioMediaStreamTrackRendererUnit as a singleton.

        AudioMediaStreamTrackRendererCocoa will just register/unregister sources to AudioMediaStreamTrackRendererUnit.
        AudioMediaStreamTrackRendererUnit will then start/stop as needed and do the mixing.

        This requires a change in AudioSampleDataSource to support mixing in case track volumes are different.
        If we have to mix and with different volumes, we first pull the samples in a scratch buffer, apply volume and then mix it with the other tracks.

        In the future, we might also do the audio rendering with the CoreAudioSharedUnit directly so as to improve as much as possible echo cancellation.

        Interruption is handled by the fact that all tracks should stop playing, thus stop their renderer, thus unregister themselves from the renderer unit.
        it might be more future proof to add the unit as an interruption observer as a follow-up.

        Manually tested plus LayoutTests/webrtc/multi-audio.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/mac/AudioSampleBufferList.cpp:
        (WebCore::mixBuffers):
        (WebCore::AudioSampleBufferList::mixFrom):
        * platform/audio/mac/AudioSampleBufferList.h:
        * platform/audio/mac/AudioSampleDataSource.mm:
        (WebCore::AudioSampleDataSource::pullSamplesInternal):
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::start):
        (WebCore::AudioMediaStreamTrackRendererCocoa::stop):
        (WebCore::AudioMediaStreamTrackRendererCocoa::clear):
        (WebCore::AudioMediaStreamTrackRendererCocoa::setVolume):
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        (WebCore::AudioMediaStreamTrackRendererCocoa::createAudioUnit): Deleted.
        (WebCore::AudioMediaStreamTrackRendererCocoa::render): Deleted.
        (WebCore::AudioMediaStreamTrackRendererCocoa::inputProc): Deleted.
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h:
        (): Deleted.
        * platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.cpp: Added.
        (WebCore::AudioMediaStreamTrackRendererUnit::singleton):
        (WebCore::AudioMediaStreamTrackRendererUnit::~AudioMediaStreamTrackRendererUnit):
        (WebCore::AudioMediaStreamTrackRendererUnit::addSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
        (WebCore::AudioMediaStreamTrackRendererUnit::createAudioUnitIfNeeded):
        (WebCore::AudioMediaStreamTrackRendererUnit::start):
        (WebCore::AudioMediaStreamTrackRendererUnit::stop):
        (WebCore::AudioMediaStreamTrackRendererUnit::formatDescription):
        (WebCore::AudioMediaStreamTrackRendererUnit::createAudioUnit):
        (WebCore::AudioMediaStreamTrackRendererUnit::render):
        (WebCore::AudioMediaStreamTrackRendererUnit::inputProc):
        * platform/mediastream/mac/AudioMediaStreamTrackRendererUnit.h: Copied from Source/WebCore/platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h.

2020-06-08  youenn fablet  <youenn@apple.com>

        [Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=206582
        <rdar://problem/58985368>

        Reviewed by Eric Carlson.

        AVAssetWriterDelegate allows to grab recorded data whenever wanted.
        This delegate requires passing compressed samples to AVAssetWriter.
        Implement video encoding and audio encoding in dedicated classes and use these classes before adding buffers to AVAssetWriter.
        These classes are AudioSampleBufferCompressor and VideoSampleBufferCompressor.
        They support AAC and H264 so far and should be further improved to support more encoding options.

        Instantiate real writer only for platforms supporting AVAssetWriterDelegate, since it is not supported everywhere.
        The writer, doing the pacakging, is receiving compressed buffer from the audio/video compressors.
        It then sends data when being request to flush to its delegate, which will send data to the MediaRecorderPrivateWriter.
        The MediaRecorderPrivateWriter stores the data in a SharedBuffer until MediaRecorder asks for data.

        Note that, whenever we request data, we flush the writer and insert an end of video sample to make sure video data gets flushed.
        Therefore data should not be requested too fast to get adequate video compression.

        Covered by existing tests.

        * Modules/mediarecorder/MediaRecorderProvider.cpp:
        (WebCore::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h: Added.
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm: Added.
        (WebCore::AudioSampleBufferCompressor::create):
        (WebCore::AudioSampleBufferCompressor::AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initialize):
        (WebCore::AudioSampleBufferCompressor::finish):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::computeBufferSizeForAudioFormat):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::audioConverterComplexInputDataProc):
        (WebCore::AudioSampleBufferCompressor::provideSourceDataNumOutputPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::addSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (-[WebAVAssetWriterDelegate initWithWriter:]):
        (-[WebAVAssetWriterDelegate assetWriter:didProduceFragmentedHeaderData:]):
        (-[WebAVAssetWriterDelegate assetWriter:didProduceFragmentedMediaData:fragmentedMediaDataReport:]):
        (-[WebAVAssetWriterDelegate close]):
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::compressedVideoOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::compressedAudioOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::~MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::initialize):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedSampleBuffers):
        (WebCore::appendEndsPreviousSampleDurationMarker):
        (WebCore::MediaRecorderPrivateWriter::appendEndOfVideoSampleDurationIfNeeded):
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::clear):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        (WebCore::MediaRecorderPrivateWriter::appendData):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.h: Copied from Source/WebCore/platform/mediarecorder/MediaRecorderPrivateAVFImpl.h.
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm: Added.
        (WebCore::VideoSampleBufferCompressor::create):
        (WebCore::VideoSampleBufferCompressor::VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::initialize):
        (WebCore::VideoSampleBufferCompressor::finish):
        (WebCore::VideoSampleBufferCompressor::videoCompressionCallback):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        (WebCore::VideoSampleBufferCompressor::processSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::addSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::takeOutputSampleBuffer):

2020-06-08  Youenn Fablet  <youenn@apple.com>

        File URLs with hostnames are misleading
        https://bugs.webkit.org/show_bug.cgi?id=212739
        <rdar://problem/63754917>

        Reviewed by Alex Christensen.

        Showing a file URL like file://example.org/test is misleading to users.
        To prevent this, we just do a redirection to the same file URL with an empty host.
        Remove the port at the same time.
        Covered by added API test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):

2020-06-08  Rob Buis  <rbuis@igalia.com>

        Simplify fallback content handling in FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=212880

        Reviewed by Youenn Fablet.

        Simplify fallback content handling in FrameLoader, this can be inlined
        and some HTMLObjectElement checks can be combined.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedMainResourceError):
        (WebCore::FrameLoader::handleFallbackContent): Deleted.
        (WebCore::FrameLoader::isHostedByObjectElement const): Deleted.
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        (WebCore::FrameLoader::HistoryController::createItemTree):

2020-06-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][Height percentage] Skip anonymous wrappers when searching for fixed height
        https://bugs.webkit.org/show_bug.cgi?id=212881

        Reviewed by Antti Koivisto.

        When the block level box is a direct child of an inline level box (<span><div></div></span>) and we wrap it into a continuation,
        the containing block (anonymous wrapper) is not the box we need to check for fixed height.

        Test: fast/layoutformattingcontext/height-precentage-with-anonymous-wrapper.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):

2020-06-07  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Intrinsic width computation should take min/max-width into account.
        https://bugs.webkit.org/show_bug.cgi?id=212876

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/min-max-content-width-simple2.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedWidthValue): Address Sam's post-landing comment.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::intrinsicWidthConstraints):

2020-06-07  Zalan Bujtas  <zalan@apple.com>

        [LFC] Pass in the element attributes to Layout::ReplacedBox
        https://bugs.webkit.org/show_bug.cgi?id=212879

        Reviewed by Antti Koivisto.

        The information whether the replace box is an image box is required to see if the box has intrinsic ratio (used for sizing inflow replaced content).

        * layout/layouttree/LayoutReplacedBox.cpp:
        (WebCore::Layout::ReplacedBox::ReplacedBox):
        (): Deleted.
        * layout/layouttree/LayoutReplacedBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createReplacedBox):
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        * layout/layouttree/LayoutTreeBuilder.h:

2020-06-07  Philippe Normand  <pnormand@igalia.com>

        Remove ENABLE_VIDEO_TRACK ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=212568

        Reviewed by Youenn Fablet.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediasource/AudioTrackMediaSource.h:
        * Modules/mediasource/AudioTrackMediaSource.idl:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/TextTrackMediaSource.h:
        * Modules/mediasource/TextTrackMediaSource.idl:
        * Modules/mediasource/VideoTrackMediaSource.h:
        * Modules/mediasource/VideoTrackMediaSource.idl:
        * Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp:
        (WebCore::HTMLVideoElementPictureInPicture::requestPictureInPicture):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioTrackCustom.cpp:
        * bindings/js/JSAudioTrackListCustom.cpp:
        * bindings/js/JSTextTrackCueCustom.cpp:
        * bindings/js/JSTextTrackCustom.cpp:
        * bindings/js/JSTextTrackListCustom.cpp:
        * bindings/js/JSTrackCustom.cpp:
        * bindings/js/JSTrackCustom.h:
        * bindings/js/JSVideoTrackCustom.cpp:
        * bindings/js/JSVideoTrackListCustom.cpp:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesLangPseudoClass):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/SelectorPseudoElementTypeMap.in:
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching const):
        (WebCore::CSSParserSelector::isPseudoElementCueFunction const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * dom/Node.h:
        * history/BackForwardCache.cpp:
        * history/BackForwardCache.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        (WebCore::CachedPage::clear):
        * history/CachedPage.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::as const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::registerWithDocument):
        (WebCore::HTMLMediaElement::unregisterWithDocument):
        (WebCore::HTMLMediaElement::finishParsingChildren):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::playbackProgressTimerFired):
        (WebCore::HTMLMediaElement::configureTextTracks):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::syncTextTrackBounds):
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        (WebCore::HTMLMediaElement::setVideoFullscreenLayer):
        (WebCore::HTMLMediaElement::hasClosedCaptions const):
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::bufferingPolicy const):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/HTMLTagNames.in:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLTrackElement.idl:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::validateTexFuncParameters):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        * html/shadow/MediaControlTextTrackContainerElement.h:
        * html/track/AudioTrack.cpp:
        * html/track/AudioTrack.h:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackList.cpp:
        * html/track/AudioTrackList.h:
        * html/track/AudioTrackList.idl:
        * html/track/DataCue.cpp:
        * html/track/DataCue.h:
        * html/track/DataCue.idl:
        * html/track/InbandDataTextTrack.cpp:
        * html/track/InbandDataTextTrack.h:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.cpp:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.cpp:
        * html/track/TextTrack.h:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.cpp:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackCueGeneric.idl:
        * html/track/TextTrackCueList.cpp:
        * html/track/TextTrackCueList.h:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackList.h:
        * html/track/TextTrackList.idl:
        * html/track/TrackBase.cpp:
        * html/track/TrackBase.h:
        * html/track/TrackEvent.cpp:
        * html/track/TrackEvent.h:
        * html/track/TrackEvent.idl:
        * html/track/TrackListBase.cpp:
        * html/track/TrackListBase.h:
        * html/track/VTTCue.cpp:
        * html/track/VTTCue.h:
        * html/track/VTTCue.idl:
        * html/track/VTTRegion.cpp:
        * html/track/VTTRegion.h:
        * html/track/VTTRegion.idl:
        * html/track/VTTRegionList.cpp:
        * html/track/VTTRegionList.h:
        * html/track/VTTRegionList.idl:
        * html/track/VideoTrack.cpp:
        * html/track/VideoTrack.h:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackList.cpp:
        * html/track/VideoTrackList.h:
        * html/track/VideoTrackList.idl:
        * html/track/WebVTTElement.cpp:
        * html/track/WebVTTElement.h:
        * html/track/WebVTTParser.cpp:
        * html/track/WebVTTParser.h:
        * html/track/WebVTTToken.h:
        * html/track/WebVTTTokenizer.cpp:
        * html/track/WebVTTTokenizer.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::resourceTypeFromAsAttribute):
        (WebCore::createLinkPreloadResourceClient):
        (WebCore::LinkLoader::isSupportedType):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::ContentExtensions::toResourceType):
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded):
        * loader/TextTrackLoader.cpp:
        * loader/TextTrackLoader.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent const):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        (WebCore::destinationForType):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedTextTrack.cpp:
        * loader/cache/CachedTextTrack.h:
        * page/CaptionUserPreferences.cpp:
        * page/CaptionUserPreferences.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        (WebCore::Page::setUserInterfaceLayoutDirection):
        (WebCore::Page::doAfterUpdateRendering):
        (WebCore::Page::forEachMediaElement):
        * page/Page.h:
        * page/PageGroup.cpp:
        * page/PageGroup.h:
        * page/Settings.yaml:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType):
        * platform/SerializedPlatformDataCue.cpp:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoder::supportsMediaType):
        * platform/graphics/InbandGenericCue.cpp:
        * platform/graphics/InbandGenericCue.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/InbandTextTrackPrivateClient.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::textTrackRepresentationBoundsChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::tracksChanged):
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/TrackPrivateBase.cpp:
        * platform/graphics/TrackPrivateBase.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/AudioTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.h:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp:
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        * platform/graphics/gstreamer/TextCombinerGStreamer.h:
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        * platform/graphics/gstreamer/TextSinkGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/mac/SerializedPlatformDataCueMac.h:
        * platform/mac/SerializedPlatformDataCueMac.mm:
        * platform/mediastream/AudioMediaStreamTrackRenderer.cpp:
        * platform/mediastream/AudioMediaStreamTrackRenderer.h:
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        * platform/mediastream/VideoTrackPrivateMediaStream.h:
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h:
        * rendering/RenderVTTCue.cpp:
        * rendering/RenderVTTCue.h:
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::collectMatchingShadowPseudoElementRules):
        * style/PropertyCascade.cpp:
        (WebCore::Style::PropertyCascade::addMatch):
        * style/RuleData.cpp:
        (WebCore::Style::determinePropertyWhitelistType):
        * style/RuleData.h:
        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addRule):
        (WebCore::Style::RuleSet::traverseRuleDatas):
        (WebCore::Style::RuleSet::hasShadowPseudoElementRules const):
        (WebCore::Style::RuleSet::shrinkToFit):
        * style/RuleSet.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustForSiteSpecificQuirks const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::userPreferredAudioCharacteristics const):
        (WebCore::Internals::setUserPreferredAudioCharacteristic):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):
        (WebCore::Internals::textTrackBCP47Language):
        (WebCore::Internals::getCurrentMediaControlsStatusForElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-06-06  Yusuke Suzuki  <ysuzuki@apple.com>

        Crash when running web-apis data collection
        https://bugs.webkit.org/show_bug.cgi?id=212458

        Reviewed by Mark Lam.

        Test: js/dom/dom-attribute-getter-setter.html

        For properties using DOMAttribute property attribute in the table, code generator must use DOMAttributeGetterSetter instead of CustomGetterSetter.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjPrototype::finishCreation):

2020-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for width: min/max-content
        https://bugs.webkit.org/show_bug.cgi?id=212869

        Reviewed by Antti Koivisto.

        Use the existing intrinsic width logic to compute min/max-content width. 

        Test: fast/layoutformattingcontext/min-max-content-width-simple.html

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedWidthValue):
        (WebCore::Layout::FormattingContext::Geometry::computedWidth):
        (WebCore::Layout::FormattingContext::Geometry::fixedValue const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinWidth):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedWidth const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedMinWidth const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedMaxWidth const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin const): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::computedColumnWidth):
        (WebCore::Layout::TableFormattingContext::Geometry::computedColumnWidth const): Deleted.

2020-06-06  Devin Rousso  <drousso@apple.com>

        [ macOS wk2 ] inspector/page/setBootstrapScript-sub-frame.html is flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=207053
        <rdar://problem/59064908>

        Reviewed by Timothy Hatcher.

        Test: inspector/page/setBootstrapScript-sub-frame.html

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        Ensure the `InspectorPageAgent` sends the new `Page.Frame` payload to the frontend before
        the `PageRuntimeAgent` so that a `WI.Frame` exists before adding any `WI.ExecutionContext`.

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

        REGRESSION (r262364): Disney Plus crashes playing videos
        https://bugs.webkit.org/show_bug.cgi?id=212862
        <rdar://problem/64044841>

        Reviewed by Eric Carlson.

        In r262364, we specified an incorrect number size for CFNumberGetValue, which nevertheless
        worked fine in debug builds, but overwrote stack data in release builds, leading to a crash when
        the returned pointer was ref()d. The correct size for a FourCharCode is a
        kCFNumberSInt32Type, not a kCFNumberLongType.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2020-06-06  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for GradientSpreadMethod
        <https://webkit.org/b/212868>
        <rdar://problem/64069035>

        Reviewed by Anders Carlsson.

        Summary:
        - Convert GradientSpreadMethod to an enum class.
        - Add WTF::EnumTraits<AutocapitalizeType> for IPC.
        - Remove use of decodeEnum() and encodeEnum().

        * platform/graphics/Gradient.h:
        (WebCore::Gradient::encode const):
        (WebCore::Gradient::decode):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::createPlatformGradient):
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):

2020-06-06  Rob Buis  <rbuis@igalia.com>

        Reduce includes for CustomHeaderFields
        https://bugs.webkit.org/show_bug.cgi?id=212691

        Reviewed by Joseph Pecoraro.

        Reduce includes for CustomHeaderFields, I guess these were needed
        at some point but not anymore.

        * Modules/applepay/ApplePaySession.cpp:
        * Modules/applepay/PaymentSession.cpp:
        * bindings/js/ScriptController.cpp:
        * contentextensions/ContentExtensionsBackend.cpp:
        * dom/Document.cpp:
        * editing/cocoa/EditorCocoa.mm:
        * editing/cocoa/HTMLConverter.mm:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * editing/markup.cpp:
        * history/CachedFrame.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/ImageDocument.cpp:
        * html/MediaDocument.cpp:
        * html/PluginDocument.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/XSSAuditor.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * loader/ApplicationManifestLoader.cpp:
        * loader/FrameLoader.cpp:
        * loader/LoadTiming.cpp:
        * loader/NetscapePlugInStreamLoader.cpp:
        * loader/ResourceLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/icon/IconLoader.cpp:
        * page/ContextMenuController.cpp:
        * page/FrameView.cpp:
        * page/Page.cpp:
        * page/Performance.cpp:
        * page/PerformanceNavigation.cpp:
        * page/Quirks.cpp:
        * page/UserContentProvider.cpp:
        * page/csp/ContentSecurityPolicy.cpp:
        * page/mac/PageMac.mm:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * svg/graphics/SVGImage.cpp:
        * testing/Internals.cpp:

2020-06-06  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add testing and logging for ApplePaySetup
        https://bugs.webkit.org/show_bug.cgi?id=211972
        <rdar://problem/63291965>

        Reviewed by Alex Christensen.

        Test: http/tests/ssl/applepay/ApplePaySetup.https.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        (WebCore::ApplePaySetup::ApplePaySetup):
        (WebCore::ApplePaySetup::stop):
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/applepay/ApplePaySetupConfiguration.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupConfiguration.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeature.idl:
        * Modules/applepay/ApplePaySetupFeature.mm:
        (WebCore::ApplePaySetupFeature::state const):
        * Modules/applepay/ApplePaySetupFeatureState.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureState.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureType.idl:
        * Modules/applepay/ApplePaySetupFeatureWebCore.h:
        * Modules/applepay/ApplePaySetupWebCore.h:
        (WebCore::ApplePaySetup::create):
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::setApplePayIsActiveIfAllowed const):
        (WebCore::PaymentCoordinator::getSetupFeatures):
        (WebCore::PaymentCoordinator::beginApplePaySetup):
        (WebCore::PaymentCoordinator::endApplePaySetup):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::getSetupFeatures):
        (WebCore::PaymentCoordinatorClient::beginApplePaySetup):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockApplePaySetupFeature.cpp: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureWebCore.h.
        (WebCore::MockApplePaySetupFeature::create):
        (WebCore::MockApplePaySetupFeature::MockApplePaySetupFeature):
        * testing/MockApplePaySetupFeature.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureWebCore.h.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::addSetupFeature):
        (WebCore::MockPaymentCoordinator::getSetupFeatures):
        (WebCore::MockPaymentCoordinator::beginApplePaySetup):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2020-06-06  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Use OptionSet<DragOperation> for mask values
        <https://webkit.org/b/212605>
        <rdar://problem/64069091>

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::destinationOperationMask const):
        - Don't compare to anyDragOperation(). Darin suggested this
          change during patch review, but this use was missed.

2020-06-06  David Kilzer  <ddkilzer@apple.com>

        Use OptionSet<DragOperation> for mask values
        <https://webkit.org/b/212605>

        Reviewed by Darin Adler.

        In broad strokes:
        - Replace use of DragOperation with OptionSet<DragOperation> or
          Optional<DragOperation>.
        - Rename function parameters and local variables to denote use
          of mask values.
        - Remove DragOperationNone enum value.
        - Replace DragOperationEvery enum value with anyDragOperation().

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        (WebCore::dragOpFromIEOp):
        (WebCore::IEOpFromDragOp):
        (WebCore::DataTransfer::sourceOperation const): Rename.
        (WebCore::DataTransfer::sourceOperationMask const):
        (WebCore::DataTransfer::destinationOperation const): Rename.
        (WebCore::DataTransfer::destinationOperationMask const):
        (WebCore::DataTransfer::setSourceOperation): Rename.
        (WebCore::DataTransfer::setSourceOperationMask):
        (WebCore::DataTransfer::setDestinationOperation): Rename.
        (WebCore::DataTransfer::setDestinationOperationMask):
        * dom/DataTransfer.h:
        (WebCore::DataTransfer::createForDrop):
        (WebCore::DataTransfer::createForUpdatingDropTarget):
        (WebCore::DataTransfer::sourceOperation const): Rename.
        (WebCore::DataTransfer::sourceOperationMask const):
        (WebCore::DataTransfer::destinationOperation const): Rename.
        (WebCore::DataTransfer::destinationOperationMask const):
        (WebCore::DataTransfer::setSourceOperation): Rename.
        (WebCore::DataTransfer::setSourceOperationMask):
        (WebCore::DataTransfer::setDestinationOperation): Rename.
        (WebCore::DataTransfer::setDestinationOperationMask):
        * page/DragActions.h:
        (WebCore::anyDragOperation): Add.
        (WTF::EnumTraits<WebCore::DragOperation>): Add.
        (WTF::OptionSet<WebCore::DragOperation>): Add.
        * page/DragController.cpp:
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::operationForLoad):
        (WebCore::defaultOperationForDrag):
        (WebCore::DragController::tryDHTMLDrag):
        - Change logic to call defaultOperationForDrag() to convert
          targetResponse.operationMask to a single operation when
          targetResponse.operationMask but doesn't contain with any
          bit values set in sourceOperationMask.
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        (WebCore::DragController::dragEntered):
        (WebCore::DragController::dragUpdated):
        (WebCore::DragController::sourceDragOperation const): Rename.
        (WebCore::DragController::sourceDragOperationMask const):
        (WebCore::DragController::startDrag):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::operationForLoad):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::dragOperation):
        * page/EventHandler.cpp:
        (WebCore::convertDropZoneOperationToDragOperation):
        (WebCore::convertDragOperationToDropZoneOperation):
        (WebCore::findDropZone):
        (WebCore::EventHandler::dispatchDragEnterOrDragOverEvent):
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        (WebCore::EventHandler::updateDragAndDrop):
        (WebCore::EventHandler::cancelDragAndDrop):
        (WebCore::EventHandler::performDragAndDrop):
        (WebCore::EventHandler::dragSourceEndedAt):
        (WebCore::EventHandler::dispatchDragEnterOrDragOverEvent):
        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::dragOperation):
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::dragOperation):
        * page/win/DragControllerWin.cpp:
        (WebCore::DragController::dragOperation):
        - Clean up comment.
        * platform/DragData.cpp:
        (WebCore::DragData::DragData):
        * platform/DragData.h:
        (WebCore::DragData::DragData):
        (WebCore::DragData::draggingSourceOperationMask const):
        * platform/cocoa/DragDataCocoa.mm:
        (WebCore::DragData::DragData):
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::gdkDragActionToDragOperation):
        (WebCore::dragOperationToGdkDragActions):
        (WebCore::dragOperationToSingleGdkDragAction):
        * platform/gtk/GtkUtilities.h:
        (WebCore::gdkDragActionToDragOperation):
        (WebCore::dragOperationToGdkDragActions):
        (WebCore::dragOperationToSingleGdkDragAction):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::DragData):

2020-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] FormattingContext::Geometry::computedValue should not try to resolve values when layout is required
        https://bugs.webkit.org/show_bug.cgi?id=212867

        Reviewed by Antti Koivisto.

        This is in preparation for adding min/max/fit-content support.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedValue const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxWidth 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::inFlowPositionedPositionOffset const):
        (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto const): Deleted.
        * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
        (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):

2020-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: unify the naming scheme for agents used by instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=212859

        Reviewed by Timothy Hatcher.

        Inspector agents fall into one of three categories:
         - "persistent" when Web Inspector is connected
         - "enabled" when that agent is `enable`d, such as if the corresponding tab is visible
         - "tracking" when that agent is part of a timeline recording.

        The only exception to this is the Console agent, as that exists regardless of whether Web
        Inspector is connected as it needs to preserve messages logged before Web Inspector connects.

        Also remove the "Inspector" prefix from getter/setter methods as it adds confusion if that
        agent also has subclasses (e.g. `InspectorRuntimeAgent` and `PageRuntimeAgent`).

        * inspector/InstrumentingAgents.h:
        * inspector/InstrumentingAgents.cpp:
        Use macros to simplify the process of adding an agent.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/agents/InspectorAnimationAgent.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        * inspector/agents/InspectorCSSAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        * inspector/agents/InspectorDatabaseAgent.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/WebDebuggerAgent.cpp:
        * inspector/agents/WebHeapAgent.cpp:
        * inspector/agents/page/PageConsoleAgent.cpp:
        * inspector/agents/page/PageDOMDebuggerAgent.cpp:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        * inspector/agents/page/PageHeapAgent.cpp:
        * inspector/agents/page/PageNetworkAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        Simple naming changes elided to avoid a long ChangeLog.

2020-06-05  Andy Estes  <aestes@apple.com>

        REGRESSION (r256648): Apple Pay <button> elements no longer use the default corner radius on iOS (affects Stripe.js)
        https://bugs.webkit.org/show_bug.cgi?id=212860
        <rdar://problem/64054728>

        Reviewed by Wenson Hsieh.

        As part of drawing iOS native form controls, RenderThemeIOS applies a round border to
        un-styled <button> elements in RenderThemeIOS::adjustRoundBorderRadius. Prior to r256648,
        this adjusted border radius would be ignored by RenderThemeCocoa::paintApplePayButton when
        painting <button> elements with the ApplePayButtonPart appearance, but now it's respected.
        Apple Pay <button>s with default width and height previously had a 4px corner radius but now
        have a 15px corner radius.

        Fixed the issue by skipping RenderThemeIOS::adjustRoundBorderRadius for elements with the
        ApplePayButtonPart appearance so that the correct border radius adjustment can be made by
        RenderThemeCocoa::adjustApplePayButtonStyle.

        Four existing tests were skipped on iOS that would have caught this; un-skipped them.

        Un-skipped tests:   fast/css/appearance-apple-pay-button.html
                            fast/css/appearance-apple-pay-button-border-radius.html
                            fast/css/appearance-apple-pay-button-default-corners.html
                            fast/css/getComputedStyle/computed-style-apple-pay-button.html

        * rendering/RenderThemeIOS.mm:
        (WebCore::canAdjustBorderRadiusForAppearance): Added a helper to check if border radius can
        be adjusted for a given ControlPart. Added ApplePayButtonPart to the list of appearances
        where border radius cannot be adjusted.
        (WebCore::RenderThemeIOS::adjustRoundBorderRadius): Changed to call
        canAdjustBorderRadiusForAppearance.

2020-06-05  Peng Liu  <peng.liu6@apple.com>

        HTMLMediaElement::m_waitingToEnterFullscreen is not initialized in the constructor
        https://bugs.webkit.org/show_bug.cgi?id=212861

        Reviewed by Jer Noble.

        Covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):

2020-06-05  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for AutocapitalizeType
        <https://webkit.org/b/212846>
        <rdar://problem/64042825>

        Reviewed by Darin Adler.

        Summary:
        - Move AutocapitalizeType into WebCore namespace.
        - Convert AutocapitalizeType to an enum class.
        - Add WTF::EnumTraits<AutocapitalizeType> for IPC.

        * html/Autocapitalize.cpp:
        (WebCore::autocapitalizeTypeForAttributeValue):
        (WebCore::stringForAutocapitalizeType):
        * html/AutocapitalizeTypes.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::autocapitalizeType const):

2020-06-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r262619, r262625, and r262641.

        Caused mediarecorder layout test crashes.

        Reverted changesets:

        "[Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder"
        https://bugs.webkit.org/show_bug.cgi?id=206582
        https://trac.webkit.org/changeset/262619

        "[Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder"
        https://bugs.webkit.org/show_bug.cgi?id=206582
        https://trac.webkit.org/changeset/262625

        "Unreviewed, silence deprecation warning to fix build with
        latest SDK."
        https://trac.webkit.org/changeset/262641

2020-06-05  Kate Cheney  <katherine_cheney@apple.com>

        ITP SQLite Database should only vacuum once per day
        https://bugs.webkit.org/show_bug.cgi?id=212712
        <rdar://problem/63939711>

        Reviewed by Brent Fulgham.

        Add WEBCORE_EXPORT macro to function needed in WebKit.

        * platform/sql/SQLiteDatabase.h:

2020-06-05  Sam Weinig  <weinig@apple.com>

        Some tests in css/css-color/parsing/system-color-valid.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=212703

        Reviewed by Darin Adler.

        Add support for the following system color keywords, added in CSS Color 4 (https://www.w3.org/TR/css-color-4/#css-system-colors):
            ActiveText (Text in active links)
                 Implemented identically to -webkit-activelink
            Canvas (Background of application content or documents)
                 [NSColor textBackgroundColor] on macOS, Color::white by default.
            CanvasText (Text in application content or documents)
                 [NSColor textBackgroundColor] on macOS, Color::black by default.
            Field
                 [NSColor controlColor] on macOS, Color::white by default.
            FieldText
                 [NSColor controlTextColor] on macOS, Color::black by default.
            LinkText
                 [NSColor linkColor] on macOS (when UseSystemAppearance is true), same as -webkit-link (non-visited) by default.
            VisitedText
                 [NSColor systemPurpleColor] on macOS (when UseSystemAppearance is true), same as -webkit-link (visited) by default.

        * css/CSSValueKeywords.in:
        * platform/ThemeTypes.cpp:
        (WebCore::operator<<):
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor const):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2020-06-05  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r262524.

        Reverting because this commit may have caused issues with
        other tests.

        Reverted changeset:

        "Release Assert @
        WebCore::RenderTreeBuilder::RenderTreeBuilder"
        https://bugs.webkit.org/show_bug.cgi?id=212714
        https://trac.webkit.org/changeset/262524

2020-06-05  Jonathan Bedard  <jbedard@apple.com>

        WebCore: Link to framework stubs for watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=212834
        <rdar://problem/64033712>

        Reviewed by Tim Horton.

        No new tests, no behavior changed.

        * Configurations/Base.xcconfig: Ignore 64 to 32 bit conversion errors for watchOS
        simulators, add tvOS and watchOS major version macros.
        * Configurations/WebCore.xcconfig: Link to framework stubs for watchOS and tvOS.

2020-06-05  David Kilzer  <ddkilzer@apple.com>

        [IPC] Adopt enum class for PluginLoadClientPolicy
        <https://webkit.org/b/212827>
        <rdar://problem/64030431>

        Reviewed by Alex Christensen.

        * plugins/PluginData.h:
        (WebCore::PluginLoadClientPolicy):
        - Make this an enum class.
        (WTF::EnumTraits<WebCore::PluginLoadClientPolicy>):
        - Add for use with strongly-typed IPC parameters.

2020-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should exclude characters outside of the unicode private use area
        https://bugs.webkit.org/show_bug.cgi?id=212800
        <rdar://problem/63736417>

        Reviewed by Sihui Liu.

        Consider characters that fall outside of unicode PUA (in addition to line breaks) as excluded when extracting
        tokens during text manipulation. In doing this, we also rename a few member variables in `ManipulationUnit` to
        refer to "token delimiters" rather than line breaks.

        Test: TextManipulation.StartTextManipulationExtractsPrivateUseCharactersAsExcludedTokens

        * editing/TextManipulationController.cpp:
        (WebCore::isInPrivateUseArea):
        (WebCore::isTokenDelimiter):
        (WebCore::TextManipulationController::parse):
        (WebCore::TextManipulationController::observeParagraphs):
        * editing/TextManipulationController.h:

2020-06-05  Dean Jackson  <dino@apple.com>

        REGRESSION (r262366): [ Mac wk1 ] webgl/webgl-backing-store-size-update.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=212647
        <rdar://problem/63882960>

        Reviewed by Eric Carlson.

        In some unusual cases, specifically WebKit 1, a WebGLLayer could prepareForDisplay
        but never get told to actually display, producing incorrect results. Fix this by
        simply calling setNeedsDisplay.

        While here, address some comments from Simon Fraser that were made
        after r262366.

        * dom/Document.cpp:
        (WebCore::Document::prepareCanvasesForDisplayIfNeeded):
        * platform/graphics/cocoa/WebGLLayer.h: Move the instance variables into the implementation file
        since they are not exposed as an interface.
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContextGL:]):
        (-[WebGLLayer prepareForDisplay]):
        (-[WebGLLayer display]):

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

        Unreviewed, silence deprecation warning to fix build with latest SDK.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::stopRecording):

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

        Accessibility isolated tree mode: crashes when navigating websites, com.apple.AppKit: ConvertOutgoingValueForAttribute.
        https://bugs.webkit.org/show_bug.cgi?id=212829
        <rdar://problem/63756267>

        Reviewed by Chris Fleizach.

        - [WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions] must
        retrieve an autoreleased id from the main thread.
        - [WebAccessibilityObjectWrapper textMarkerRangeForSelection] must also
        retrieve an autoreleased id from the main thread.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2020-06-05  Jonathan Bedard  <jbedard@apple.com>

        WebCore: Guard variable declarations on ENABLE(VIDEO_PRESENTATION_MODE)
        https://bugs.webkit.org/show_bug.cgi?id=212831
        <rdar://problem/64033028>

        Reviewed by Tim Horton.

        No new tests, no behavior changed.

        * html/HTMLVideoElement.h:

2020-06-05  Peng Liu  <peng.liu6@apple.com>

        Fix a tvOS build failure
        https://bugs.webkit.org/show_bug.cgi?id=212833

        Reviewed by Jer Noble.

        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::togglePictureInPicture):

2020-06-05  Yusuke Suzuki  <ysuzuki@apple.com>

        DOM constructor should only accept Ref<> / ExceptionOr<Ref<>> for creation to ensure toJSNewlyCreated is always returning object
        https://bugs.webkit.org/show_bug.cgi?id=212767

        Reviewed by Darin Adler.

        When using toJSNewlyCreated in DOM constructor, we should ensure that this only returns JSObject* (if exception is not happening) to
        avoid `isObject()` check after that. However AudioContext and ImageData is not following this and can return nullptr from `create` factory
        function. We should not allow this.

        In this patch,

        1. AudioContext should throw an error instead of returning null. AudioContext had a limit derived from OS, but this limit is reasonable only
           in Windows. We should insert `OS(WINDOWS)` around this check, and throw an error instead of returning null.

        2. ImageData::create can return nullptr potentially, and it can be converted to null. This is not acceptable for DOM constructor. We should throw
           an error if we failed to create ImageData.

        3. We inserted static_asserts in CodeGeneratorJS.pm to ensure that XXX::create only returns Ref<> or ExceptionOr<Ref<>>. This ensures that toJSNewlyCreated
           will return JSObject*.

        This patch is relanding of the completely same patch since internal build is fixed.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::construct):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::construct):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::construct):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::constructJSTestOverloadedConstructors1):
        (WebCore::constructJSTestOverloadedConstructors2):
        (WebCore::constructJSTestOverloadedConstructors3):
        (WebCore::constructJSTestOverloadedConstructors4):
        (WebCore::constructJSTestOverloadedConstructors5):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::constructJSTestOverloadedConstructorsWithSequence1):
        (WebCore::constructJSTestOverloadedConstructorsWithSequence2):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventConstructor::construct):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::construct):
        * dom/ExceptionOr.h:
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):

2020-06-05  Tyler Wilcock  <twilco.o@protonmail.com>

        CSS Variables: Color on specific `border` properties does not work.
        https://bugs.webkit.org/show_bug.cgi?id=211672

        Reviewed by Antti Koivisto.

        Properly mark CSSPropertyBorderBlockStart, CSSPropertyBorderBlockEnd, CSSPropertyBorderInlineStart, and CSSPropertyBorderInlineEnd as
        direction-aware properties in CSSProperty::isDirectionAwareProperty.  Also reordered a few properties in this switch so it's more
        alphabetically ordered.  Prior to this change, CSS variables were not able to be resolved when used in these properties.

        Test: fast/borders/logical-border-props-with-variables.html

        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isDirectionAwareProperty):
        Add CSSPropertyBorderBlockStart, CSSPropertyBorderBlockEnd, CSSPropertyBorderInlineStart, CSSPropertyBorderInlineEnd.

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

        AXIsolatedTree::updateChildren should not call nodeForID.
        https://bugs.webkit.org/show_bug.cgi?id=212794

        Reviewed by Chris Fleizach.

        AXIsolatedTree::updateChildren is executed on the main thread and
        therfore should not call nodeForID. Since it requires the children IDs
        for the isolated object whose children are being updated, we need to
        store those children IDs outside the isolated object. For this reason
        we added the m_nodeMap member variable which will maintain a map between
        object ID and its children IDs.
        In addition, since retrieving the root node happens very often and
        required also a call to nodeForID, we now store a pointer to the root node instead of its ID, so there is no need to look it up in the reading map.

        * accessibility/AXLogger.cpp:
        (WebCore::operator<<):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::setChildrenIDs):
        (WebCore::AXIsolatedObject::appendChild): Renamed setChildrenIDs.
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::clear):
        (WebCore::AXIsolatedTree::create):
        (WebCore::AXIsolatedTree::removeTreeForPageID):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::setRootNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        (WebCore::AXIsolatedTree::nodeInTreeForID): Deleted, not used.
        (WebCore::AXIsolatedTree::setRootNodeID): Renamed setRootNode.
        * accessibility/isolatedtree/AXIsolatedTree.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase attachIsolatedObject:]):

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

        [Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=206582
        <rdar://problem/58985368>

        Unreviewed.

        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (WebCore::MediaRecorderPrivateWriter::initialize):
        Allow deprecation warnings.

2020-06-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        Unreviewed, fix unused parameter warnings in EventRegion.cpp and RenderLayerBacking.cpp
        https://bugs.webkit.org/show_bug.cgi?id=212823

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::unite):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintDebugOverlays):

2020-06-05  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early summer 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=212819

        Unreviewed build fix.

        No new tests needed.

        * animation/ElementAnimationRareData.cpp: Add missing RenderStyle.h header.
        * animation/ElementAnimationRareData.h: Add forward declaration for RenderStyle.
        * editing/TextManipulationController.cpp: Sprinkle missing HTMLNames:: prefixes.
        (WebCore::shouldExtractValueForTextManipulation):
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::makePositionTuple):
        (WebCore::TextManipulationController::replace):
        * platform/graphics/SimpleColor.h: Add missing ColorComponents.h and wtf/text/WTFString.h
        headers.
        * workers/service/context/ServiceWorkerThread.cpp: Add missing Logging.h header.

2020-06-05  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541
        <rdar://problem/63781452>

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.idl:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computePaymentMethodErrors const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::applePayButtonDescription const):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2020-06-05  youenn fablet  <youenn@apple.com>

        [Cocoa] Use AVAssetWriterDelegate to implement MediaRecorder
        https://bugs.webkit.org/show_bug.cgi?id=206582
        <rdar://problem/58985368>

        Reviewed by Eric Carlson.

        AVAssetWriterDelegate allows to grab recorded data whenever wanted.
        This delegate requires passing compressed samples to AVAssetWriter.
        Implement video encoding and audio encoding in dedicated classes and use these classes before adding buffers to AVAssetWriter.
        These classes are AudioSampleBufferCompressor and VideoSampleBufferCompressor.
        They support AAC and H264 so far and should be further improved to support more encoding options.

        Instantiate real writer only for platforms supporting AVAssetWriterDelegate, since it is not supported everywhere.
        The writer, doing the pacakging, is receiving compressed buffer from the audio/video compressors.
        It then sends data when being request to flush to its delegate, which will send data to the MediaRecorderPrivateWriter.
        The MediaRecorderPrivateWriter stores the data in a SharedBuffer until MediaRecorder asks for data.

        Note that, whenever we request data, we flush the writer and insert an end of video sample to make sure video data gets flushed.
        Therefore data should not be requested too fast to get adequate video compression.

        Covered by existing tests.

        * Modules/mediarecorder/MediaRecorderProvider.cpp:
        (WebCore::MediaRecorderProvider::createMediaRecorderPrivate):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.h: Added.
        * platform/mediarecorder/cocoa/AudioSampleBufferCompressor.mm: Added.
        (WebCore::AudioSampleBufferCompressor::create):
        (WebCore::AudioSampleBufferCompressor::AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::~AudioSampleBufferCompressor):
        (WebCore::AudioSampleBufferCompressor::initialize):
        (WebCore::AudioSampleBufferCompressor::finish):
        (WebCore::AudioSampleBufferCompressor::initAudioConverterForSourceFormatDescription):
        (WebCore::AudioSampleBufferCompressor::computeBufferSizeForAudioFormat):
        (WebCore::AudioSampleBufferCompressor::attachPrimingTrimsIfNeeded):
        (WebCore::AudioSampleBufferCompressor::gradualDecoderRefreshCount):
        (WebCore::AudioSampleBufferCompressor::sampleBufferWithNumPackets):
        (WebCore::AudioSampleBufferCompressor::audioConverterComplexInputDataProc):
        (WebCore::AudioSampleBufferCompressor::provideSourceDataNumOutputPackets):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffersUntilLowWaterTime):
        (WebCore::AudioSampleBufferCompressor::processSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::addSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::AudioSampleBufferCompressor::takeOutputSampleBuffer):
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.h:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        (-[WebAVAssetWriterDelegate initWithWriter:]):
        (-[WebAVAssetWriterDelegate assetWriter:didProduceFragmentedHeaderData:]):
        (-[WebAVAssetWriterDelegate assetWriter:didProduceFragmentedMediaData:fragmentedMediaDataReport:]):
        (-[WebAVAssetWriterDelegate close]):
        (WebCore::MediaRecorderPrivateWriter::create):
        (WebCore::MediaRecorderPrivateWriter::compressedVideoOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::compressedAudioOutputBufferCallback):
        (WebCore::MediaRecorderPrivateWriter::MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::~MediaRecorderPrivateWriter):
        (WebCore::MediaRecorderPrivateWriter::initialize):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedVideoSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::processNewCompressedAudioSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::startAssetWriter):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedVideoSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendCompressedSampleBuffers):
        (WebCore::appendEndsPreviousSampleDurationMarker):
        (WebCore::MediaRecorderPrivateWriter::appendEndOfVideoSampleDurationIfNeeded):
        (WebCore::MediaRecorderPrivateWriter::flushCompressedSampleBuffers):
        (WebCore::MediaRecorderPrivateWriter::clear):
        (WebCore::copySampleBufferWithCurrentTimeStamp):
        (WebCore::MediaRecorderPrivateWriter::appendVideoSampleBuffer):
        (WebCore::createAudioFormatDescription):
        (WebCore::createAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::appendAudioSampleBuffer):
        (WebCore::MediaRecorderPrivateWriter::stopRecording):
        (WebCore::MediaRecorderPrivateWriter::appendData):
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.h: Copied from Source/WebCore/platform/mediarecorder/MediaRecorderPrivateAVFImpl.h.
        * platform/mediarecorder/cocoa/VideoSampleBufferCompressor.mm: Added.
        (WebCore::VideoSampleBufferCompressor::create):
        (WebCore::VideoSampleBufferCompressor::VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::~VideoSampleBufferCompressor):
        (WebCore::VideoSampleBufferCompressor::initialize):
        (WebCore::VideoSampleBufferCompressor::finish):
        (WebCore::VideoSampleBufferCompressor::videoCompressionCallback):
        (WebCore::VideoSampleBufferCompressor::initCompressionSession):
        (WebCore::VideoSampleBufferCompressor::processSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::addSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::getOutputSampleBuffer):
        (WebCore::VideoSampleBufferCompressor::takeOutputSampleBuffer):

2020-06-05  Antti Koivisto  <antti@apple.com>

        REGRESSION (r253875?): Element styles incorrect after media query evaluation changes
        https://bugs.webkit.org/show_bug.cgi?id=211505
        <rdar://problem/62983242>

        Reviewed by Zalan Bujtas.

        If there are keyframe rules in media queries we fall back to wiping the style resolver when
        something changes. This fallback code didn't work correctly when a rule flipped from matching
        to non-matching because MediaQueryCollector bailed out and didn't create DynamicMediaQueryRules
        structure needed to detect something has changed.

        Test: fast/media/media-query-dynamic-with-keyframes.html

        * style/RuleSet.cpp:
        (WebCore::Style::RuleSet::addChildRules):
        (WebCore::Style::RuleSet::addRulesFromSheet):

        Call both push and pop even when the rule doesn't match.

        (WebCore::Style::RuleSet::MediaQueryCollector::pushAndEvaluate):

        Collect the MediaQuerySet in non-matching case too.

        (WebCore::Style::RuleSet::MediaQueryCollector::pop):

        Record the DynamicMediaQueryRules when resolving all rules statically.

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

        Ad support for media-source stats
        https://bugs.webkit.org/show_bug.cgi?id=212702

        Reviewed by Eric Carlson.

        Expose 'media-source' stats which come in audio and video flavours.
        Covered by updated test.

        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::AudioSourceStats::AudioSourceStats):
        (WebCore::RTCStatsReport::VideoSourceStats::VideoSourceStats):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp:
        (WebCore::fillRTCRTPStreamStats):
        (WebCore::fillRTCMediaSourceStats):
        (WebCore::fillRTCAudioSourceStats):
        (WebCore::fillRTCVideoSourceStats):
        (WebCore::initializeRTCStatsReportBackingMap):

2020-06-04  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation: first and last unit in a paragraph should not contain only excluded tokens
        https://bugs.webkit.org/show_bug.cgi?id=212759

        Reviewed by Wenson Hsieh.

        In r262398, we literally made text of one Node as the minimum unit for text manipulation. This patches introduce
        a struct ManipulationUnit for that. Now a paragraph can be represented as multiple ManipulationUnits. When all 
        tokens in a ManipulationUnit are excluded, it means the ManipulationUnit is excluded and should not be 
        manipulated. To record ManipulationUnits in a paragraph based on our current implementation, we need to keep the
        excluded ManipulationUnits surrounded by non-excluded ManipulationUnits, but we can safely remove the leading 
        and trailing excluded ManipulationUnits. In this case, we can limit the range of paragraph further and thus less
        text replacement work.

        Covered by existing test.

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::parse):
        (WebCore::TextManipulationController::addItemIfPossible):
        (WebCore::TextManipulationController::observeParagraphs):
        * editing/TextManipulationController.h:

2020-06-04  Peng Liu  <peng.liu6@apple.com>

        A YouTube video gets stuck after rapidly tapping on touchbar’s PIP button
        https://bugs.webkit.org/show_bug.cgi?id=212729

        Reviewed by Darin Adler.

        Call HTMLVideoElement::setFullscreenMode() instead of HTMLMediaElement::enterFullscreen()
        and HTMLMediaElement::exitFullscreen() to toggle picture-in-picture mode.
        HTMLVideoElement::setFullscreenMode() is robust under stress test after r262456.

        Manually tested.

        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::togglePictureInPicture):

2020-06-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262583.
        https://bugs.webkit.org/show_bug.cgi?id=212799

        Internal source code has the same bug, needs to be landed
        after fixing internal source

        Reverted changeset:

        "DOM constructor should only accept Ref<> / ExceptionOr<Ref<>>
        for creation to ensure toJSNewlyCreated is always returning
        object"
        https://bugs.webkit.org/show_bug.cgi?id=212767
        https://trac.webkit.org/changeset/262583

2020-06-04  Zalan Bujtas  <zalan@apple.com>

        HTMLAppletElement::updateWidget should check for renderer after the overlapping test.
        https://bugs.webkit.org/show_bug.cgi?id=212789
        <rdar://problem/61854614>

        Reviewed by Simon Fraser.

        createJavaAppletWidget needs to check if the plugin(replacement) is obscured.
        Since the overlapping test requires up-to-date geometry, it initiates a top level style recalc/layout.
        We need to check if the apple element still has a renderer after the style recalc.

        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget):

2020-06-04  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in DeleteSelectionCommand::doApply() when ending position is disconnected.
        https://bugs.webkit.org/show_bug.cgi?id=212723
        <rdar://problem/63866653>

        Reviewed by Geoffrey Garen.

        In this test case, while merging paragraphs after deleting a text element, we need call removeNodeAndPruneAncestors()
        to remove a BR node. However, the ancestor of BR is also removed. Later we try to insert a node at the parent of the
        removed ancestor in function DeleteSelectionCommand::doApply().

        For now we just check the parentless inserting position and bail out. The proper fix should be re-designing 
        removeNodeAndPruneAncestors() or select a different inserting position after removeNodeAndPruneAncestors() is called.

        Test: editing/deleting/delete-txt-in-dl-crash.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):

2020-06-04  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Unreviewed revert of build fix. Missing include was not the cause.

        * platform/graphics/ColorUtilities.cpp:

2020-06-04  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION:(r262398) Text manipulation crashes when content is added
        https://bugs.webkit.org/show_bug.cgi?id=212785

        Reviewed by Ryosuke Niwa.

        r262398 accidentally removed the bound check on array index and was not caught by existing tests.

        Test: TextManipulation.CompleteTextManipulationFailWhenContentIsAdded

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::replace):

2020-06-04  Ross Kirsling  <ross.kirsling@sony.com>

        [PlayStation] Unreviewed build fix following r262352.

        * platform/graphics/ColorUtilities.cpp:

2020-06-04  Yusuke Suzuki  <ysuzuki@apple.com>

        DOM constructor should only accept Ref<> / ExceptionOr<Ref<>> for creation to ensure toJSNewlyCreated is always returning object
        https://bugs.webkit.org/show_bug.cgi?id=212767

        Reviewed by Darin Adler.

        When using toJSNewlyCreated in DOM constructor, we should ensure that this only returns JSObject* (if exception is not happening) to
        avoid `isObject()` check after that. However AudioContext and ImageData is not following this and can return nullptr from `create` factory
        function. We should not allow this.

        In this patch,

        1. AudioContext should throw an error instead of returning null. AudioContext had a limit derived from OS, but this limit is reasonable only
           in Windows. We should insert `OS(WINDOWS)` around this check, and throw an error instead of returning null.

        2. ImageData::create can return nullptr potentially, and it can be converted to null. This is not acceptable for DOM constructor. We should throw
           an error if we failed to create ImageData.

        3. We inserted static_asserts in CodeGeneratorJS.pm to ensure that XXX::create only returns Ref<> or ExceptionOr<Ref<>>. This ensures that toJSNewlyCreated
           will return JSObject*.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::create):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioContext.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):
        * dom/ExceptionOr.h:
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::videoSampleAvailable):

2020-06-04  Kate Cheney  <katherine_cheney@apple.com>

        REGRESSION (r262212): [ iOS Debug wk2 ] ASSERTION FAILED: !isSynchronous() || !m_synchronousLoadData->delayedReply in WebKit::NetworkResourceLoader
        https://bugs.webkit.org/show_bug.cgi?id=212678
        <rdar://problem/63797758>

        Reviewed by Chris Dumez.

        No new tests, this will fix http/tests/xmlhttprequest/access-control-preflight-credential-sync.html.

        Refactor the bundle identifier setters and getters in
        RuntimeApplicationChecksCocoa.mm so that a separate function sets
        an override bundle identifier, and clearing the override identifier
        does not clear the UI process bundle identifier as well. 

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::bundleIdentifierOverride):
        (WebCore::bundleIdentifier):
        (WebCore::applicationBundleIdentifier):
        (WebCore::setApplicationBundleIdentifier):
        (WebCore::setApplicationBundleIdentifierOverride):
        (WebCore::clearApplicationBundleIdentifierTestingOverride):
        (WebCore::applicationBundleIdentifierOverride): Deleted.

2020-06-04  Yusuke Suzuki  <ysuzuki@apple.com>

        MessageEvent should tell its memory cost to GC
        https://bugs.webkit.org/show_bug.cgi?id=203990

        Reviewed by Mark Lam.

        This patch fixes two issues to make MessageEvent's memoryCost working.

        1. MessageEvent does not have memoryCost function. So even if ArrayBuffer etc. is held as a SerializedScriptValue,
           it does not communicate memory pressure to GC. This patch adds ReportExtraMemoryCost to MessageEvent.idl and memoryCost
           function to MessageEvent. And we implement SerializedScriptValue::memoryCost function to obtain rough memory cost
           for SerializedScriptValue.

        2. IDL code generator puts `reportExtraMemoryAllocated` function call in `toJSNewlyCreated`. However, `toJSNewlyCreated`
           is not always used when creating JS wrapper. For example, JSMessageEvent can be created from toJSNewlyCreated for MessageEvent.
           But it can be also be created from toJSNewlyCreated for Event through EventFactory. If the latter path is taken, we won't properly
           report memory cost even if IDL has ReportExtraMemoryCost. In JSC, we put `reportExtraMemoryAllocated` at the end of JSXXX::finishCreation.
           IDL code should follow this convention.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::computeMemoryCost const):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::memoryCost const):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceName::finishCreation):
        (WebCore::toJSNewlyCreated):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::memoryCost const):
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * html/OffscreenCanvas.h:
        (WebCore::DetachedOffscreenCanvas::memoryCost const):

2020-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Add a way to override the contact AutoFill button image
        https://bugs.webkit.org/show_bug.cgi?id=212775
        <rdar://problem/60381452>

        Reviewed by Tim Horton.

        Rename `SYSTEM_ATTACHMENT_PLACEHOLDER_ICON` to `ALTERNATE_ICONS`, and use it to additionally guard an alternate
        appearance for the contact AutoFill button icon.

        * css/html.css:
        (input::-webkit-contacts-auto-fill-button):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::extraDefaultStyleSheet):

2020-06-04  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Rename BlobLineEndings to EndingType to match the latest spec
        https://bugs.webkit.org/show_bug.cgi?id=212644

        Reviewed by Sam Weinig.

        By the latest File API spec, the role of `BlobLineEndings` is named as `EndingType`.
        https://w3c.github.io/FileAPI/#enumdef-endingtype

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::BlobBuilder):
        (WebCore::BlobBuilder::append):
        * fileapi/BlobBuilder.h:
        * fileapi/BlobPropertyBag.h:
        * fileapi/BlobPropertyBag.idl:
        * fileapi/EndingType.h: Renamed from Source/WebCore/fileapi/BlobLineEndings.h.
        * fileapi/EndingType.idl: Renamed from Source/WebCore/fileapi/BlobLineEndings.idl.

2020-06-04  Chris Dumez  <cdumez@apple.com>

        [iOS] Validate index parameter in PlatformPasteboard
        https://bugs.webkit.org/show_bug.cgi?id=212713
        <rdar://problem/60068765>

        Reviewed by Alex Christensen.

        Follow-up to r262529 to also make sure that the index is not negative after
        casting to NSInteger.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::readString const):
        (WebCore::PlatformPasteboard::readURL const):

2020-06-04  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME][GStreamer] cdmProxyAttached does not need to force a bump ref in the signature
        https://bugs.webkit.org/show_bug.cgi?id=212754

        Reviewed by Philippe Normand.

        cdmProxyAttached is currently receiving a RefPtr<CDMProxy> in the
        signature, what causes a ref bump when the function is called. A
        const RefPtr<CDMProxy>& is more suitable cause the reference is
        already bumped when the CDMProxy assigned in the decryptor
        attribute.

        No new tests, just a rework.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (cdmProxyAttached):
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.h:

2020-06-04  Tim Horton  <timothy_horton@apple.com>

        Work around broken system version macro
        https://bugs.webkit.org/show_bug.cgi?id=212726

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2020-06-04  Andy Estes  <aestes@apple.com>

        [watchOS] Re-enable content filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=212711
        <rdar://problem/63938350>

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2020-06-04  Zalan Bujtas  <zalan@apple.com>

        Reset fragment line info when the relatively positioned inline box becomes static with block child.
        https://bugs.webkit.org/show_bug.cgi?id=212724
        <rdar://problem/62847534>

        Reviewed by Simon Fraser.

        adjustFragmentedFlowStateOnContainingBlockChangeIfNeeded was missing the case when the
        block container was inside an inline box. It happens when the inline box is relatively positioned while the
        child block box is absolutely positioned.
        RenderFragmentedFlow keeps track of the associated root lineboxes in m_lineToFragmentMap.
        In adjustFragmentedFlowStateOnContainingBlockChangeIfNeeded, when the block is no longer part of the fragment
        we remove these cached lineboxes from the m_lineToFragmentMap.
        This patch fixes the case when the cached lineboxes are generated by a child block box.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustFragmentedFlowStateOnContainingBlockChangeIfNeeded):

2020-06-04  Youenn Fablet  <youenn@apple.com>

        Read MediaPlayerPrivateMediaStreamAVFObjC::m_canEnqueueDisplayLayer after the lock
        https://bugs.webkit.org/show_bug.cgi?id=212693

        Reviewed by Eric Carlson.

        In case destroyLayers is called and shortly after ensureLayers is also called, the m_canEnqueueDisplayLayer check in enqueueVideoSample
        might be bypassed. Make sure to lock before checking m_canEnqueueDisplayLayer in enqueueVideoSample.
        For good measure, set m_canEnqueueDisplayLayer to false after locking in destroyLayers.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):

2020-06-03  Chris Dumez  <cdumez@apple.com>

        [iOS] Validate index parameter in PlatformPasteboard
        https://bugs.webkit.org/show_bug.cgi?id=212713
        <rdar://problem/60068765>

        Reviewed by Wenson Hsieh.

        Validate index parameter in PlatformPasteboard, before calling [NSIndexSet indexSetWithIndex:].
        Per documentation, index needs to be in the range [0 .. NSNotFound-1].

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readBuffer const):
        (WebCore::PlatformPasteboard::readString const):
        (WebCore::PlatformPasteboard::readURL const):

2020-06-03  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add new values for -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=212684
        <rdar://problem/63908535>

        Reviewed by Anders Carlsson.

        Where available, added new values for -apple-pay-button-type and introduced ApplePaySession v10.

        New test: http/tests/ssl/applepay/ApplePayButton.html

        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::applePayButtonDescription const):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXApplePayReloadLabel):
        (WebCore::AXApplePayAddMoneyLabel):
        (WebCore::AXApplePayTopUpLabel):
        (WebCore::AXApplePayOrderLabel):
        (WebCore::AXApplePayRentLabel):
        (WebCore::AXApplePaySupportLabel):
        (WebCore::AXApplePayContributeLabel):
        (WebCore::AXApplePayTipLabel):
        * platform/LocalizedStrings.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.h:

2020-06-03  Daniel Bates  <dabates@apple.com>

        Inserted text placeholder should vertically align to top and behave like block-level element when it has 0 width
        https://bugs.webkit.org/show_bug.cgi?id=212716
        <rdar://problem/62672479>

        Reviewed by Darin Adler.

        Refine the appearance of a text placeholder based on feedback:
            1. If the width of the placeholder is 0 then put it on its own line. This is accomplished by making it
               CSS "display: block".
            2. Vertically align the placeholder with the top of the line.

        Both of these refinements are to make the rendering more like TextKit's rendering.

        Tests: editing/text-placeholder/insert-into-content-editable-non-zero-width-and-height.html
               editing/text-placeholder/insert-into-content-editable-zero-width.html

        * html/shadow/TextPlaceholderElement.cpp:

2020-06-03  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Release Assert @ WebCore::RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212714

        Reviewed by Geoffrey Garen.

        Widget removal in the middle of building a Render Tree causes side effects, leading to Release Assert. Moved the scope for suspension of widgets
        update to RenderTreeBuilder instead of having it in RenderTreeUpdater.

        Also made sure that the WidgetHierarchyUpdatesSuspensionScope::moveWidgets() should handle all widgets scheduled to move, including new widgets
        scheduled during moveWidgets().

        Test: fast/rendering/widget-removal-in-render-tree-builder-crash.html

        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2020-06-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text manipulation] Extract the value attribute in inputs of type "text" and "search"
        https://bugs.webkit.org/show_bug.cgi?id=212706
        <rdar://problem/63876969>

        Reviewed by Tim Horton.

        Allow text manipulation to extract text for the value of text fields that were not last modified by user input.
        Aside from button types, it generally doesn't make sense to perform text manipulation over arbitrary input
        element values, especially for text field types such as passwords, URLs, emails, and numbers. However, some
        webpages set the `value` of inputs to implement `placeholder`-like behavior in text fields, and we need to be
        compatible with this.

        Tests:  TextManipulation.StartTextManipulationExtractsValuesFromTextInputs
                TextManipulation.CompleteTextManipulationInButtonsAndTextFields

        * editing/TextManipulationController.cpp:
        (WebCore::shouldExtractValueForTextManipulation):

        Unfortunately, we need to check the type attribute here against "text", since inputs of type "date" and "time"
        fall back to text fields on macOS, and we still want to avoid extracting values for these.

        (WebCore::isAttributeForTextManipulation):

        Pull the `value` attribute of this out into a separate method, above.

        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::replace):

        Treat the text field value separately from other attributes by calling `HTMLInputElement::value()` upon
        extraction, and `HTMLInputElement::setValue()` upon replacement.

2020-06-03  Rob Buis  <rbuis@igalia.com>

        Disallow responses when a response contains invalid header values
        https://bugs.webkit.org/show_bug.cgi?id=184493

        Reviewed by Darin Adler.

        From the Fetch specification [1]:
        "A value is a byte sequence that matches the following conditions:
        "- Contains no 0x00 (NUL) or HTTP newline bytes."

        [1] https://fetch.spec.whatwg.org/#concept-header-value

        Tests: imported/w3c/web-platform-tests/fetch/h1-parsing/resources-with-0x00-in-header.window.html
               imported/web-platform-tests/fetch/api/basic/header-value-combining.any.html
               imported/web-platform-tests/fetch/api/basic/header-value-combining.any.worker.html
               imported/web-platform-tests/fetch/api/basic/header-value-null-byte.any.html
               imported/web-platform-tests/fetch/api/basic/header-value-null-byte.any.worker.html
               imported/web-platform-tests/xhr/headers-normalize-response.htm

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader):
        (WebCore::appendToHeaderMap):
        (WebCore::FetchHeaders::filterAndFill):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidHTTPHeaderValue):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::containsInvalidHTTPHeaders const):
        * platform/network/ResourceResponseBase.h:

2020-06-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        dataTransfer.types is empty when handling the "dragstart" event
        https://bugs.webkit.org/show_bug.cgi?id=212685
        <rdar://problem/61368402>

        Reviewed by Andy Estes.

        Implements several currently stubbed methods on StaticPasteboard, so that the DataTransfer provided to the page
        on the "dragstart" event contains the DOM-exposed data types that will be written to the system pasteboard. This
        includes "text/html", "text/plain", and "text/uri-list".

        Tests:  DragAndDropTests.DataTransferTypesOnDragStartForTextSelection
                DragAndDropTests.DataTransferTypesOnDragStartForImage
                DragAndDropTests.DataTransferTypesOnDragStartForLink

        ...as well as several existing tests in DragAndDropTestsIOS.mm that attempt to set pasteboard data during the
        dragstart event:

                DragAndDropTests.DataTransferSanitizeHTML
                DragAndDropTests.DataTransferSetDataCannotWritePlatformTypes
                DragAndDropTests.DataTransferSetDataInvalidURL
                DragAndDropTests.DataTransferSetDataUnescapedURL
                DragAndDropTests.DataTransferSetDataValidURL

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

        Only commit data to the native pasteboard if the page actually tried to write or modify the data. This allows us
        to preserve existing behavior by allowing DragController to write dragged data to the pasteboard normally in the
        case where the page didn't specify any custom data. In the case where the page does specify custom data, we will
        write this custom data *in addition* to any default data that was written to the static pasteboard. While this
        is a departure from our current behavior (which is to treat the pasteboard as a blank slate that contains only
        whatever custom data was provided by the page), it matches behavior in both Chrome and Firefox, and is likely
        more compatible with webpages that don't have UA-specific logic targeting WebKit.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::writeSelectionToPasteboard):

        Avoid calling into the injected bundle (as well as writing a few particular non-web-exposed types, such as web
        archive data) in the case where we're writing to a static pasteboard (there's no point in doing this for the
        static pasteboard, and in the worst case, it could confuse some internal clients).

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeImageToPasteboard):

        Ditto. But additionally, introduce a markup string to PasteboardImage, so that we will expose the "text/html"
        type when starting a drag on an image element.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

        Only attempt to call into `Pasteboard::writeTrustworthyWebURLsPboardType` in the case where the pasteboard
        supports this type (i.e. on macOS). This fixes an existing assertion that was hit by my new API test, which
        attempts to override the contents of the pasteboard with custom data while starting a drag on a link.

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

        Since the StaticPasteboard contains data before the page has written anything, don't use `Pasteboard::hasData()`
        to determine whether there's custom data; instead, use the new `hasNonDefaultData()` method on
        `StaticPasteboard` (see below).

        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::canWriteTrustworthyWebURLsPboardType):

        On non-macOS ports, return false.

        * platform/Pasteboard.h:
        * platform/StaticPasteboard.cpp:
        (WebCore::StaticPasteboard::hasNonDefaultData const):

        Keep track of whether the page attempted to stage any custom data during "dragstart" by maintaining the set of
        types written by the page, via calls to `writeString()` and similar. I'm using a set of types here instead of a
        simple `bool` flag to ensure correctness in the case where the page adds a type, and then later removes that
        same custom type, such that there is no longer non-default data.

        (WebCore::StaticPasteboard::writeString):
        (WebCore::StaticPasteboard::writeData):
        (WebCore::StaticPasteboard::writeStringInCustomData):
        (WebCore::StaticPasteboard::clear):

        See above.

        (WebCore::StaticPasteboard::writeMarkup):
        (WebCore::StaticPasteboard::writePlainText):
        (WebCore::StaticPasteboard::write):

        Implement these methods by writing to the `PasteboardCustomData`. These methods are invoked by our own code
        rather than the bindings, and should only be used to stage default data types when starting a drag.

        * platform/StaticPasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::canWriteTrustworthyWebURLsPboardType):

2020-06-03  Jer Noble  <jer.noble@apple.com>

        Crash with uncaught exception: *** -[AVSampleBufferAudioRenderer enqueueSampleBuffer:] Sample buffer has media type 'vide' instead of 'soun'
        https://bugs.webkit.org/show_bug.cgi?id=212646
        <rdar://problem/63040834>

        Reviewed by Eric Carlson.

        Protect against the possibility of AVStreamDataParser generating non-video or -audio samples in an otherwise
        video- or audio-track. Check the format description attached to the sample before appending, and ASSERT in
        debug builds and ERROR_LOG in release builds, as this is an exceptional condition.

        * platform/graphics/FourCC.h:
        (WTF::LogArgument<WebCore::FourCC>::toString):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):

2020-06-03  Kate Cheney  <katherine_cheney@apple.com>

        Any active sqlite transactions for the ITP database should be aborted when the network process suspends.
        https://bugs.webkit.org/show_bug.cgi?id=212608
        <rdar://problem/60540768>

        Reviewed by Chris Dumez.

        Add WEBCORE_EXPORT macro to use interrupt() function in
        ResourceLoadStatisticsDatabaseStore.

        * platform/sql/SQLiteDatabase.h:

2020-06-03  Andres Gonzalez  <andresg_22@apple.com>

        AX: SVG text node with content is described as "empty group" even if it's not empty
        https://bugs.webkit.org/show_bug.cgi?id=210315

        Reviewed by Darin Adler.

        Test: accessibility/svg-text.html

        SVGText elements are conveyed as AXGroups and cannot have a description
        or help property, but instead the content of the element is exposed as
        static text.

        * accessibility/AccessibilitySVGElement.cpp:
        (WebCore::AccessibilitySVGElement::accessibilityDescription const):
        (WebCore::AccessibilitySVGElement::helpText const):
        * accessibility/AccessibilitySVGElement.h:

2020-06-03  Sihui Liu  <sihui_liu@apple.com>

        Text manipulation sometimes fails to replace text in attributes
        https://bugs.webkit.org/show_bug.cgi?id=212701

        Reviewed by Wenson Hsieh.

        Concatenate replacement tokens of same identifier for attribute like we do for title and option element in 
        r260393.

        Covered by test: TextManipulation.CompleteTextManipulationShouldReplaceTextContentWithMultipleTokens

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::replace):

2020-06-02  Dean Jackson  <dino@apple.com>

        [ macOS ] REGRESSION(r262366): webgl/1.0.3/conformance/canvas/buffer-offscreen-test.html & webgl/2.0.0/conformance/canvas/buffer-offscreen-test.html are constant failures
        https://bugs.webkit.org/show_bug.cgi?id=212594
        <rdar://problem/63828783>

        Reviewed by Eric Carlson.

        The change in r262366 split the OpenGL work to prepare a canvas for rendering from the actual painting
        (or compositing in this case). Canvas elements were being "prepared" at the end of the HTML run loop
        if they'd done anything that would change pixels. The problem is that canvas elements that are not in
        the document body are never composited, and thus should never be prepared, otherwise they will clear
        their drawing buffer. In other words, a canvas in this state must keep the same buffer through
        each rendering frame.

        The solution is to check if the canvas is in the tree scope at the time we consider preparing
        it for display.

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

2020-06-03  John Wilander  <wilander@apple.com>

        Storage Access API: Add setting for per-page storage access scope
        https://bugs.webkit.org/show_bug.cgi?id=212682
        <rdar://problem/63904824>

        Reviewed by Brent Fulgham.

        This is a follow-up patch to https://bugs.webkit.org/show_bug.cgi?id=212114,
        adding an off-by-default setting and a test case for per-page storage access.

        Test: http/tests/storageAccess/request-and-grant-access-with-per-page-scope-access-from-another-frame.html

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setStorageAccessAPIPerPageScopeEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2020-06-03  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Jonathan Bedard.

        Replace typedef usage by alias-declaration.

        No new tests. No change in behavior.

        * css/makeprop.pl:
        * dom/make_names.pl:
        (printHeaderHead):
        (printInit):
        (printTypeHelpersHeaderFile):
        (printFactoryCppFile):
        (printFactoryHeaderFile):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):

2020-06-03  Javier Fernandez  <jfernandez@igalia.com>

        [css-grid] Dynamically setting "position: absolute" in a grid item doesn't trigger a relayout of that element
        https://bugs.webkit.org/show_bug.cgi?id=191465

        Reviewed by Manuel Rego Casasnovas.

        From Blink r484620 by Sergio Villar <svillar@igalia.com>

        Containing block overrides not cleared for position:absolute

        Whenever a position:absolute block gets a new containing block the
        previously set containing block overrides are not cleared. This causes the
        block not to be properly layout for its new containing block (for example
        when using relative sizes).

        In particular this affects grid items which always get a containing block
        override size (which represent the grid areas) in case their
        containing block switches from the grid container to a grid ancestor.

        No new tests, as this change is covered by current web platform tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::insertPositionedObject): Clear the containing block's override width and height.

2020-06-03  Youenn Fablet  <youenn@apple.com>

        Add more logging related to service worker fetch event handling
        https://bugs.webkit.org/show_bug.cgi?id=212632

        Reviewed by Chris Dumez.

        Add logging related to creating/canceling/deleting fetch event handler related client.
        No change of behavior.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::startFetch):
        (WebCore::ServiceWorkerThreadProxy::cancelFetch):
        (WebCore::ServiceWorkerThreadProxy::removeFetch):

2020-06-02  Yusuke Suzuki  <ysuzuki@apple.com>

        ASSERTION FAILED: isCell() under WebCore::JSDOMConstructor seen with webaudio/the-audio-api/the-audiocontext-interface/audiocontextoptions.html
        https://bugs.webkit.org/show_bug.cgi?id=212650

        Reviewed by Mark Lam.

        Some DOM constructor can return jsNull. For example, AudioContext constructor can return jsNull when it exceeds # of hardware audio contexts.
        However CodeGeneratorJS assumes that DOM constructor always returns an object, or throws an exception.
        This patch adds object check after DOM constructor call to handle the jsNull case while it does not change the existing semantics.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorDefinition):

2020-06-02  Simon Fraser  <simon.fraser@apple.com>

        EventRegion::translate() needs to offset the wheel event regions
        https://bugs.webkit.org/show_bug.cgi?id=212683

        Reviewed by Zalan Bujtas.

        EventRegion::translate() failed to offset the wheel event regions, which resulted 
        in wrong reasons for GraphicsLayers with a non-zero offsetFromRenderer.

        Test: fast/scrolling/mac/wheel-event-listener-region-layer-offset.html

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::translate):

2020-06-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a helper method to populate a DataTransfer before dispatching a "dragstart" event
        https://bugs.webkit.org/show_bug.cgi?id=212614
        Work towards <rdar://problem/61368402>

        Reviewed by Tim Horton.

        Add a helper method in DragController to pre-populate the StaticPasteboard-backed DataTransfer before
        dispatching the "dragstart" event. There should be no change in behavior yet, since StaticPasteboard doesn't
        implement methods for writing data to the pasteboard, which this new method uses.

        * page/DragController.cpp:
        (WebCore::DragController::prepareForDragStart const):
        (WebCore::DragController::hitTestResultForDragStart const):
        (WebCore::DragController::startDrag):
        * page/DragController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragStartEventOnSourceElement):

2020-06-02  Andres Gonzalez  <andresg_22@apple.com>

        AXIsolatedTree::updateNode should not call nodeForID.
        https://bugs.webkit.org/show_bug.cgi?id=212662

        Reviewed by Chris Fleizach.

        In isolated tree mode AXIsolatedTree::nodeForID should be called only
        on the secondary AX thread. So removing the need to call nodeForID in
        updateNode by using AXCoreObject::childrenIDs() instead of retrieving
        the isolated node to access its children IDs.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateNode):

2020-06-02  Keith Rollin  <krollin@apple.com>

        Revert FEATURES_DEFINES related changes
        https://bugs.webkit.org/show_bug.cgi?id=212664
        <rdar://problem/63893033>

        Reviewed by Andy Estes.

        Bug 262310, Bug 262311, Bug 262318, and Bug 262331 involve changes to
        FEATURE_DEFINES and how the values there relate to those found in the
        Platform*.h files. Those changes break XCBuild (by removing the
        .xcfilelist related to UnifiedSources and the process for generating
        them), and so are being reverted.

        No new tests -- build changes.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/GenerateUnifiedSources.xcconfig: Added.
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.idl:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computePaymentMethodErrors const):
        * Scripts/generate-unified-sources.sh:
        * UnifiedSources-output.xcfilelist: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::applePayButtonDescription const):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2020-06-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r262424.

        Caused webkitpy test failure

        Reverted changeset:

        "Make generated C++ code use modern C++"
        https://bugs.webkit.org/show_bug.cgi?id=190714
        https://trac.webkit.org/changeset/262424

2020-06-02  Peng Liu  <peng.liu6@apple.com>

        Stressing webkitSetPresentationMode leads to wrong inline video dimensions
        https://bugs.webkit.org/show_bug.cgi?id=202425

        Reviewed by Eric Carlson.

        Make the HTMLVideoElement::setFullscreenMode() robust under stress tests
        by ignoring a request when the video element is not ready yet.

        Manually tested.

        * dom/Element.h:
        (WebCore::Element::didStopBeingFullscreenElement):
        Add a callback to indicate that the element has exited fullscreen.
        * dom/FullscreenManager.cpp:
        (WebCore::FullscreenManager::didExitFullscreen):
        Call Element::didStopBeingFullscreenElement() when the element has exited fullscreen.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        * html/HTMLMediaElement.h:

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen):
        This function will return true when a video element is in the process to exit
        fullscreen/picture-in-picture until it has completed the process. Therefore, a page
        can safely request the video element to enter fullscreen/picture-in-picture when
        this function returns false.

        (WebCore::HTMLVideoElement::setFullscreenMode):
        (WebCore::HTMLVideoElement::didBecomeFullscreenElement):
        (WebCore::HTMLVideoElement::didStopBeingFullscreenElement):
        (WebCore::HTMLVideoElement::didEnterFullscreen): Deleted.
        (WebCore::HTMLVideoElement::didExitFullscreen): Deleted.
        * html/HTMLVideoElement.h:
        Add a flag m_isChangingPresentationMode. webkitSetPresentationMode() will only
        change the presentation mode when the flag is false.

2020-06-01  Simon Fraser  <simon.fraser@apple.com>

        Add ENABLE(WHEEL_EVENT_REGIONS), enabled on macOS which is the only platform that needs wheel event regions for scrolling thread hit-testing
        https://bugs.webkit.org/show_bug.cgi?id=212620

        Reviewed by Tim Horton.

        Surround code related to wheel event regions with ENABLE(WHEEL_EVENT_REGIONS).

        Eventually we'll use this same code for touch event regions, and when we do, we
        can rejigger the #ifdefs.

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::operator== const):
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::containsEditableElementsInRect const):
        (WebCore::EventRegion::dump const):
        * rendering/EventRegion.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintDebugOverlays):

2020-06-02  Andres Gonzalez  <andresg_22@apple.com>

        Avoid calling axBackingObject multiple times in [WebAccessibilityObjectWrapper roleDescription].
        https://bugs.webkit.org/show_bug.cgi?id=212643

        Reviewed by Chris Fleizach.

        No new functionality.

        Avoid unnecessary overhead of calling axBackingObject multiple times in
        roleDescription. axBackingObject is not just a getter but involves
        checking whether isolated tree mode is enabled.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):

2020-06-02  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Pass nullptr for the 2nd argument of FileReaderLoader 
        https://bugs.webkit.org/show_bug.cgi?id=212642

        Reviewed by Darin Adler.

        Instead of passing `0`, `nullptr` is better
        because `FileReaderLoader` takes a pointer.

        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::readAsArrayBuffer):
        (WebCore::FileReaderSync::readAsBinaryString):
        (WebCore::FileReaderSync::readAsText):
        (WebCore::FileReaderSync::readAsDataURL):

2020-06-02  Tim Horton  <timothy_horton@apple.com>

        UIColor and NSColor WebCore::Color factories should return invalid colors for nil input colors
        https://bugs.webkit.org/show_bug.cgi?id=212631

        Reviewed by Anders Carlsson.

        * platform/graphics/mac/ColorMac.mm:
        (WebCore::colorFromNSColor):
        (WebCore::semanticColorFromNSColor):
        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromUIColor):
        This doesn't affect any code currently in WebKit, but it is very, very surprising
        that these functions happily accept a null color, assert in debug, but in release
        do crazy things like try to paint the null color into a small bitmap to figure out
        what it really is.

        Also, this matches the behavior of the Color constructors that take CGColorRef.

2020-06-02  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Sam Weinig.

        Replace typedef usage by alias-declaration.

        No new tests. No change in behavior.

        * css/makeprop.pl:
        * dom/make_names.pl:
        (printHeaderHead):
        (printInit):
        (printTypeHelpersHeaderFile):
        (printFactoryCppFile):
        (printFactoryHeaderFile):
        (printWrapperFactoryCppFile):
        (printWrapperFactoryHeaderFile):

2020-06-02  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove unused BlobURL::getIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=212635

        Reviewed by Youenn Fablet.

        * fileapi/BlobURL.cpp:
        * fileapi/BlobURL.h:

2020-06-02  Mark Lam  <mark.lam@apple.com>

        Fix broken Windows build.
        https://bugs.webkit.org/show_bug.cgi?id=212633

        Reviewed by Yusuke Suzuki.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::needsPreparationForDisplay):
        (WebCore::HTMLCanvasElement::prepareForDisplay):

2020-06-02  Youenn Fablet  <youenn@apple.com>

        Add some logging to ServiceWorkerThread to track install/activate event handling
        https://bugs.webkit.org/show_bug.cgi?id=212523

        Reviewed by Chris Dumez.

        Add some logging for firing install/activate events and when these events are handled.
        No change of behavior.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFireActivateEvent):

2020-06-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make popup menus work
        https://bugs.webkit.org/show_bug.cgi?id=211178

        Reviewed by Adrian Perez de Castro.

        * platform/gtk/GtkVersioning.h:
        (gtk_tree_view_column_cell_get_size):

2020-06-01  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] ChildIntrinsicLogicalWidth should use fit-content, not max-content
        https://bugs.webkit.org/show_bug.cgi?id=210465

        Reviewed by Javier Fernandez.

        When computing the hypothetical cross size of each item in the flexbox algorithm
        the current code was using the max-size. However the specs state clearly that we
        should use fit-content instead, i.e., the shrink-to-fit size.
        See https://drafts.csswg.org/css-flexbox/#algo-cross-item.

        Based on Blink's crrev.com/1327746 by <cbiesinger@chromium.org>

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::childIntrinsicLogicalWidth const): Use the shrink-to-fit
        size instead just the max-size.

2020-06-02  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC should enqueue samples in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212073

        Reviewed by Eric Carlson.

        Do not hop to the main thread when rendering video samples anymore.
        Instead, we enqueue to the display layer in the background thread but still hop to the main thread for two things:
        - Update of various states of the player
        - keep a ref to the video sample if canvas rendering is needed.

        Most display layer operations stay in the main thread (creation, flushing...).
        Deletion of the display layer and access from a background are covered by a lock.
        The m_canEnqueueDisplayLayer boolean ensures we do not enqueue too early when the display layer is not yet properly initialized.

        LocalSampleBufferDisplayLayer needs to handle the fact that enqueueing might be done in a background thread.
        Instead of introducing a lock, we introduce a work queue and we hop to this queue whenever we need to enqueue/mutate the pending samples.

        Covered by existing tests and manual testing.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSampleBuffer):
        (WebCore::LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::applicationDidBecomeActive):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setBufferingPolicy):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rootLayerBoundsDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueCorrectedVideoSample): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayLayer): Deleted.

2020-06-02  Youenn Fablet  <youenn@apple.com>

        [ Mac wk2 ] http/wpt/service-workers/service-worker-spinning-fetch.https.html is flaky failing.
        https://bugs.webkit.org/show_bug.cgi?id=207515
        <rdar://problem/59329307>

        Reviewed by Chris Dumez.

        When a service worker is terminated, we remove it from the map in SWContextManager.
        Shortly after a new service worker may be added to the map.
        In that case, previously, we were potentially trying to decrement the message count of the old service worker thread, which is confusing the new service worker thread.
        Instead, use WeakPtr to decrement if the service worker thread is still valid.
        Covered by existing tests.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToPostMessage):
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        (WebCore::ServiceWorkerThread::queueTaskToFireActivateEvent):
        (WebCore::ServiceWorkerThread::start):
        * workers/service/context/ServiceWorkerThread.h:

2020-06-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Update texture creation validation according to the discussion at https://github.com/gpuweb/gpuweb/pull/799/files
        https://bugs.webkit.org/show_bug.cgi?id=212390

        Reviewed by Dean Jackson.

        Two new rules: Multisampled textures can't have the STORAGE flag, and sampleCount must be either 1 or 4.

        Test: webgpu/texture-creation.html

        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::GPUDevice::tryCreateTexture const):

2020-06-01  Noam Rosenthal  <noam@webkit.org>

        Make unicode-bidi:isolate the default for an element with a dir attribute (instead of unicode-bidi:embed)
        https://bugs.webkit.org/show_bug.cgi?id=134630

        Reviewed by Simon Fraser.

        Unskipped 11 dir-isolation w3c tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
                Use isolate instead of embed for unicode-bidi when dir attribute is present.

2020-06-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Graphics: should use the `id` (name) of the animation if it exists
        https://bugs.webkit.org/show_bug.cgi?id=212618

        Reviewed by Timothy Hatcher.

        Test: inspector/animation/lifecycle-css-animation.html:
              inspector/animation/lifecycle-css-transition.html:
              inspector/animation/lifecycle-web-animation.html:
              inspector/animation/nameChanged.html

        * animation/WebAnimation.h:
        (WebCore::WebAnimation::setId): Deleted.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setId): Added.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didChangeWebAnimationName): Added.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didChangeWebAnimationNameImpl): Added.

        * inspector/agents/InspectorAnimationAgent.h:
        * inspector/agents/InspectorAnimationAgent.cpp:
        (WebCore::InspectorAnimationAgent::didChangeWebAnimationName): Added.
        (WebCore::InspectorAnimationAgent::bindAnimation):

2020-06-01  Andres Gonzalez  <andresg_22@apple.com>

        [WebAccessibilityObjectWrapper subrole] should check for the nullity of the underlying AXCoreObject before dereferencing.
        https://bugs.webkit.org/show_bug.cgi?id=212607

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        - Check for nullity of the backingObject before dereferencing.
        - self.axBackingObject is now called only once, instead of many times unnecessarily.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2020-06-01  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController should put one Node in only one paragraph
        https://bugs.webkit.org/show_bug.cgi?id=212548

        Reviewed by Wenson Hsieh.

        TextManipulationController mainly uses line break as delimiter to split paragraphs. In our current 
        implementation, if text of a Node has line break, the part before the line break is in one paragraph and the
        part after the line break is in another paragraph, which means the Node is in the ranges of two paragraphs.
        In this case, when TextManipulationController manipulates the first paragraph, it replaces all the Nodes in the 
        range of first paragraph with new Nodes. Then when it manipulates the second paragraph, if will find Node in the
        range of second paragraph does not exist and fail (because the Node is removed when handling the first 
        paragraph.). Also, TextManipulationController currently does not preserve line breaks in text, which can be an
        issue if these line breaks are visible. 

        This patch makes the ParagraphContentIterator iterate over Nodes instead of text, so a Node can only be in the 
        range of one paragraph. To do this, it makes line break and spaces around it as a special excluded token.
        Here are the rules for splitting paragraphs by line break now:
        1. If the special token is the first token in a Node, text in Nodes before the Node will make a paragraph. 
        2. If the special token is the last token in a Node, text in Nodes before the Node and in the Node will make a 
        paragraph.
        3. If the special token in the middle of tokens in a Node, then we don't make a new paragraph until next special
        token meets condition 1 or 2.

        This patch also fixes the issue that Nodes out of the paragraph range can be removed due to the preorder Node
        traversal, by finding and adding those Nodes back.

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::m_pastEndNode):
        (WebCore::ParagraphContentIterator::advance):
        (WebCore::ParagraphContentIterator::currentContent):
        (WebCore::ParagraphContentIterator::atEnd const):
        (WebCore::ParagraphContentIterator::advanceNode):
        (WebCore::ParagraphContentIterator::advanceIteratorNodeAndUpdateText):
        (WebCore::isEnclosingItemBoundaryElement):
        (WebCore::TextManipulationController::parse):
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::addItem):
        (WebCore::TextManipulationController::getPath):
        (WebCore::TextManipulationController::updateInsertions):
        (WebCore::TextManipulationController::replace):
        (WebCore::ParagraphContentIterator::startPosition): Deleted.
        (WebCore::ParagraphContentIterator::endPosition): Deleted.
        (WebCore::ParagraphContentIterator::moveCurrentNodeForward): Deleted.
        (WebCore::containsOnlyHTMLSpaces): Deleted.
        * editing/TextManipulationController.h:

2020-06-01  David Kilzer  <ddkilzer@apple.com>

        Don't use casts to convert between WebCore::DragDestinationAction and {Web,WK}DragDestinationAction types
        <https://webkit.org/b/212507>

        Reviewed by Darin Adler.

        * page/DragActions.h:
        (WebCore::anyDragDestinationAction): Add.
        (WebCore::DragDestinationActionAny): Delete.
        - Rename DragDestinationActionAny() to
          anyDragDestinationAction() to match WebKit style.
        * platform/DragData.h:
        - Update to use anyDragDestinationAction().

2020-06-01  Simon Fraser  <simon.fraser@apple.com>

        Add ENABLE(TOUCH_ACTION_REGIONS) to wrap code that's only relevant for platforms that consult touch-action for event handling
        https://bugs.webkit.org/show_bug.cgi?id=212572

        Reviewed by Andy Estes.

        This will allow for optimizations in event region painting without ambiguity.

        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::invalidateContentEventRegionsIfNeeded):
        * page/scrolling/ScrollingTreeNode.h:
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::operator== const):
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::translate):
        (WebCore::EventRegion::dump const):
        * rendering/EventRegion.h:
        (WebCore::EventRegion::encode const):
        (WebCore::EventRegion::decode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::maintainsEventRegion const):
        (WebCore::RenderLayerBacking::paintDebugOverlays):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolveElement):

2020-06-01  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Implement ParentNode.prototype.replaceChildren
        https://bugs.webkit.org/show_bug.cgi?id=198578

        Reviewed by Darin Adler.

        Ideally, we can use `ContainerNode::replaceAllChildren` to implement
        this simply but the current of it does not have a path to support
        `DocumentFragment`.

        Hence, we call related methods from `ParentNode.prototype.replaceChildren` directly.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChildren):
        * dom/ContainerNode.h:
        * dom/ParentNode.idl:

2020-05-25  Sergio Villar Senin  <svillar@igalia.com>

        [css-flexbox] Tables as flex items should obey the flex container sizing
        https://bugs.webkit.org/show_bug.cgi?id=212355

        Reviewed by Manuel Rego Casasnovas.

        For most of the boxes, "width:auto" means use all the available space from your container in the inline
        direction. This means that a flex container does not need to do anything in particular to stretch them
        in the inline axis. However that is not true for tables because their width mostly depend on the sum of
        the sizes of their columns (whichever algorithm is used). That's why the layout code of tables should
        check whether or not it has an override for the content logical width which is the way flexbox uses to
        stretch flex items (and use that override width).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth): Stretch till overrideContentLogicalWidth() if needed.

2020-06-01  Sam Weinig  <weinig@apple.com>

        Extended Color: Replace Color constructors taking numeric values with type specific factory functions
        https://bugs.webkit.org/show_bug.cgi?id=212576

        Reviewed by Tim Horton.

        Replaces all remaining implicit and explicit uses of the Color constructors taking numeric
        values with explicit calls to makeSimpleColor/makeSimpleColorFromFloats/makeExtendedColor,
        giving us a consistent way to create colors. Also addes use constexpr SimpleColors where possible.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * css/CSSValuePool.cpp:
        (WebCore::StaticCSSValuePool::StaticCSSValuePool):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseColorFunctionParameters):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::shadowColor const):
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::isEquivalentRGBA const):
        * inspector/InspectorOverlay.cpp:
        (WebCore::drawOutlinedQuadWithClip):
        (WebCore::drawShapeHighlight):
        (WebCore::InspectorOverlay::paint):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::drawBounds):
        (WebCore::InspectorOverlay::drawRulers):
        (WebCore::InspectorOverlay::drawElementTitle):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::parseColor):
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::debugTextShadow):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS const):
        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolAllPagesWithBoundaries):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/Color.cpp:
        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        (WebCore::Color::blendWithWhite const):
        (WebCore::Color::colorWithAlphaMultipliedBy const):
        (WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const):
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        (WebCore::blendWithoutPremultiply):
        (WebCore::extendedColorsEqual): Deleted.
        (WebCore::Color::tagAsValid): Deleted.
        * platform/graphics/Color.h:
        (WebCore::Color::Color):
        (WebCore::Color::tagAsSemantic):
        (WebCore::Color::tagAsValid):
        (WebCore::extendedColorsEqual):
        (WebCore::Color::decode):
        (WebCore::Color::setIsSemantic): Deleted.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::makeExtendedColor):
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::ExtendedColor):
        (): Deleted.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::contentsLayerDebugBorderColor):
        (WebCore::cloneLayerDebugBorderColor):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::PlatformCALayer::drawRepaintIndicator):
        * platform/graphics/ca/TileCoverageMap.cpp:
        (WebCore::TileCoverageMap::TileCoverageMap):
        (WebCore::TileCoverageMap::update):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawRepaintCounters):
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::interpolateColorStop):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::Color):
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::colorForMarkerLineStyle):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::DropShadowFilterOperation::blend):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::colorFromNSColor):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForLink):
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::colorForGridTileBorder const):
        * platform/win/DragImageWin.cpp:
        (WebCore::createDragImageForLink):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::forcedTextColor const):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        (WebCore::replacementTextRoundedRectPressedColor): Deleted.
        (WebCore::replacementTextRoundedRectColor): Deleted.
        (WebCore::replacementTextColor): Deleted.
        (WebCore::unavailablePluginBorderColor): Deleted.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        (WebCore::borderStartEdgeColor): Deleted.
        (WebCore::borderEndEdgeColor): Deleted.
        (WebCore::borderFillColor): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintDebugOverlays):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformTextSearchHighlightColor const):
        (WebCore::RenderTheme::paintSystemPreviewBadge):
        (WebCore::RenderTheme::platformTapHighlightColor const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor const):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):
        (WebCore::RenderThemeIOS::paintRadioDecorations):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        (WebCore::RenderThemeIOS::paintSliderTrack):
        (WebCore::RenderThemeIOS::paintProgressBar):
        (WebCore::paintAttachmentProgress):
        (WebCore::paintAttachmentBorder):
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):
        (WebCore::RenderThemeIOS::shadowColor const): Deleted.
        (WebCore::attachmentBorderColor): Deleted.
        (WebCore::attachmentProgressColor): Deleted.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::titleTextColorForAttachment):
        (WebCore::AttachmentLayout::layOutSubtitle):
        (WebCore::paintAttachmentIconBackground):
        (WebCore::paintAttachmentTitleBackground):
        (WebCore::paintAttachmentProgress):
        (WebCore::paintAttachmentPlaceholderBorder):
        (WebCore::attachmentIconBackgroundColor): Deleted.
        (WebCore::attachmentIconBorderColor): Deleted.
        (WebCore::attachmentTitleInactiveBackgroundColor): Deleted.
        (WebCore::attachmentTitleInactiveTextColor): Deleted.
        (WebCore::attachmentSubtitleTextColor): Deleted.
        (WebCore::attachmentProgressBarBackgroundColor): Deleted.
        (WebCore::attachmentProgressBarFillColor): Deleted.
        (WebCore::attachmentProgressBarBorderColor): Deleted.
        (WebCore::attachmentPlaceholderBorderColor): Deleted.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeWin::systemColor const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorResolvingCurrentColor const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialStrokeColor):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialStopColor):
        (WebCore::SVGRenderStyle::initialFloodColor):
        (WebCore::SVGRenderStyle::initialLightingColor):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::animate):
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::drawRect):
        * testing/cocoa/WebViewVisualIdentificationOverlay.mm:
        (-[WebViewVisualIdentificationOverlay initWithWebView:kind:deprecated:]):

2020-06-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] When GraphicsLayerCA::m_uncommittedChanges is initialized with a non-zero value, nothing is painted.
        https://bugs.webkit.org/show_bug.cgi?id=168666

        Reviewed by Maciej Stachowiak.

        When m_uncommittedChanges is initialized with a non-zero value, client().notifyFlushRequired() will not be
        called in the first call to noteLayerPropertyChanged(), see https://bugs.webkit.org/show_bug.cgi?id=64808.

        Covered by existing tests.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::initialize):
        * platform/graphics/ca/GraphicsLayerCA.h:

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add printing support
        https://bugs.webkit.org/show_bug.cgi?id=212320

        Reviewed by Adrian Perez de Castro.

        Add gtk_dialog_run() to GTK4.

        * platform/gtk/GtkVersioning.h:
        (gtk_dialog_run):

2020-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make inspector work
        https://bugs.webkit.org/show_bug.cgi?id=212321

        Reviewed by Adrian Perez de Castro.

        Add gtk_native_dialog_run() for GTK4.

        * platform/gtk/GtkVersioning.h:
        (gtk_native_dialog_run):

2020-06-01  Rob Buis  <rbuis@igalia.com>

        Rename ResourceResponseBase::isHTTP to isInHTTPFamily
        https://bugs.webkit.org/show_bug.cgi?id=208782

        Reviewed by Sam Weinig.

        As the comment says, the method name is misleading and the method
        is inconsistent with the API of ResourceRequestBase, so rename it
        to make it clear the method can be used for both http and https
        protocols.

        No tests since no change in behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isInHTTPFamily const):
        (WebCore::ResourceResponseBase::isHTTP const): Deleted.
        * platform/network/ResourceResponseBase.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType const):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::externalEntityMimeTypeAllowed):

2020-05-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tidy up Source/WebCore/page/DragController.h
        https://bugs.webkit.org/show_bug.cgi?id=212584

        Reviewed by Anders Carlsson.

        Unindent the `DragController` class by 1 indentation level, to adhere with
        <https://webkit.org/code-style-guidelines/#indentation-namespace>. Also, remove
        some stray trailing whitespace.

        No change in behavior.

        * page/DragController.h:
        (WebCore::DragController::mouseIsOverFileInput const):
        (WebCore::DragController::numberOfItemsToBeAccepted const):
        (WebCore::DragController::setDidInitiateDrag):
        (WebCore::DragController::didInitiateDrag const):
        (WebCore::DragController::sourceDragOperation const):
        (WebCore::DragController::draggingImageURL const):
        (WebCore::DragController::setDragOffset):
        (WebCore::DragController::dragOffset const):
        (WebCore::DragController::dragSourceAction const):
        (WebCore::DragController::dragHandlingMethod const):
        (WebCore::DragController::documentUnderMouse const):
        (WebCore::DragController::dragDestinationActionMask const):
        (WebCore::DragController::droppedImagePlaceholders const):
        (WebCore::DragController::droppedImagePlaceholderRange const):
        (WebCore::DragController::canLoadDataFromDraggingPasteboard const):
        (WebCore::DragController::client const):

2020-05-31  Dean Jackson  <dino@apple.com>

        AutoTrader crashed while browsing search results
        https://bugs.webkit.org/show_bug.cgi?id=212461
        rdar://60733185

        Reviewed by Sam Weinig.

        On iOS, when using WebKit1 (UIWebView), CoreAnimation would
        call WebGLLayer's display method from a thread that is not
        the Web Thread. That method was performing some GL work using
        ANGLE, causing a crash.

        Since all the WebGLLayer's display method really needs to do
        is swap buffers for compositing, the fix is to separate all
        the GL operations into a method that can be called after
        painting but before compositing. This should also have the added
        benefit that by the time CoreAnimation comes to call display
        on all the dirty layers, we will have already executed our
        expensive GPU work. The total amount of work done on the GPU
        is the same, but hopefully it is now all done in WebKit's
        paint cycle, rather than when the Window Server is trying
        to get CA to composite things.

        Covered by a new API test: WebGLPrepareDisplayOnWebThread

        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::didMoveToNewDocument):
        (WebCore::HTMLCanvasElement::removedFromAncestor):
            Add or remove the document as a CanvasObserver.
        (WebCore::HTMLCanvasElement::needsPreparationForDisplay):
            Signals whether this element is the type that needs preparation.
        (WebCore::HTMLCanvasElement::prepareForDisplay):
            Tell the WebGLRenderingContext it must prepare.

        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::prepareForDisplay):
            The WebGLRenderingContext must forward the call
            to prepare down to the GraphicsContextGLOpenGL.

        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::prepareForDisplay):
            And the GraphicsContextGLOpenGL forwards the call
            into the WebGLLayer.

        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer prepareForDisplay]):
        (-[WebGLLayer display]):
            Split the parts of the `display` method that deal
            with flushing the GL commands, preparing the framebuffer texture,
            and swapping the IOSurfaces into a new `prepareForDisplay`. This
            method is invoked at the end of the rendering/layout tasks, leaving
            the `display` method to only tell CoreAnimation about a new buffer
            to composite.

        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore::Document::prepareCanvasesForDisplayIfNeeded):
        (WebCore::Document::canvasChanged):
        (WebCore::Document::canvasDestroyed):
            Keep a set of HTMLCanvasElements that need to
            be prepared so we can tell them when they need to prepare.
            Do this by becoming a CanvasObserver, thus getting
            notified when a canvas has done something that
            would cause painting.

        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):
            Add a new task that asks the Document to notify
            all relevant canvas objects that they should prepare
            for display.

2020-05-31  Jer Noble  <jer.noble@apple.com>

        [Cocoa] EME should return more helpful error code during key exchange
        https://bugs.webkit.org/show_bug.cgi?id=212535
        <rdar://problem/60439979>

        Reviewed by Eric Carlson.

        Clients have requested that the EME API provide more helpful information when the FairPlay CDM is unable
        to provide the requested level of key security. Currently, we reject the update() promise with a generic
        "failed" error code. Instead, resolve the promise, but mark the key as "output-restricted" in the key
        status map, indicating that the key cannot be used with required level of security.

        Drive-by fix: We currently ASSERT() that the callback from removeSessionData() isn't called if the session
        is not a PUR session. When calling removeSessionData() on a non-PUR session, call the callback with a generic
        "failed" error.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::removeSessionData):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::keyStatuses const):

2020-05-31  Jer Noble  <jer.noble@apple.com>

        [Cocoa] Transition between encrypted and clear codecs throws error from SourceBuffer.appendBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=212550
        <rdar://problem/62207260>

        Reviewed by Eric Carlson.

        CoreMedia returns a different codec 4CC code for "encrypted AVC" than it does for "clear AVC", though
        the underlying codec used for both is the same. While CoreMedia does use different codec implementations
        for each, it is capable of freely switching between the two, and the codec string used by web developers
        for encrypted vs. clear content is identical. So we will treat these two codecs as "the same" as it pertains
        to the MSE requirement that codecs contained in new initialization segments are "the same" as previous
        ones. Adopt kCMFormatDescriptionExtension_ProtectedContentOriginalFormat, which can query the "original"
        codec used for encrypted codec playback.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2020-05-31  Zalan Bujtas  <zalan@apple.com>

        [iBooks] Empty pages appear in book
        https://bugs.webkit.org/show_bug.cgi?id=212573
        <rdar://problem/62912623>

        Reviewed by Antti Koivisto.

        Do not add a page break for orphan content unless the line does not fit anymore.

        Test: fast/multicol/orphans-ignored.html

        * rendering/SimpleLineLayoutPagination.cpp:
        (WebCore::SimpleLineLayout::setPageBreakForLine):
        (WebCore::SimpleLineLayout::adjustLinePositionsForPagination):

2020-05-31  Rob Buis  <rbuis@igalia.com>

        Implement named item condition for images
        https://bugs.webkit.org/show_bug.cgi?id=212473

        Reviewed by Maciej Stachowiak.

        Implement named item condition for images, not only should we
        check there are both an id and a name attribute, but also that
        the name attribute is non-empty [1].

        Behavior matches Chrome and Firefox.

        [1] https://html.spec.whatwg.org/multipage/dom.html#dom-document-nameditem-filter

        Test: imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/nameditem-06.html

        * html/HTMLNameCollection.cpp:
        (WebCore::DocumentNameCollection::elementMatchesIfIdAttributeMatch):

2020-05-31  Rob Buis  <rbuis@igalia.com>

        <area> needs to be connected in order to navigate
        https://bugs.webkit.org/show_bug.cgi?id=177357

        Reviewed by Maciej Stachowiak.

        Implement second step of cannot navigate algorithm:
        https://html.spec.whatwg.org/#cannot-navigate

        Test: web-platform-tests/html/semantics/links/following-hyperlinks/activation-behavior.window.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2020-05-30  Sam Weinig  <weinig@apple.com>

        Extended Color: Additional color cleanups
        https://bugs.webkit.org/show_bug.cgi?id=212567

        Reviewed by Simon Fraser.

        A few unrelated quality-of-life cleanups to Color and related classes:
        - Rename Color::asSimpleColor() to Color::asSimple() for parity with Color::asExtended().
        - Move SimpleColor implementations of invertedColorWithAlpha() and asSRGBFloatComponents()
          to SimpleColor for parity with ExtenedColor.
        - Rename ExtendedColor::channels() to ExtendedColor::components() to consistency.
        - Adds operator[] to ColorComponents to allow direct access to components rather than
          requiring and additional .components[]
        - Using std::minmax() where possible.
        - Renaming colorFloatToSimpleColorByte to scaleRoundAndClampColorChannel to have a consistent 
          naming and location of conversion to 8-bit color channels.

        * platform/graphics/Color.cpp:
        (WebCore::Color::serialized const):
        (WebCore::Color::cssText const):
        (WebCore::Color::nameForRenderTreeAsText const):
        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        (WebCore::Color::invertedColorWithAlpha const):
        (WebCore::Color::colorSpaceAndComponents const):
        (WebCore::Color::toSRGBASimpleColorLossy const):
        (WebCore::Color::toSRGBAComponentsLossy const):
        * platform/graphics/Color.h:
        (WebCore::Color::isOpaque const):
        (WebCore::Color::isVisible const):
        (WebCore::Color::alpha const):
        (WebCore::Color::alphaAsFloat const):
        (WebCore::Color::asSimple const):
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        (WebCore::Color::encode const):
        (WebCore::Color::asSimpleColor const): Deleted.
        * platform/graphics/ColorComponents.h:
        (WebCore::ColorComponents::operator[]):
        (WebCore::ColorComponents::operator[] const):
        (WebCore::=):
        (WebCore::perComponentMax):
        (WebCore::perComponentMin):
        * platform/graphics/ColorMatrix.h:
        (WebCore::Rows>::transformedColorComponents const):
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::areEssentiallyEqual):
        (WebCore::rgbToLinearComponents):
        (WebCore::linearToRGBComponents):
        (WebCore::lightness):
        (WebCore::luminance):
        (WebCore::sRGBToHSL):
        (WebCore::hslToSRGB):
        * platform/graphics/ColorUtilities.h:
        (WebCore::scaleRoundAndClampColorChannel):
        (WebCore::scaleRoundAndClampColorChannelUsingAlternativeRounding):
        (WebCore::colorFloatToSimpleColorByte): Deleted.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::hash const):
        (WebCore::ExtendedColor::cssText const):
        (WebCore::ExtendedColor::colorWithAlpha const):
        (WebCore::ExtendedColor::invertedColorWithAlpha const):
        (WebCore::ExtendedColor::toSRGBAComponentsLossy const):
        (WebCore::ExtendedColor::isWhite const):
        (WebCore::ExtendedColor::isBlack const):
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::alpha const):
        (WebCore::ExtendedColor::components const):
        (WebCore::ExtendedColor::ExtendedColor):
        (WebCore::operator==):
        (WebCore::ExtendedColor::channels const): Deleted.
        * platform/graphics/SimpleColor.cpp:
        (WebCore::makeSimpleColorFromFloats):
        (WebCore::makeSimpleColorFromHSLA):
        * platform/graphics/SimpleColor.h:
        (WebCore::SimpleColor::SimpleColor):
        (WebCore::SimpleColor::valueAsARGB const):
        (WebCore::SimpleColor::colorWithAlpha const):
        (WebCore::SimpleColor::invertedColorWithAlpha const):
        (WebCore::SimpleColor::asSRGBFloatComponents const):
        (WebCore::makeSimpleColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::toIntBasedColorComponents):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):

2020-05-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262335.
        https://bugs.webkit.org/show_bug.cgi?id=212571

        Triggered assertions in WebKit1

        Reverted changeset:

        "Disallow responses when a response contains invalid header
        values"
        https://bugs.webkit.org/show_bug.cgi?id=184493
        https://trac.webkit.org/changeset/262335

2020-05-30  Simon Fraser  <simon.fraser@apple.com>

        For scroll container and scrolled contents layers, use the renderer style to set up the event regions
        https://bugs.webkit.org/show_bug.cgi?id=212570

        Reviewed by Antti Koivisto.

        RenderLayerBacking::updateEventRegion() sets up event regions on the scroll container and scrolled contents
        layer using the default style, in order to fill up the m_region part of EventRegion, but we might as well
        pass the renderer style so that it fills up the touch-action and wheel event regions as well.

        Also re-use the existing event region trace points for region building.

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

2020-05-30  Andy Estes  <aestes@apple.com>

        [Apple Pay] Support percentage border-radius values in -apple-pay-button
        https://bugs.webkit.org/show_bug.cgi?id=212559
        <rdar://problem/63781881>

        Reviewed by Antti Koivisto.

        Added test cases to fast/css/appearance-apple-pay-button-border-radius.html.

        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::paintApplePayButton): Used floatValueForLength() to ensure
        percentage lengths are resolved before passing a corner radius to PassKit.

2020-05-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSBigInt allocation should be graceful for OOM
        https://bugs.webkit.org/show_bug.cgi?id=212512

        Reviewed by Mark Lam.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readBigInt):

2020-05-29  Simon Fraser  <simon.fraser@apple.com>

        Event region painting should use the same paint flags as normal painting
        https://bugs.webkit.org/show_bug.cgi?id=212547

        Reviewed by Sam Weinig.

        There are cases (see r260118) where we need to send down the correct paint flags when
        painting the scrolled contents layer to avoid unwanted clipping. We need to send down
        the one paint flag relevant for event region paints, CompositedOverflowScrollContent,
        for the same reasons.

        I could not make a testcase that shows a behavior change, but I did copy the testcase
        from r260118 and adapt it for event-region generation to detect future behavior changes.

        Test: fast/scrolling/mac/wheel-event-listener-region-inside-overflow-scroll-clipped-out.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::collectEventRegionForFragments):
        * rendering/RenderLayer.h:

2020-05-29  Simon Fraser  <simon.fraser@apple.com>

        Elements with wheel event handlers inside overflow:scroll are missing from the event region
        https://bugs.webkit.org/show_bug.cgi?id=212545

        Reviewed by Zalan Bujtas.

        RenderBlock::paintObject() needs to traverse into descendants if there are are
        wheel event handlers on the document, just as it does for elements with touch-action.

        Test: fast/scrolling/mac/wheel-event-listener-region-inside-overflow-scroll.html

        * dom/Document.h:
        (WebCore::Document::hasTouchEventHandlers const):
        (WebCore::Document::hasWheelEventHandlers const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject):

2020-05-29  Rob Buis  <rbuis@igalia.com>

        Disallow responses when a response contains invalid header values
        https://bugs.webkit.org/show_bug.cgi?id=184493

        Reviewed by Youenn Fablet.

        From the Fetch specification [1]:
        "A value is a byte sequence that matches the following conditions:
        "- Contains no 0x00 (NUL) or HTTP newline bytes."

        [1] https://fetch.spec.whatwg.org/#concept-header-value

        Tests: imported/w3c/web-platform-tests/fetch/h1-parsing/resources-with-0x00-in-header.window.html
               imported/web-platform-tests/fetch/api/basic/header-value-combining.any.html
               imported/web-platform-tests/fetch/api/basic/header-value-combining.any.worker.html
               imported/web-platform-tests/fetch/api/basic/header-value-null-byte.any.html
               imported/web-platform-tests/fetch/api/basic/header-value-null-byte.any.worker.html
               imported/web-platform-tests/xhr/headers-normalize-response.htm

        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader):
        (WebCore::appendToHeaderMap):
        (WebCore::FetchHeaders::filterAndFill):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::containsInvalidHTTPHeaders const):
        * platform/network/ResourceResponseBase.h:

2020-05-29  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/applepay/ApplePayError.idl:
        * Modules/applepay/ApplePayPaymentAuthorizationResult.idl:
        * Modules/applepay/ApplePayPaymentContact.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.idl:
        * Modules/applepay/ApplePayShippingContactUpdate.idl:
        * Modules/applepay/ApplePayShippingMethodUpdate.idl:
        * Modules/applepay/PaymentCoordinatorClient.cpp:
        (WebCore::PaymentCoordinatorClient::supportsVersion):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::computePaymentMethodErrors const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::applePayButtonDescription const):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2020-05-29  Jer Noble  <jer.noble@apple.com>

        [EME] navigator.requestMediaKeySystemAccess() should reject PUR sessionTypes in private browsing mode.
        https://bugs.webkit.org/show_bug.cgi?id=212540
        <rdar://problem/61125757>

        Reviewed by Eric Carlson.

        A MediaKeySystemAccess with a PUR session type will never be able to create media keys when created in
        private browsing mode. Allow clients to fail over to non-PUR session by rejecting the promise returned by
        requestMediaKeySystemAccess() when in private browsing mode.

        Test: platform/mac/media/encrypted-media/fps-ephemeral-requestMediaKeySystemAccess.html

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedConfiguration):

2020-05-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Unable to paste images when composing mail at yahoo.com
        https://bugs.webkit.org/show_bug.cgi?id=212544
        <rdar://problem/63511613>

        Reviewed by Megan Gardner and Andy Estes.

        When pasting images in the mobile version of the mail compose editor on mail.yahoo.com, mail.yahoo.com's script
        handles the paste by allowing images to be inserted into the DOM (i.e. by not preventing the "paste" event), and
        then stripping away the `src` attribute of the pasted image afterwards. This leaves behind a blank space in the
        email.

        Work around this by avoiding images when converting the contents of the pasteboard into web content on iOS.
        Instead, we fall back to inserting (sanitized) text, or nothing at all if there is no other representation
        suitable for converting into web content.

        Unfortunately, the mobile version of the website is loaded on iPad as well, even when the desktop website has
        been requested (through sending the macOS user agent and "MacIntel" navigator platform).

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readImage):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldAvoidPastingImagesAsWebContent const):
        * page/Quirks.h:

2020-05-29  Darin Adler  <darin@apple.com>

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Rubber-stamped by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add back ENABLE_CSS_CONIC_GRADIENTS, removed
        by accident.

2020-05-29  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r262289.

        This commit caused a test to crash internally

        Reverted changeset:

        "MediaPlayerPrivateMediaStreamAVFObjC should enqueue samples
        in a background thread"
        https://bugs.webkit.org/show_bug.cgi?id=212073
        https://trac.webkit.org/changeset/262289

2020-05-27  Darin Adler  <darin@apple.com>

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Andy Estes.

        * Configurations/FeatureDefines.xcconfig: Removed 83 of the 119 things defined in
        this file. There are 36 more that are slightly more complex that we can remove
        carefully later.

2020-05-29  Darin Adler  <darin@apple.com>

        Make generate-unified-sources.sh not depend on features being listed in FEATURE_DEFINES environment variable
        https://bugs.webkit.org/show_bug.cgi?id=212420

        Currently any #if in the Sources.txt and SourcesCocoa.txt files can check only features
        defined in the FeatureDefines.xcconfig file, which sets up the FEATURE_DEFINES environment
        variable. Instead, we'd like to pass in all the things defined in the Platform.h headers
        as well. We accomplish that using the FEATURE_AND_PLATFORM_DEFINES variable from the
        DerivedSources.make file. This was the last place using FEATURE_DEFINES directly, so it
        frees us up to reduce FeatureDefines.xcconfig and move feature definitions to
        PlatformEnableCocoa.h instead, which will be less repetitive.

        Reviewed by Andy Estes.

        * Configurations/GenerateUnifiedSources.xcconfig: Deleted.
        * DerivedSources-input.xcfilelist: Updated.
        * DerivedSources-output.xcfilelist: Updated.
        * DerivedSources.make: Added a rule to invoke generate-unified-sources.sh, passing
        FEATURE_AND_PLATFORM_DEFINES.
        * Scripts/generate-unified-sources.sh: Removed hard-coded use of FEATURE_DEFINES.
        * UnifiedSources-output.xcfilelist: Deleted.
        * WebCore.xcodeproj/project.pbxproj: Removed Generate Unified Sources build step,
        since it's now part of Generate Derived Sources.

2020-05-29  Darin Adler  <darin@apple.com>

        [Cocoa] Pass all defines from Platform.h to various scripts, not just the ones from .xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=212451

        Reviewed by Sam Weinig.

        * DerivedSources.make: Run the preprocessor on Platform.h and parse the output into
        FEATURE_AND_PLATFORM_DEFINES. Use that and FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES
        whenever we need a list of defines. Also took out some Windows-specific stuff since
        this is now only used on Mac platforms. Use ":=" when calling $(shell) to make sure
        the same shell command is not invoked over and over again.

2020-05-29  Keith Rollin  <krollin@apple.com>

        Revert switch to XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=212530
        <rdar://problem/63764632>

        Unreviewed build fix.

        Bug 209890 enabled the use of XCBuild by default. Since then, some
        build issues have shown up. While addressing them, temporarily turn
        off the use of XCBuild by default.

        No new tests -- build fix.

        * WebCore.xcodeproj/project.pbxproj:

2020-05-29  Myles C. Maxfield  <mmaxfield@apple.com>

        REGRESSION(r261940): PLT5 is 2% regressed
        https://bugs.webkit.org/show_bug.cgi?id=212504
        <rdar://problem/63685637>

        Reviewed by Wenson Hsieh.

        We were causing spurious style recalcs on every main frame load.

        No new tests because there is no behavior change.

        * page/Settings.yaml:

2020-05-29  Sam Weinig  <weinig@apple.com>

        Extended Color: ColorMatrix should support smaller matrices and be constexpr
        https://bugs.webkit.org/show_bug.cgi?id=212477

        Reviewed by Simon Fraser.

        - Adds the ability to specify a ColorMatrix with any number of rows or columns,
          useful as most of the uses ColorMatrix did not need the full 5x4. Transformation
          act as-if the the ColorMatrix is the identify matrix for any rows or columns
          not present. For example, when transforming a ColorComponents, which is 4x1, a 
          3x3 ColorMatrix of the form:

              [ a, b, c ]
              [ d, e, f ]
              [ g, h, i ]
              
          will behave as-if it looks like:
          
              [ a, b, c, 0 ]
              [ d, e, f, 0 ]
              [ g, h, i, 0 ]
              [ 0, 0, 0, 1 ]
        
          In practice, this means that the last component of the input vector is left
          unmodified.

        - Adds ability to use ColorMatrix in constexpr statements, which will be useful
          for compile time concatenation of colorspace conversion matrices in a future
          change but is also useful for improved space efficiency of constant matrices
          already used.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove ColorMatrix.cpp

        * platform/graphics/ColorComponents.h:
        (WebCore::ColorComponents::ColorComponents):
        (WebCore::ColorComponents::operator+=):
        (WebCore::ColorComponents::operator+ const):
        (WebCore::ColorComponents::operator/ const):
        (WebCore::ColorComponents::operator* const):
        (WebCore::ColorComponents::abs const):
        (WebCore::ColorComponents::get const):
        (WebCore::perComponentMax):
        (WebCore::perComponentMin):
        (WebCore::operator==):
        (WebCore::operator!=):
        Make everything constexpr and move implementations out of the declarations for clarity.

        * platform/graphics/ColorMatrix.cpp: Removed.
        * platform/graphics/ColorMatrix.h:
        (WebCore::ColorMatrix::ColorMatrix):
        (WebCore::ColorMatrix::at const):
        (WebCore::grayscaleColorMatrix):
        (WebCore::sepiaColorMatrix):
        (WebCore::saturationColorMatrix):
        (WebCore::hueRotateColorMatrix):
        (WebCore::ColorMatrix::transformColorComponents):
        (WebCore::ColorMatrix::transformedColorComponents):
        Re-write as a class templatized on the number of rows and columns. Moves factory functions
        out of the class to avoid awkwardness of having to specify a dummy size when calling them 
        (e.g. we wouldn't want you to have to write ColorMatrix<3, 3>::grayscaleMatrix(), instead
        just grayscaleColorMatrix() is much nicer).

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::xyzToLinearSRGB):
        (WebCore::linearSRGBToXYZ):
        (WebCore::XYZToLinearP3):
        (WebCore::linearP3ToXYZ):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        Adopt new ColorMatrix interface.

        * platform/graphics/filters/FilterOperation.h:
        Remove unnecessary T in forward declaration.

        * platform/graphics/ColorUtilities.h:
        (WebCore::fastMultiplyBy255):
        (WebCore::fastDivideBy255):
        Add some missing constexprs.

2020-05-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262245.
        https://bugs.webkit.org/show_bug.cgi?id=212531

        "Caused WebCore's 'Check .xcfilelists' build phase to be ~100x
        slower"

        Reverted changeset:

        "[Cocoa] Pass all defines from Platform.h to various scripts,
        not just the ones from .xcconfig"
        https://bugs.webkit.org/show_bug.cgi?id=212451
        https://trac.webkit.org/changeset/262245

2020-05-29  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix after r262299

        We replaced ScriptExecutionContext* by Document& in WebXRSpace hierarchy, so the
        failing ASSERT() was:
        1. Invalid, there is no "context" parameter but "document"
        2. Not needed anymore, as we're passing a reference

        * Modules/webxr/WebXRSpace.cpp:
        (WebCore::WebXRSpace::WebXRSpace): Removed invalid ASSERT().

2020-05-27  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement XRSession::requestReferenceSpace()
        https://bugs.webkit.org/show_bug.cgi?id=212407

        Reviewed by Youenn Fablet.

        This patch implements the requestReferenceSpace() method of the XRSession which is used to
        create reference spaces. A reference space establishes a space where pose data will be defined
        and thus is mandatory to retrieve that pose information.

        There are still some bits that have to implementated in follow up patches using platform code.

        * Modules/webxr/WebXRBoundedReferenceSpace.cpp:
        (WebCore::WebXRBoundedReferenceSpace::create): Added.
        (WebCore::WebXRBoundedReferenceSpace::WebXRBoundedReferenceSpace): Ditto.
        * Modules/webxr/WebXRBoundedReferenceSpace.h:
        * Modules/webxr/WebXRReferenceSpace.cpp:
        (WebCore::WebXRReferenceSpace::create): Added.
        (WebCore::WebXRReferenceSpace::WebXRReferenceSpace): Ditto.
        (WebCore::WebXRReferenceSpace::getOffsetReferenceSpace): Use the create() method.
        * Modules/webxr/WebXRReferenceSpace.h:
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::referenceSpaceIsSupported const): New method to check whether a reference.
        space is supported by session and device.
        (WebCore::WebXRSession::requestReferenceSpace): New method that creates reference spaces for pose data.
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/WebXRSpace.cpp:
        (WebCore::WebXRSpace::WebXRSpace): Store a reference to the session creating the space.
        * Modules/webxr/WebXRSpace.h:

2020-05-29  Simon Fraser  <simon.fraser@apple.com>

        Update debug overlays at rendering update time
        https://bugs.webkit.org/show_bug.cgi?id=212510

        Reviewed by Antoine Quint.

        Don't eagerly update the regions in debug overlays when things change; this triggers
        assertions for touch event overlays.

        Instead, just mark them dirty and update the regions at "update the rendering" time.

        * page/DebugPageOverlays.cpp:
        (WebCore::RegionOverlay::setRegionChanged):
        (WebCore::RegionOverlay::didMoveToPage):
        (WebCore::RegionOverlay::recomputeRegion):
        (WebCore::DebugPageOverlays::regionChanged):
        (WebCore::DebugPageOverlays::updateRegionIfNecessary):
        * page/DebugPageOverlays.h:
        (WebCore::DebugPageOverlays::doAfterUpdateRendering):
        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):

2020-05-29  Simon Fraser  <simon.fraser@apple.com>

        Prepare for async scrolling in passive wheel event handler regions
        https://bugs.webkit.org/show_bug.cgi?id=212455

        Reviewed by Tim Horton.

        Clarify the processing for wheel events by adding OptionSet<WheelEventProcessingSteps>,
        which will, in future, allow us to describe the processing for an event in the passive
        event handler region which does scrolling on the scrolling thread, and is then sent
        to the main thread for DOM event dispatch.
        
        Removed ScrollingEventResult, which conflated "handled" with "send to another thread".
        The thread sending behavior is now encoded in the WheelEventProcessingSteps, and we can just
        use a bool for handled.
        
        Scrolling tree and node handleWheelEvent() functions return a WheelEventHandlingResult, which
        is a tuple of OptionSet<WheelEventProcessingSteps> and 'handled', allowing for a node with
        background-attachment:fixed to add the "send to main thread" processing step.

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::determineWheelEventProcessing):
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::WheelEventHandlingResult::needsMainThreadProcessing const):
        (WebCore::WheelEventHandlingResult::handled):
        (WebCore::WheelEventHandlingResult::unhandled):
        (WebCore::WheelEventHandlingResult::result):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::handleWheelEvent):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::handleWheelEvent):
        (WebCore::ThreadedScrollingTree::handleWheelEventAfterMainThread):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
        * platform/PlatformWheelEvent.cpp:
        (WebCore::operator<<):
        * platform/PlatformWheelEvent.h:

2020-05-29  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] ActiveDOMObjects must call suspendIfNeeded() upon creation
        https://bugs.webkit.org/show_bug.cgi?id=212517

        Reviewed by Žan Doberšek.

        We weren't calling suspendIfNeeded() upon ActiveDOMObjects creation (XRSession and XRSystem)
        and that was triggering ASSERTION FAILED: m_suspendIfNeededWasCalled.

        No new tests required as this was already detected by existing tests.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession): Call suspendIfNeeded().
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::WebXRSystem): Call suspendIfNeeded().

2020-05-29  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] WebXRSystem::unregisterSimulatedXRDeviceForTesting() ASSERTs in m_immersiveDevices.contains(device)
        https://bugs.webkit.org/show_bug.cgi?id=212516

        Reviewed by Žan Doberšek.

        The ASSERT that was failing was wrong. It was assuming that every simulated device should be part of the list
        of immersive devices. That's wrong, as devices only supporting inline sessions are not in that list.

        Apart from that, fake devices were not removed from the list of available devices in WebXRTest after
        disconnecting them all. That could potentially cause flakiness in the tests.

        No new test required as the current tests were properly detecting the issue.

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::registerSimulatedXRDeviceForTesting): Use XRSessionMode directly.
        (WebCore::WebXRSystem::unregisterSimulatedXRDeviceForTesting): Fixed the ASSERT. A simulated device
        might not be in the list of immersive devices if only supports inline sessions.
        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::disconnectAllDevices): Clear the list of devices after disconnecting.

2020-05-29  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC should enqueue samples in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212073

        Reviewed by Eric Carlson.

        Do not hop to the main thread when rendering video samples anymore.
        Instead, we enqueue to the display layer in the background thread but still hop to the main thread for two things:
        - Update of various states of the player
        - keep a ref to the video sample if canvas rendering is needed.

        Most display layer operations stay in the main thread (creation, flushing...).
        Deletion of the display layer and access from a background are covered by a lock.
        The m_canEnqueueDisplayLayer boolean ensures we do not enqueue too early when the display layer is not yet properly initialized.

        LocalSampleBufferDisplayLayer needs to handle the fact that enqueueing might be done in a background thread.
        Instead of introducing a lock, we introduce a work queue and we hop to this queue whenever we need to enqueue/mutate the pending samples.

        Covered by existing tests and manual testing.

        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (-[WebAVSampleBufferStatusChangeListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSampleBuffer):
        (WebCore::LocalSampleBufferDisplayLayer::requestNotificationWhenReadyForVideoData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::videoTransformationMatrix):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::processNewVideoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::applicationDidBecomeActive):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushRenderers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateRenderingMode):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setBufferingPolicy):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::rootLayerBoundsDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoTransformationMatrix): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueCorrectedVideoSample): Deleted.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayLayer): Deleted.

2020-05-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Implement script dialogs
        https://bugs.webkit.org/show_bug.cgi?id=212318

        Reviewed by Adrian Perez de Castro.

        Add more definitions to avoid ifdefs.

        * platform/gtk/GtkVersioning.h:
        (gtk_entry_set_text):
        (gtk_entry_get_text):
        (gtk_label_set_line_wrap):
        (gtk_window_set_default):
        (gtk_widget_add_css_class):

2020-05-28  Andy Estes  <aestes@apple.com>

        [Apple Pay] Buttons render with a corner radius of PKApplePayButtonDefaultCornerRadius even when explicitly specifying "border-radius: 0px"
        https://bugs.webkit.org/show_bug.cgi?id=212476
        <rdar://problem/63401433>

        Reviewed by Antti Koivisto.

        r256648 added support for customizing the corner radius of Apple Pay buttons using the
        border-radius CSS property. PassKit buttons have a default corner radius of 4, but
        border-radius has an initial value of 0, so to maintain web compatibility with existing
        buttons we only want to customize the corner radius when a border-radius value has been
        explicitly specified (otherwise, previously rounded buttons would all become squared off due
        to border-radius's initial value).

        r256648 checked for a non-initial border-radius by calling RenderStyle::hasBorderRadius, but
        this check does not distinguish between an initial value and an explicit declaration of
        "border-radius: 0px". As a result, authors are unable to create Apple Pay buttons with
        square corners.

        This patch adds a flag to RenderStyle::NonInheritedFlags that tracks whether any
        border-radius longhand has been explicitly set (or has explicitly inherited an explicitly set
        value), and uses that flag to adjust the computed border radius for Apple Pay buttons.

        The addition of RenderStyle::NonInheritedFlags::hasExplicitlySetBorderRadius did not change
        the size of RenderStyle.

        Tests: fast/css/appearance-apple-pay-button-border-radius.html
               fast/css/getComputedStyle/computed-style-apple-pay-button.html

        * css/CSSProperties.json:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::adjustApplePayButtonStyle const):
        (WebCore::RenderThemeCocoa::paintApplePayButton):
        (WebCore::largestCornerRadius): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::hasExplicitlySetBorderRadius const):
        (WebCore::RenderStyle::setHasExplicitlySetBorderRadius):
        (WebCore::RenderStyle::NonInheritedFlags::operator== const):
        (WebCore::RenderStyle::NonInheritedFlags::copyNonInheritedFrom):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInheritBorderBottomLeftRadius):
        (WebCore::Style::BuilderCustom::applyValueBorderBottomLeftRadius):
        (WebCore::Style::BuilderCustom::applyInheritBorderBottomRightRadius):
        (WebCore::Style::BuilderCustom::applyValueBorderBottomRightRadius):
        (WebCore::Style::BuilderCustom::applyInheritBorderTopLeftRadius):
        (WebCore::Style::BuilderCustom::applyValueBorderTopLeftRadius):
        (WebCore::Style::BuilderCustom::applyInheritBorderTopRightRadius):
        (WebCore::Style::BuilderCustom::applyValueBorderTopRightRadius):

2020-05-28  Andy Estes  <aestes@apple.com>

        Shrink StyleRareNonInheritedData by 8 bytes (on 64-bit platforms)
        https://bugs.webkit.org/show_bug.cgi?id=212484

        Reviewed by Tim Horton.

        There were 4 bytes of padding after shapeImageThreshold, enough to fit order and shrink the
        overall size of StyleRareNonInheritedData by 8 bytes on 64-bit platforms.

        Before:
        Total byte size: 480
        Total pad bytes: 50
        Padding percentage: 10.42 %

        After:
        Total byte size: 472
        Total pad bytes: 42
        Padding percentage: 8.90 %

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2020-05-28  Megan Gardner  <megan_gardner@apple.com>

        Responding to post commit review comments for https://bugs.webkit.org/show_bug.cgi?id=212060

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):

2020-05-28  Simon Fraser  <simon.fraser@apple.com>

        Simplify EventDispatcher wheel event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=212490

        Reviewed by Tim Horton.

        The various cross-thread bounces and completion lambdas in EventDispatcher::wheelEvent()
        and ScrollingTree code made the logic very hard to follow.

        Moving the ScrollingThread::dispatch() into EventHandler code simplifies things a little,
        and allows for removal of the hokey "try to handle" ScrollingTree function, as well
        as the clunky completion function.

        Now, EventHandler call shouldHandleWheelEventSynchronously(), then does the
        ScrollingThread::dispatch() which allows the lambda to easily call back into
        EventHandler for the main thread dispatch.

        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::tryToHandleWheelEvent): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:

2020-05-28  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Fix referencing grid line names with auto repeat()
        https://bugs.webkit.org/show_bug.cgi?id=209572

        Reviewed by Darin Adler.

        This patch fixes multiple problems when referencing named grid lines with the presence of
        the auto repeat() syntax:

          - If the 1st track was defined with auto repeat(), then the code used to assume that the
            referenced line appeared after the repeated tracks. But it may actually precede them.

          - If the referenced line appeared both inside and outside the auto repeat(), then it
            could resolve to the outside raw index, without expanding the auto repeat().

          - The logic for placing a placement property set to both an integer and an identifier
            was wrong with auto repeat().
            This patch fixes it by using the same proper logic that was already implemented in
            OrderedNamedLinesCollectorInGridLayout::collectLineNamesForIndex

          - The indices of both implicit grid lines defined with grid-template-areas and explicit
            ones defined with grid-template-rows/columns used to be stored together in
            NamedGridColumnLines and NamedGridRowLines. This was problematic because the former
            indices already refer to the final explicit grid so they don't have to be increased when
            expanding an auto repeat(), but the latter ones should.
            Therefore, this patch stores the indices in separate fields and uses the correct logic
            for each one. This also fixes 'grid-template-areas: inherit'.

        This patch is a port of these Chromium patches:
          - https://crrev.com/744426
          - https://crrev.com/745925
          - https://crrev.com/747631
          - https://crrev.com/747669
          - https://crrev.com/771984

        Tests: imported/w3c/web-platform-tests/css/css-grid/placement/grid-placement-using-named-grid-lines-002.html
               imported/w3c/web-platform-tests/css/css-grid/placement/grid-placement-using-named-grid-lines-004.html
               imported/w3c/web-platform-tests/css/css-grid/placement/grid-placement-using-named-grid-lines-005.html
               imported/w3c/web-platform-tests/css/css-grid/placement/grid-placement-using-named-grid-lines-008.html
               imported/w3c/web-platform-tests/css/css-grid/placement/grid-placement-using-named-grid-lines-009.html

        * rendering/style/GridPositionsResolver.cpp:
        (WebCore::NamedLineCollection::NamedLineCollection):
        (WebCore::NamedLineCollection::hasExplicitNamedLines const):
        (WebCore::NamedLineCollection::hasNamedLines const):
        (WebCore::NamedLineCollection::contains const):
        (WebCore::NamedLineCollection::firstExplicitPosition const):
        (WebCore::NamedLineCollection::firstPosition const):
        * rendering/style/GridPositionsResolver.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::implicitNamedGridColumnLines const):
        (WebCore::RenderStyle::implicitNamedGridRowLines const):
        (WebCore::RenderStyle::setImplicitNamedGridColumnLines):
        (WebCore::RenderStyle::setImplicitNamedGridRowLines):
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator== const):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::BuilderCustom::applyInitialGridTemplateAreas):
        (WebCore::Style::BuilderCustom::applyInheritGridTemplateAreas):
        (WebCore::Style::BuilderCustom::applyValueGridTemplateAreas):

2020-05-28  Andres Gonzalez  <andresg_22@apple.com>

        [ macOS Debug ] accessibility/roles-exposed.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=212478
        <rdar://problem/63411656>

        Reviewed by Chris Fleizach.

        Logging the backingObject in every call to accessibilityAttributeValue
        seems to be causing this long test to take too long and timeout in slow
        systems.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2020-05-27  Keith Miller  <keith_miller@apple.com>

        for-of should check the iterable is a JSArray for FastArray in DFG iterator_open
        https://bugs.webkit.org/show_bug.cgi?id=212383

        Reviewed by Saam Barati.

        Update various InheritsTraits specializations to contain a typeRange member.
        Also, change the inherits function to use inheritsJSTypeImpl like the JSC
        variants.

        * bindings/js/JSDocumentCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSDocument>::inherits):
        * bindings/js/JSElementCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSElement>::inherits):
        * bindings/js/JSEventCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSEvent>::inherits):
        * bindings/js/JSNodeCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSNode>::inherits):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):

2020-05-27  Darin Adler  <darin@apple.com>

        [Cocoa] Pass all defines from Platform.h to various scripts, not just the ones from .xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=212451

        Reviewed by Sam Weinig.

        * DerivedSources.make: Run the preprocessor on Platform.h and parse the output into
        FEATURE_AND_PLATFORM_DEFINES. Use that and FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES
        whenever we need a list of defines. Also took out some Windows-specific stuff since
        this is now only used on Mac platforms.

2020-05-27  Simon Fraser  <simon.fraser@apple.com>

        ScrollingTreeMac::eventListenerRegionTypesForPoint() needs to convert the point to local coordinates
        https://bugs.webkit.org/show_bug.cgi?id=212440

        Reviewed by Tim Horton.

        ScrollingTreeMac::eventListenerRegionTypesForPoint() needs to convert the point to local coordinates
        before consulting the event region.

        Also made EventListenerRegionType loggabale.

        Will be tested by wheel event tests once we switch to using these kinds of regions.

        * page/scrolling/mac/ScrollingTreeMac.mm:
        (collectDescendantLayersAtPoint):
        (ScrollingTreeMac::scrollingNodeForPoint):
        (ScrollingTreeMac::eventListenerRegionTypesForPoint const):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:

2020-05-28  Youenn Fablet  <youenn@apple.com>

        RealtimeIncomingVideoSourceCocoa::OnFrame should use video frame timestamp
        https://bugs.webkit.org/show_bug.cgi?id=212402

        Reviewed by Eric Carlson.

        Use timestamp provided from the libwebrtc backend instread of marking the frames as display immediately.
        Update LocalSampleBufferDisplayLayer to mark the frame as display immediately if their presentation time is in the past since we guarantee the frames are in order.

        Remove the offset correction in MediaPlayerPrivateMediaStreamAVFObjC.
        This does not work well when the display layer is in GPU process and it is simpler to use the system clock which is what AVSampleBufferDisplayLayser is using if controlTimebase is not set.

        Manually tested.

        * platform/graphics/avfoundation/SampleBufferDisplayLayer.h:
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::removeOldSamplesFromPendingQueue):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferDisplayLayerStatusDidChange):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::applicationDidBecomeActive):
        * platform/mediastream/VideoTrackPrivateMediaStream.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):

2020-05-28  Antti Koivisto  <antti@apple.com>

        Incorrect clipping of absolute and fixed elements inside stacking-context composited overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=212419
        <rdar://problem/55856170>

        Reviewed by Simon Fraser.

        We incorrectly clip descendants that are not in containing block chain.
        There is already code to do the correct clipping, it just needs be enabled in this case.

        Tests: compositing/overflow/non-contained-descendant-clipping-absolute.html
               compositing/overflow/non-contained-descendant-clipping-fixed.html

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

        Add hasCompositedNonContainedDescendants bit.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::CompositingState::stateForPaintOrderChildren const):
        (WebCore::RenderLayerCompositor::CompositingState::updateWithDescendantStateAndLayer):

        Check if the parent layer is for a containing block of this layer.

        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

        Update the bit.

        (WebCore::RenderLayerCompositor::traverseUnchangedSubtree):
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants):

        Pick the clipping path where descendants are not clipped.

2020-05-27  Noam Rosenthal  <noam@webkit.org>

        Implement AccessKeyLabel attribute.
        https://bugs.webkit.org/show_bug.cgi?id=72715

        Spec: https://html.spec.whatwg.org/multipage/interaction.html#dom-accesskeylabel

        As per spec, return the modifiers+accessKey when requesting the element accessKeyLabel.

        Equivalent to the existing Firefox implementation and (pending) Chrome implementation.

        Alt is the hardcoded modifier for any non-cocoa platform, so hardcode it also for the label.
        Use modifier text for Mac/iOS as it can change (e.g. for voice-over).

        Reviewed by Darin Adler.

        Test: fast/forms/access-key-label.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::accessKeyLabel const):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:

2020-05-27  Sam Weinig  <weinig@apple.com>

        Extended Color: Refactor FloatComponents and ColorComponents into a single templatized ColorComponents class
        https://bugs.webkit.org/show_bug.cgi?id=212446

        Reviewed by Simon Fraser.

        Merge FloatComponents and ColorComponents into ColorComponents<T> and move them to their own
        header. This avoids duplicate code and paves the way for further generalization down the line.
        
        Also moves some utility functions to ColorUtilities.h from SimpleColor.h as they make more sense
        in the former.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        Add ColorComponents.h

        * platform/graphics/ColorComponents.h: Copied from Source/WebCore/platform/graphics/ColorUtilities.h.
        Moved ColorComponents to its own header and templatized it to allow it to serve the
        needs of both the old ColorComponents and old FloatComponents classes.
        
        * platform/graphics/ColorUtilities.cpp:
        * platform/graphics/ColorUtilities.h:
        Removed ColorComponents/FloatComponents and update existing usages to their new names.
        Also moved roundAndClampColorChannel, fastMultiplyBy255, fastDivideBy255 
        and colorFloatToSimpleColorByte here from SimpleColor to make it clear where
        general helper functions can go.
        
        * platform/graphics/Color.h:
        * platform/graphics/Color.cpp:
        (WebCore::Color::colorSpaceAndComponents const):
        (WebCore::Color::toSRGBAComponentsLossy const):
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::channels const):
        Update for rename of FloatComponents to ColorComponents<float>.

        * platform/graphics/SimpleColor.cpp:
        (WebCore::makeSimpleColorFromHSLA):
        Use structured bindings and simplify code. 

        * platform/graphics/SimpleColor.h:
        (WebCore::roundAndClampColorChannel): Deleted.
        (WebCore::fastMultiplyBy255): Deleted.
        (WebCore::fastDivideBy255): Deleted.
        (WebCore::colorFloatToSimpleColorByte): Deleted.
        As noted above, moved roundAndClampColorChannel, fastMultiplyBy255, fastDivideBy255 
        and colorFloatToSimpleColorByte to ColorUtilities.h

        * platform/graphics/filters/FEColorMatrix.cpp:
        Update for rename of FloatComponents to ColorComponents<float>.

        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::byteOffsetOfPixel):
        Moved byteOffsetOfPixel here from ColorUtilities. This file is the only user
        and it wasn't general in a way that was clear for other users.

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        Update for rename of FloatComponents to ColorComponents<float>.

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::makeColorComponentsfromPixelValue):
        Added. Used to be ColorComponents::fromRGBA(), but was only used here
        and didn't seem generally useful.

        (WebCore::makePixelValueFromColorComponents):
        Added. Used to be ColorComponents::toRGBA(), but was only used here
        and didn't seem generally useful.
        
        (WebCore::minOrMax):
        (WebCore::columnExtremum):
        (WebCore::kernelExtremum):
        (WebCore::FEMorphology::platformApplyGeneric):
        Update for rename of FloatComponents to ColorComponents<float> and ColorComponents
        to ColorComponents<uint8_t>.

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::noise2D const):
        (WebCore::toIntBasedColorComponents):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint const):
        (WebCore::FETurbulence::fillRegion const):
        * platform/graphics/filters/FETurbulence.h:
        Update for rename of FloatComponents to ColorComponents<float> and ColorComponents
        to ColorComponents<uint8_t>. Also renames toColorComponents to toIntBasedColorComponents
        as the former was no longer specific enough. Updated to use std::clamp.

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::transformColor const):
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::transformColor const):
        (WebCore::FilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        Update for rename of FloatComponents to ColorComponents<float>.

2020-05-27  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r260023): ITP sparse plist decoding.
        <https://bugs.webkit.org/show_bug.cgi?id=212424>
        <rdar://problem/63683055>

        Reviewed by John Wilander.

        Reverted changeset:

        "KeyedDecoder functions in ResourceLoadStatistics.{cpp,h} should return bool and use WARN_UNUSED_RETURN"
        https://bugs.webkit.org/show_bug.cgi?id=210414
        https://trac.webkit.org/changeset/260023

        The revert did not compile due to changes in the KeyedDecoder
        class that require checking the return value of its methods, so
        additional changes were made below.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::decodeHashCountedSet):
        (WebCore::decodeHashSet):
        - Use IGNORE_WARNINGS_BEGIN("unused-result")/IGNORE_WARNINGS_END
          to suppress warning about ignoring the return value from
          KeyeDecoder::decodeObjects() since decoding these objects is
          optional.
        (WebCore::decodeOptionSet):
        - Check return value of KeyedDecoder::decodeUInt64() before
          setting `optionSet` parameter.

2020-05-27  Andres Gonzalez  <andresg_22@apple.com>

        Empty alt attribute does not ignore the image for accessibility clients in Safari.
        https://bugs.webkit.org/show_bug.cgi?id=212432

        Reviewed by Chris Fleizach.

        Test: accessibility/img-alt-attribute-unassigned-empty.html

        - AccessibilityRenderObject::computeAccessibilityIsIgnored was handling
        the case of images too late, after checking for ariaRoleAttribute(). So
        if an image had a role attribute, it was exposed regardless whether its
        alt attribute was an empty string. This change moves the handling of
        images above the check for ariaroleAttribute and hence honors the empty
        alt attribute rule.
        - Also images that have an aria-label attribute are now exposed.
        - Added logging of AccessibilityObjectInclusion.
        - Changed signature of log(RefPtr<AXCoreObject>) as pointed out by Darin Adler in a separate review.

        * accessibility/AXLogger.cpp:
        (WebCore::AXLogger::log):
        (WebCore::operator<<):
        * accessibility/AXLogger.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::determineAccessibilityRole):
        (WebCore::AccessibilityNodeObject::isImage const): Moved to base class.
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isImage const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::objectInclusionFromAltText):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::updateRoleAfterChildrenCreation):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-27  Chris Dumez  <cdumez@apple.com>

        pageshow only fires the first time the back button is pressed
        https://bugs.webkit.org/show_bug.cgi?id=156356
        <rdar://problem/29256489>

        Reviewed by Alexey Proskuryakov.

        When FrameLoader::commitProvisionalLoad() would restore a page from the back/forward
        cache, it would only call FrameLoader::checkCompleted() in the main frame and fail
        to do so in subframes. Calling checkCompleted() is important, not only because it
        sets m_isComplete to true but also because it calls checkCallImplicitClose(), which
        resets m_didCallImplicitClose to true and m_wasUnloadEventEmitted to false.

        Because checkCompleted() was not called, FrameLoader::dispatchUnloadEvents() would then
        fail to fire the pagehide event because the `m_didCallImplicitClose && !m_wasUnloadEventEmitted`
        was not met. Also, even though checkCompleted() was called for the main frame, if there
        are subframes, it would just return early because allChildrenAreComplete() returned false.
        Later on, when trying to fire the pageshow event, it would fail to because we have logic
        in DOMWindow::dispatchEvent() to avoid firing a pageshow event if we did not previously
        send a pagehide event.

        To address the issue, I now call checkCompleted() in FrameLoader::open() for subframes, as
        this gets called for every frame during restoration from the back/forward cache. For the main
        frame, we keep calling checkCompleted(), after we've called sendRemainingDelegateMessages().

        Test: fast/history/multiple-back-forward-navigations.html

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

2020-05-27  Sam Weinig  <weinig@apple.com>

        Extended Color: Move ColorMatrix to its own files
        https://bugs.webkit.org/show_bug.cgi?id=212431

        Reviewed by Dean Jackson.

        Move ColorMatrix to its own files from ColorUtilities.h/cpp

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ColorMatrix.cpp: Copied from Source/WebCore/platform/graphics/ColorUtilities.cpp.
        * platform/graphics/ColorMatrix.h: Copied from Source/WebCore/platform/graphics/ColorUtilities.h.
        * platform/graphics/ColorUtilities.cpp:
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/filters/FilterOperation.cpp:

2020-05-27  David Kilzer  <ddkilzer@apple.com>

        Add OptionSetTraits<> and use with WebCore::DragDestinationAction
        <https://webkit.org/b/212397>

        Reviewed by Alex Christensen.

        * page/DragActions.h:
        (WTF::OptionSetTraits<WebCore::DragDestinationAction>):
        - Add for use with OptionSet<>.

2020-05-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Clipboard API] Support reading "image/png" on ClipboardItem
        https://bugs.webkit.org/show_bug.cgi?id=212339
        <rdar://problem/63588957>

        Reviewed by Tim Horton.

        Adds support for reading "image/png" data via ClipboardItem.getType(). See below for more details.

        Tests:  ClipboardTests.ConvertTIFFToPNGWhenPasting
                editing/async-clipboard/clipboard-read-write-images.html

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

        Factor out logic for invalidating the `Clipboard`'s active `Pasteboard` object into a helper method. This is
        invoked after reading data from the clipboard, and verifies that the changeCount of the pasteboard is still the
        same as it was upon initially reading the contents of the clipboard. If the clipboard contents changed, we
        invalidate the session, and `Clipboard` is subsequently denied pasteboard access (until the next time the user
        explicitly grants programmatic pasteboard access).

        Note that this step is here for correctness rather than security. While it is true that a compromised web
        process could fake the changeCount at any given moment, other fairly recent changes around WebPasteboardProxy in
        the UI process makes it impossible to take advantage of this fact to arbitrarily read content from the system
        pasteboard. Instead of simply reading the empty string, this invalidation ensures that we actually reject the
        promise returned by the async clipboard API.

        * Modules/async-clipboard/Clipboard.h:
        * Modules/async-clipboard/ClipboardImageReader.cpp: Added.

        Add a PasteboardFileReader subclass that is responsible for sanitizing image data from the pasteboard into
        data that may be exposed to the page via clipboard API. On both macOS and iOS, this ensures that potentially
        sensitive EXIF data is stripped via conversion to the platform image type and back. On macOS, this additionally
        allows us to handle transcoding TIFF data on the pasteboard to PNG (this is covered by the new API test).

        (WebCore::ClipboardImageReader::readBuffer):

        Add a stub implementation for non-Cocoa platforms for now, which don't implement this part of the API.

        (WebCore::ClipboardImageReader::shouldReadBuffer const):

        Add a new hook to skip over certain types when reading pasteboard data into Files. In particular,
        `ClipboardImageReader` skips over any MIME type that does not match the MIME type specified (for now, this is
        limited to "image/png", but may be extended to include more image types in the future after we implement more
        transcoding logic).

        * Modules/async-clipboard/ClipboardImageReader.h: Added.
        (WebCore::ClipboardImageReader::ClipboardImageReader):
        (WebCore::ClipboardImageReader::takeResult):
        * Modules/async-clipboard/ios/ClipboardImageReaderIOS.mm: Added.
        (WebCore::ClipboardImageReader::readBuffer):

        Add iOS-specific `(PNG) => PNG` transcoding logic.

        * Modules/async-clipboard/mac/ClipboardImageReaderMac.mm: Added.
        (WebCore::ClipboardImageReader::readBuffer):

        Add macOS-specific `(PNG, TIFF) => PNG` transcoding logic.

        * Sources.txt:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/Pasteboard.h:
        (WebCore::PasteboardFileReader::shouldReadBuffer const):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::read):

        Add support for targeting a given pasteboard item index when reading files on Cocoa platforms.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::read):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        (WebCore::webSafeTypes):
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

        Expose "image/png" as one of the readable pasteboard types on iOS when using the async clipboard API. For some
        reason, this adjustment was made on macOS, but wasn't done on iOS, which led to a missing "image/png" type when
        asking for `ClipboardItem.types`.

        (WebCore::PlatformPasteboard::typesSafeForDOMToReadAndWrite const):

        Add support for writing "image/png "data to the system pasteboard (note that this data has been sanitized
        already, as it has been processed through `ClipboardItemTypeLoader::sanitizeDataIfNeeded()`). We simply needed
        to use `forEachPlatformStringOrBuffer` instead of just `forEachPlatformString` when writing the custom
        pasteboard data.

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

2020-05-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION (r254541): Valid mime types can only be added to the HashSet of the supported types for encoding
        https://bugs.webkit.org/show_bug.cgi?id=212427

        Reviewed by Darin Adler.

        Add back a check for the mime type validity which was removed in r254541.

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

2020-05-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace `featureGuard` and `availability` with a combined `condition` that accepts any macro
        https://bugs.webkit.org/show_bug.cgi?id=210014

        Reviewed by Brian Burg.

        Previously, the generated InspectorBackendCommands.js would include code for things that the
        backend doesn't actually support. By using actual macros and preprocessing that file, we can
        ensure that the frontend doesn't incorrectly think that something is supported by the page
        being inspected:
         - the `Canvas` commands and events related to shader programs/pipelines should only exist
           when the corresponding context type exists, namely `ENABLE(WEBGL)` and `ENABLE(WEBGPU)`.
         - iOS doesn't support showing rulers, so create a variant of `DOM.setInspectModeEnabled`
           that only exists for `PLATFORM(IOS_FAMILY)` that doesn't have the `showRulers` optional
           parameter, as well as removing `Page.setShowRulers` entirely.
         - setting the forced appearance should only be possible if dark mode is supported.
         - web archives only exist if CF is used.

        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::reset):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::requestShaderSource):
        (WebCore::InspectorShaderProgram::updateShader):
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setInspectModeEnabled):
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setForcedAppearance):
        (WebCore::InspectorPageAgent::archive):

        * Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_WEB_ARCHIVE` since it's always enabled in wtf/PlatformEnableCocoa.h.

        * inspector/InspectorFrontendHost.idl:
        Drive-by: replace the `#if` with the IDL `[Conditional=]`.

2020-05-27  Miguel Gomez  <magomez@igalia.com>

        [WPE] REGRESSION(r253675) Crash when using threaded rendering
        https://bugs.webkit.org/show_bug.cgi?id=212404

        Reviewed by Carlos Garcia Campos.

        Check whether the GraphicsContext has a PlatformGraphicsContext before trying to paint with
        it. If there's no PlatformGraphicsContext, paint using the GraphicsContext methods instead.

        * platform/graphics/cairo/ImageBufferCairoBackend.cpp:
        (WebCore::ImageBufferCairoBackend::draw):
        (WebCore::ImageBufferCairoBackend::drawPattern):

2020-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix build warning with GTK4

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::widgetRootCoords):

2020-05-27  David Kilzer  <ddkilzer@apple.com>

        Use OptionSet<DragDestinationAction> for mask values
        <https://webkit.org/b/212115>
        <rdar://problem/63423380>

        Reviewed by Alex Christensen.

        DragDestinationAction is used as both individual values and as a
        bit mask. This changes bit mask uses to OptionSet<> and renames
        variables to denote masks.

        * page/DragActions.h:
        (WebCore::DragDestinationAction):
        - Convert to enum class and remove *None and *Any values.
        (WebCore::DragDestinationActionAny):
        - Add helper function to return OptionSet<DragDestinationAction>
          with all values set.
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):
        * page/DragController.h:
        (WebCore::DragController::dragDestinationAction const): Rename.
        (WebCore::DragController::dragDestinationActionMask const):
        - Rename dragDestinationAction() to dragDestinationActionMask().
        * platform/DragData.cpp:
        (WebCore::DragData::DragData):
        * platform/DragData.h:
        (WebCore::DragData::DragData):
        - Use DragDestinationActionAny() in place of removed
          DragDestinationActionAny.
        (WebCore::DragData::dragDestinationAction const): Rename.
        (WebCore::DragData::dragDestinationActionMask const):
        - Rename dragDestinationAction() to dragDestinationActionMask().
        (WebCore::DragData::operator =):
        * platform/cocoa/DragDataCocoa.mm:
        (WebCore::DragData::DragData):

2020-05-27  Youenn Fablet  <youenn@apple.com>

        Video freezes when attaching a local MediaStream to multiple elements
        https://bugs.webkit.org/show_bug.cgi?id=194802
        <rdar://problem/63613107>

        Reviewed by Eric Carlson.

        AVSampleBufferDisplayLayer sometimes does not update the rendering when the same local source is rendered several times.
        To workaround this, we set kCMSampleAttachmentKey_DisplayImmediately to true, which fixes the issue as per my testing.
        We clone the sample buffer before setting this property as it might not be thread safe to modify the attachments of a sample
        that might also be encoded.
        We implement this at LocalSampleBufferDisplayLayer level and enable this for local capture sources only.

        Manually tested.

        * platform/graphics/avfoundation/SampleBufferDisplayLayer.h:
        (WebCore::SampleBufferDisplayLayer::setRenderPolicy):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.h:
        (WebCore::LocalSampleBufferDisplayLayer::setRenderPolicy):
        * platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
        (WebCore::LocalSampleBufferDisplayLayer::enqueueSample):
        (WebCore::LocalSampleBufferDisplayLayer::removeOldSamplesFromPendingQueue):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::setSampleBufferAsDisplayImmediately):
        (WebCore::MediaSampleAVFObjC::setAsDisplayImmediately):
        (WebCore::MediaSampleAVFObjC::cloneSampleBuffer):

2020-05-19  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement XRSession::requestAnimationFrame()
        https://bugs.webkit.org/show_bug.cgi?id=212099

        Reviewed by Youenn Fablet.

        The WebXR spec defines a requestAnimationFrame() mechanism to provide information about XR tracking devices
        using callbacks. It's pretty similar to the requestAnimationFrame() exposed by Window but only used
        to update WebXR content. We're adding a basic implementation of this mechanism as long as cancellation
        support. It requires some platform code that will be added in follow up patches. That platform code will
        provide information like devices' refresh rates, pose (position & orientation), display resolution, etc...

        This patch also replaces the type of the callback id from int to unsigned int as per the following change
        in specs https://github.com/immersive-web/webxr/pull/1062.

        Apart from that we're adding a missing adoptRef() in the testing code that was causing assertions in some
        of the tests that are being unskipped as part of this change.

        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::WebXRSession):
        (WebCore::WebXRSession::animationTimerFired): Added.
        (WebCore::WebXRSession::scheduleAnimation): Ditto.
        (WebCore::WebXRSession::requestAnimationFrame): Ditto.
        (WebCore::WebXRSession::cancelAnimationFrame):
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/XRFrameRequestCallback.h:
        (WebCore::XRFrameRequestCallback::callbackId):
        (WebCore::XRFrameRequestCallback::setCallbackId):
        (WebCore::XRFrameRequestCallback::cancel):
        (WebCore::XRFrameRequestCallback::isCancelled const):
        * testing/WebFakeXRDevice.cpp:
        (WebCore::WebFakeXRDevice::simulateInputSourceConnection):
        * testing/WebFakeXRDevice.h:
        * testing/WebFakeXRInputController.h:

2020-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make PointerLock work
        https://bugs.webkit.org/show_bug.cgi?id=212314

        Reviewed by Adrian Perez de Castro.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::widgetDevicePosition): Helper function to avoid #ifdefs due to GTK version differences.
        * platform/gtk/GtkUtilities.h:

2020-05-27  Peng Liu  <peng.liu6@apple.com>

        VideoFullscreenInterfaceAVKit is leaking when a video element enters and exits fullscreen/picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=212293

        Reviewed by Youenn Fablet.

        WebAVPlayerViewControllerDelegate is created and retained by VideoFullscreenInterfaceAVKit,
        but it has a RefPtr to VideoFullscreenInterfaceAVKit. This leads to a memory leak
        when a video element enters and exit fullscreen or Picture-in-Picture. This patch
        replaces the RefPtr with a WeakPtr to fix the leak.

        With this patch, we config playerController in VideoFullscreenInterfaceAVKit::setupFullscreen()
        and VideoFullscreenInterfaceAVKit::cleanupFullscreen(), so that we can avoid relying on
        VideoFullscreenManagerProxy::setHasVideo() and VideoFullscreenManagerProxy::setVideoDimensions().
        Those two functions are driven by IPC messages from the Web process, which may come before
        VideoFullscreenInterfaceAVKit is constructed or after VideoFullscreenInterfaceAVKit
        is destroyed.

        Manually tested.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate setFullscreenInterface:]):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):

2020-05-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WTR] EventSender: stop using GdkEvent API in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=212298

        Reviewed by Adrian Perez de Castro.

        Add helpers to GtkUtilities to avoid #ifdefs due to GTK version differences.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::widgetRootCoords):
        (WebCore::widgetKeyvalToKeycode):
        * platform/gtk/GtkUtilities.h:

2020-05-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        SMILTimeContainer must protect its m_scheduledAnimations while it does updateAnimations()
        https://bugs.webkit.org/show_bug.cgi?id=212192
        <rdar://problem/56717734>

        Reviewed by Youenn Fablet.

        updateAnimations() needs to protect m_scheduledAnimations while processing
        the scheduled animations. m_scheduledAnimations may be changed from JavaScript
        callbacks. This will invalidate the HashMap iterators while the one used
        by the for-loop in updateAnimations() is still in use.

        To allow copying m_scheduledAnimations, the value of the entry has to be
        of type AnimationVector instead of std::unique_ptr<AnimationVector>.        

        Test: svg/animations/css-animation-reinsert-target.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::schedule):
        (WebCore::SMILTimeContainer::unschedule):
        (WebCore::SMILTimeContainer::processScheduledAnimations):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SMILTimeContainer.h:

2020-05-26  Alex Christensen  <achristensen@webkit.org>

        MacApplication::isSafari should allow safari bundle id variants
        https://bugs.webkit.org/show_bug.cgi?id=212401

        Reviewed by Timothy Hatcher.

        There is a test environment with bundle ID com.apple.Safari.something.
        This change is blocking rdar://problem/63574451

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isSafari):

2020-05-26  Simon Fraser  <simon.fraser@apple.com>

        Rendering artifacts when scrolling overlays
        https://bugs.webkit.org/show_bug.cgi?id=204120
        <rdar://problem/57121358>

        Reviewed by Zalan Bujtas.

        RenderLayerBacking::setContentsNeedDisplayInRect() needs to adjust repaint rects in the
        scrolled contents layer by the RenderLayer's scrollOffset, because that's what's used
        during repaint rect computation. We haven't yet pushed the new scroll offset onto the
        GraphicsLayer, so m_scrolledContentsLayer->scrollOffset() would be stale here.

        I tested RTL to make sure that scrollOffset(), and not scrollPosition() is the correct
        function to tall.

        Test: compositing/repaint/compositing-toggle-in-overflow-scroll-repaint.html

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

2020-05-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        An SVG animated property animator can stop animation while other animators are still running
        https://bugs.webkit.org/show_bug.cgi?id=207417
        <rdar://problem/59278306>

        Reviewed by Simon Fraser.

        An SVG animated property can be animated by multiple animators. When one
        animator stops the animation, the animVal should not be deleted since it
        will be used by other animators.

        SVGAnimatedProperty will maintain a WeakHashSet<SVGAttributeAnimator> in
        which the animator will be added when the animation starts and will be 
        removed when the the animation stops. When all the animators stops their
        animations, the animated property may delete the animVal or keep it if it
        can be referenced by JavaScript.

        Tests: svg/animations/animated-enum-mutiple-animators.svg
               svg/animations/animated-length-mutiple-animators.svg

        * svg/properties/SVGAnimatedDecoratedProperty.h:
        * svg/properties/SVGAnimatedPrimitiveProperty.h:
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::isAnimating const):
        (WebCore::SVGAnimatedProperty::startAnimation):
        (WebCore::SVGAnimatedProperty::stopAnimation):
        (WebCore::SVGAnimatedProperty::instanceStartAnimation):
        (WebCore::SVGAnimatedProperty::instanceStopAnimation):
        * svg/properties/SVGAnimatedPropertyAnimator.h:
        * svg/properties/SVGAnimatedPropertyList.h:
        * svg/properties/SVGAnimatedValueProperty.h:
        * svg/properties/SVGAttributeAnimator.h:

2020-05-26  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (async oveflow): scrubber missing from inline video inside overflow scroll
        https://bugs.webkit.org/show_bug.cgi?id=212391
        <rdar://problem/63089859>

        Reviewed by Zalan Bujtas.

        backgroundClipRect() is in the coordinate space of the ClipRectContext's rootLayer, not the receiver,
        so when converting to absolute coordinates we must use the ClipRectContext's rootLayer.

        Test: compositing/layer-creation/overlap-in-scroller.html

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

2020-05-26  Jer Noble  <jer.noble@apple.com>

        Can't scrub video on https://www.judiciary.senate.gov
        https://bugs.webkit.org/show_bug.cgi?id=212270
        <rdar://problem/57922919>

        Reviewed by Eric Carlson.

        Test: media/video-duration-seekable.html

        www.judiciary.senate.gov uses the Akamai Media Player, which doesn't query HTMLMediaElement.duration
        directly. Rather, when it receives a "durationchange" event, it calculates the duration by using the
        HTMLMediaElement.seekable ranges to determine the effective media duration. But no event is fired when
        the seekable ranges change, and when they first query HTMLMediaElement.seekable, AVFoundation hasn't
        yet updated seekable ranges, so we report an empty set of seekable ranges.

        The HTML specification suggests that UAs "should adopt a very liberal and optimistic view of what is
        seekable." With that advice in mind, when we are asked by the page for our seekable ranges, and we do
        not yet have the official ranges from AVPlayerItem, lets just respond with [0, duration).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable const):

2020-05-25  Darin Adler  <darin@apple.com>

        Eliminate Color constructors that take strings, moving color parsing entirely into the CSS parser
        https://bugs.webkit.org/show_bug.cgi?id=212296

        Reviewed by Sam Weinig.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseColor): Moved more of the logic into
        CSSParserFastPaths::parseSimpleColor. Also added a FIXME about what
        seems to be a mistake about strict mode.
        (WebCore::CSSParser::parseColorWorkerSafe): Ditto.
        (WebCore::CSSParser::parseSystemColor): Removed unused context argument.
        (WebCore::CSSParser::parseNamedColor): Added.
        (WebCore::CSSParser::parseHexColor): Added.
        (WebCore::CSSParser::parseSingleValue): Use auto.
        (WebCore::CSSParser::parseValue): Ditto.

        * css/parser/CSSParser.h: Exported parseColor. Removed unused value pool
        and strict arguments from parseColorWorkerSafe. Removed unused context
        argument from parseSystemColor. Added parseNamedColor and parseHexColor.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::parseSimpleLengthValue): Take a StringView.
        (WebCore::finishParsingHexColor): Added, logic moved from Color constructor.
        (WebCore::parseHexColorInternal): Ditto.
        (WebCore::parseNumericColor): Added, logic moved from fastParseColorInternal.
        (WebCore::parseColor): Turned into a non-member function since it's private
        to this file. Use auto a bit more, and removed unneeded value pool argument.
        (WebCore::finishParsingNamedColor): Added, logic moved from Color constructor.
        (WebCore::parseNamedColorInternal): Ditto.
        (WebCore::parseSimpleColorInternal): Ditto.
        (WebCore::CSSParserFastPaths::parseSimpleColor): Ditto.
        (WebCore::CSSParserFastPaths::parseHexColor): Ditto.
        (WebCore::CSSParserFastPaths::parseNamedColor): Ditto.
        (WebCore::isUniversalKeyword): Take a StringView.
        (WebCore::parseKeywordValue): Ditto.
        (WebCore::parseSimpleTransform): Ditto.
        (WebCore::parseCaretColor): Ditto. Also take a parser context rather than
        a parser mode.
        (WebCore::CSSParserFastPaths::maybeParseValue): Take a StringView.

        * css/parser/CSSParserFastPaths.h: Cut down includes. Use StringView.
        Added parseSimpleColor, parseHexColor, and parseNamedColor.

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHexColor): Return an
        Optional<SimpleColor> instead of a Color.
        (WebCore::CSSPropertyParserHelpers::consumeColor): Refactor a bit for clarity.

        * html/HTMLElement.cpp:
        (WebCore::parseLegacyColorValue): Renamed from parseColorStringWithCrazyLegacyRules
        and refactored a bit. Made this match the HTML specification more closely.
        (WebCore::HTMLElement::addHTMLColorToStyle): Simplify now that more of the logic
        was moved into parseLegacyColorValue.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor): Removed unneeded arguments for parseColorWorkerSafe
        and for parseSystemColor.

        * platform/graphics/Color.cpp:
        (WebCore::findNamedColor): Deleted.
        (WebCore::Color::Color): Deleted overloadds that take strings.
        * platform/graphics/Color.h: Updated for the above.

        * platform/graphics/SimpleColor.cpp:
        (WebCore::parseHexColorInternal): Deleted.
        (WebCore::SimpleColor::parseHexColor): Deleted.
        * platform/graphics/SimpleColor.h: Removed parseHexColor functions.

2020-05-26  Antoine Quint  <graouts@apple.com>

        Hardware fill-forwards animation and transitions don't interact correctly
        https://bugs.webkit.org/show_bug.cgi?id=187839
        <rdar://problem/42410412>

        Reviewed by Simon Fraser.

        Test: webanimations/updating-property-targeted-by-css-transition-during-css-animation.html

        We didn't follow the CSS Transitions spec closely enough when it came to defining the correct before and after
        change styles during a style change event.

        We now correctly set the before-change style as one of three possible values:
        
            1. if there are running CSS-originated animations, we ensure those are updated to the current time and
               resolve them to get the style,
            2. otherwise we use the RenderStyle recorded in Style::TreeResolver::createAnimatedElementUpdate() prior
               to applying animations during the last style change event,
            3. otherwise we use the previous computed style, which should not have any animated values.
        
        As for the after-change style, we also need to ensure any running CSS Animations are update to the current time
        and resolve them to get the style. Otherwise, we just use the current computed style prior to applying animations.

        Finally, we can exit from AnimationTimeline::updateCSSTransitionsForElementAndProperty() early if we find that
        we have a JS-originated animation running for the given property on the given element since we know that that
        animation will yield an overriding value for both the before and after change styles since JS-originated animations
        have the hightest composite order.

        This means we no longer need to track the unanimated style on KeyframeEffect.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):
        (WebCore::AnimationTimeline::updateCSSTransitionsForElementAndProperty):
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/AnimationTimeline.h:
        * animation/ElementAnimationRareData.h:
        (WebCore::ElementAnimationRareData::lastStyleChangeEventStyle const):
        (WebCore::ElementAnimationRareData::setLastStyleChangeEventStyle):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::clearBlendingKeyframes):
        (WebCore::KeyframeEffect::apply):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        * animation/KeyframeEffect.h:
        (WebCore::KeyframeEffect::unanimatedStyle const): Deleted.
        * dom/Element.cpp:
        (WebCore::Element::lastStyleChangeEventStyle const):
        (WebCore::Element::setLastStyleChangeEventStyle):
        * dom/Element.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

2020-05-26  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Remove red()/green()/blue() accessors from ExtendedColor in preperation for supporting non-RGB based ColorSpaces
        https://bugs.webkit.org/show_bug.cgi?id=212366

        Reviewed by Simon Fraser.

        * platform/graphics/Color.cpp:
        (WebCore::differenceSquared):
        Switch to using toSRGBASimpleColorLossy() rather than poking at the ExtendedColor
        components directly. The old code was already incorrect if the two colors had 
        differing color spaces so this at least now gives reasonable results.

        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        Delegate to ExtendedColor completely for colorWithAlpha() to allow for more
        control over how the components might be stored in the future.
        
        * platform/graphics/Color.h:
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        Delegate to ExtendedColor for isBlack()/isWhite() to allow per-color space
        interpretations of the predicate.

        (WebCore::Color::encode const):
        (WebCore::Color::decode):
        Use c1, c2, c3 rather than red/green/blue. This should be acceptable for the
        forseeable future, as all expected colorspaces only have 3 channels, but at 
        some point, it may make sense to delegate coding to ExtendedColor completely.

        * platform/graphics/ExtendedColor.cpp:
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::channels const):
        (WebCore::ExtendedColor::red const): Deleted.
        (WebCore::ExtendedColor::green const): Deleted.
        (WebCore::ExtendedColor::blue const): Deleted.
        (WebCore::ExtendedColor::colorWithAlpha const): Added.
        (WebCore::ExtendedColor::isWhite const): Added.
        (WebCore::ExtendedColor::isBlack const): Added.
        Use channels() with structured bindings rather than the red()/green()/blue() accessors
        everywhere.

2020-05-26  Peng Liu  <peng.liu6@apple.com>

        ASSERTION FAILED: m_clientCounts.contains(contextId) - WebKit::VideoFullscreenManagerProxy::removeClientForContext()
        https://bugs.webkit.org/show_bug.cgi?id=212308

        Reviewed by Jer Noble.

        Call m_videoFullscreenModel->didExitPictureInPicture() after the video player
        completes the process to exit Picture-in-Picture.

        Covered by existing tests.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):

2020-05-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Use padding to space out sections
        https://bugs.webkit.org/show_bug.cgi?id=212377

        Reviewed by Antti Koivisto.

        Use fake padding before/after to space out sections.

        Test: fast/layoutformattingcontext/table-simple-multiple-sections-with-border-spacing-and-collapse.html

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

2020-05-26  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        No new tests -- no changed functionality.

        * WebCore.xcodeproj/project.pbxproj:

2020-05-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for multiple sections
        https://bugs.webkit.org/show_bug.cgi?id=212354

        Reviewed by Antti Koivisto.

        Let's keep the grid about rows and columns and about distributing available space.
        Use the layout tree to find sections. 

        Test: fast/layoutformattingcontext/table-simple-multiple-sections.html

        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::Section::Section): Deleted.
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Section::box const): Deleted.
        (WebCore::Layout::TableGrid::sections const): Deleted.
        (WebCore::Layout::TableGrid::sections): Deleted.

2020-05-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Use screen font options as default
        https://bugs.webkit.org/show_bug.cgi?id=212332

        Reviewed by Adrian Perez de Castro.

        There's no gdk_screen_get_font_options() in GTK4, so we need to get the individual properties from the settings
        and build a cairo_font_options_t. We can just do the same in GTK3 to avoid ifdefs. Add a helper
        SystemFontOptions singleton class to monitor and parse the font settings.

        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        (WebCore::SystemFontOptions::singleton):
        (WebCore::SystemFontOptions::SystemFontOptions):
        (WebCore::SystemFontOptions::fontOptions const):
        (WebCore::SystemFontOptions::updateFontOptions):
        (WebCore::getDefaultCairoFontOptions):

2020-05-25  Simon Fraser  <simon.fraser@apple.com>

        Use an Optional<> for LayerFragment::boundingBox
        https://bugs.webkit.org/show_bug.cgi?id=212358

        Reviewed by Zalan Bujtas.

        Replace a bool + LayoutRect with Optional<LayoutRect>.

        * rendering/LayerFragment.h:
        (WebCore::LayerFragment::setRects):
        (WebCore::LayerFragment::moveBy):
        (WebCore::LayerFragment::intersect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:

2020-05-25  Simon Fraser  <simon.fraser@apple.com>

        Make isTableRow() an inline function
        https://bugs.webkit.org/show_bug.cgi?id=212360

        Reviewed by Darin Adler.

        isTableCell() is a virtual function that's called in some hot code paths, like RenderLayer::localBoundingBox(),
        so make it inline by using a spare bit on RenderObject.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTableCaption const):
        (WebCore::RenderObject::isTableRow const):
        (WebCore::RenderObject::setIsTableRow):
        (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::RenderTableRow):
        * rendering/RenderTableRow.h:

2020-05-25  Alex Christensen  <achristensen@webkit.org>

        Expose more network metrics to WebCoreNSURLSession
        https://bugs.webkit.org/show_bug.cgi?id=212359
        <rdar://problem/62909440>

        Reviewed by Darin Adler.

        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionTaskTransactionMetrics networkProtocolName]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics isReusedConnection]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics cellular]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics expensive]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics constrained]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics multipath]):

2020-05-25  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Prevent grid-template-rows from serializing adjacent <line-names>
        https://bugs.webkit.org/show_bug.cgi?id=212345

        Reviewed by Manuel Rego Casasnovas.

        The parser for the grid-template shorthand has this code:

            // Persists between loop iterations so we can use the same value for
            // consecutive <line-names> values
            RefPtr<CSSGridLineNamesValue> lineNames;

        However, this wasn't working because of a lineNames.releaseNonNull() at
        the end of the loop. So each iteration started with a null lineNames, and
        consecutive <line-names> values were not merged together.

        Tests: fast/css-grid-layout/grid-template-shorthand-get-set.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-shorthand.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-shorthand-valid.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-shorthand.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-shorthand-valid.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumeGridTemplateRowsAndAreasAndColumns):

2020-05-25  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Assert !isExtended() in Color::asSimpleColor()...finally
        https://bugs.webkit.org/show_bug.cgi?id=212357

        Reviewed by Simon Fraser.

        Reap the reward of the cleanup, and add the ASSERT(!isExtended()) to Color::asSimpleColor()
        as was the original goal of this effort. Only tree non-checked places remained and were 
        trivial to add isExtended() checks for.

        * platform/graphics/Color.cpp:
        (WebCore::Color::nameForRenderTreeAsText const):
        Use ExtenedColor::cssText() for the RenderTree representation. It is stable 
        and as good as any, no need to re-invent the wheel here.

        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        Add isExtended() checks before doing white/black checks,

        * platform/graphics/Color.h:
        (WebCore::Color::asSimpleColor const):
        Add ASSERT.

2020-05-24  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Use the name SimpleColor consistently
        https://bugs.webkit.org/show_bug.cgi?id=212337

        Reviewed by Anders Carlsson.
        
        - Removes RGBA32 type alias, updating all remaining users of it.
        - Renames functions that take/return SimpleColor to use the name
          SimpleColor rather than RGB (e.g. makeRGBA -> makeSimpleColor)
        - Moves hex color parsing from Color to SimpleColor, as that is
          the type it returns. Also took the opportunity to make it return
          an Optional<SimpleColor> instead of using a bool/out parameter.
        - Move Color::compositionFill to editing/CompositionHighlight.h
          It makes no real sense to keep it in Color.h
        - Replaces rgb() function in Color with asSimpleColor() for 
          symmetry with asExtended().
        - Replaced std::max(a, std::min(value, b)) with std::clamp(value, a, b)
          for clarity.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::fastParseColorInternal):
        (WebCore::CSSParserFastPaths::parseColor):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseRGBParameters):
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseHexColor):
        * editing/CompositionHighlight.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        * html/ColorInputType.cpp:
        (WebCore::parseSimpleColorValue):
        * html/HTMLElement.cpp:
        (WebCore::parseColorStringWithCrazyLegacyRules):
        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        * platform/adwaita/ThemeAdwaita.cpp:
        (WebCore::ThemeAdwaita::activeSelectionForegroundColor const):
        (WebCore::ThemeAdwaita::activeSelectionBackgroundColor const):
        (WebCore::ThemeAdwaita::inactiveSelectionForegroundColor const):
        * platform/graphics/Color.cpp:
        (WebCore::differenceSquared):
        (WebCore::Color::Color):
        (WebCore::Color::operator=):
        (WebCore::Color::serialized const):
        (WebCore::Color::cssText const):
        (WebCore::Color::nameForRenderTreeAsText const):
        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        (WebCore::Color::blend const):
        (WebCore::Color::blendWithWhite const):
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        (WebCore::Color::invertedColorWithAlpha const):
        (WebCore::Color::colorSpaceAndComponents const):
        (WebCore::Color::toSRGBASimpleColorLossy const):
        (WebCore::blend):
        (WebCore::Color::tagAsValid):
        (WebCore::parseHexColorInternal): Deleted.
        (WebCore::Color::parseHexColor): Deleted.
        (WebCore::Color::asExtended const): Deleted.
        * platform/graphics/Color.h:
        (WebCore::Color::Color):
        (WebCore::Color::isHashTableDeletedValue const):
        (WebCore::Color::isValid const):
        (WebCore::Color::isOpaque const):
        (WebCore::Color::isVisible const):
        (WebCore::Color::alpha const):
        (WebCore::Color::alphaAsFloat const):
        (WebCore::Color::isSemantic const):
        (WebCore::Color::isExtended const):
        (WebCore::Color::setIsSemantic):
        (WebCore::operator==):
        (WebCore::equalIgnoringSemanticColor):
        (WebCore::Color::hash const):
        (WebCore::Color::asExtended const):
        (WebCore::Color::asSimpleColor const):
        (WebCore::Color::setSimpleColor):
        (WebCore::Color::isBlackColor):
        (WebCore::Color::isWhiteColor):
        (WebCore::Color::encode const):
        (WebCore::Color::decode):
        (WebCore::Color::setRGB): Deleted.
        (WebCore::Color::rgb const): Deleted.
        * platform/graphics/ColorUtilities.h:
        (WebCore::clampedColorComponent):
        * platform/graphics/ImageBackingStore.h:
        (WebCore::ImageBackingStore::blendPixel):
        (WebCore::ImageBackingStore::pixelValue const):
        * platform/graphics/SimpleColor.cpp:
        (WebCore::makePremultipliedSimpleColor):
        (WebCore::makeUnpremultipliedSimpleColor):
        (WebCore::makeSimpleColorFromFloats):
        (WebCore::makeSimpleColorFromHSLA):
        (WebCore::makeSimpleColorFromCMYKA):
        (WebCore::parseHexColorInternal):
        (WebCore::SimpleColor::parseHexColor):
        (WebCore::makePremultipliedRGBA): Deleted.
        (WebCore::makeUnPremultipliedRGBA): Deleted.
        (WebCore::makeRGBA32FromFloats): Deleted.
        (WebCore::makeRGBAFromHSLA): Deleted.
        (WebCore::makeRGBAFromCMYKA): Deleted.
        * platform/graphics/SimpleColor.h:
        (WebCore::roundAndClampColorChannel):
        (WebCore::colorFloatToSimpleColorByte):
        (WebCore::makeSimpleColor):
        (WebCore::colorFloatToRGBAByte): Deleted.
        (WebCore::makeRGB): Deleted.
        (WebCore::makeRGBA): Deleted.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::makeSimpleColorFromARGBCFArray):
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes):
        (WebCore::makeRGBA32FromARGBCFArray): Deleted.
        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::makeSimpleColorFromCGColor):
        (WebCore::Color::Color):
        (WebCore::cachedCGColor):
        (WebCore::makeRGBAFromCGColor): Deleted.
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::Color):
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeSimpleColorFromNSColor):
        (WebCore::colorFromNSColor):
        (WebCore::semanticColorFromNSColor):
        (WebCore::makeRGBAFromNSColor): Deleted.
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::Color):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        * platform/graphics/win/PlatformContextDirect2D.cpp:
        (WebCore::PlatformContextDirect2D::brushWithColor):
        * platform/ios/ColorIOS.mm:
        (WebCore::colorFromUIColor):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForTouchAction):
        (WebCore::patternForEventListenerRegionType):
        * rendering/RenderThemeAdwaita.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::menuBackgroundColor):

2020-05-25  Zalan Bujtas  <zalan@apple.com>

        [Subpixel layout] Bad scrolling on mercurynews.com article
        https://bugs.webkit.org/show_bug.cgi?id=201038
        <rdar://problem/28489812>

        Reviewed by Dean Jackson.

        The scrolling is caused by the mismatching subpixel handling between block and inline content.
        Inline content (and in this particular case ascent/descent handling) is still integral based while block content supports fractional pixel values.
        When the (inline)line height relies on the (block)inline-block height, we need to make sure that the computed line height encloses the inline-block.
        This patch changes the rounding behavior of computed the line height from floor to round.

        Test: fast/inline/hidpi-inline-block-is-subpixel-while-line-is-not.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::baselinePosition const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox const):

2020-05-25  Rob Buis  <rbuis@igalia.com>

        Use child text content when determining whether to bail early in running a script
        https://bugs.webkit.org/show_bug.cgi?id=182695

        Reviewed by Youenn Fablet.

        Check that the text content is not empty instead of just checking
        for the first child [1].

        Behavior matches Chrome and Firefox.

        [1] https://html.spec.whatwg.org/#prepare-a-script step 5 and 6

        Test: web-platform-tests/html/semantics/scripting-1/the-script-element/emptyish-script-elements.html

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::prepareScript):

2020-05-22  Sergio Villar Senin  <svillar@igalia.com>

        [css-flex] Allow indefinite size flex items to be definite wrt resolving percentages inside them
        https://bugs.webkit.org/show_bug.cgi?id=212264

        Reviewed by Manuel Rego Casasnovas.

        Implement https://github.com/w3c/csswg-drafts/commit/5b5db39d21f3658ae2f4d7992daaf822aca178d8 which modified
        the way percentages were resolved in flexible items with indefinite sizes. From now on we can pretend that
        they're really definite.

        This allows us to mark 3 tests which were testing percentages in flex items as correct.

        Based on Blink's crrev.com/1247184 by <cbiesinger@chromium.org>

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution): Do only check flex container main size
        definiteness when computing the main size for percentage resolution, no need to check flex basis at all.

2020-05-25  Youenn Fablet  <youenn@apple.com>

        AVVideoCaptureSource should notify of video samples in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212072

        Reviewed by Eric Carlson.

        Do not hop to the main thread to send samples.
        Instead, directly call the observer callback.
        Manually tested.

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

2020-05-25  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late May 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=212342

        Unreviewed build fix.

        No new tests needed.

        * loader/ImageLoader.h: Add missing inclusion of Element.h and remove forward declaration.
        * page/PageConfiguration.h: Add missing inclusion of ShouldRelaxThirdPartyCookieBlocking.h

2020-05-25  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC::m_activeVideoTrack should be a VideoTrackPrivateMediaStream
        https://bugs.webkit.org/show_bug.cgi?id=212129

        Reviewed by Eric Carlson.

        Instead of looking in the map when wanting to get the VideoTrackPrivateMediaStream corresponding to the active video track,
        store directly the VideoTrackPrivateMediaStream as the active video track and use streamTrack() to get the corresponding MediaStreamTrack.
        Small refactoring to use more Ref<>.
        Covered by existing tests.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferDisplayLayerStatusDidChange):
        (WebCore::updateTracksOfType):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        * platform/mediastream/VideoTrackPrivateMediaStream.h:

2020-05-24  Youenn Fablet  <youenn@apple.com>

        Do not allocate a WebAudioBufferList in the AudioContext rendering thread
        https://bugs.webkit.org/show_bug.cgi?id=212132

        Reviewed by Eric Carlson.

        Instead of allocating the buffer in the rendering thread, we do that in the audio sample producer thread.
        Also, we do it only once versus one for each rendering call previously.
        Covered by existing tests.

        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::provideInput):
        (WebCore::WebAudioSourceProviderAVFObjC::prepare):
        (WebCore::WebAudioSourceProviderAVFObjC::unprepare):

2020-05-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add some missing includes due to unified sources
        https://bugs.webkit.org/show_bug.cgi?id=212306

        Reviewed by Anders Carlsson.

        * Modules/pictureinpicture/HTMLVideoElementPictureInPicture.cpp: Include EnterPictureInPictureEvent.h.

        * platform/PictureInPictureObserver.h: Include WeakPtr and forward declare the IntSize class.

2020-05-24  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Move SimpleColor into its own files
        https://bugs.webkit.org/show_bug.cgi?id=212309

        Reviewed by Simon Fraser.

        Move SimpleColor into its own files. It's about time.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Color.cpp:
        (WebCore::premultipliedChannel): Deleted.
        (WebCore::unpremultipliedChannel): Deleted.
        (WebCore::makePremultipliedRGBA): Deleted.
        (WebCore::makeUnPremultipliedRGBA): Deleted.
        (WebCore::colorFloatToRGBAByte): Deleted.
        (WebCore::makeRGBA32FromFloats): Deleted.
        (WebCore::makeRGBAFromHSLA): Deleted.
        (WebCore::makeRGBAFromCMYKA): Deleted.
        (WebCore::SimpleColor::serializationForHTML const): Deleted.
        (WebCore::decimalDigit): Deleted.
        (WebCore::fractionDigitsForFractionalAlphaValue): Deleted.
        (WebCore::SimpleColor::serializationForCSS const): Deleted.
        (WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
        * platform/graphics/Color.h:
        (WebCore::SimpleColor::SimpleColor): Deleted.
        (WebCore::SimpleColor::value const): Deleted.
        (WebCore::SimpleColor::redComponent const): Deleted.
        (WebCore::SimpleColor::greenComponent const): Deleted.
        (WebCore::SimpleColor::blueComponent const): Deleted.
        (WebCore::SimpleColor::alphaComponent const): Deleted.
        (WebCore::SimpleColor::alphaComponentAsFloat const): Deleted.
        (WebCore::SimpleColor::isOpaque const): Deleted.
        (WebCore::SimpleColor::isVisible const): Deleted.
        (WebCore::SimpleColor::colorWithAlpha const): Deleted.
        (WebCore::SimpleColor::get const): Deleted.
        (WebCore::roundAndClampColorChannel): Deleted.
        (WebCore::fastMultiplyBy255): Deleted.
        (WebCore::fastDivideBy255): Deleted.
        (WebCore::makeRGB): Deleted.
        (WebCore::makeRGBA): Deleted.
        * platform/graphics/SimpleColor.cpp: Copied from platform/graphics/Color.cpp.
        (WebCore::SimpleColor::serializationForRenderTreeAsText const):
        (): Deleted.
        (WebCore::colorFloatToRGBAByte): Deleted.
        (WebCore::parseHexColorInternal): Deleted.
        (WebCore::Color::parseHexColor): Deleted.
        (WebCore::differenceSquared): Deleted.
        (WebCore::findNamedColor): Deleted.
        (WebCore::Color::Color): Deleted.
        (WebCore::Color::operator=): Deleted.
        (WebCore::Color::serialized const): Deleted.
        (WebCore::Color::cssText const): Deleted.
        (WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
        (WebCore::Color::nameForRenderTreeAsText const): Deleted.
        (WebCore::Color::light const): Deleted.
        (WebCore::Color::dark const): Deleted.
        (WebCore::Color::isDark const): Deleted.
        (WebCore::Color::lightness const): Deleted.
        (WebCore::blendComponent): Deleted.
        (WebCore::Color::blend const): Deleted.
        (WebCore::Color::blendWithWhite const): Deleted.
        (WebCore::Color::colorWithAlphaMultipliedBy const): Deleted.
        (WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
        (WebCore::Color::colorWithAlpha const): Deleted.
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
        (WebCore::Color::colorSpaceAndComponents const): Deleted.
        (WebCore::Color::toSRGBASimpleColorLossy const): Deleted.
        (WebCore::Color::toSRGBAComponentsLossy const): Deleted.
        (WebCore::extendedColorsEqual): Deleted.
        (WebCore::blend): Deleted.
        (WebCore::blendWithoutPremultiply): Deleted.
        (WebCore::Color::tagAsValid): Deleted.
        (WebCore::Color::asExtended const): Deleted.
        (WebCore::operator<<): Deleted.
        * platform/graphics/SimpleColor.h: Copied from platform/graphics/Color.h.
        (WebCore::SimpleColor::alphaComponentAsFloat const):
        (WebCore::SimpleColor::colorWithAlpha const):
        (WebCore::SimpleColor::get const):
        (WebCore::colorFloatToRGBAByte):
        (WebCore::Color::Color): Deleted.
        (WebCore::Color::isHashTableDeletedValue const): Deleted.
        (WebCore::Color::~Color): Deleted.
        (WebCore::Color::isValid const): Deleted.
        (WebCore::Color::isOpaque const): Deleted.
        (WebCore::Color::isVisible const): Deleted.
        (WebCore::Color::red const): Deleted.
        (WebCore::Color::green const): Deleted.
        (WebCore::Color::blue const): Deleted.
        (WebCore::Color::alpha const): Deleted.
        (WebCore::Color::alphaAsFloat const): Deleted.
        (WebCore::Color::opaqueColor const): Deleted.
        (WebCore::Color::isSemantic const): Deleted.
        (WebCore::Color::isExtended const): Deleted.
        (WebCore::Color::setRGB): Deleted.
        (WebCore::Color::setIsSemantic): Deleted.
        (WebCore::equalIgnoringSemanticColor): Deleted.
        (WebCore::Color::hash const): Deleted.
        (WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
        (WebCore::Color::rgb const): Deleted.
        (WebCore::Color::isBlackColor): Deleted.
        (WebCore::Color::isWhiteColor): Deleted.
        (WebCore::Color::encode const): Deleted.
        (WebCore::Color::decode): Deleted.

2020-05-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Ignore section borders even when border collapse is off.
        https://bugs.webkit.org/show_bug.cgi?id=212336

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-thead-border-ignore.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):

2020-05-24  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Stop allowing direct access to the underlying SimpleColor (it is almost always incorrect with respect to extended colors)
        https://bugs.webkit.org/show_bug.cgi?id=212184

        Reviewed by Dean Jackson.

        - Makes Color::rgb() private, removing a class of extended color bugs from users 
          of the Color class. To get the equivilent functionality, users of the class must
          now use toSRGBASimpleColorLossy() which does actually does the conversion to sRGB
          if necessary and makes it clear to the caller that precision is being lost. 
        - Removes Color::red()/green()/blue() entirely. They were just calling down to 
          Color::rgb(), and going forward, it won't make sense to think about rgb components
          of Colors in general, since some extended color spaces don't deal in them (e.g. Lab)
          Color::alpha() was kept (and fixed to work even with ExtendedColor) since all
          ExtendedColors do need to have alpha.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::colorValue const):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::colorValue const):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * css/DeprecatedCSSOMRGBColor.h:
        Use toSRGBASimpleColorLossy() to get access to color components.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS const):
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS const):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColor const):
        User Color::colorWithAlpha() to avoid the need to muck with components directly.

        * platform/graphics/Color.cpp:
        (WebCore::differenceSquared):
        Use rgb() directly, which is ok, since this is explicitly checking isExtended().
        This code is still wrong (there is a FIXME) as it assumes the two colors are in
        the same color space.

        (WebCore::Color::Color):
        Add constructor which takes an ExtendedColor to allow functions like 
        Color::invertedColorWithAlpha to delegate their functionality to ExtendedColor.
        
        (WebCore::Color::light const):
        Use new SimpleColor::colorWithAlpha() to avoid hardcoding constants here.

        (WebCore::Color::blend const):
        (WebCore::Color::blendWithWhite const):
        Use toSRGBASimpleColorLossy() to get access to color components. These
        are still not ideal implementations, as they don't preserve extended colors
        as well as they could, but now they don't return bogus values for extended
        colors. Minor cleanup bringing constants and lambda inside the function they
        are used in.
        
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        Minor cleanups to use a more consistent style and make use of the new
        SimpleColor::colorWithAlpha.
        
        (WebCore::Color::invertedColorWithAlpha const):
        Added. Used to avoid direct component usage in line box code.

        (WebCore::Color::semanticColor const):
        Added. Hopefully temporary. Used by RenderThemeIOS.mm to convert
        a Color from a map into a Color with the semantic bit set. This 
        should not be necessary as every color in the map should already
        have it set, but to avoid uncessary possible behavior changes this
        preserves that functionality until it can be researched further.
        Fixing coders to preserve the semantic bit may be required to 
        elliminate the need.
        
        (WebCore::Color::colorSpaceAndComponents const):
        Use rgb() rather than the individual components which have been removed.
        
        * platform/graphics/Color.h:
        (WebCore::SimpleColor::alphaComponentAsFloat const):
        Added. Needed by DeprecatedCSSOMRGBColor and useful to Color.

        (WebCore::SimpleColor::colorWithAlpha const):
        Useful to simplify Color::colorWithAlpha implementations and
        in Color::dark().

        (WebCore::SimpleColor::get const):
        Added tuple interface to SimpleColor to support structure bindings.
        NOTE: Unlike the storage of SimpleColor (ARGB), this produces the
        bindings in the more familiar [r,g,b,a] to match FloatComponents.
        
        (WebCore::Color::alpha const):
        Made work with ExtendedColor as well.
        
        (WebCore::Color::red const): Deleted.
        (WebCore::Color::green const): Deleted.
        (WebCore::Color::blue const): Deleted.
        Removed.

        (CGColorRef cachedCGColor): 
        (int differenceSquared): 
        Made friends so they could use Color::rgb().

        (WebCore::Color::rgb const): 
        Made private.

        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::invertedColorWithAlpha const):
        * platform/graphics/ExtendedColor.h:
        Added invertedColorWithAlpha to allow inversion to be encapsulated.
        When future color spaces are added, we may need to choose per-colorspace
        algorithms for this instead of the trivial one used today.

        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::PlatformCAAnimationCocoa::setFromValue):
        (WebCore::PlatformCAAnimationCocoa::setToValue):
        (WebCore::PlatformCAAnimationCocoa::setValues):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimationWin::setFromValue):
        (PlatformCAAnimationWin::setToValue):
        (PlatformCAAnimationWin::setValues):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawFocusRing):
        Use Color::colorWithAlpha() to avoid needing access to components.

        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::clearColor):
        Use toSRGBASimpleColorLossy() to get access to color components.

        * platform/graphics/win/Direct2DOperations.cpp:
        (WebCore::Direct2D::drawGlyphs):
        Use colorWithAlphaMultipliedBy() to avoid needing access to components.

        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs):
        Use colorWithAlphaMultipliedBy() to avoid needing access to components.

        * platform/graphics/win/FontCascadeDirect2D.cpp:
        (WebCore::FontCascade::drawGlyphs):
        Use colorWithAlphaMultipliedBy() to avoid needing access to components.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection):
        Use invertedColorWithAlpha() to avoid needing access to components.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::resolveStyleForMarkedText):
        Use invertedColorWithAlpha() to avoid needing access to components.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        Use opaqueColor() to avoid needing access to components.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const):
        Use opaqueColor() to avoid needing access to components.

        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.h:
        (WebCore::SVGAnimationColorFunction::animate):
        Use toSRGBASimpleColorLossy() to get access to color components.

2020-05-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take sections into account when computing collapsed border.
        https://bugs.webkit.org/show_bug.cgi?id=212311

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-collapsed-tbody-border.html

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Section::Section):
        (WebCore::Layout::TableGrid::appendCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Section::box const):
        (WebCore::Layout::TableGrid::sections const):
        (WebCore::Layout::TableGrid::sections):

2020-05-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take collapsed in-between row border into account when computing cell height
        https://bugs.webkit.org/show_bug.cgi?id=212307

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-collapsed-row-border2.html

        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::computedCellBorder const):

2020-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take row border into account when computing collapsed borders.
        https://bugs.webkit.org/show_bug.cgi?id=212305

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-collapsed-row-border.html

        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):

2020-05-23  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: (!s_current || &m_view != &s_current->m_view) in RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212163

        Unreviewed. Improve readability. Replace comments with curly brackets for scoping.

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

2020-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Maximum constraint of a cell should never be smaller than the minimum width
        https://bugs.webkit.org/show_bug.cgi?id=212304

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-fixed-width-with-wide-content.html

        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

2020-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Used height of a cell is the maximum of the computed and the content height.
        https://bugs.webkit.org/show_bug.cgi?id=212302

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-tall-cell-content-with-fixed-height.html

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::cellHeigh const):

2020-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Non-collapsing row border should not make the table wider/taller
        https://bugs.webkit.org/show_bug.cgi?id=212263

        Reviewed by Antti Koivisto.

        Non-collapsing row border eats into the content box but oddly it does not
        constraint the cell boxes, so we can end up with smaller row content box than
        the cell box it contains.

        Test: fast/layoutformattingcontext/table-simple-row-border.html

        * layout/LayoutUnits.h:
        (WebCore::Layout::Edges::width const):
        (WebCore::Layout::Edges::height const):
        (WebCore::Layout::HorizontalEdges::width const): Deleted.
        (WebCore::Layout::VerticalEdges::height const): Deleted.
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

2020-05-22  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: (!s_current || &m_view != &s_current->m_view) in RenderTreeBuilder::RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=212163
        <rdar://problem/57028096>

        Reviewed by Geoffrey Garen.

        Calling ~PostResolutionCallbackDisabler() before completing render tree updating and releasing RenderTreeBuilder 
        triggers this assertion. Therefore we added a utility function "updateRenderTree" in which PostResolutionCallback
        is delayed until RenderTreeUpdater is released and m_inRenderTreeUpdate is cleared.

        Test: fast/rendering/nested-render-tree-update-crash.html

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::updateRenderTree):
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateTextRenderer):
        * dom/Document.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::RenderTreeUpdater):
        (WebCore::RenderTreeUpdater::commit):
        * rendering/updating/RenderTreeUpdater.h:

2020-05-22  Simon Fraser  <simon.fraser@apple.com>

        Stuttery overflow scrolling in slow-scrolling regions (facebook messenger, feedly.com)
        https://bugs.webkit.org/show_bug.cgi?id=212291
        <rdar://problem/61940624>

        Reviewed by Tim Horton.

        Now that we do scrolling tree commits on the main thread, ThreadedScrollingTree::scrollingTreeNodeDidScroll()
        can be called on the main thread. In this case, don't do an RunLoop::main().dispatch() which introduces
        asynchrony; just call into the ScrollingCoordinator synchronously.

        Do some minor refactoring to move noteScrollingThreadSyncCompleteForNode() into updateScrollPositionAfterAsyncScroll().

        Hard to test because it involves scrolling thread/main thread interactions.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScrollTimerFired):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):

2020-05-22  Zalan Bujtas  <zalan@apple.com>

        Nullptr deref in WebCore::RenderTreeBuilder::Block::attachIgnoringContinuation when parent and beforeChild are siblings
        https://bugs.webkit.org/show_bug.cgi?id=212116
        <rdar://problem/62993844>

        Reviewed by Simon Fraser.

        This patch fixes the case when a nested fragmented context has a spanner and we try to form a continuation while this nested fragmented context is being destroyed.

        1. The continuation is triggered by a style change that turns a previously out-of-flow block container into an inflow box
        (and the parent inline level container can't have the box as a direct child anymore).
        2. An unrelated style change nukes the nested fragmented context. We need to "re-assign" the spanner to the parent fragment.

        These 2 changes are split into 2 phases; first we take care of the tree mutation triggered by the continuation (updateRendererStyle), while
        we do the fragmented context cleanup (updateAfterDescendants) in a separate step.
        This 2 phase setup confuses the "where to put this spanner" logic.

        This patch addresses the issue by keeping the spanner inside the about-to-be-destroyed fragmented context while forming the continuation (phase #1) and let the second phase (updateAfterDescendants)
        deal with the spanner moving.

        Test: fast/multicol/nested-multicol-with-spanner-and-continuation.html

        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::isValidColumnSpanner):

2020-05-22  Chris Dumez  <cdumez@apple.com>

        Revoking an object URL immediately after triggering navigation causes navigation to fail
        https://bugs.webkit.org/show_bug.cgi?id=212279
        <rdar://problem/63553090>

        Reviewed by Geoffrey Garen.

        When doing a policy check for a Blob URL, we clone the blob and create a new temporary Blob URL
        that stays alive for the duration of the policy check. We made sure to update the ResourceRequest
        URL with the new Blob URL, however, we were failing to update the DocumentLoader's request.
        As a result, if the client responded with Policy USE, the DocumentLoader would still attempt to
        navigate to the old Blob URL.

        Test: fast/loader/revoke-blob-url-after-navigation.html

        * loader/PolicyChecker.cpp:
        (WebCore::FrameLoader::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        (WebCore::FrameLoader::PolicyChecker::checkNavigationPolicy):
        (WebCore::FrameLoader::PolicyChecker::checkNewWindowPolicy):
        * loader/PolicyChecker.h:

2020-05-22  Simon Fraser  <simon.fraser@apple.com>

        Make sure we clean up CFTimerRefs when destroying scrolling tree nodes
        https://bugs.webkit.org/show_bug.cgi?id=212278
        <rdar://problem/63548212>

        Reviewed by Tim Horton.

        When destroying scrolling tree nodes, make sure we explicitly stop the RunLoop::Timers,
        and do this for all nodes when clearing the m_nodeMap, not just for orphaned nodes as
        was done in r262042.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNodeRecursive):
        (WebCore::ScrollingTree::removeAllNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::willBeDestroyed):
        (WebCore::ScrollingTreeNode::wasRemovedFromTree): Deleted.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::willBeDestroyed):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::wasRemovedFromTree): Deleted.
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::willBeDestroyed):
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::wasRemovedFromTree): Deleted.

2020-05-22  Andres Gonzalez  <andresg_22@apple.com>

        Updates to the isolated tree must happen before posting notifications to clients.
        https://bugs.webkit.org/show_bug.cgi?id=212266

        Reviewed by Chris Fleizach.

        Multiple tests.

        In AXObjectCache::notificationPostTimerFired we were updating the
        isolated tree after the notifications were posted to the platform
        clients. This caused that in some cases when the client requested info
        as the result of those notifications, the isolated tree was out-of-date.
        In this patch updateIsolatedTree is called before notifying platform clients.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::postTextStateChangeNotification):
        (WebCore::AXObjectCache::updateIsolatedTree):

2020-05-22  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Make alpha premultiplication code more consistent and clear regarding what works with extended colors
        https://bugs.webkit.org/show_bug.cgi?id=212265

        Reviewed by Simon Fraser.

        - Adds premultiplied(const FloatComponents&) to do premutiplication directly on FloatComponents
          rather than doing it on the ints and losing precision.
        - Makes non-FloatComponent alpha premultiplication all take place only for SimpleColors as that
          is what callers need. The existing premulitplication for ExtendedColors in blend() was incorrect
          as it never did a conversion to sRGB.
        - Adds new toSRGBASimpleColorLossy() (to complement toSRGBAComponentsLossy()). Will make it easy
          to find all the conversions in the future.
        - Broke non-premultiplying blend() out of blend() (removing parameter) and made a new blendWithoutPremultiply()
          function for it (no callers needed to make this decision dynamically).

        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::computeStops):
        Use blendWithoutPremultiply() explicitly.

        * platform/graphics/Color.h:
        * platform/graphics/Color.cpp:
        (WebCore::makePremultipliedRGBA): Renamed from premultipliedARGBFromColor and now only operates on SimpleColors.
        (WebCore::makeUnPremultipliedRGBA): Renamed from colorFromPremultipliedARGB and now only operates on SimpleColors.
        (WebCore::colorFromPremultipliedARGB): Deleted.
        (WebCore::premultipliedARGBFromColor): Deleted.

        (WebCore::Color::toSRGBASimpleColorLossy const):
        Added. Useful for finding all non-colorspace preserving users of the color channels. 

        (WebCore::blend):
        (WebCore::blendWithoutPremultiply):
        Split these out from each other. Made blend() use toSRGBASimpleColorLossy() and do all
        operations on SimpleColors directly. The old code that preported to work with extended
        colors was nonsense as it didn't actually take the colorspaces into account, just grabbed
        the channels regardless of space.  
        
        * platform/graphics/cairo/ImageBufferCairoImageSurfaceBackend.cpp:
        (WebCore::ImageBufferCairoImageSurfaceBackend::platformTransformColorSpace):
        Adopt update premulitiplication names and stay in SimpleColor for entire conversion.

        * platform/graphics/cairo/NativeImageCairo.cpp:
        (WebCore::nativeImageSinglePixelSolidColor):
        Adopt update premulitiplication names.

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::premultiplied):
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
        Add and adopt premultiplied(const FloatComponents&).

2020-05-22  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add new ApplePayInstallmentConfiguration members
        https://bugs.webkit.org/show_bug.cgi?id=212160
        <rdar://problem/60703650>

        Reviewed by Alex Christensen.

        Test: http/tests/ssl/applepay/ApplePayInstallmentItems.https.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj: Added IDLs, headers, and derived sources for
        ApplePayInstallment{Item,ItemType,RetailChannel}.

        * Modules/applepay/ApplePayInstallmentConfiguration.idl:
        * Modules/applepay/ApplePayInstallmentConfigurationWebCore.h: Added items,
        applicationMetadata, and retailChannel members. Added missing conditionals to
        merchantIdentifier and referrerIdentifier.

        * Modules/applepay/ApplePayInstallmentItem.h:
        * Modules/applepay/ApplePayInstallmentItem.idl:
        * Modules/applepay/ApplePayInstallmentItemType.h:
        * Modules/applepay/ApplePayInstallmentItemType.idl:
        * Modules/applepay/ApplePayInstallmentRetailChannel.h:
        * Modules/applepay/ApplePayInstallmentRetailChannel.idl: Added.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate): Changed to call PaymentInstallmentConfiguration::create,
        returning an exception if present.

        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        (WebCore::fromDecimalNumber): Allowed for a large maximum number of fractional digits to
        support formatting high-precision currency and APRs (note that this formatter is only used
        for test support).

        (WebCore::applePayItemType):
        (WebCore::platformItemType): Added to convert between PKInstallmentItemType and
        ApplePayInstallmentItemType.

        (WebCore::applePayRetailChannel):
        (WebCore::platformRetailChannel): Added to convert between PKInstallmentRetailChannel and
        ApplePayInstallmentRetailChannel.

        (WebCore::makeNSArrayElement):
        (WebCore::makeVectorElement): Added to convert between NSArray<PKPaymentInstallmentItem *>
        and Vector<ApplePayInstallmentItem>.

        (WebCore::createPlatformConfiguration): Added a parameter for passing in applicationMetadata
        as an NSDictionary. Set properties on PKPaymentInstallmentConfiguration for new
        ApplePayInstallmentConfiguration members.
        (WebCore::PaymentInstallmentConfiguration::create): Added; converts the applicationMetadata
        JSON string (if present) to an NSDictionary, returning a TypeError if the JSON string does
        not deserialize to an NSDictionary (as PassKit requires).
        (WebCore::PaymentInstallmentConfiguration::PaymentInstallmentConfiguration): Added a
        parameter for passing in applicationMetadata as an NSDictionary. Made private.
        (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const): Set
        members on ApplePayInstallmentConfiguration for new PKPaymentInstallmentConfiguration
        properties.

        * Modules/applepay/PaymentInstallmentConfigurationWebCore.h:

2020-05-22  Alex Christensen  <achristensen@webkit.org>

        Add SPI to unblock third party cookies from WKWebViews with ResourceLoadStatistics turned on
        https://bugs.webkit.org/show_bug.cgi?id=212058
        <rdar://problem/60595539>

        Reviewed by John Wilander.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/CookieJar.cpp:
        (WebCore::shouldRelaxThirdPartyCookieBlocking):
        (WebCore::CookieJar::cookies const):
        (WebCore::CookieJar::setCookies):
        (WebCore::CookieJar::cookieRequestHeaderFieldValue const):
        (WebCore::CookieJar::getRawCookies const):
        * page/Page.cpp:
        (WebCore::m_shouldRelaxThirdPartyCookieBlocking):
        * page/Page.h:
        (WebCore::Page::shouldRelaxThirdPartyCookieBlocking const):
        * page/PageConfiguration.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::maxAgeCacheCap):
        * platform/network/NetworkStorageSession.h:
        * platform/network/ShouldRelaxThirdPartyCookieBlocking.h: Added.
        * platform/network/cf/NetworkStorageSessionCFNetWin.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::cookiesForURL const):
        (WebCore::NetworkStorageSession::cookiesForSession const):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::cookiesForSession):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):

2020-05-22  Oriol Brufau  <obrufau@igalia.com>

        Don't put out-of-flow boxes in anonymous flex/grid items
        https://bugs.webkit.org/show_bug.cgi?id=205386

        Reviewed by Manuel Rego Casasnovas.

        A single anonymous flex/grid item should just contain a contiguous
        sequence of text runs.

        This patch is based on https://crrev.com/533825 from Chromium.

        Tests: imported/w3c/web-platform-tests/css/css-flexbox/anonymous-flex-item-004.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/anonymous-grid-item-001.html

        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::attachIgnoringContinuation):

2020-05-22  Tim Horton  <timothy_horton@apple.com>

        iOS: Pressing tab in the Mail subject field moves focus to the body, but pressing shift tab doesn't move it back
        https://bugs.webkit.org/show_bug.cgi?id=212243
        <rdar://problem/59127764>

        Reviewed by Wenson Hsieh.

        New API Tests: WebKit.ShiftTabTakesFocusFromEditableWebView and WebKit.TabDoesNotTakeFocusFromEditableWebView

        * page/FocusController.cpp:
        (WebCore::FocusController::relinquishFocusToChrome):
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/FocusController.h:
        Factor out the code that decides whether the Chrome might accept focus,
        and transfers focus out to the Chrome, for use in EventHandler.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultTabEventHandler):
        In the case where we are shift-tabbing out of an editable web view,
        allow focus to pass to the Chrome. Previously, we would not allow this,
        because tabKeyCyclesThroughElements is false in editable web views.
        However, focus exiting the web view entirely needn't be covered by
        "cycles through elements" behavior.
        We can't do this for plain "tab", because that needs to be allowed to
        insert a tab character instead.

2020-05-22  Tyler Wilcock  <twilco.o@protonmail.com>

        Cannot style ::selection for a flex container
        https://bugs.webkit.org/show_bug.cgi?id=209822

        Reviewed by Antti Koivisto.

        When needing to query for pseudostyles, RenderText used to unconditionally check the parent's pseudostyles.  The parent of
        RenderText objects is often an anonymous box, depending on the presence of siblings, `display` type, etc.  This is problematic
        as pseudostyles are associated with an element of the DOM, meaning RenderText elements would often fail to find any pseudostyle
        thanks to their anonymous parent.

        This patch changes RenderText to traverse its tree of ancestry upwards until it finds a non-anonymous ancestor and gets those pseudostyles,
        rather than unconditionally trying to get pseudostyles from its direct parent.

        Blink does something similar when retrieving pseudostyles:

        https://github.com/chromium/chromium/blob/793cb59c18334f8b506863192bf630776da0f4d2/third_party/blink/renderer/core/paint/selection_painting_utils.cc#L54

        Tests: editing/selection/selection-display-block-sibling.html
               editing/selection/selection-display-flex.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::firstNonAnonymousAncestor const):
        * rendering/RenderObject.h:
        * rendering/RenderText.h:
        (WebCore::RenderText::getCachedPseudoStyle const): getCachedPseudoStyle from first non-anonymous ancestor, rather than only checking the direct parent.
        (WebCore::RenderText::selectionBackgroundColor const): Retrieve selectionBackgroundColor from first non-anonymous ancestor rather than only checking the direct parent.
        (WebCore::RenderText::selectionForegroundColor const): Retrieve selectionForegroundColor from first non-anonymous ancestor rather than only checking the direct parent.
        (WebCore::RenderText::selectionEmphasisMarkColor const): Retrieve selectionEmphasisMarkColor from first non-anonymous ancestor rather than only checking the direct parent.
        (WebCore::RenderText::selectionPseudoStyle const): Retrieve selectionPseudoStyle from first non-anonymous ancestor rather than only checking the direct parent.

2020-05-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        DataTransfer.files contains multiple files when pasting a single image with multiple representations
        https://bugs.webkit.org/show_bug.cgi?id=212245
        <rdar://problem/60240436>

        Reviewed by Tim Horton.

        When pasting or dropping a single image that is backed by multiple representations in NSPasteboard (or
        UIPasteboard), we currently report more than one `File` to the page via `DataTransfer.files`. This is because
        `Pasteboard::read(PasteboardFileReader&)`, which is responsible for converting the contents of the pasteboard
        into a list of files, currently iterates over every pasteboard type and adds each of them as a file. This is
        wrong when an item has multiple type representations.

        To differentiate the case where a single item has multiple representations from the case where it has multiple
        pasteboard items, we use `allPasteboardItemInfo()` instead to grab a per-item list of types from the pasteboard
        on Cocoa platforms, and only create at most 1 file per item using the highest fidelity type that contains data.

        Test: PasteImage.PasteImageWithMultipleRepresentations

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::read):

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        Fix rare scrolling thread crash firing the m_delayedRenderingUpdateDetectionTimer timer
        https://bugs.webkit.org/show_bug.cgi?id=212250

        Reviewed by Tim Horton.

        It seems that we can fire the m_delayedRenderingUpdateDetectionTimer timer after the
        ScrollingTree has been destroyed (possibly because it's destroyed on another thread
        and CFRunLoopTimerRef isn't threadsafe), so explicitly clear the timer in invalidate()
        while holding m_treeMutex.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::invalidate):

2020-05-21  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Move Color coder definitions to Color to allow for future encaspulation improvements
        https://bugs.webkit.org/show_bug.cgi?id=212247

        Reviewed by Simon Fraser.

        Move IPC encoder/decoder definitions from WebKit down into Color itself to move closer
        to making Color::rgb() private.

        * platform/graphics/Color.h:
        (WebCore::Color::encode const):
        (WebCore::Color::decode):

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread scrolls on sync-scrolling scrollers don't get to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=212225

        Fix builds that use Nicosia after r262041.

        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
        (WebCore::ScrollingTreeFrameScrollingNodeNicosia::currentScrollPositionChanged):
        * page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.h:

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        Fix some thread safety issues with ScrollController timers
        https://bugs.webkit.org/show_bug.cgi?id=212238

        Reviewed by Wenson Hsieh.

        There were some problems with the timers fired by ScrollController, used for rubber-banding
        and scroll snap.

        First, they could fire on the main thread when we intended them to fire on the scrolling thread.
        This happened because in r260716 I made the scrolling tree commit on the main thread, so we'd
        construct the ScrollingTreeScrollingNodeDelegateMac and its ScrollController there and its
        timers would grab the main thread runloop. Fix by creating the timers on demand.

        Secondly, the timer callbacks called into scrolling tree code, but without taking
        the scrolling tree lock,
        and without any guarantee that the node would stay alive for the duration of the callback.
        Fix by having the ScrollControllerClient create the timers, allowing the client to have
        a callback wrapper that locks, and to ensure object lifetime (or make a weak ref). Now
        that scrolling tree nodes could be extended by a pending timer, we need to explicitly
        clear the timers when nodes are removed from the tree.

        Finally, rename some confusingly named ScrollControllerClient functions.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::treeMutex):
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::wasBeRemovedFromTree):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::wasBeRemovedFromTree):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::wasBeRemovedFromTree):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::nodeWillBeDestroyed):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::createTimer):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopRubberbandSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::willStartScrollSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::didStopScrollSnapAnimation):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::startScrollSnapTimer): Deleted.
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::stopScrollSnapTimer): Deleted.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::createTimer):
        * platform/ScrollAnimator.h:
        * platform/cocoa/ScrollController.h:
        (WebCore::ScrollControllerTimer::ScrollControllerTimer):
        (WebCore::ScrollControllerClient::willStartRubberBandSnapAnimation):
        (WebCore::ScrollControllerClient::didStopRubberbandSnapAnimation):
        (WebCore::ScrollControllerClient::willStartScrollSnapAnimation):
        (WebCore::ScrollControllerClient::didStopScrollSnapAnimation):
        (WebCore::ScrollControllerClient::startSnapRubberbandTimer): Deleted.
        (WebCore::ScrollControllerClient::stopSnapRubberbandTimer): Deleted.
        (WebCore::ScrollControllerClient::startScrollSnapTimer): Deleted.
        (WebCore::ScrollControllerClient::stopScrollSnapTimer): Deleted.
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::ScrollController):
        (WebCore::ScrollController::stopAllTimers):
        (WebCore::ScrollController::handleWheelEvent):
        (WebCore::ScrollController::snapRubberBandTimerFired):
        (WebCore::ScrollController::isRubberBandInProgress const):
        (WebCore::ScrollController::isScrollSnapInProgress const):
        (WebCore::ScrollController::startSnapRubberbandTimer):
        (WebCore::ScrollController::stopSnapRubberbandTimer):
        (WebCore::ScrollController::snapRubberBand):
        (WebCore::ScrollController::scheduleStatelessScrollSnap):
        (WebCore::ScrollController::statelessSnapTransitionTimerFired):
        (WebCore::ScrollController::startScrollSnapTimer):
        (WebCore::ScrollController::stopScrollSnapTimer):
        * platform/mac/ScrollAnimatorMac.h:

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        Scrolling thread scrolls on sync-scrolling scrollers don't get to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=212225

        Reviewed by Tim Horton.

        Some scrolls on nodes with synchronousScrollingReasons failed to set the m_scrolledSinceLastCommit bit,
        because ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged() bypassed a call to the superclass.

        Fix by passing ScrollingLayerPositionAction so that it can just call super.

        This will be tested by existing tests after some upcoming scroll snap changes.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::currentScrollPositionChanged):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):

2020-05-21  Peng Liu  <peng.liu6@apple.com>

        Fix issues of the Picture-in-Picture API under stress tests
        https://bugs.webkit.org/show_bug.cgi?id=212191

        Reviewed by Eric Carlson.

        The current implementation of the Picture-in-Picture API is not robust under stress tests.
        Changing the video presentation mode of a video element between inline and picture-in-picture
        continuously may corrupt the internal states of the video element.

        This patch refactors the approach to tracking the progress of video presentation mode changes
        and make sure no new requestPictureInPicture() or exitPictureInPicture() will trigger
        a presentation mode change unless the previous operations are completed.

        This patch also removes the code for testing purposes in the HTMLVideoElement class.

        Covered by existing tests.

        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::toPresentationMode):
        (WebCore::HTMLVideoElement::setFullscreenMode):
        (WebCore::HTMLVideoElement::fullscreenModeChanged):
        (WebCore::HTMLVideoElement::didEnterFullscreen):
        (WebCore::HTMLVideoElement::didExitFullscreen):
        (WebCore::HTMLVideoElement::setPictureInPictureObserver):
        (WebCore::HTMLVideoElement::setVideoFullscreenFrame):
        (WebCore::HTMLVideoElement::didBecomeFullscreenElement): Deleted.
        (WebCore::HTMLVideoElement::setPictureInPictureAPITestEnabled): Deleted.
        * html/HTMLVideoElement.h:

        * testing/Internals.cpp:
        (WebCore::Internals::setPictureInPictureAPITestEnabled): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        Remove setPictureInPictureAPITestEnabled().

2020-05-21  Sam Weinig  <weinig@apple.com>

        Extended Color Cleanup: Remove trivial uses of Color::rgb()
        https://bugs.webkit.org/show_bug.cgi?id=212231

        Reviewed by Darin Adler

        Replaces a few unnecessary uses of Color::rgb():
        - Uses of an idiom where code round-tripped a Color via Color(myColor.rgb()). This is
          not compatible with extended colors and seems to be unnecessary.
        - Uses of colorWithOverrideAlpha(). This function requires a SimpleColor, so required
          using color.rgb(). We can't transition to Color::colorWithAlpha due to a slightly 
          different rounding of the alpha, so a new function Color::colorWithAlphaUsingAlternativeRounding
          was added to which implements the alternative rounding. A later change can reconcile
          the two versions.
        - Creation of D2D1::ColorF. D2D1::ColorF has a constructor that takes a four floats that
          is used instead.
        - Comparing two colors using rgb() for each to avoid comparing the semantic bit. equalIgnoringSemanticColor
          exists for just this use.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverterCaches::colorPropertyValueForNode):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::addHTMLColorToStyle):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setStrokeStyle):
        (WebCore::CanvasRenderingContext2DBase::setFillStyle):
        (WebCore::CanvasRenderingContext2DBase::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::updateCueFromCueData):
        * platform/graphics/Color.cpp:
        (WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const):
        (WebCore::Color::colorWithAlpha const):
        (WebCore::Color::colorWithAlphaUsingAlternativeRounding const):
        (WebCore::colorWithOverrideAlpha): Deleted.
        * platform/graphics/Color.h:
        (WebCore::colorWithOverrideAlpha): Deleted.
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::prepareCairoContextSource):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::platformApplySoftware):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_COLOR_F const):
        (WebCore::Color::operator D2D1_VECTOR_4F const):
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::colorWithGlobalAlpha const):
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintFileUploadIconDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingColor const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::stopColorIncludingOpacity const):

2020-05-21  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Don't create renderers for whitespace nodes
        https://bugs.webkit.org/show_bug.cgi?id=212220

        Reviewed by Manuel Rego Casasnovas.

        Even with 'white-space: pre' we shouldn't create RenderTexts
        for whitespace-only nodes in grid layout, according to
        https://drafts.csswg.org/css-grid/#grid-items

        This patch is based on https://codereview.chromium.org/16888008

        Tests: fast/text/simple-line-layout-with-zero-sized-font.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/whitespace-in-grid-item-001.html

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::textRendererIsNeeded):

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        Fix rare crash in TileGrid::platformCALayerShowRepaintCounter()
        https://bugs.webkit.org/show_bug.cgi?id=212182
        <rdar://problem/55618414>

        Reviewed by Darin Adler.

        Crash data suggest that owner() can be null in platformCALayerShowRepaintCounter(),
        so null-check in these functions.

        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::platformCALayerDeviceScaleFactor const):
        (WebCore::TileGrid::platformCALayerShowDebugBorders const):
        (WebCore::TileGrid::platformCALayerShowRepaintCounter const):
        (WebCore::TileGrid::isUsingDisplayListDrawing const):

2020-05-21  Youenn Fablet  <youenn@apple.com>

        Incorrect location.origin in blob workers
        https://bugs.webkit.org/show_bug.cgi?id=211876
        <rdar://problem/63284717>

        Reviewed by Sihui Liu.

        Instead of computing the origin from the location URL in worker, get it directly from the WorkerGlobalScope origin.
        This ensures we unwrap properly blob URLs.

        Test: http/tests/security/contentSecurityPolicy/worker-blob-location.html

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::location const):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::origin const):
        * workers/WorkerLocation.h:
        (WebCore::WorkerLocation::create):
        (WebCore::WorkerLocation::url const):
        (WebCore::WorkerLocation::WorkerLocation):

2020-05-21  John Wilander  <wilander@apple.com>

        Storage Access API: Allow configurable storage access scope
        https://bugs.webkit.org/show_bug.cgi?id=212114
        <rdar://problem/63423063>

        Reviewed by Alex Christensen.

        The scope of storage access as per-frame or per-page was discussed in the
        standards process here: https://github.com/privacycg/storage-access/issues/3

        The decision was to have per-page storage access by default. Recent feedback
        from Google and conversation with Mozilla suggest that we might want to
        support the caller choosing the scope.

        This patch adds support for different scope configurations while keeping the
        existing default as per-frame. A later patch will switch the default and add
        test cases for per-page scope.

        A new struct is added WebCore::RequestStorageAccessResult which carries full
        information about the storage access request result.

        A new enum is added WebCore::StorageAccessScope to encode per-frame and
        per-page access.

        No new tests. No changed functionality. Tests already exist.

        * dom/DocumentStorageAccess.cpp:
        (WebCore::DocumentStorageAccess::requestStorageAccess):
        * dom/DocumentStorageAccess.h:
        (WebCore::RequestStorageAccessResult::encode const):
        (WebCore::RequestStorageAccessResult::decode):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::requestStorageAccess):

2020-05-21  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Add minimal WKView API to enable TestWebKitAPI
        https://bugs.webkit.org/show_bug.cgi?id=211868

        Reviewed by Alex Christensen.

        Enable TestWebKitAPI

        * PlatformPlayStation.cmake:
        Add WebKitRequirements library to WebCore_CopySharedLibs.

2020-05-21  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_wrapper on fast/events/scoped/editing-commands.html
        https://bugs.webkit.org/show_bug.cgi?id=209862
        <rdar://problem/61164607>

        Reviewed by Darin Adler.

        Make sure ScopedEventQueue keeps its event targets alive using a GCReachableRef<Node>
        so that it keeps alive both the target and its JS wrapper.

        No new tests, covered by existing test.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::enqueueEvent):
        (WebCore::ScopedEventQueue::dispatchEvent const):
        (WebCore::ScopedEventQueue::dispatchAllEvents):
        * dom/ScopedEventQueue.h:

2020-05-21  Sihui Liu  <sihui_liu@apple.com>

        SQLite database fails to close in SQLiteIDBBackingStore::databaseNameFromFile
        https://bugs.webkit.org/show_bug.cgi?id=212090

        Reviewed by Darin Adler.

        We should finish SQLite statement before closing database.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromFile):

2020-05-21  Doug Kelly  <dougk@apple.com>

        Dispatch pending events only for current page
        https://bugs.webkit.org/show_bug.cgi?id=211975
        <rdar://problem/58942759>

        Reviewed by Chris Dumez.

        Document::implicitClose() should not dispatch events globally. The EventSender class operates as a singleton pattern
        for each event queue, so to add some means to restrict which documents are handling events, we can send the current
        page pointer and only dispatch the event if the event is for the same page. Other events are simply re-enqueued
        to be triggered at a later time.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        (WebCore::EventSender<T>::dispatchPendingEvents):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::dispatchPendingLoadEvents):
        * html/HTMLLinkElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::dispatchPendingLoadEvents):
        * html/HTMLStyleElement.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvents):
        (WebCore::ImageLoader::dispatchPendingLoadEvents):
        (WebCore::ImageLoader::dispatchPendingErrorEvents):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::document):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):

2020-05-21  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Scrolling synchronization part 2: Have the scrolling thread detect when the main thread is slow to respond to start a rendering update
        https://bugs.webkit.org/show_bug.cgi?id=212175

        Reviewed by Tim Horton.

        The scrolling thread now detects when a main thread rendering update is taking too long, going into
        desynchronized mode when that happens.

        However, there's another state that needs to be handled, which is the main thread being busy and
        taking too long to start the rendering update. The scrolling thread gets a "displayDidRefresh" ping
        and expects that the main thread will get the same ping, and use it to start the rendering update,
        but a busy main thread won't respond to this ping promptly.

        Detect this with a short-duration (1ms) timer that fires on the scrolling thread; if the timer fires
        we go into desynchronized mode until the next update. The timer is canceled if the scrolling thread
        receives the willStartRenderingUpdate(). 

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout):
        (WebCore::ThreadedScrollingTree::scheduleDelayedRenderingUpdateDetectionTimer):
        (WebCore::ThreadedScrollingTree::delayedRenderingUpdateDetectionTimerFired):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:

2020-05-21  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] [css-flex] Width of table as grid/flex item is infinite when the sum of columns' width exceed 100%
        https://bugs.webkit.org/show_bug.cgi?id=191365

        Reviewed by Manuel Rego Casasnovas.

        Automatic table layout algorithm generates infinite width tables
        (tableMaxWidth to be more exact) when the sum of the columns percentages
        exceed the 100% value and there is at least one non-percentage based
        column with positive width as in those cases it's impossible to fulfill
        the table constrains. That should not be done in the case of the table
        being a flex or a grid item because they both define new formatting
        contexts.

        Based on Blink's crrev.com/1095220 by <mstensho@chromium.org>

        * rendering/AutoTableLayout.cpp:
        (WebCore::shouldScaleColumnsForParent): return false when the table is
        either a grid or a flex item.

2020-05-21  Zalan Bujtas  <zalan@apple.com>

        [ macOS debug ] REGRESSION: fast/layoutformattingcontext/table-basic-row-baseline-with-nested-table.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=212139
        <rdar://problem/63447683>

        Reviewed by Antti Koivisto.

        Uninitialized row baseline value caused unexpected cell height in nested tables.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        * layout/tableformatting/TableGrid.h:

2020-05-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Collapse in-between cell borders
        https://bugs.webkit.org/show_bug.cgi?id=212183

        Reviewed by Antti Koivisto.

        This patch expands border collapsing to in-between cell borders.

        Test: fast/layoutformattingcontext/table-simple-border-collapse3.html

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::computedCellBorder const):
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

2020-05-21  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][GTK][WPE] Expose and honor the media content types requiring hardware support setting
        https://bugs.webkit.org/show_bug.cgi?id=211950

        Reviewed by Adrian Perez de Castro.

        Provide the needed information about media content types requiring hardware support
        when asking the MediaPlayer about what types are supported. This was already being done
        from HTMLMediaElement for player selection, but not in MediaSource nor in
        MediaSource::addSourceBuffer() when the webpage used the MSE API to check type support.
        In order to ask for the mediaContentTypesRequiringHardwareSupport setting we need a
        reference to the current Document in all the places where we need to check type support.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer): Provide hardware content types extra info.
        (WebCore::MediaSource::isTypeSupported): Get hardware content types extra info from
        ScriptExecutionContext and provide it to a new refactored private version of
        isTypeSupported() which can also be reused from addSourceBuffer().
        * Modules/mediasource/MediaSource.h: Changed isTypeSupported() prototype to take
        ScriptExecutionContext and added a new overloaded version of the method.
        * Modules/mediasource/MediaSource.idl: isTypeSupported() now provides a reference to
        ScriptExecutionContext. It's the only way to access the required document settings from a
        static method.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
        (WebCore::GStreamerRegistryScanner::isContentTypeSupported const): Factor ContentType
        discrimination logic common to MediaPlayerPrivateGStreamer and
        MediaPlayerPrivateGStreamerMSE.
        * platform/graphics/gstreamer/GStreamerRegistryScanner.h: Added new method.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::supportsType): Provide hardware content types extra
        info when asking for type support.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::supportsType): Ditto.

2020-05-20  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Scrolling synchronization part 1: Have the scrolling thread wait half a frame for the main thread to complete the rendering update
        https://bugs.webkit.org/show_bug.cgi?id=212168

        Reviewed by Tim Horton.

        Currently the scrolling thread is a free-running thread that moves layers around in response
        to wheel events, and asynchronously posts data about scrolled layers back to the main thread.
        That results in an almost guaranteed lack of synchronization between the displayed layer
        positions, and the web-exposed values for scroll position (element.scrollTop, window.pageYOffset etc).
        This is a frequent source of stuttering or jumpy web content when scrolling.

        The first step to fixing this is to synchronize the scrolling thread layer positions
        and the main thread state for the case where the main thread is responsive enough to
        render once per frame. This is achieved as follow:
            - When the main thread is starting a rendering update, Page::updateRendering() informs
              the scrolling tree via ScrollingCoordinatorMac::willStartRenderingUpdate(). This
              atomically waits for the scrolling thread to take the m_treeMutex (via a BinarySemaphore)
              and starts waiting on the m_stateCondition Condition. Now the main thread pulls the
              state of the scrolling tree via synchronizeStateFromScrollingTree() and uses it for
              the rendering update.
            - If the rendering update finishes within half a frame (8ms), then m_stateCondition
              is released, and the scrolling thread assumes that the main thread is going to
              commit layers rapidly enough to preserve 60fps scrolling.
            - If the rendering update takes too long, m_stateCondition times out, and the scrolling
              thread applies layer positions, triggering a CA commit on that thread.

        We no longer apply layer positions directly when handling wheel events.

        synchronizeStateFromScrollingTree() has to only pull state from nodes that have moved on the scrolling thread,
        so track that via ScrollingTreeScrollingNode::scrolledSinceLastCommit() and adjust the visitor function to
        make it available during scrolling tree traversal.

        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::Page::finalizeRenderingUpdate):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::willStartRenderingUpdate):
        (WebCore::ScrollingCoordinator::didCompleteRenderingUpdate):
        (WebCore::ScrollingCoordinator::synchronizeStateFromScrollingTree): Deleted.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::traverseScrollingTreeRecursive):
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNodeRecursive):
        (WebCore::ScrollingTree::applyLayerPositionsInternal):
        (WebCore::ScrollingTree::nominalFramesPerSecond):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::didCompleteCommitForNode):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::didCompleteCommitForNode):
        (WebCore::ScrollingTreeScrollingNode::currentScrollPositionChanged):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::willStartRenderingUpdate):
        (WebCore::ThreadedScrollingTree::maxAllowableRenderingUpdateDurationForSynchronization):
        (WebCore::ThreadedScrollingTree::waitForRenderingUpdateCompletionOrTimeout):
        (WebCore::ThreadedScrollingTree::didCompleteRenderingUpdate):
        (WebCore::ThreadedScrollingTree::displayDidRefreshOnScrollingThread):
        * page/scrolling/ThreadedScrollingTree.h:
        (WebCore::ThreadedScrollingTree::treeMutex):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::willStartRenderingUpdate):
        (WebCore::ScrollingCoordinatorMac::didCompleteRenderingUpdate):

2020-05-20  Chris Fleizach  <cfleizach@apple.com>

        REGRESSION (iOS 13.4.1): SpeechSynthesisUtterance.onend event won't fire on cancel().
        https://bugs.webkit.org/show_bug.cgi?id=211776
        <rdar://problem/63130249>

        Reviewed by Per Arne Vollan.

        With the move to having speech synthesis happen in the client, the cancel case hits a snag.
        We cancel the speech job and clear out the current utterance. By the time the cancel callback comes back,
        the current utterance is gone and nothing happens.

        The fix is to process the speechError event immediately and not wait on the speech synthesizer -- which seems sane,
        since we're just cancelling a speech job.

        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::cancel):

2020-05-20  Darin Adler  <darin@apple.com>

        Dictation context should be an object identifier, not a type-punned pointer
        https://bugs.webkit.org/show_bug.cgi?id=212174

        Reviewed by Anders Carlsson.

        * Headers.cmake: Added DictationContext.h.
        * Sources.txt: Removed DictationAlternative.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added DictationContext.h, removed DictationAlternative.cpp.

        * dom/DocumentMarker.h: Use DictationContext instead of uint64_t.
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired): Ditto.
        * editing/AlternativeTextController.h: Ditto.

        * editing/DictationAlternative.h: Use DictationContext instead of uint64_t, but also
        use CharacterRange rather than two "unsigned" values. Also convert into a simple
        struct without constructors; don't really need those.

        * editing/DictationAlternative.cpp: Removed.

        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::collectDictationAlternativesInRange): Updated for
        changes to DictationAlternative.

        * editing/DictationContext.h: Added.

        * editing/Editor.h: Forward declare DictationAlternative rather than including
        its header.

        * editing/cocoa/AlternativeTextContextController.h: Use a pair of maps to bind NSTextAlternatives
        objects to object identifiers. Remove unnecessary explicit constructor and destructor. Also removed
        unnecessary use of WTF_MAKE_FAST_ALLOCATED, since this is only used as a data member of another
        class. Removed unused invalidContext constant.
        * editing/cocoa/AlternativeTextContextController.mm: Removed the unneeded includes.
        This file treats NSTextAlternatives as an opaque Objective-C type and so doesn't need
        any details of that class.
        (WebCore::AlternativeTextContextController::addAlternatives): Changed to return a
        DictationContext and use two maps, using HashMap::ensure to avoid double hashing.
        (WebCore::AlternativeTextContextController::alternativesForContext): Added a null check.
        (WebCore::AlternativeTextContextController::removeAlternativesForContext): Ditto. Also
        updated to remove from both maps.
        (WebCore::AlternativeTextContextController::clear): Clear both maps.

        * editing/cocoa/AlternativeTextUIController.h: Since this header is used only from Objective-C,
        removed use of OBJC_CLASS. Put showAlternatives inside a macOS-specific block. Use DictationContext
        instead of uint64_t.
        * editing/cocoa/AlternativeTextUIController.mm:
        (WebCore::AlternativeTextUIController::addAlternatives): Use DictationContext instead of uint64_t.
        (WebCore::AlternativeTextUIController::alternativesForContext): Ditto.
        (WebCore::AlternativeTextUIController::showAlternatives): Ditto.
        (WebCore::AlternativeTextUIController::handleAcceptedAlternative): Ditto.
        (WebCore::AlternativeTextUIController::removeAlternatives): Ditto.

        * page/AlternativeTextClient.h: Use DictationContext instead of uint64_t.

2020-05-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Preferred width computation should take border collapsing into account
        https://bugs.webkit.org/show_bug.cgi?id=212141

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-border-collapse2.html

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        * layout/tableformatting/TableFormattingContext.h:
        (WebCore::Layout::TableFormattingContext::Geometry::Geometry):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

2020-05-20  Zalan Bujtas  <zalan@apple.com>

        Repaint issues when the login field collapses on music.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=212101
        <rdar://problem/62874369>

        Reviewed by Simon Fraser.

        RenderWidgets (e.g iframe) are painted on integral pixel boundaries. When we issue the repaints on such renderers, we need to
        make sure that the repaint rectangles are also snapped to integral pixel values.
        Currently trunk only covers the case when the renderer itself is positioned on a subpixel position (e.g when the containing block's content box has a non-integral position value).
        This patch ensures that we repaint the RenderWidgets properly when a non-direct ancestor puts the renderer on a subpixel position.

        Test: fast/repaint/iframe-on-subpixel-position.html

        * page/FrameView.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeVisibleRectInContainer const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderObject.h:
        * testing/Internals.cpp:
        (WebCore::Internals::enableSubframeRepaintTracking): add subframe repaint tracking 
        (WebCore::Internals::disableSubframeRepaintTracking):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-20  Oriol Brufau  <obrufau@igalia.com>

        Computed min-width/height for auto depends on box
        https://bugs.webkit.org/show_bug.cgi?id=209651

        Reviewed by Manuel Rego Casasnovas.

        Resolved value of min-width and min-height for auto min sizing of flex
        and grid items may be 'auto'. We based this on the computed style of the
        shadow including parent. Instead we should rely on whether the element
        will actually be a rendered flex/grid item.

        The difference matters e.g. when the parent has 'display: contents' and
        thus is not a flex nor grid container, but the element can still be a
        flex or grid item, depending on the grand-parent.

        This patch is based on https://crrev.com/540901 from Chromium.

        Tests: imported/w3c/web-platform-tests/css/css-flexbox/getcomputedstyle/flexbox_computedstyle_min-auto-size.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-min-auto-size-001.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isFlexOrGridItem):
        (WebCore::ComputedStyleExtractor::valueForPropertyInStyle):

2020-05-20  Alex Christensen  <achristensen@webkit.org>

        Remove implicit URL->String conversion operators
        https://bugs.webkit.org/show_bug.cgi?id=211033

        Reviewed by Darin Adler.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValueForMSAA const):
        * html/DOMURL.cpp:
        (WebCore::DOMURL::create):
        * html/HTMLPlugInElement.cpp:
        (WebCore::pluginReplacementForType):
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::protocol const):
        (WebCore::URLUtils<T>::setUsername):
        (WebCore::URLUtils<T>::setPassword):
        * page/Location.cpp:
        (WebCore::Location::setProtocol):
        (WebCore::Location::setHost):
        (WebCore::Location::setHostname):
        (WebCore::Location::setPort):
        (WebCore::Location::setPathname):
        (WebCore::Location::setSearch):
        (WebCore::Location::setHash):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):

2020-05-20  Sam Weinig  <weinig@apple.com>

        Replace Color::getHSL() with sRGBToHSL to ensure it at least gives somewhat sensible results for ExtendedColors and reduce code duplication
        https://bugs.webkit.org/show_bug.cgi?id=212143

        Reviewed by Simon Fraser.

        - Updated API tests to test sRGBToHSL() rather than Color::getHSL() and extended the tests
          to include lightness tests and round tripping tests.
        - Update editing/pasteboard/paste-dark-mode-color-filtered.html with extended color test cases.

        Replaces Color::getHSL() with sRGBToHSL(color.toSRGBAComponentsLossy()) and adds
        an optimized variant, lightness(...) that just extracts the lightness component for 
        callers that only needed that.
        
        It is now required to explicitly use color.toSRGBAComponentsLossy() to indicate that
        for non-SRGB colors, this will be a lossy transformation and give us an easy way to
        find all these sites in the future, if we want to make a better conversion for other
        color spaces. 

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::fragmentNeedsColorTransformed):
        Switch to using lightness(). This was previously broken for extended colors but now works (though 
        in a lossy way through sRGB). Update editing/pasteboard/paste-dark-mode-color-filtered.html with extended colors.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange):
        Switch to using sRGBToHSL(color.toSRGBAComponentsLossy()).
        
        * page/FrameView.cpp:
        (WebCore::FrameView::recalculateScrollbarOverlayStyle):
        Switch to using lightness().
        
        * platform/graphics/Color.cpp:
        (WebCore::Color::getHSL const): Deleted.
        * platform/graphics/Color.h:
        Remove Color::getHSL().
        
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::lightness):
        Added optimized subset of sRGBToHSL which just computes the lightness component for callers
        that only need that.

        (WebCore::sRGBToHSL):
        Simplify/cleanup code a little using initialize-list based std::max/std::min and structured bindings.

        * platform/graphics/ColorUtilities.h:
        Export functions to allow testing them directly.

2020-05-20  Megan Gardner  <megan_gardner@apple.com>

        Hide password echo when screen is being captured.
        https://bugs.webkit.org/show_bug.cgi?id=212060
        <rdar://problem/47653578>

        Reviewed by Wenson Hsieh.

        When the screen is being captured, turn off the password echo. 

        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        * page/EditorClient.h:
        (WebCore::EditorClient::isScreenCaptured const):

2020-05-20  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Implement connected and disconnected events of GAMEPAD API with libmanette
        https://bugs.webkit.org/show_bug.cgi?id=133854

        Reviewed by Carlos Garcia Campos.

        This patch brings initial GAMEPAD API support to the gtk port. We use libmanette,
        a simple GObject game controller library to handle gamepad connection and input.
        This change aims to implement two GAMEPAD API events: 'gamepadconnected' and 'gamepaddisconnected'
        on top of libmanette. Rest of API will be implemented by following patches.

        No new tests since existing tests can cover this change.

        * PlatformGTK.cmake: Add header & library paths for libmanette.
        * SourcesGTK.txt:
        * platform/gamepad/manette/GUniquePtrManette.h: Added to define a smart pointer for ManetteMonitor.
        * platform/gamepad/manette/ManetteGamepad.cpp: Added. A wrapper class for ManetteDevice.
          A ManetteGamepad instance is created per a physically connected gamepad. Currently,
          it is empty but input handling login will be placed in this class.
        (WebCore::ManetteGamepad::ManetteGamepad):
        * platform/gamepad/manette/ManetteGamepad.h: Added.
        * platform/gamepad/manette/ManetteGamepadProvider.cpp: Added. A manager class
          for ManetteGamepad instances. This class represents ManetteMonitor that
          handles connection and disconnection of gamepads. Many parts of this class implementation
          is brought from HIDGamepad.cpp
        (WebCore::ManetteGamepadProvider::singleton):
        (WebCore::onDeviceConnected):
        (WebCore::onDeviceDisconnected):
        (WebCore::ManetteGamepadProvider::ManetteGamepadProvider):
        (WebCore::ManetteGamepadProvider::startMonitoringGamepads):
        (WebCore::ManetteGamepadProvider::stopMonitoringGamepads):
        (WebCore::ManetteGamepadProvider::deviceConnected):
        (WebCore::ManetteGamepadProvider::deviceDisconnected):
        (WebCore::ManetteGamepadProvider::indexForNewlyConnectedDevice):
        (WebCore::ManetteGamepadProvider::connectionDelayTimerFired):
        (WebCore::ManetteGamepadProvider::removeGamepadForDevice):
        * platform/gamepad/manette/ManetteGamepadProvider.h: Added.

2020-05-20  Antoine Quint  <graouts@apple.com>

        Potential crash in PointerCaptureController::cancelPointer()
        https://bugs.webkit.org/show_bug.cgi?id=208347
        <rdar://problem/59866247>

        Reviewed by David Kilzer and Daniel Bates.

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

2020-05-20  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Fix auto repeat with multiple tracks and gutters
        https://bugs.webkit.org/show_bug.cgi?id=182922

        Reviewed by Manuel Rego Casasnovas.

        The code that computes the number of auto repeat tracks wrongly assumes
        that the second argument of the repeat() notation is a single track
        function. That was true in the beginning, however specs were later on
        modified to allow a <track-list>. We support a <track-list> as a second
        argument since long ago but the code that computes the number of
        auto-repeat tracks was never updated.

        This patch modifies two places that relate to the gaps between the
        auto-repeat tracks, which ensures the proper total length.

        This is a port of https://crrev.com/620278 from Chromium.

        Tests: fast/css-grid-layout/grid-auto-repeat-huge-grid.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-auto-repeat-multiple-values-001.html

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

2020-05-20  Simon Fraser  <simon.fraser@apple.com>

        Plumb the display's nominal refresh rate down to ScrollingTree for use in scroll synchronization
        https://bugs.webkit.org/show_bug.cgi?id=212159

        Reviewed by Tim Horton.

        Plumb an Optional<unsigned> down windowScreenDidChange, which contains the nominal
        display refresh rate (as frames per second) if available. On macOS, we get this
        from CVDisplayLinkGetNominalOutputVideoRefreshPeriod().

        To read it, WebProcessPool::nominalFramesPerSecondForDisplay() makes a DisplayLink
        that doesn't get any observers, but that DisplayLink will very likely get used
        as soon as we schedule a rendering update.

        * page/Chrome.cpp:
        (WebCore::Chrome::windowScreenDidChange):
        * page/Chrome.h:
        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator):
        (WebCore::Page::windowScreenDidChange):
        * page/Page.h:
        (WebCore::Page::displayNominalFramesPerSecond const):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::windowScreenDidChange):
        * page/scrolling/ScrollingTree.h:
        * platform/HostWindow.h:

2020-05-20  Chris Dumez  <cdumez@apple.com>

        Disable support for BeforeLoadEvent
        https://bugs.webkit.org/show_bug.cgi?id=212140
        <rdar://problem/62847577>

        Reviewed by Antti Koivisto.

        Disable support for BeforeLoadEvent. Other browsers do not support it and
        Chrome dropped it shortly after the fork:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=333318

        This is a synchronous event and therefore very dangerous.

        Test: fast/frames/didBecomeCurrentDocumentInFrame-crash.html

        * bindings/js/WebCoreBuiltinNames.h:
        * dom/BeforeLoadEvent.idl:
        * dom/Node.cpp:
        (WebCore::Node::dispatchBeforeLoadEvent):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setLegacyBeforeLoadEventEnabled):
        (WebCore::RuntimeEnabledFeatures::legacyBeforeLoadEventEnabled const):

2020-05-20  Zalan Bujtas  <zalan@apple.com>

        RenderObject::VisibleRectContext members should not be prefixed with m_
        https://bugs.webkit.org/show_bug.cgi?id=212154

        Reviewed by Simon Fraser.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyCachedClipAndScrollPosition const):
        (WebCore::RenderBox::computeVisibleRectInContainer const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeVisibleRectInContainer const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computeVisibleRectInContainer const):
        * rendering/RenderObject.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeVisibleRectInContainer const):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeVisibleRectInContainer const):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computeFloatVisibleRectInContainer const):

2020-05-20  Myles C. Maxfield  <mmaxfield@apple.com>

        [iPadOS] -webkit-text-size-adjust:percentage doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=212122
        <rdar://problem/54560875>

        Reviewed by Wenson Hsieh.

        We've gotten many bug reports that -webkit-text-size-adjust:X% no longer works in
        WebKit on iPads. We don't want to just start honoring the value, because our
        testing indicates that, with desktop-class browsing on iPad, more sites work better
        when we don't honor percentages. However, if Safari is using the mobile content mode,
        or if a native app has local content, it should be possible to get the old behavior
        of honoring percentages.

        This patch adds a new Setting, idempotentModeAutosizingOnlyHonorsPercentages, which
        is hooked up to the desktop-class browsing feature. When
        WebPageProxy::effectiveContentModeAfterAdjustingPolicies() determines that the
        WebContentMode::Mobile mode should be used, it sets the new setting, which
        causes idempotent text autosizing mode to have the same behavior that WKWebViews
        on iPadOS used to have: -w-t-s-a:auto and -w-t-s-a:none have no effect, but
        -w-t-s-a:X% is honored. This affects both Safari and WKWebView apps.

        If a native app wants the old behavior, they can set
        WKWebpagePreferences.preferredContentMode = WKContentModeMobile to force the old
        iPad behavior. It's expected that apps with legacy content would be doing this
        anyway.

        Tests: fast/text-autosizing/ios/idempotentmode/idempotent-percentage.html
               TestWebKitAPI.PreferredContentMode.IdempotentModeAutosizingOnlyHonorsPercentages

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::applyPoliciesToSettings):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setIdempotentModeAutosizingOnlyHonorsPercentages):
        (WebCore::DocumentLoader::idempotentModeAutosizingOnlyHonorsPercentages const):
        * page/Settings.yaml:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustmentForTextAutosizing):
        * style/StyleBuilderCustom.h:
        (WebCore::Style::computeBaseSpecifiedFontSize):
        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::updateFontForTextSizeAdjust):

2020-05-20  ChangSeok Oh  <changseok@webkit.org>

        Move the TextStream logging definition in VisibleSelection.cpp to the outside of the TREE_DEBUGGING guard
        https://bugs.webkit.org/show_bug.cgi?id=212127

        Reviewed by Simon Fraser.

        A linking failure occurs after r261819 where ENABLE_TREE_DEBUGGING is disabled.
        The TextStream logging defining is placed inside the guard while its declaration is not since r218976.

        Build fix, no functionality changed.

        * editing/VisibleSelection.cpp:
        (WebCore::operator<<):

2020-05-20  Andres Gonzalez  <andresg_22@apple.com>

        Fix for accessibility-node-memory-management.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=212142

        Reviewed by Chris Fleizach.

        LayoutTests/accessibility/accessibility-node-memory-management.html.

        - Fix in applyPendingChanges that was not removing removed nodes from
        the nodes map. This was causing that some detached AXIsolatedObjects
        were being returned.
        - Also handle the case where pending changes can come from a detached
        AXObject with invalid ID and no platform wrapper.
        - updateChildren better handles the case when the notification target
        is not in the isolated tree by walking up the object hierarchy until it
        finds an associated object that does have a corresponding isolated object.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::treeForPageID):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::applyPendingChanges):

2020-05-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Animation engine should not wake up every tick for steps timing functions
        https://bugs.webkit.org/show_bug.cgi?id=212103
        <rdar://problem/62737868>

        Unreviewed. Clean up some stray FIXMEs mistakenly commited in the previous commit.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElementAndProperty):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

2020-05-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Animation engine should not wake up every tick for steps timing functions
        https://bugs.webkit.org/show_bug.cgi?id=212103
        <rdar://problem/62737868>

        Reviewed by Simon Fraser.

        Tests: webanimations/scheduling-of-animation-with-steps-timing-function-on-effect.html
               webanimations/scheduling-of-animation-with-steps-timing-function-on-keyframe.html
               webanimations/scheduling-of-css-animation-with-explicit-steps-timing-function-on-some-keyframes.html
               webanimations/scheduling-of-css-animation-with-implicit-steps-timing-function.html

        When an animation uses a steps() timing function, it will appear to animate discretely between values such
        that there is only n visual changes, where n is the number of steps provided. This gives us an opportunity
        to be more efficient when scheduling animations using steps() timing functions.

        In WebAnimation::timeToNextTick() we now ask the associated effect for the amount of progress until the next
        step. For an effect-wide steps() timing function, we can use the provided iteration progress. For animations
        with a linear effect-wide timing function (the default), we have to map the provided iteration progress to
        a keyframe interval, provided that interval uses a steps() timing function.

        The new {Animation|Keyframe}Effect::progressUntilNextStep() method returns WTF::nullopt for any other case.

        In order to test this, we add a new internals.timeToNextAnimationTick(animation) method which we use in the
        two new tests.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::progressUntilNextStep const):
        * animation/AnimationEffect.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::setBlendingKeyframes):
        (WebCore::KeyframeEffect::computeSomeKeyframesUseStepsTimingFunction):
        (WebCore::KeyframeEffect::timingFunctionForKeyframeAtIndex const): Avoid any out-of-bounds use of the underlying data
        structures by returning nullptr for cases where we don't have an explicit keyframe. We also make the function const
        such that it may be called from progressUntilNextStep(), it always was const but wasn't marked as such.
        (WebCore::KeyframeEffect::progressUntilNextStep const):
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timeToNextTick const):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::timeToNextAnimationTick const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-20  Noam Rosenthal  <noam@webkit.org>

        Fix table sizing when 'max-width' is used
        https://bugs.webkit.org/show_bug.cgi?id=115156

        Reviewed by Zalan Bujtas.

        Based on previous patch by László Langó  <lango@inf.u-szeged.hu>

        Test: fast/table/html-table-width-max-width-constrained.html

        A table should always be wide enough to contain its content (preferred logical width).
        This constraint should be stronger than the table style's specified min-width/width.

        The behavior matches the spec, and behavior on Firefox/Chrome.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
                Max-width should only affect the table's max preferred width.

        (WebCore::RenderTable::computePreferredLogicalWidths):
                Change the order of constraints so that content constraint is stronger than style width/max-width constraint.

2020-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r261554): [GTK] Version 2.29.1 crashes using drag-n-drop API
        https://bugs.webkit.org/show_bug.cgi?id=212136

        Reviewed by Adrian Perez de Castro.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::read): Use m_selectionData if present.

2020-05-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] <img> tag needs to support video formats
        https://bugs.webkit.org/show_bug.cgi?id=180370

        Reviewed by Xabier Rodriguez-Calvar.

        GStreamer implementation of the ImageDecoder. It currently doesn't support zero-copy
        rendering though due to the the NativeImagePtr requirement.

        * platform/GStreamer.cmake:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType):
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoder::supportsMediaType):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.cpp: Added.
        (WebCore::toSample):
        (WebCore::ImageDecoderGStreamer::create):
        (WebCore::ImageDecoderGStreamer::ImageDecoderGStreamer):
        (WebCore::ImageDecoderGStreamer::supportsContainerType):
        (WebCore::ImageDecoderGStreamer::canDecodeType):
        (WebCore::ImageDecoderGStreamer::encodedDataStatus const):
        (WebCore::ImageDecoderGStreamer::size const):
        (WebCore::ImageDecoderGStreamer::repetitionCount const):
        (WebCore::ImageDecoderGStreamer::uti const):
        (WebCore::ImageDecoderGStreamer::frameOrientationAtIndex const):
        (WebCore::ImageDecoderGStreamer::frameDurationAtIndex const):
        (WebCore::ImageDecoderGStreamer::frameHasAlphaAtIndex const):
        (WebCore::ImageDecoderGStreamer::frameBytesAtIndex const):
        (WebCore::ImageDecoderGStreamer::createFrameImageAtIndex):
        (WebCore::ImageDecoderGStreamer::setData):
        (WebCore::ImageDecoderGStreamer::clearFrameBufferCache):
        (WebCore::ImageDecoderGStreamer::sampleAtIndex const):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::decodebinPadAddedCallback):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::connectDecoderPad):
        (WebCore::ImageDecoderGStreamer::handleSample):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::handleMessage):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::preparePipeline):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::run):
        (WebCore::ImageDecoderGStreamer::InnerDecoder::encodedDataStatus const):
        (WebCore::ImageDecoderGStreamer::pushEncodedData):
        * platform/graphics/gstreamer/ImageDecoderGStreamer.h: Added.
        * platform/graphics/gstreamer/ImageGStreamer.h:
        (WebCore::ImageGStreamer::createImage):
        (WebCore::ImageGStreamer::image):
        (WebCore::ImageGStreamer::setCropRect):
        (WebCore::ImageGStreamer::rect):
        (WebCore::ImageGStreamer::hasAlpha const):
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (WebCore::ImageGStreamer::ImageGStreamer):
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:

2020-05-20  Andy Estes  <aestes@apple.com>

        [Mac] UI processes spin when creating the "Share" context menu item
        https://bugs.webkit.org/show_bug.cgi?id=212137
        <rdar://problem/54498394>

        Reviewed by Wenson Hsieh.

        Ran update-webkit-localizable-strings.

        * en.lproj/Localizable.strings:

2020-05-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Internal table boxes should take collapsed border into account
        https://bugs.webkit.org/show_bug.cgi?id=212135

        Reviewed by Antti Koivisto.

        Use the collapsed border value to compute the borders for sections, rows and cells.
        The collapsed border is propagated to the table box and the adjacent cell boxes.  

        Test: fast/layoutformattingcontext/table-simple-border-collapse.html

        * layout/LayoutUnits.h:
        (WebCore::Layout::operator/):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::setCollapsedBorder):
        (WebCore::Layout::TableGrid::collapsedBorder const):

2020-05-20  Youenn Fablet  <youenn@apple.com>

        [Mac] Use preferedPixelBufferFormat for AVVideoCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=212071

        Reviewed by Eric Carlson.

        Manually tested.

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

2020-05-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK4 build with GTK 3.98.4

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::convertWidgetPointToScreenPoint):
        * platform/gtk/GtkVersioning.h:
        (gtk_widget_destroy):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDPI):

2020-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for drag and drop operations
        https://bugs.webkit.org/show_bug.cgi?id=211779

        Reviewed by Adrian Perez de Castro.

        Move the code to create a GdkTexture from an Image from CursorGtk to ImageGtk and add Image::gdkTexture().

        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::gdkTexture):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::gdkTexture):
        * platform/gtk/CursorGtk.cpp:
        (WebCore::createCustomCursor):

2020-05-20  Sam Weinig  <weinig@apple.com>

        Remove unused Color::getHSV function
        https://bugs.webkit.org/show_bug.cgi?id=212119

        Reviewed by Simon Fraser.

        * platform/graphics/Color.cpp:
        (WebCore::Color::getHSV const): Deleted.
        * platform/graphics/Color.h:
        Remove Color::getHSV(). It was unused outside of the API test for it.    

2020-05-20  Youenn Fablet  <youenn@apple.com>

        Allow calling VideoSampleObserver::videoSampleAvailable from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212024

        Reviewed by Eric Carlson.

        Allow RealtimeMediaSource::videoSampleAvailable to be called on a background thread, typically the capture thread.
        Make WebRTC remote sources and mock capture sources do that.

        RealtimeMediaSource is then updating its intrinsic size from the generation thread while updating its size in the main thread.
        The size() getter can be called from both threads.

        Existing consumers do the following:
        - media player will hop to the main thread.
        - media recorder will do processing from the background thread.
        - WebRTC sender will do processing from the background thread, except when sending black frames where this will still be done on the main thread.
        This is ok as we ensure either we send black frames on the main thread (and we do not observe the source) or we observe the source to send.

        Follow-ups will migrate the real capture sources as well as migrating media player processing out of the main thread.
        Covered by existing tests.

        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::setIntrinsicSize):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): Deleted.

2020-05-20  Oriol Brufau  <obrufau@igalia.com>

        Fix computeMarginLogicalSizeForChild to check auto margins in the right axis
        https://bugs.webkit.org/show_bug.cgi?id=212113

        Reviewed by Manuel Rego Casasnovas.

        GridLayoutFunctions::computeMarginLogicalSizeForChild checks for 'auto'
        margins before retrieving the margin size, since these should be treated
        as 0. However, for orthogonal grid items, it used to check the wrong axis.
        So if an item had 'margin-top: auto' and 'margin-left: 5px', when asking
        for the horizontal margin we could get 0px instead of 5px due to the
        auto margin in the vertical axis.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-width-orthogonal-001.html

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::computeMarginLogicalSizeForChild):
        (WebCore::GridLayoutFunctions::marginLogicalSizeForChild):

2020-05-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] ASSERT(m_eglDisplay == EGL_NO_DISPLAY) fails in ~PlatformDisplay()
        https://bugs.webkit.org/show_bug.cgi?id=212065

        Reviewed by Don Olmstead.

        PlatformDisplay destoys m_eglDisplay by using std::atexit to
        ensure they are destructed before EGL's atexit handler (Bug 157973).
        However, calling eglTerminate in atexit handler causes a
        crash on Windows (Bug 145832, Bug 170331).

        Then, r214688 added shutDownEglDisplays() and explicitly call it
        in shutDownWebKit() to destory m_eglDisplay in Windows WebKit1.
        However, Windows WebKit2 may call _exit() in IPC::Connection's
        WorkQueue thread. It doesn't seem a good idea that explicitly
        destructing m_eglDisplay by calling shutDownEglDisplays().

        Remove shutDownEglDisplays() and the assertion for Windows.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::~PlatformDisplay): Conditioned out the
        assertion for PLATFORM(WIN).
        (WebCore::PlatformDisplay::initializeEGLDisplay): Restored the
        original atexit handler of r201595.
        (WebCore::PlatformDisplay::shutDownEglDisplays): Deleted.
        * platform/graphics/PlatformDisplay.h:

2020-05-19  Darin Adler  <darin@apple.com>

        REGRESSION (r259930): Dictation marker at start of text is removed when added trailing whitespace is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=212093

        Reviewed by Daniel Bates.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::shiftMarkers): Use int to do the math before clamping to
        unsigned. This protects against underflow.

2020-05-19  Sam Weinig  <weinig@apple.com>

        Remove almost always incorrect Color::getRGBA
        https://bugs.webkit.org/show_bug.cgi?id=212059

        Reviewed by Darin Adler and Simon Fraser.

        Removes the awkward and almost always incorrect out parameter based Color::getRGBA. Most existing callsites
        were updated to use Color::toSRGBAComponentsLossy() or other more ExtendedColor supporting functions (like 
        cachedCGColor()). 
        
        Also adds tuple-like adaptors for FloatComponents to allow it to be used
        with structured bindings. For example:
        
            auto [r, g, b, a] = myFloatComponents;

        * platform/graphics/Color.h:
        * platform/graphics/Color.cpp:
        (WebCore::Color::light const):
        (WebCore::Color::dark const):
        (WebCore::Color::isDark const):
        Adopt toSRGBAComponentsLossy() to make these not return totally incorrect values.

        (WebCore::Color::colorSpaceAndComponents const):
        Added. Returns a std::pair<ColorSpace, FloatComponents> for functions that need
        to operate on the components in a ColorSpace aware way. Used by toSRGBAComponentsLossy
        and leakCGColor() for now, but will be useful going forward as well.

        (WebCore::Color::toSRGBAComponentsLossy const):
        Re-implement using colorSpaceAndComponents() to simplify implementation.

        (WebCore::Color::getRGBA const): Deleted.
        
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::FloatComponents::FloatComponents): Deleted.
        (WebCore::sRGBColorToLinearComponents): Deleted.
        * platform/graphics/ColorUtilities.h:
        (WebCore::FloatComponents::get const):
        Remove uses of the Color class to simplify inlining (Color.h already needs to know about
        FloatComponents). 
            - FloatComponents constructor replaced by Color::toSRGBAComponentsLossy(). 
            - sRGBColorToLinearComponents replaced by calling rgbToLinearComponents(color.toSRGBAComponentsLossy()).
        
        Also adds std::tuple adaptors for FloatComponents to allow using with stuctured bindings. 

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::HistoricMemoryCategoryInfo::HistoricMemoryCategoryInfo):
        Replace getRGBA with cachedCGColor.
        
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::setBackgroundColor):
        Replace getRGBA with cachedCGColor.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::setBorderColor):
        Replace getRGBA with cachedCGColor.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::setSourceRGBAFromColor):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::addColorStopRGBA):
        (WebCore::setCornerColorRGBA):
        (WebCore::interpolateColorStop):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::leakCGColor):
        (WebCore::cachedCGColor):
        Simplify implementation (and remove use of getRGBA) by using colorSpaceAndComponents().

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient):
        Replace getRGBA with colorSpaceAndComponent(). 
        
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        Replace FloatComponents constructor taking a Color (which used getRGBA) with toSRGBAComponentsLossy.
    
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawBorder):
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawSolidColor):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        Replace getRGBA with toSRGBAComponentsLossy.

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawDotsForDocumentMarker):
        (WebCore::setCGStrokeColor): Deleted.
        (WebCore::spellingPatternColor): Deleted.
        (WebCore::grammarPatternColor): Deleted.
        Replace use of getRGBA with direct use of SimpleColor instead.
        
        * rendering/TextPaintStyle.cpp:
        (WebCore::textColorIsLegibleAgainstBackgroundColor):
        Replace implicit FloatComponents construction taking a Color (which used getRGBA) with explicit toSRGBAComponentsLossy.

2020-05-19  Eric Carlson  <eric.carlson@apple.com>

        Update some media logging
        https://bugs.webkit.org/show_bug.cgi?id=212109

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoAncestor):
        (WebCore::HTMLMediaElement::didFinishInsertingNode):
        (WebCore::HTMLMediaElement::removedFromAncestor):
        (WebCore::HTMLMediaElement::checkPlaybackTargetCompatablity):
        (WebCore::HTMLMediaElement::canPlayType const):
        (WebCore::HTMLMediaElement::waitForSourceChange):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::mediaLoadingFailed):
        (WebCore::HTMLMediaElement::fastSeek):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::seekInternal):
        (WebCore::HTMLMediaElement::seekTask):
        (WebCore::HTMLMediaElement::finishSeek):
        (WebCore::HTMLMediaElement::currentMediaTime const):
        (WebCore::HTMLMediaElement::setPreload):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setLoop):
        (WebCore::HTMLMediaElement::setControls):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::hardwareMutedStateDidChange):
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerMuteChanged):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):
        (WebCore::HTMLMediaElement::mediaPlayerResourceNotSupported):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated):
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::removeEventListener):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget):
        (WebCore::HTMLMediaElement::remoteHasAvailabilityCallbacksChanged):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::didBecomeFullscreenElement):
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):
        (WebCore::HTMLMediaElement::mediaCanStart):
        (WebCore::HTMLMediaElement::setShouldDelayLoadEvent):
        (WebCore::HTMLMediaElement::suspendPlayback):
        (WebCore::HTMLMediaElement::resumeAutoplaying):
        (WebCore::HTMLMediaElement::mayResumePlayback):
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand):
        (WebCore::HTMLMediaElement::setBufferingPolicy):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::setState):
        (WebCore::PlatformMediaSession::beginInterruption):
        (WebCore::PlatformMediaSession::endInterruption):
        (WebCore::PlatformMediaSession::clientWillBeginAutoplaying):
        (WebCore::PlatformMediaSession::clientWillBeginPlayback):
        (WebCore::PlatformMediaSession::processClientWillPausePlayback):
        (WebCore::PlatformMediaSession::clientWillPausePlayback):
        (WebCore::PlatformMediaSession::clientWillBeDOMSuspended):
        (WebCore::PlatformMediaSession::pauseSession):
        (WebCore::PlatformMediaSession::stopSession):
        (WebCore::PlatformMediaSession::didReceiveRemoteControlCommand):

2020-05-19  Daniel Bates  <dabates@apple.com>

        Blue dotted underline with alternatives only shown for last word, gets lost for previous insertions
        https://bugs.webkit.org/show_bug.cgi?id=212097
        <rdar://problem/61913405>

        Reviewed by Darin Adler.

        Fix up two cases, <space> is a literal ' ' and | is the position of the caret:
            1. Space inserted after marker, here's what it looks like BEFORE insertion (i.e. endOfFirstWord == startOfSelection):
                hello|

            This case is detected when the end of the next word (relative to caret) would be at the start of the
            word that begins before or on the caret.

            2. Space inserted before marker, here's what it looks like BEFORE insertion (i.e. startOfLastWord == endOfSelection):
                |hello

            This case is detected when the end of the previous word (relative to caret) would be at the end of the
            word that ends after or on the caret.

        Note ^^^ example uses a caret, but code is slightly more general and works when the current selection
        is a range. Though I didn't explicitly test that because my bug is specific to having a caret selection.

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Do not remove markers if selection starts at the
        beginning of a new word. This is detected by looking at the character before the selection start to see
        if it is a space or newline. This will be false when there is no preceding character (e.g. start of document),
        but that's OK because it doesn't matter what we pass to updateMarkersForWordsAffectedByEditing() - there's
        no markers to remove anyway, let alone text for markers to exist in. I don't use isStartOfWord() here
        because that would incorrectly return false if the current selection is at the end of a paragraph. I could have
        fixed that up by checking isEndOfParagraph() as well, but isStartOfWord() + isEndOfParagraph() is less
        efficient than just looking at the previous character directly. So, I did that instead.
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing): Save off the original end of the first word and
        start of the last word positions before mutating them. Update early return checks to use these saved values
        instead of comparing against the start and end of the current selection, which weren't correct. Saved positioned
        are aligned by word, but start and end of current selection may NOT be. So, comparison was asymmetric: lhs was
        word aligned position, but rhs may not be.

        * editing/Editor.h: While I am here, fix up a param name to match what it is called in the .cpp.

        * testing/Internals.cpp:
        (WebCore::Internals::hasDictationAlternativesMarker): Added
        * testing/Internals.h:
        * testing/Internals.idl:
        Add new functionality for testing purposes.


2020-05-19  Oriol Brufau  <obrufau@igalia.com>

        Fix marginLogicalSizeForChild to check auto margins in the right axis
        https://bugs.webkit.org/show_bug.cgi?id=212055

        Reviewed by Manuel Rego Casasnovas.

        GridLayoutFunctions::marginLogicalSizeForChild checks for 'auto' margins
        before retrieving the margin size, since these should be treated as 0.
        However, for orthogonal grid items, it used to check the wrong axis.
        So if an item had 'margin-top: auto' and 'margin-left: 5px', when asking
        for the horizontal margin we could get 0px instead of 5px due to the
        auto margin in the vertical axis.

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-minimum-height-orthogonal-001.html

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::marginLogicalSizeForChild):

2020-05-19  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r261856.

        This caused internal assertion failures.

        Reverted changeset:

        "Allow calling VideoSampleObserver::videoSampleAvailable from
        a background thread"
        https://bugs.webkit.org/show_bug.cgi?id=212024
        https://trac.webkit.org/changeset/261856

2020-05-19  David Kilzer  <ddkilzer@apple.com>

        IDBRequestData and IDBClient::TransactionOperation should initialize IndexedDB::IndexRecordType field
        <https://webkit.org/b/212096>
        <rdar://problem/63406376>

        Reviewed by Geoffrey Garen.

        IDBRequestData tested by IPC::Decoder::decode() and
        IPC::Encoder::operator<<() running on WebKit2 API and layout
        tests.

        * Modules/indexeddb/IndexedDB.h:
        (WTF::EnumTraits<WebCore::IndexedDB::IndexRecordType>): Add.
        * Modules/indexeddb/client/TransactionOperation.h:
        (WebCore::IDBClient::TransactionOperation::m_indexRecordType):
        - Add default initializer.
        * Modules/indexeddb/shared/IDBRequestData.h:
        (WebCore::IDBRequestData::m_indexRecordType):
        - Add default initializer.
        (WebCore::IDBRequestData::encode const):
        (WebCore::IDBRequestData::decode):
        - Switch from encodeEnum() and decodeEnum() to modern
          equivalents that check for valid enum values.

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

        Push a PlatformDisplayID to scrolling trees, and allow the scrolling thread to get displayDidRefresh notifications
        https://bugs.webkit.org/show_bug.cgi?id=211034

        Reviewed by Sam Weinig.

        As work towards scrolling thread synchronization with main thread (webkit.org/b210884), allow
        ScrollingTree to get a displayDidRefresh() call on the scrolling thread. Each
        tree is associated with a Page which is associated with a display, so the ScrollingTree
        needs to have a PlatformDisplayID to know which notifications to respond to.

        Eventually, displayDidRefresh() will be used to trigger layer updates on the scrolling
        thread if the main thread is periodically unresponsive.

        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator):
        (WebCore::Page::windowScreenDidChange):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::windowScreenDidChange):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::windowScreenDidChange):
        (WebCore::ScrollingTree::displayID):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::displayDidRefresh):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::displayDidRefresh):
        * page/scrolling/ThreadedScrollingTree.h:

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

        [iOS] Programmaic scroll of "scrolling=no" iframe fails
        https://bugs.webkit.org/show_bug.cgi?id=212063
        <rdar://problem/57049514>

        Reviewed by Antti Koivisto.

        ScrollView::setScrollPosition() calls requestScrollPositionUpdate(), and if this returns
        false it relies on the confusingly-named updateScrollbars() to actually do the scroll.
        This code path is hit for "scrolling=no" frames, which are not scroll-coordinated.

        ScrollView::updateScrollbars() fails to set the scroll position on iOS, where managesScrollbars()
        returns false, so fix that.

        Test: fast/scrolling/progammatic-scroll-scrolling-no-frame.html

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2020-05-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add testing and logging for ApplePaySetup
        https://bugs.webkit.org/show_bug.cgi?id=211972
        <rdar://problem/63291965>

        Reviewed by Alex Christensen.

        Test: http/tests/ssl/applepay/ApplePaySetup.https.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        (WebCore::ApplePaySetup::ApplePaySetup):
        (WebCore::ApplePaySetup::stop):
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/applepay/ApplePaySetupConfiguration.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupConfiguration.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeature.idl:
        * Modules/applepay/ApplePaySetupFeature.mm:
        (WebCore::ApplePaySetupFeature::state const):
        * Modules/applepay/ApplePaySetupFeatureState.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureState.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureType.idl:
        * Modules/applepay/ApplePaySetupFeatureWebCore.h:
        * Modules/applepay/ApplePaySetupWebCore.h:
        (WebCore::ApplePaySetup::create):
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::setApplePayIsActiveIfAllowed const):
        (WebCore::PaymentCoordinator::getSetupFeatures):
        (WebCore::PaymentCoordinator::beginApplePaySetup):
        (WebCore::PaymentCoordinator::endApplePaySetup):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::getSetupFeatures):
        (WebCore::PaymentCoordinatorClient::beginApplePaySetup):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockApplePaySetupFeature.cpp: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureWebCore.h.
        (WebCore::MockApplePaySetupFeature::create):
        (WebCore::MockApplePaySetupFeature::MockApplePaySetupFeature):
        * testing/MockApplePaySetupFeature.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureWebCore.h.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::addSetupFeature):
        (WebCore::MockPaymentCoordinator::getSetupFeatures):
        (WebCore::MockPaymentCoordinator::beginApplePaySetup):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2020-05-19  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement requestSession()
        https://bugs.webkit.org/show_bug.cgi?id=211888

        Reviewed by Youenn Fablet.

        This patch adds a preliminar implementation of the requestSession()
        API used to get a WebXRSession from the UA. It includes a fairly good
        amount of checks to verify that the request can be satisfied given the
        device's enabled features per session modes. The specs also describe how
        to request persmission for some actions using the Permissions API which
        WebKit does not currently implement. That should be done in a follow up
        patch perhaps using a similar approach to other APIs as Geolocation for
        example.

        In order to get some of the requestSession() tests passing the session
        finalization (shutdown) had to be implemented too.

        Several tests where unskipped for WPE port as they're now passing.

        * Modules/webxr/WebXRRenderState.cpp:
        (WebCore::WebXRRenderState::create): Pass XRSessionMode as argument
        instead of a WebXRSession.
        * Modules/webxr/WebXRRenderState.h: Ditto.
        * Modules/webxr/WebXRSession.cpp:
        (WebCore::WebXRSession::create): Added.
        (WebCore::WebXRSession::WebXRSession): Added.
        (WebCore::WebXRSession::renderState const):
        (WebCore::WebXRSession::inputSources const):
        (WebCore::WebXRSession::shutdown): Shutdown process called on session end.
        (WebCore::WebXRSession::end): Implemented session ending.
        * Modules/webxr/WebXRSession.h: Added create() and private constructor. Fixed some naming.
        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::DummyInlineDevice::DummyInlineDevice): Contructor for the
        dummy inline device.
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected): Use a counter instead of a boolean
        to track testing devices as there might be more than 1.
        (WebCore::WebXRSystem::obtainCurrentDevice): Implemented from specs text.
        (WebCore::WebXRSystem::immersiveSessionRequestIsAllowedForGlobalObject const): Ditto.
        (WebCore::WebXRSystem::inlineSessionRequestIsAllowedForGlobalObject const): Ditto.
        (WebCore::WebXRSystem::resolveRequestedFeatures const): Ditto.
        (WebCore::WebXRSystem::isXRPermissionGranted const): Ditto.
        (WebCore::WebXRSystem::requestSession): Ditto.
        (WebCore::WebXRSystem::registerSimulatedXRDeviceForTesting): Use a counter instead of a bool.
        Also use a reference in the method argument.
        (WebCore::WebXRSystem::unregisterSimulatedXRDeviceForTesting): Ditto.
        (WebCore::WebXRSystem::sessionEnded): Added, used by sessions to notify the XRSystem.
        * Modules/webxr/WebXRSystem.h:
        * Modules/webxr/WebXRSystem.idl: Call requestSession with Document.
        * dom/TaskSource.h: Added a WebXR task source.
        * platform/xr/PlatformXR.h: Specs state that devices have a list of enabled features per session
        mode so store them in a hashmap instead of in a Vector.
        (PlatformXR::Device::supports const): Use the new Hashmap of session modes.
        (PlatformXR::Device::setEnabledFeatures): Ditto.
        (PlatformXR::Device::enabledFeatures const): Ditto.
        (PlatformXR::Device::setSupportedModes): Deleted.
        * platform/xr/openxr/PlatformXR.cpp:
        (PlatformXR::Instance::Impl::collectSupportedSessionModes): Return session modes if any.
        (PlatformXR::Instance::enumerateImmersiveXRDevices): Fill in features per session mode.
        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::simulateDeviceConnection): Fill in features per session mode.
        (WebCore::WebXRTest::disconnectAllDevices): Pass a reference to unregister.

2020-05-19  Antti Koivisto  <antti@apple.com>

        Animation of font-size with rem values is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=194765
        <rdar://problem/48171742>

        Reviewed by Antoine Quint.

        Test: animations/keyframe-rem-unit.html

        'rem' computation fails on first style resolution because the document element style is not available.

        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::styleForKeyframe):

        Provide the override value, needed because the style can't be found from DOM tree yet.

2020-05-19  Andy Estes  <aestes@apple.com>

        [Apple Pay] Add testing and logging for ApplePaySetup
        https://bugs.webkit.org/show_bug.cgi?id=211972
        <rdar://problem/63291965>

        Reviewed by Alex Christensen.

        Added support for ApplePaySetup to MockPaymentCoordinator and wrote a test.

        Added release logging for ApplePaySetup and removed a noisy log message
        from setApplePayIsActiveIfAllowed.

        Test: http/tests/ssl/applepay/ApplePaySetup.https.html

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Modules/applepay/ApplePaySetup.cpp:
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        (WebCore::ApplePaySetup::ApplePaySetup):
        (WebCore::ApplePaySetup::stop):
        * Modules/applepay/ApplePaySetup.idl:
        * Modules/applepay/ApplePaySetupConfiguration.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupConfiguration.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeature.idl:
        * Modules/applepay/ApplePaySetupFeature.mm:
        (WebCore::ApplePaySetupFeature::state const):
        * Modules/applepay/ApplePaySetupFeatureState.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureState.idl: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureType.idl.
        * Modules/applepay/ApplePaySetupFeatureType.idl:
        * Modules/applepay/ApplePaySetupFeatureWebCore.h:
        * Modules/applepay/ApplePaySetupWebCore.h:
        (WebCore::ApplePaySetup::create):
        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::setApplePayIsActiveIfAllowed const):
        (WebCore::PaymentCoordinator::getSetupFeatures):
        (WebCore::PaymentCoordinator::beginApplePaySetup):
        (WebCore::PaymentCoordinator::endApplePaySetup):
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::getSetupFeatures):
        (WebCore::PaymentCoordinatorClient::beginApplePaySetup):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/MockApplePaySetupFeature.cpp: Copied from Source/WebCore/Modules/applepay/ApplePaySetup.idl.
        (WebCore::MockApplePaySetupFeature::create):
        (WebCore::MockApplePaySetupFeature::MockApplePaySetupFeature):
        * testing/MockApplePaySetupFeature.h: Copied from Source/WebCore/Modules/applepay/ApplePaySetupFeatureWebCore.h.
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::addSetupFeature):
        (WebCore::MockPaymentCoordinator::getSetupFeatures):
        (WebCore::MockPaymentCoordinator::beginApplePaySetup):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2020-05-19  Youenn Fablet  <youenn@apple.com>

        Allow calling VideoSampleObserver::videoSampleAvailable from a background thread
        https://bugs.webkit.org/show_bug.cgi?id=212024

        Reviewed by Eric Carlson.

        Allow RealtimeMediaSource::videoSampleAvailable to be called on a background thread, typically the capture thread.
        Make WebRTC remote sources and mock capture sources do that.

        RealtimeMediaSource is then updating its intrinsic size from the generation thread while updating its size in the main thread.
        The size() getter can be called from both threads.

        Existing consumers do the following:
        - media player will hop to the main thread.
        - media recorder will do processing from the background thread.
        - WebRTC sender will do processing from the background thread, except when sending black frames where this will still be done on the main thread.
        This is ok as we ensure either we send black frames on the main thread (and we do not observe the source) or we observe the source to send.

        Follow-ups will migrate the real capture sources as well as migrating media player processing out of the main thread.
        Covered by existing tests.

        * platform/MediaSample.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::setIntrinsicSize):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
        (WebCore::MockRealtimeVideoSourceMac::updateSampleBuffer):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample): Deleted.

2020-05-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r257463): [GTK] Build failure with -DENABLE_GLES2=ON
        https://bugs.webkit.org/show_bug.cgi?id=212043

        Reviewed by Philippe Normand.

        Fix the typo "Platfom" -> "Platform"

        * platform/graphics/gstreamer/PlatformDisplayGStreamer.cpp:
        (createGstGLDisplay):

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Move some of the more chatty Scrolling logging to a ScrollingTree channel
        https://bugs.webkit.org/show_bug.cgi?id=212061

        Reviewed by Tim Horton.

        Move logging about the scrolling tree to a new channel.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragmentInternal):
        (WebCore::FrameView::scrollToAnchor):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::createNode):
        (WebCore::AsyncScrollingCoordinator::insertNode):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createUnparentedNode):
        (WebCore::ScrollingStateTree::insertNode):
        (WebCore::ScrollingStateTree::unparentNode):
        (WebCore::ScrollingStateTree::unparentChildrenAndDestroyNode):
        (WebCore::ScrollingStateTree::detachAndDestroySubtree):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::scrollTo):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/cocoa/ScrollingTreeOverflowScrollProxyNode.mm:
        (WebCore::ScrollingTreeOverflowScrollProxyNode::applyLayerPositions):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        * platform/Logging.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachScrollingNode):

2020-05-18  David Kilzer  <ddkilzer@apple.com>

        Replace TextIndicatorOptions with OptionSet<TextIndicatorOption>
        <https://webkit.org/b/212051>
        <rdar://problem/63368556>

        Reviewed by Simon Fraser.

        Use OptionSet<TextIndicatorOption> everywhere
        TextIndicatorOptions was previously used, plus:
        - Make TextIndicatorOption an enum class.  Remove
          "TextIndicatorOption" prefix so TextIndicatorOptionBar becomes
          TextIndicatorOption::Bar.
        - Remove TextIndicatorOptionDefault because OptionSet<>
          initializes to zero.
        - Replace static variables (including two globals in WebCore)
          with constexpr variables.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        (WebCore::TextIndicator::createWithSelectionInFrame):
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        (WebCore::takeSnapshots):
        (WebCore::hasAnyIllegibleColors):
        (WebCore::initializeIndicator):
        * page/TextIndicator.h:
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForLink):
        (WebCore::createDragImageForSelection):
        (WebCore::createDragImageForRange):
        * testing/Internals.h:

2020-05-18  Andy Estes  <aestes@apple.com>

        http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html fails in public SDK builds
        https://bugs.webkit.org/show_bug.cgi?id=212000
        <rdar://problem/63323082>

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/WebCoreBuiltinNames.h:

2020-05-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [WebGPU] Validation for GPUDevice.createTexture()
        https://bugs.webkit.org/show_bug.cgi?id=211882
        <rdar://problem/63215999>

        Reviewed by Dean Jackson.

        Add lots of validation for texture creation. The logic was gathered by
        trial and error.

        Before this patch, we didn't have any validation. This is a first pass, as
        the validation logic isn't spelled out in the spec. Next, I will make a pull
        request to the spec to match this patch.

        This patch also updates three pieces of our IDL files to match the spec for
        WebGPU: One to remove GPUTextureUsage.NONE which was replaced with just 0,
        one to remove GPUTextureDescriptor.arrayLayerCount, which was deleted in
        favor of using regular dimension fields, and one to add [EnforceRange] to
        various values.

        This patch also updates GPUDevice to have a GPUErrorScopes object, which is
        required for good error messages.

        Test: webgpu/texture-creation.html

        * Modules/webgpu/GPUExtent3D.idl:
        * Modules/webgpu/GPUTextureDescriptor.idl:
        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::tryCreate):
        (WebCore::WebGPUDevice::createTexture const):
        * Modules/webgpu/WebGPUDevice.h:
        * platform/graphics/gpu/GPUDevice.cpp:
        (WebCore::maximumMipLevelCount):
        (WebCore::GPUDevice::tryCreateTexture const):
        * platform/graphics/gpu/GPUDevice.h:
        (WebCore::GPUDevice::setErrorScopes):
        * platform/graphics/gpu/GPUExtent3D.h:
        * platform/graphics/gpu/GPUObjectBase.h:
        (WebCore::GPUObjectBase::errorScopes const):
        (WebCore::GPUObjectBase::errorScopes): Deleted.
        * platform/graphics/gpu/GPUTexture.h:
        * platform/graphics/gpu/GPUTextureDescriptor.h:
        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::mtlTextureTypeForGPUTextureDescriptor):
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags):
        (WebCore::tryCreateMtlTextureDescriptor):
        (WebCore::GPUTexture::tryCreate):

2020-05-18  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Clear the override width for computing percent margins
        https://bugs.webkit.org/show_bug.cgi?id=209461

        Reviewed by Manuel Rego Casasnovas.

        When calculating the min-content contribution of a grid item of an auto
        sized grid track we must consider the grid item's margin. When the grid
        item's area is indefinite, a percent margin is resolved to zero.
        However, when performing a relayout, the percent margin may be solved
        against the previously computed grid area, since the grid item has
        already an OverrideContainingBlockLogicalWidth value.

        In order to re-compute the percent margin properly, we need to clear
        the previously override value. It's important to be careful of not
        clearing the override value set during intrinsic size, since we need
        it for the actual layout phase. Hence, we only reset the 'override'
        value when we are executing a definite strategy.

        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-item-dynamic-min-contribution-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-003.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-004.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-005.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-006.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-007.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-008.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-009.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-010.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-011.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-012.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-013.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-margins-014.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-003.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-004.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-005.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-006.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-007.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-008.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-009.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-010.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-011.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-012.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-013.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-items-percentage-paddings-014.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::hasRelativeMarginOrPaddingForChild):
        (WebCore::hasRelativeOrIntrinsicSizeForChild):
        (WebCore::shouldClearOverrideContainingBlockContentSizeForChild):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithmStrategy::minLogicalSizeForChild const):
        (WebCore::DefiniteSizeStrategy::minLogicalSizeForChild const):
        (WebCore::DefiniteSizeStrategy::minContentForChild const):
        * rendering/GridTrackSizingAlgorithm.h:

2020-05-18  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Use default initializers in TextIndicatorData
        <https://webkit.org/b/212039>
        <rdar://problem/63355619>

        * page/TextIndicator.h:
        (WebCore::TextIndicatorData::contentImageScaleFactor):
        - Simon Fraser says 1 is a better default than 0.

2020-05-18  Peng Liu  <peng.liu6@apple.com>

        Add a quirk to allow an embedded Twitter video to play with one tapping
        https://bugs.webkit.org/show_bug.cgi?id=211932

        Reviewed by Maciej Stachowiak.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const):
        Need to check the topDocument for the existence of user interactions.
        (WebCore::MediaElementSession::updateMediaUsageIfChanged): Ditto.

        * page/Quirks.cpp:
        (WebCore::Quirks::needsPerDocumentAutoplayBehavior const):
        Add the missing needsQuirks() checking.
        (WebCore::Quirks::shouldAutoplayForArbitraryUserGesture const):
        Add a the quirk for twitter.com.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback):
        Clarify the log message.

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Content disappears on CSS parallax example
        https://bugs.webkit.org/show_bug.cgi?id=212045
        <rdar://problem/63194217>

        Reviewed by Tim Horton.
        
        In r261632 I fixed parallax scrolling by migrating the perspective transform onto
        the scroll container layer, and making the scrolled contents layer a "preserve3D" layer.
        
        However, scrolling is achieved by changing the boundsOrigin of the scrolled contents layer,
        so the computation of the perspective matrix, which is a "child layer transform", has to
        take this boundsOrigin into account, otherwise we compute bad coverage rects, and drop
        backing store erroneously.

        Test: compositing/tiling/perspective-on-scroller-tile-coverage.html

        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::FloatPoint3D):
        (WebCore::FloatPoint3D::move):
        (WebCore::operator +=):
        (WebCore::operator -=):
        (WebCore::operator+):
        (WebCore::operator-):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveVisibleRectChangeRequiresFlush const):
        (WebCore::GraphicsLayerCA::layerTransform const):
        (WebCore::GraphicsLayerCA::adjustCoverageRect const):
        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):

2020-05-18  David Kilzer  <ddkilzer@apple.com>

        Use default initializers in TextIndicatorData
        <https://webkit.org/b/212039>
        <rdar://problem/63355619>

        Reviewed by Alex Christensen.

        Tested by IPC::Decoder::decode() and IPC::Encoder::operator<<()
        running on WebKit2 API and layout tests.

        * page/TextIndicator.h:
        (WebCore::TextIndicatorData):
        - Add default initializers.
        (WTF::EnumTraits<WebCore::TextIndicatorPresentationTransition>):
        - Add EnumTraits so TextIndicatorPresentationTransition may be
          used by IPC::Decoder::decode() and IPC::Encoder::operator<<().

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Fix operator== and hash() for ExtendedColor
        https://bugs.webkit.org/show_bug.cgi?id=211993

        Post-landing followup. ExtendedColor operator== has to do exact comparison to be
        consistent with hash().

        * platform/graphics/ExtendedColor.h:
        (WebCore::operator==):

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Replace uses of +self with +class
        https://bugs.webkit.org/show_bug.cgi?id=212041

        Reviewed by Darin Adler.

        No change in behavior.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayer::isWebLayer):

2020-05-18  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed restabilization of non-unified build. 

        * accessibility/AXObjectCache.cpp:
        * html/HTMLAttachmentElement.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        * layout/tableformatting/TableFormattingState.cpp:
        * rendering/RenderTextFragment.h:
        * rendering/style/KeyframeList.h:

2020-05-18  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Null Ptr Deref @ WebCore::CSSValue::classType
        https://bugs.webkit.org/show_bug.cgi?id=212036

        Reviewed by Geoffrey Garen.

        Calculated value for a primitive value type can be NULL for a CSS property. Added a null check before dereferencing it.

        Test: editing/execCommand/null_calc_primitive_value_for_css_property.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::formatNumberForCustomCSSText const):

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Implement conversion between P3 and sRGB color
        https://bugs.webkit.org/show_bug.cgi?id=211998

        Reviewed by Daniel Bates.
        
        Color::toSRGBAComponentsLossy() was a lie because it didn't actually convert extended
        colors into sRGB. Fix that by converting P3 and linaerRGB colors into sRGB, using the color
        math from CSS Color 4.

        Renamed the various "linear to sRGB" functions because they work for any RGB colors,
        not just sRGB.

        * platform/graphics/Color.cpp:
        (WebCore::Color::toSRGBAComponentsLossy const):
        * platform/graphics/Color.h:
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::linearToRGBColorComponent):
        (WebCore::RGBToLinearColorComponent):
        (WebCore::sRGBColorToLinearComponents):
        (WebCore::RGBToLinearComponents):
        (WebCore::linearToRGBComponents):
        (WebCore::XYZToLinearSRGB):
        (WebCore::linearSRGBToXYZ):
        (WebCore::XYZToLinearP3):
        (WebCore::linearP3ToXYZ):
        (WebCore::P3ToSRGB):
        (WebCore::sRGBToP3):
        (WebCore::ColorMatrix::transformedColorComponents const):
        (WebCore::linearToSRGBColorComponent): Deleted.
        (WebCore::sRGBToLinearColorComponent): Deleted.
        (WebCore::sRGBToLinearComponents): Deleted.
        (WebCore::linearToSRGBComponents): Deleted.
        * platform/graphics/ColorUtilities.h:

2020-05-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Allow clipboard API access when pasting from a menu item or key binding
        https://bugs.webkit.org/show_bug.cgi?id=211990
        <rdar://problem/63308916>

        Reviewed by Megan Gardner.

        Allow the contents of the clipboard to be programmatically requested by the page while pasting from trusted UI
        (i.e. the paste menu item, or when WebKit API is called by the app to trigger the paste). This allows the
        'reading' part of the async clipboard API (`read` and `readText`) to be used when the user pastes in an editable
        element, without having to fall back to showing the DOM paste access menu.

        Note that this change should not have an effect on the pasteboard security model, since it only grants the page
        programmatic access to the contents of the pasteboard in the case where access to the pasteboard has already
        been granted by the user. Additionally, even in the event that the web process is compromised, even if the web
        process can be tricked into believing it has been granted pasteboard access, the changes in r259151 will prevent
        it from being able to request pasteboard data, unless the user (or the application, on behalf of the user) has
        explicitly pasted via trusted API calls that are inaccessible from the web process.

        Test: editing/async-clipboard/clipboard-read-while-pasting.html

        * editing/Editor.cpp:
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsQuotation):

        If `FromMenuOrKeyBinding::Yes` is passed in, set the `m_pastingFromMenuOrKeyBinding` flag to true during the
        scope of the paste command.

        * editing/Editor.h:
        (WebCore::Editor::isPastingFromMenuOrKeyBinding const):
        * editing/EditorCommand.cpp:
        (WebCore::executePaste):
        (WebCore::executePasteAndMatchStyle):
        (WebCore::executePasteAsPlainText):
        (WebCore::executePasteAsQuotation):

        Pass in `FromMenuOrKeyBinding::Yes` when triggering the paste from a menu item or key binding.

        * page/Frame.cpp:
        (WebCore::Frame::requestDOMPasteAccess):

        When pasting from menu or key binding, grant the page DOM paste access without requiring the DOM paste access
        UI to be shown and confirmed.

2020-05-18  Per Arne Vollan  <pvollan@apple.com>

        [Win] Fix AppleWin build
        https://bugs.webkit.org/show_bug.cgi?id=212030

        Reviewed by Brent Fulgham.

        The build fails because the number of bitfields in GreaterThanOrSameSizeAsStyleRareInheritedData does not match the
        actual number of bitfields in StyleRareInheritedData.

        * rendering/style/StyleRareInheritedData.cpp:

2020-05-18  Rob Buis  <rbuis@igalia.com>

        Remove certain headers when a redirect causes a request method change
        https://bugs.webkit.org/show_bug.cgi?id=205119

        Reviewed by Youenn Fablet.

        Implement step 11 of HTTP-redirect fetch [1] to redirect to GET
        method, remove body and strip certain headers for 301, 302 and 303 redirects.

        Tests: imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.html
               imported/w3c/web-platform-tests/fetch/api/redirect/redirect-method.any.worker.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        * platform/network/HTTPHeaderNames.in:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::shouldUseGet):
        (WebCore::ResourceRequestBase::redirectAsGETIfNeeded):
        (WebCore::ResourceRequestBase::redirectedRequest const):
        * platform/network/ResourceRequestBase.h:

2020-05-18  Antti Koivisto  <antti@apple.com>

        [Wheel event region] Invalidation for root style
        https://bugs.webkit.org/show_bug.cgi?id=212029

        Reviewed by Simon Fraser.

        Test: fast/scrolling/mac/wheel-event-listener-region-root-invalidation.html

        Invalidate the region when event listeners change on Document or Window.

        * dom/Document.cpp:
        (WebCore::Document::invalidateEventListenerRegions):
        * dom/Document.h:
        (isType):
        * dom/Element.cpp:
        (WebCore::Element::invalidateEventListenerRegions):
        * dom/Element.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::removeAllEventListeners):
        (WebCore::EventTarget::invalidateEventListenerRegions):
        * dom/EventTarget.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustEventListenerRegionTypesForRootStyle):
        * style/StyleAdjuster.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2020-05-18  Simon Fraser  <simon.fraser@apple.com>

        Find doesn't always scroll search results into view
        https://bugs.webkit.org/show_bug.cgi?id=212007
        <rdar://problem/36333321>

        Reviewed by Wenson Hsieh.

        HighlightData::collectBounds() could produce overly large bounds, causing the selection
        to fail to scroll into view.
        
        This happened when multiple block ancestors were added to 'renderers', with empty
        rects. The process of mapping that empty rect to a quad via localToAbsoluteQuad()
        could produce an empty quad at a fractional offset, then calling enclosingBoundingBox()
        on the quad would create a 1x1 rectangle, which got unioned with selectionRect.

        Fix by skipping entries with empty rects.

        Add a Selection log channel and some logging that makes this trivial to see.

        Test: editing/selection/selection-bounds-fractional-containing-blocks.html

        * platform/Logging.h:
        * rendering/HighlightData.cpp:
        (WebCore::HighlightData::collectBounds const):

2020-05-18  Darin Adler  <darin@apple.com>

        Add iterator checking to ListHashSet
        https://bugs.webkit.org/show_bug.cgi?id=211669

        Reviewed by Anders Carlsson.

        * page/ios/ContentChangeObserver.h: Added an include of Element.h, needed to call
        makeWeakPtr in an inline function. This is due to a change in the way makeWeakPtr
        now checks the type of the argument. It's possible we could refine it further to
        relax this requirement, but it seems OK to include Element.h here.

2020-05-18  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for computing the collapsed table border
        https://bugs.webkit.org/show_bug.cgi?id=212003

        Reviewed by Antti Koivisto.

        UAs must compute an initial left and right border width for the table by examining
        the first and last cells in the first row of the table.
        The left border width of the table is half of the first cell's collapsed left border,
        and the right border width of the table is half of the last cell's collapsed right border.
        The top border width of the table is computed by examining all cells who collapse their top
        borders with the top border of the table. The top border width of the table is equal to half of the
        maximum collapsed top border. The bottom border width is computed by examining all cells whose bottom borders collapse
        with the bottom of the table. The bottom border width is equal to half of the maximum collapsed bottom border.

        https://www.w3.org/TR/CSS22/tables.html#collapsing-borders

        This patch implements the table box part of the border collapsing. Inner table elements need to implement collapsing as well.

        * layout/LayoutState.cpp:
        (WebCore::Layout::LayoutState::ensureTableFormattingState):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeBorderAndPaddingForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingState.cpp:
        (WebCore::Layout::TableFormattingState::TableFormattingState):
        * layout/tableformatting/TableFormattingState.h:

2020-05-18  Antoine Quint  <graouts@apple.com>

        Clean up media controls content for Apple platforms
        https://bugs.webkit.org/show_bug.cgi?id=212011
        <rdar://problem/63298588>

        Reviewed by Dean Jackson.

        We strip Copyright and other comments from the CSS and JS media controls files.

        * WebCore.xcodeproj/project.pbxproj:

2020-05-18  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MediaSource] Remove orphaned tracks in updateTracks()
        https://bugs.webkit.org/show_bug.cgi?id=211980

        Reviewed by Xabier Rodriguez-Calvar.

        This patch ensures tracks missing from a subsequent updateTracks()
        calls are removed from the player.

        This fixes regressions on the following tests caused on r261683.

        imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-removetrack.https.html
        imported/w3c/web-platform-tests/mediacapture-streams/MediaStreamTrack-applyConstraints.https.html

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

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] "ASSERTION FAILED: !m_adoptionIsRequired" when double clicking on a word
        https://bugs.webkit.org/show_bug.cgi?id=211957

        Reviewed by Adrian Perez de Castro.

        Make SelectionData non-refcounted. We can just move in most of the cases to avoid copies.

        * platform/Pasteboard.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::selectionData const):
        * platform/gtk/SelectionData.h:

2020-05-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add WebKitContextMenuItemType for paste as plaintext
        https://bugs.webkit.org/show_bug.cgi?id=177638

        Reviewed by Michael Catanzaro.

        Add paste as plain text context menu item for rich editable content.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * platform/ContextMenuItem.h:
        * platform/LocalizedStrings.h:
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagPasteAsPlainText):

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

        Fix operator== and hash() for ExtendedColor
        https://bugs.webkit.org/show_bug.cgi?id=211993

        Reviewed by Sam Weinig.

        Color::operator== and hash() were wrong for extended color. Fix operator==
        to compare extended colors. Extended and non-extended colors have to always
        conpare as non-equal to preserve computed style behavior, currently.

        Fix hash() to hash the color components and colorspace for ExtendedColor.

        Add some API tests for these code paths.

        * platform/graphics/Color.cpp:
        (WebCore::extendedColorsEqual):
        * platform/graphics/Color.h:
        (WebCore::operator==):
        (WebCore::Color::hash const):
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::areEssentiallyEqual):
        * platform/graphics/ColorUtilities.h:
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::hash const):
        * platform/graphics/ExtendedColor.h:
        (WebCore::operator==):
        (WebCore::operator!=):

2020-05-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Introduce TableWrapperBlockFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=211996

        Reviewed by Antti Koivisto.

        Table wrapper box establishes a special BFC with only captions and the actual table box in it.
        It mostly behaves like a normal BFC but the table box requires some special handing when it comes
        to padding/border and width/height computation.
        This patch moves the table box specific code from generic BFC to this new subclass. 

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::createFormattingContext):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.h:
        (): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp: Added.
        (WebCore::Layout::TableWrapperBlockFormattingContext::TableWrapperBlockFormattingContext):
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableWrapperBlockFormattingContext::layoutTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
        (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox):
        * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h: Added.

2020-05-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Move to new Pasteboard API
        https://bugs.webkit.org/show_bug.cgi?id=177633

        Reviewed by Adrian Perez de Castro.

        Add support for custom data and remove the support for unknown data types that is currently unused.

        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::writeSelectionToPasteboard): Set the contentOrigin.
        * editing/gtk/WebContentReaderGtk.cpp:
        (WebCore::shouldReplaceSubresourceURL): Helper to decide whether to replace the subresource URL.
        (WebCore::WebContentMarkupReader::readHTML): Create a fragment for HTML sanitizing it if needed.
        * platform/Pasteboard.h:
        * platform/PasteboardCustomData.h:
        (WebCore::PasteboardCustomData::gtkType): Mime type name for GTK custom pasteboard data.
        * platform/SharedBuffer.h:
        * platform/glib/SharedBufferGlib.cpp:
        (WebCore::SharedBuffer::createGBytes const): Create a GBytes wrapping the SharedBuffer data.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::typesSafeForBindings):
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings):
        (WebCore::Pasteboard::readOrigin):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::readStringInCustomData):
        (WebCore::Pasteboard::fileContentState):
        (WebCore::Pasteboard::writeCustomData):
        * platform/gtk/SelectionData.cpp:
        (WebCore::SelectionData::clearAllExceptFilenames):
        * platform/gtk/SelectionData.h:
        (WebCore::SelectionData::setCustomData):
        (WebCore::SelectionData::customData const):
        (WebCore::SelectionData::hasCustomData const):
        (WebCore::SelectionData::clearCustomData):

2020-05-16  Simon Fraser  <simon.fraser@apple.com>

        Some color-related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=211991

        Reviewed by Sam Weinig.

        Change FloatComponents and ColorComponents to use std::array<>.

        Add Color::toSRGBAComponentsLossy() to make explicit potentially lossy conversions
        between P3 and sRGB colors, and call it in places where we do that conversion.

        Add const in a few places.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Color.cpp:
        (WebCore::Color::Color):
        (WebCore::Color::toSRGBAComponentsLossy const):
        (WebCore::Color::asExtended const):
        * platform/graphics/Color.h:
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::ColorMatrix::ColorMatrix):
        * platform/graphics/ColorUtilities.h:
        (WebCore::FloatComponents::FloatComponents):
        (): Deleted.
        * platform/graphics/ExtendedColor.cpp:
        (WebCore::ExtendedColor::create):
        (WebCore::ExtendedColor::cssText const):
        * platform/graphics/ExtendedColor.h:
        (WebCore::ExtendedColor::red const):
        (WebCore::ExtendedColor::green const):
        (WebCore::ExtendedColor::blue const):
        (WebCore::ExtendedColor::alpha const):
        (WebCore::ExtendedColor::channels const):
        (WebCore::ExtendedColor::ExtendedColor):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::leakCGColor):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):
        * platform/graphics/win/ColorDirect2D.cpp:
        (WebCore::Color::operator D2D1_COLOR_F const):
        (WebCore::Color::operator D2D1_VECTOR_4F const):

2020-05-16  Andy Estes  <aestes@apple.com>

        Fix the build after r261785.

        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        (WebCore::fromDecimalNumber):

2020-05-16  David Kilzer  <ddkilzer@apple.com>

        Let Xcode have its way with WebCore project

        * WebCore.xcodeproj/project.pbxproj:
        - Resort TableLayout.cpp.

2020-05-16  Zalan Bujtas  <zalan@apple.com>

        Add missing is<RenderTableSection> check.

        Unreviewed.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):

2020-05-16  Andy Estes  <aestes@apple.com>

        REGRESSION (r260717): installmentConfiguration member is no longer available on ApplePayPaymentRequest
        https://bugs.webkit.org/show_bug.cgi?id=211911
        <rdar://problem/63236367>

        Reviewed by Tim Horton.

        Prior to r260717, installmentConfiguration was a member of ApplePayRequestBase, making it
        available on ApplePayRequest and ApplePayPaymentRequest. In r260717, it was mistakenly
        moved to ApplePayRequest.

        This change moves it back to ApplePayRequestBase, adds infrastructure for regression testing
        ApplePayInstallmentConfiguration, and adds a regression test.

        Test: http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html

        * Modules/applepay/ApplePayInstallmentConfiguration.idl:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        (WebCore::finishConverting): Deleted.
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/PaymentInstallmentConfiguration.mm:
        (WebCore::fromDecimalNumber):
        (WebCore::applePaySetupFeatureType):
        (WebCore::PaymentInstallmentConfiguration::applePayInstallmentConfiguration const):
        * Modules/applepay/PaymentInstallmentConfigurationWebCore.h:
        * Modules/applepay/paymentrequest/ApplePayRequest.idl:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        * testing/MockPaymentCoordinator.h:
        * testing/MockPaymentCoordinator.idl:

2020-05-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Ignore table padding when borders are collapsed
        https://bugs.webkit.org/show_bug.cgi?id=211984

        Reviewed by Antti Koivisto.

        Table padding has no room left when the table border is collapsed with the inner table elements.

        Test: fast/layoutformattingcontext/table-simple-border-collapse-with-padding.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isPaddingApplicable const):

2020-05-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take vertical spacing into account when setting the height of a cell with rowspan
        https://bugs.webkit.org/show_bug.cgi?id=211976

        Reviewed by Antti Koivisto.

        When a cell spans over multiple rows, the height of the cell includes the vertical spacing between those spanned rows as well.

        Test: fast/layoutformattingcontext/table-simple-rowspan-with-spacing.html

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

2020-05-15  Antti Koivisto  <antti@apple.com>

        Nullptr crash in MediaQueryMatcher::evaluateAll
        https://bugs.webkit.org/show_bug.cgi?id=211963
        <rdar://problem/62850977>

        Reviewed by Brent Fulgham.

        Test: fast/media/media-query-list-mutation.html

        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::evaluateAll):

        Copy the vector before iterating.

2020-05-15  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in WebCore::Node::treeScope() when processing nested list insertion commands.
        https://bugs.webkit.org/show_bug.cgi?id=211964
        <rdar://problem/63224871>

        Reviewed by Geoffrey Garen.

        Load event may fire in fixOrphanedListChild() and change the node tree. In doApplyForSingleParagraph check for 
        disconnected node returned by fixOrphanedListChild() and bail out.

        Test: editing/inserting/nested-list-insertion-crash.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph):

2020-05-15  Alex Christensen  <achristensen@webkit.org>

        Use enum serialization instead of casting to/from uint32_t
        https://bugs.webkit.org/show_bug.cgi?id=211885
        <rdar://problem/60106629> and <rdar://problem/60107663>

        Reviewed by Geoffrey Garen.

        This doesn't change anything except make stricter checks at IPC boundaries.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine const):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityModifySelection:increase:]):
        * editing/EditingBehavior.h:
        * editing/Editor.cpp:
        (WebCore::Editor::shouldSmartDelete):
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::misspelledWordAtCaretOrRange const):
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::handleAcceptedCandidate):
        * editing/EditorCommand.cpp:
        (WebCore::executeDeleteBackward):
        (WebCore::executeDeleteBackwardByDecomposingPreviousCharacter):
        (WebCore::executeDeleteForward):
        (WebCore::executeDeleteToBeginningOfLine):
        (WebCore::executeDeleteToBeginningOfParagraph):
        (WebCore::executeDeleteToEndOfLine):
        (WebCore::executeDeleteToEndOfParagraph):
        (WebCore::executeDeleteWordBackward):
        (WebCore::executeDeleteWordForward):
        (WebCore::executeForwardDelete):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveRightAndModifySelection):
        (WebCore::executeMoveToBeginningOfDocument):
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::executeMoveToBeginningOfLine):
        (WebCore::executeMoveToBeginningOfLineAndModifySelection):
        (WebCore::executeMoveToBeginningOfParagraph):
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::executeMoveToBeginningOfSentence):
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfDocument):
        (WebCore::executeMoveToEndOfDocumentAndModifySelection):
        (WebCore::executeMoveToEndOfSentence):
        (WebCore::executeMoveToEndOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfLine):
        (WebCore::executeMoveToEndOfLineAndModifySelection):
        (WebCore::executeMoveToEndOfParagraph):
        (WebCore::executeMoveToEndOfParagraphAndModifySelection):
        (WebCore::executeMoveParagraphBackwardAndModifySelection):
        (WebCore::executeMoveParagraphForwardAndModifySelection):
        (WebCore::executeMoveUp):
        (WebCore::executeMoveUpAndModifySelection):
        (WebCore::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeMoveToLeftEndOfLine):
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection):
        (WebCore::executeMoveToRightEndOfLine):
        (WebCore::executeMoveToRightEndOfLineAndModifySelection):
        (WebCore::executeSelectLine):
        (WebCore::executeSelectParagraph):
        (WebCore::executeSelectSentence):
        (WebCore::executeSelectWord):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::willBeModified):
        (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::isBoundary):
        (WebCore::FrameSelection::textSelectionIntent):
        (WebCore::textSelectionWithDirectionAndGranularity):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::clear):
        (WebCore::FrameSelection::willBeRemovedFromFrame):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::rangeByAlteringCurrentSelection const):
        * editing/FrameSelection.h:
        * editing/TextGranularity.h:
        (): Deleted.
        * editing/TypingCommand.cpp:
        (WebCore::editActionForTypingCommand):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::deleteSelection):
        * editing/TypingCommand.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        * editing/VisibleSelection.h:
        * editing/VisibleUnits.cpp:
        (WebCore::directionIsDownstream):
        (WebCore::atBoundaryOfGranularity):
        (WebCore::withinTextUnitOfGranularity):
        (WebCore::nextWordBoundaryInDirection):
        (WebCore::nextSentenceBoundaryInDirection):
        (WebCore::nextParagraphBoundaryInDirection):
        (WebCore::positionOfNextBoundaryOfGranularity):
        (WebCore::enclosingTextUnitOfGranularity):
        (WebCore::charactersAroundPosition):
        (WebCore::wordRangeFromPosition):
        (WebCore::closestWordBoundaryForPosition):
        (WebCore::rangeExpandedByCharactersInDirectionAtWordBoundary):
        (WebCore::wordBoundaryForPositionWithoutCrossingLine):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectItemAroundHitTestResult):
        * editing/cocoa/DictionaryLookup.mm:
        * editing/mac/DictionaryLookupLegacy.mm:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForURL const):
        (WebCore::FrameLoaderClient::resolveWebGLPolicyForURL const):
        (): Deleted.
        * loader/FrameLoaderTypes.h:
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestContextualWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestContextualWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::setInitialKeyboardSelection):
        (WebCore::handleKeyboardSelectionMovement):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::isOverTextInsideFormControlElement const):

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

        Rename the mapLocalToContainer() container argument, since it's not just used for repaint
        https://bugs.webkit.org/show_bug.cgi?id=211974

        Reviewed by Zalan Bujtas.

        mapLocalToContainer() is a generic geometry mapping function, and not just used for repaint,
        so rename the "repaintContainer" argument to "ancestorContainer".

        Also fix some weirdly named variables in RenderMultiColumnFlow.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer const):
        * rendering/RenderBox.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::mapLocalToContainer const):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer const):
        (WebCore::RenderInline::pushMappingToContainer const):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::addFragmentToThread):
        (WebCore::RenderMultiColumnFlow::mapFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlow::physicalTranslationOffsetFromFlowToFragment const):
        (WebCore::RenderMultiColumnFlow::physicalTranslationFromFlowToFragment const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::mapLocalToContainer const):
        (WebCore::RenderObject::localToContainerQuad const):
        (WebCore::RenderObject::localToContainerPoint const):
        * rendering/RenderObject.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer const):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::mapLocalToContainer const):
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::mapLocalToContainer const):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::mapLocalToContainer const):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer const):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer const):
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * rendering/svg/SVGRenderSupport.h:

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

        REGRESSION (r249091): Can't click on a video in the second column of a paginated web view
        https://bugs.webkit.org/show_bug.cgi?id=211973
        <rdar://problem/61418775>

        Reviewed by Zalan Bujtas.

        In r249091 I made clip layer computation use offsetFromAncestor() by default, but this turns
        out to give different behavior from mapping via renderers in columns.

        The bug was that accumulateOffsetTowardsAncestor() would map through the
        RenderMultiColumnFlow columns if the ancestorLayer was the one that was using columns,
        but mapping via renderers only maps through columns if converting to some ancestor of
        the columnated renderer.

        I did not investigate why this only affects video.

        Test: fast/multicol/clipped-video-in-second-column.html

        * rendering/RenderLayer.cpp:
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::calculateClipRects const):

2020-05-15  Kenneth Russell  <kbr@chromium.org>

        OES_texture_float internal format conversion must depend on WEBGL_color_buffer_float
        https://bugs.webkit.org/show_bug.cgi?id=211971

        Reviewed by Dean Jackson.

        Only adjust the internal formats of textures created for the WebGL
        1.0 OES_texture_float extension if the WEBGL_color_buffer_float
        extension has been enabled.

        Covered by the WebGL 1.0 OES_texture_float conformance tests when
        run on iOS with another forthcoming fix to ANGLE which will enable
        the OES_texture_float extension on that platform.

        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::ensureEnabled):
        (WebCore::ExtensionsGLANGLE::adjustWebGL1TextureInternalFormat):
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect):

2020-05-15  Oriol Brufau  <obrufau@igalia.com>

        [css-grid] Treat percentages as auto for the minimum contribution
        https://bugs.webkit.org/show_bug.cgi?id=195967

        Reviewed by Manuel Rego Casasnovas.

        The minimum contribution of a grid item is the outer size resulting from
        the minimum size if the computed preferred size behaves as auto, or the
        min-content contribution otherwise.

        If the preferred size is a percentage, it should be resolved with
        respect to the grid area, which depends on the minimum contribution
        of the item. Thus the percentage is cyclic and behaves as auto.

        Before this change, WebKit only checked whether the preferred size is
        auto, not whether it behaves as auto. In fact this was according to
        an older version of the spec, but it was changed in
        https://github.com/w3c/csswg-drafts/issues/2367

        Test: imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-minimum-contribution-with-percentages.html

        Some cases in the test still fail due to bug 209461.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):

2020-05-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Animation with a single keyframe is not accelerated
        https://bugs.webkit.org/show_bug.cgi?id=188730
        <rdar://problem/43481113>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-single-keyframe.html

        Prior to attempting to run an accelerated effect, ensure that the KeyframeList passed to
        RenderLayerModelObject::startAnimation() does not have implicit keyframes since eventually
        GraphicsLayerCA::animationCanBeAccelerated() would be called and would reject a single-keyframe
        animation. To do this, we use the same code used in Style::Resolver::keyframeStylesForAnimation()
        which we refactor in the new KeyframeList::fillImplicitKeyframes() method.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::copyPropertiesFromSource):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::hasImplicitKeyframes const):
        (WebCore::KeyframeList::copyKeyframes):
        (WebCore::zeroPercentKeyframe):
        (WebCore::hundredPercentKeyframe):
        (WebCore::KeyframeList::fillImplicitKeyframes):
        * rendering/style/KeyframeList.h:
        * style/StyleResolver.cpp:
        (WebCore::Style::Resolver::keyframeStylesForAnimation):

2020-05-15  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The initial value of "transform-box" should be "view-box"
        https://bugs.webkit.org/show_bug.cgi?id=211927

        Reviewed by Simon Fraser.

        Specs: https://drafts.csswg.org/css-transforms/#transform-box.

        Test: svg/transforms/svg-transform-box-initial.html

        * css/CSSProperties.json:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialTransformBox):

2020-05-15  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in accessibility/mac/replace-text-with-range-on-webarea-element.html in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211954

        Reviewed by Chris Fleizach.

        Fixes crash in isolated tree mode in accessibility/mac/replace-text-with-range-on-webarea-element.html.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::postTextStateChangeNotification): Check for null object before dereferencing.
        (WebCore::AXObjectCache::rootWebArea): Reverted to returning an AXObject since it is not needed to return AXCoreObject.
        * accessibility/AXObjectCache.h:

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

        [LFC][TFC] Move column and row balancing logic to a dedicated class
        https://bugs.webkit.org/show_bug.cgi?id=211937

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraSpace):
        (WebCore::Layout::ColumnSpan::hasSpan): Deleted.
        (WebCore::Layout::ColumnSpan::isSpanned): Deleted.
        (WebCore::Layout::ColumnSpan::spanCount): Deleted.
        (WebCore::Layout::ColumnSpan::startSpan): Deleted.
        (WebCore::Layout::ColumnSpan::endSpan): Deleted.
        (WebCore::Layout::ColumnSpan::index): Deleted.
        (WebCore::Layout::ColumnSpan::size): Deleted.
        (WebCore::Layout::ColumnSpan::spacing): Deleted.
        (WebCore::Layout::RowSpan::hasSpan): Deleted.
        (WebCore::Layout::RowSpan::isSpanned): Deleted.
        (WebCore::Layout::RowSpan::spanCount): Deleted.
        (WebCore::Layout::RowSpan::startSpan): Deleted.
        (WebCore::Layout::RowSpan::endSpan): Deleted.
        (WebCore::Layout::RowSpan::index): Deleted.
        (WebCore::Layout::RowSpan::size): Deleted.
        (WebCore::Layout::RowSpan::spacing): Deleted.
        (WebCore::Layout::GridSpace::isEmpty const): Deleted.
        (): Deleted.
        (WebCore::Layout::max): Deleted.
        (WebCore::Layout::operator-): Deleted.
        (WebCore::Layout::operator+=): Deleted.
        (WebCore::Layout::operator-=): Deleted.
        (WebCore::Layout::operator/): Deleted.
        (WebCore::Layout::distributeAvailableSpace): Deleted.
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace): Deleted.
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingState.h:
        (WebCore::Layout::TableFormattingState::tableGrid const):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::widthConstraints const):
        (WebCore::Layout::TableGrid::Rows::list const):
        (WebCore::Layout::TableGrid::widthConstraints): Deleted.
        (WebCore::Layout::TableGrid::Rows::rowList const): Deleted.

2020-05-15  Alicia Boya García  <aboya@igalia.com>

        [GStreamer][MediaStream] Fix missing video size
        https://bugs.webkit.org/show_bug.cgi?id=211938

        Reviewed by Philippe Normand.

        r261683 redefined m_currentVideoStreamId. Under the new design, tracks
        have several states:

        - "wanted": a track has been selected from JavaScript, or chosen by
          default.

        - "requested": a track that is expected to be chosen by the next
          STREAMS_SELECTED message.

        - "current": a track that has been selected after the STREAMS_SELECTED
          message has been handled.

        naturalSize() used to check m_currentVideoStreamId to look for the
        video size, but this is called relatively early before the track
        becomes "current" under the new design.

        Since the size tags can't be queried at any time, it makes sense to
        use m_wantedVideoStreamId instead.

        This fixes the following tests which were previously regressed:

        fast/mediastream/get-user-media-constraints.html
        fast/mediastream/getUserMedia-video-rescaling.html
        fast/mediastream/mediastreamtrack-video-clone.html
        imported/w3c/web-platform-tests/mediacapture-streams/MediaStream-MediaElement-firstframe.https.html
        fast/mediastream/media-stream-renders-first-frame.html

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

2020-05-15  Antti Koivisto  <antti@apple.com>

        [Wheel event region] Invalidation when changing listeners on elements
        https://bugs.webkit.org/show_bug.cgi?id=211895

        Reviewed by Simon Fraser.

        Doesn't handle root (window/document) invalidation yet.

        Test: fast/scrolling/mac/wheel-event-listener-region-element-invalidation.html

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::removeEventListener):
        (WebCore::EventTarget::removeAllEventListeners):

        Invalidate element style on wheel event changes.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateEventRegion):

        Build on non-iOS platforms.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::maintainsEventRegion const):

        Factor into function so it can be shared with RenderLayer::invalidateEventRegion.

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

2020-05-15  Antoine Quint  <graouts@apple.com>

        Cursor should not update on a 20ms timer
        https://bugs.webkit.org/show_bug.cgi?id=211884
        <rdar://problem/63220368>

        Reviewed by Simon Fraser.

        Test: fast/events/mouse-cursor-udpate-during-raf.html

        Update cursors after rAF callbacks have been serviced and layout has been updated.

        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        (WebCore::Page::doAfterUpdateRendering):

2020-05-15  Andres Gonzalez  <andresg_22@apple.com>

        Update the isolated tree only if isolated tree mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=211936

        Reviewed by Chris Fleizach.

        Check for isIsolatedTreeEnabled before updating the isolated tree.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::updateIsolatedTree):

2020-05-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK3] Bring back usage of GtkMenu for context menus
        https://bugs.webkit.org/show_bug.cgi?id=211557

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * platform/gtk/GtkVersioning.h: Remove GtkPopover functions used only for context menus.

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

        Unreviewed. Fix build warning after r261113

        Remove unused variable.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::preferredScriptedAnimationInterval const):

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        Expose isColumnHeaderCell and isRowHeaderCell through AXCoreObject.
        https://bugs.webkit.org/show_bug.cgi?id=211919

        Reviewed by Chris Fleizach.

        Multiple tests including accessibility/crash-table-recursive-layout.html.

        - Expose isColumn/RowHeaderCell through AXCoreObject in order to make the
        return value of AccessibilityTable::cellForColumnAndRow an AXCoreObject.
        - Implemented these methods for AXIsolatedObject.
        - isolatedCopy the accessibilityDescription property.

        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow): Removed incorrect
        assert since children are AXCoreObjects and not necessarily AccessibilityTableCells.
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::isTableCellInSameRowGroup):
        (WebCore::AccessibilityTableCell::isTableCellInSameColGroup):
        (WebCore::AccessibilityTableCell::columnHeaders):
        (WebCore::AccessibilityTableCell::rowHeaders):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::addChildren):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementForRow:andColumn:]):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-14  Timothy Hatcher  <timothy@apple.com>

        Add baseURL version of _WKUserStyleSheet forWKWebView.
        https://bugs.webkit.org/show_bug.cgi?id=211926
        rdar://problem/62074675

        Reviewed by Devin Rousso.

        Consolidate the paths taken for adding a UserStyleSheet. The m_injectedStyleSheetToSource
        was missing for page specific style sheets since it was another loop.

        * dom/ExtensionStyleSheets.cpp:
        (WebCore::ExtensionStyleSheets::updateInjectedStyleSheetCache const):
        (WebCore::ExtensionStyleSheets::injectPageSpecificUserStyleSheet):
        (WebCore::ExtensionStyleSheets::removePageSpecificUserStyleSheet):
        (WebCore::ExtensionStyleSheets::detachFromDocument):
        * dom/ExtensionStyleSheets.h:

2020-05-14  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Relaxing signature length requirements for U2fRegister
        https://bugs.webkit.org/show_bug.cgi?id=209645
        <rdar://problem/63204591>

        Reviewed by Brent Fulgham.

        It turns out the length range specified from the spec, i.e., [71, 73] is wrong.
        https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-raw-message-formats-v1.2-ps-20170411.html#registration-response-message-success

        It should actually be [70, 72]. However, as a middleware to relay the messages, user agents
        are not necessary to check the length. Therefore, the check is relaxed to make the code more robust.

        Covered by existing tests.

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

2020-05-14  Timothy Hatcher  <timothy@apple.com>

        Add sourceURL to _evaluateJavaScript: so the scripts appear in Web Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=211904
        rdar://problem/62074376

        Reviewed by Devin Rousso.

        Added sourceURL to RunJavaScriptParameters. Use it instead of the frame's document URL.

        * bindings/js/RunJavaScriptParameters.h:
        (WebCore::RunJavaScriptParameters::RunJavaScriptParameters):
        (WebCore::RunJavaScriptParameters::encode const):
        (WebCore::RunJavaScriptParameters::decode):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorldIgnoringException):
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::callInWorld):
        (WebCore::ScriptController::executeUserAgentScriptInWorld):

2020-05-14  Eric Carlson  <eric.carlson@apple.com>

        [Cocoa] Don't clear NowPlaying state unless it was set
        https://bugs.webkit.org/show_bug.cgi?id=211899
        <rdar://problem/62249870>

        Reviewed by Jer Noble.

        Test: media/now-playing-status-without-media.html

        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::haveEverRegisteredAsNowPlayingApplication const): Method
        added for testing.

        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo): Don't clear NowPlaying state unless
        it was setup in the first place.

        * testing/Internals.cpp:
        (WebCore::Internals::nowPlayingState const): Add new property.
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        AXCoreObject font comparison methods should take another AXCoreObject instead of a RenderObject.
        https://bugs.webkit.org/show_bug.cgi?id=211909

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        - In order for font comparison methods to be implementted for both
        AXObjects and AXIsolatedObjects, they should take another AXCoreObject
        to compare against, instead of a RenderObject.
        - The AXIsolatedObject implementation of these methods is forwarded to
        the associated AXObject and dispatched to the main thread.
        - Implemented AXIsolatedObject::accessibilityDescription, hasUnderline and isUnvisited.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::Accessibility::isAccessibilityObjectSearchMatchAtIndex):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isNativeListBox const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasSameFont const):
        (WebCore::AccessibilityRenderObject::hasSameFontColor const):
        (WebCore::AccessibilityRenderObject::hasSameStyle const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::hasSameFont const):
        (WebCore::AXIsolatedObject::hasSameFontColor const):
        (WebCore::AXIsolatedObject::hasSameStyle const):
        (WebCore::AXIsolatedObject::isNativeListBox const): Deleted, implemented in base class.
        (WebCore::AXIsolatedObject::isUnvisited const): Deleted, inlined in header.
        (WebCore::AXIsolatedObject::hasUnderline const): Deleted, inlined in header.
        (WebCore::AXIsolatedObject::accessibilityDescription const): Deleted, inlined in header.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: front-end shouldn't change the order of User Style Sheet rules
        https://bugs.webkit.org/show_bug.cgi?id=210893
        <rdar://problem/61937118>

        Reviewed by Devin Rousso.

        Previously, some style sheets were falsly detected as Inspector::Protocol::CSS::StyleSheetOrigin::User
        causing incorrect order of style rules in Web Inspector.

        Test: inspector/css/getMatchedStylesForNode.html

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::detectOrigin):

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

        [macOS] Update the placeholder icon image for attachment elements with progress="0"
        https://bugs.webkit.org/show_bug.cgi?id=211898
        <rdar://problem/63203900>

        Reviewed by Timothy Hatcher.

        Refactor logic for creating an attachment placeholder image into a separate helper method, with a
        WebKitAdditions implementation when HAVE(SYSTEM_ATTACHMENT_PLACEHOLDER_ICON) is defined.

        * rendering/RenderThemeMac.mm:
        (WebCore::createAttachmentPlaceholderImage):
        (WebCore::paintAttachmentIconPlaceholder):

2020-05-14  Chris Dumez  <cdumez@apple.com>

        Regression(r254856) Family Health iOS app is broken due to lack for WebSQL support
        https://bugs.webkit.org/show_bug.cgi?id=211896
        <rdar://problem/63025045>

        Reviewed by Maciej Stachowiak.

        Add RuntimeApplicationChecks function to identify Family Health app on iOS.

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

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        AXIsolatedTree::updateChildren needs to apply pending changes before updating the given node.
        https://bugs.webkit.org/show_bug.cgi?id=211790

        Reviewed by Chris Fleizach.

        Covered by multiple tests.

        AXIsolatedTree::updateChildren may be fired for an isolated object that
        is still in the pending changes list, and thus nodeForID would fail,
        causing the isolated tree to not be updated. This patch calls
        applyPendingChanges before updating the given node's children.
        Additional logging was added including the logging of the AXObjectCache
        object hierarchy.

        * accessibility/AXLogger.cpp:
        (WebCore::AXLogger::log):
        (WebCore::operator<<):
        * accessibility/AXLogger.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::postNotification):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::updateIsolatedTree):
        * accessibility/AXObjectCache.h:
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateSubtree):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::focusedNode):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in LayoutTest in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211894

        Reviewed by Chris Fleizach.

        Several LayoutTests.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]): Check backing object for nullity before dereferencing.

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        AXIsolatedObject::isOnScreen needs to be dispatched to the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=211893

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::children): Split assert into two lines for readability.
        (WebCore::AXIsolatedObject::isOnScreen const): Forward to associated AXObject and dispatch to the main thread.

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        Implementation of AXIsolatedObject::hasPlainText.
        https://bugs.webkit.org/show_bug.cgi?id=211892

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        Adding hasPlainText to the cached properties map.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::hasPlainText const): Deleted, inlined in header.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-14  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContextWebGL): downcast m_context to
        WebGLRenderingContextBase before calling isXRCompatible(). It's created
        as a WebGLRenderingContextBase but stored in a CanvasRenderingContext.

2020-05-14  Andres Gonzalez  <andresg_22@apple.com>

        Replacing and inserting text need to be dispatched to the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=211863

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        In isolated tree mode WebAccessibilityObjectWrapper accessibilityReplaceRange
        and InsertText may be called on the secondary thread. Thus the AXIsolatedObject
        implementation of this functionality needs to forward these calls to the
        associated AXObject on the main thread.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::replaceTextInRange):
        (WebCore::AXIsolatedObject::insertText):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityReplaceRange:withText:]):
        (-[WebAccessibilityObjectWrapper accessibilityInsertText:]):

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

        Cursor should not update on a 20ms timer
        https://bugs.webkit.org/show_bug.cgi?id=211884
        <rdar://problem/63220368>

        Reviewed by Antti Koivisto.

        Update the cursor during page rendering rather than using a 20ms timer.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::updateCursorIfNeeded):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::scheduleCursorUpdate):
        (WebCore::EventHandler::cursorUpdateTimerFired): Deleted.
        * page/EventHandler.h:
        * page/Page.cpp:
        (WebCore::Page::updateRendering):

2020-05-14  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webrtc/disable-encryption.html is a crashing flaky
        https://bugs.webkit.org/show_bug.cgi?id=211166

        Reviewed by Xabier Rodriguez-Calvar.

        Make sure the audio and video mediastream source elements are correctly removed and disposed
        from their parent bin when resetting the track sources. Before this change there was a
        possibility of disposing the elements while they were still in PLAYING state.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::_WebKitMediaStreamSrc::SourceData::reset):
        (WebCore::webkitMediaStreamSrcDispose):
        (WebCore::webkitMediaStreamSrcRemoveTrackByType):

2020-05-14  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixed, mid May 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=211859

        Unreviewed build.

        No new tests needed.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp: Add missing IDBBindingUtilities.h and
        IDBSerializationContext.h includes.
        * accessibility/AccessibilityRenderObject.cpp: Add missing EventHandler.h include.
        * css/parser/CSSParserToken.cpp: Add missing RuntimeEnabledFeatures.h include.
        * editing/gtk/WebContentReaderGtk.cpp: Add missing Blob.h include.
        * html/canvas/OESTextureHalfFloat.cpp: Add missing ExtensionsGL.h include.
        * page/ShareDataReader.h: Add missing ExceptionOr.h include.
        * rendering/ContentfulPaintChecker.cpp: Add missing RenderView.h include.
        * rendering/style/StyleRareInheritedData.h: Add missing RenderStyleConstants.h and
        wtf/OptionSet.h includes.
        * rendering/style/StyleRareNonInheritedData.h: Add missing TouchAction.h and wtf/OptionSet.h
        includes.
        * style/StyleAdjuster.h: Add missing RenderStyleConstants.h include and forward declaration
        for WebCore::EventTarget.

2020-05-14  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Playbin3 track switch rework
        https://bugs.webkit.org/show_bug.cgi?id=211623

        Reviewed by Philippe Normand.

        This patch reworks how track selection and reporting of selected
        tracks is done in the player.

        The following found limitations and assumptions in current GStreamer
        have informed this patch:

        a) Although the API for playbin3 is designed to be able to accept any
        number of tracks of any kind, this is not supported in practice.

        b) The first track of each type is always selected. Even in playbin3
        mode, looking for GST_STREAM_FLAG_SELECT is not a reliable method, as
        in most cases the demuxer does not set it at all. [qtdemux never sets
        it at all, and matroskademux only sets it in certain cases.]

        c) Sending GST_EVENT_SELECT_STREAMS is only safe at certain moments.
        It's not safe before pre-roll, after EOS or during the handling of
        another SELECT_STREAMS.

        d) Selecting text tracks with playbin APIs is not relevant. All text
        tracks are already being picked by WebKitTextCombiner, unaffected by
        playbin track selection.

        e) Tracks requested in a GST_EVENT_SELECT_STREAMS are eventually
        selected. On the other hand,  looking at
        GST_MESSAGE_STREAMS_SELECTED's content is not reliable, as this has
        been seen to miss tracks depending on thread luck.

        This patch takes the points above into account to rework how track
        selection is handled in MediaPlayerPrivateGStreamer and fix the
        following issues:

        1) In playbin3 mode, no track was marked as selected initially,
        because of reliance on GST_STREAM_FLAG_SELECT.

        2) In playbin2 mode, sometimes tracks would not be initially marked as
        selected. This occurred because of reliance on the "selected" property
        in inputselector sinkpads, whose initialization is racy -- it can
        occur after the track has been added and picked up by WebKit.

        3) In playbin3 mode, the limitations explained before has been honored
        to make track selection stable, delaying SELECT_STREAMS events until
        they are safe to send.

        This patch doesn't introduce significative behavior changes, rather
        aiming for improving the stabilitity of the player. Existing tests
        should provide enough coverage.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        (WebCore::AudioTrackPrivateGStreamer::setEnabled):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::updateEnabledVideoTrack):
        (WebCore::MediaPlayerPrivateGStreamer::updateEnabledAudioTrack):
        (WebCore::MediaPlayerPrivateGStreamer::playbin3SendSelectStreamsIfAppropriate):
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::didEnd):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        (WebCore::VideoTrackPrivateGStreamer::setSelected):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2020-05-14  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Can't replay blob videos in web.whatsapp.com
        https://bugs.webkit.org/show_bug.cgi?id=192540

        Reviewed by Xabier Rodriguez-Calvar.

        This is a variant of bug 211627 but I could reproduce it only for videos. Unfortunately I
        wasn't able to write a reliable test for this.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateBufferingStatus): Prevent the fill timer from
        running forever after buffering completed.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcMakeRequest): Don't buffer blobs, this doesn't seem useful as they're already
        in memory anyway.

2020-05-06  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement WebGLRenderingContextBase::makeXRCompatible()
        https://bugs.webkit.org/show_bug.cgi?id=211506

        Reviewed by Youenn Fablet.

        The WebXR spec defines a way to mark a WebGLRenderingContext as
        compatible with WebXR. This can be made at creation time (by setting the
        xrCompatible) attribute or by calling makeXRCompatible().

        There are several web-platform-tests testing/using this feature, however we
        cannot enable them right now as we need some other features to be implemented
        first.

        * Modules/webxr/NavigatorWebXR.cpp:
        (WebCore::NavigatorWebXR::xr): Do not pass ScriptExecutionContext and use
        the Navigator's instead.
        * Modules/webxr/NavigatorWebXR.h: Ditto.
        * Modules/webxr/NavigatorWebXR.idl: Ditto.
        * Modules/webxr/WebXRSystem.h: expose ensureImmersiveXRDeviceIsSelected() and
        hasActiveImmersiveXRDevice() to be used from canvas and the rendering context.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContextWebGL): call
        ensureImmersiveXRDeviceIsSelected() if xrCompatible is set.
        * html/canvas/WebGLContextAttributes.idl: Added xrCompatible.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        Initialize m_isXRCompatible.
        (WebCore::WebGLRenderingContextBase::makeXRCompatible): Implemented.
        * html/canvas/WebGLRenderingContextBase.h: Defined makeXRCompatible().
        * html/canvas/WebGLRenderingContextBase.idl: Added makeXRCompatible().
        * platform/graphics/GraphicsContextGLAttributes.h: Added xrCompatible.
        * testing/Internals.cpp:
        (WebCore::Internals::xrTest): Simplified the usage of NavigatorWebXR.

2020-05-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for cases when the balancing is not based on the initial width
        https://bugs.webkit.org/show_bug.cgi?id=211878

        Reviewed by Antti Koivisto.

        This patch adds support for the cases when the table stretches all the way to the maximum content size,
        and we still choose the minimum width as the initial width and the maximum width as the base for balancing the extra space.

        Consider the following 2 tables:

        <table>
          <tr><td style="width: 20px"></td><td>some long long long content</td></tr>
          <tr><td style="width: 20px"></td><td>22px width content</td></tr>
        </table>

        <table>
          <tr><td style="width: 20px"></td><td>some long long long content</td></tr>
          <tr><td style="width: 20px"></td><td id=fixed_width style="width: 22px;">22px width content</td></tr>
        </table>

        These tables have the same maximum widths and they both stretch to that size. 
        However the second table will end up with a wider first and narrower second column because of the
        width property on the [fixed_width] cell.
        While the first table applies the maximum width for each columns, the second table uses the minimum width as the
        initial width and balances the extra space using the maximum width (as the distribution ratio).
        This produces a very different layout where the first table has no line wrapping, while
        the second table wraps the "some long long long content" text (even though the used max widths are the same for each cells).

        Test: fast/layoutformattingcontext/table-fixed-width-with-max-distribution.html

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::ColumnSpan::spacing):
        (WebCore::Layout::RowSpan::spacing):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):

2020-05-13  Zalan Bujtas  <zalan@apple.com>

        Do not clear selection/repaint when the renderer gets moved during tree normalization.
        https://bugs.webkit.org/show_bug.cgi?id=211865
        <rdar://problem/62849044>

        Reviewed by Antti Koivisto.

        While detachFromRenderElement should really be about "this renderer is being detached from its parent", some code in here assumes
        the renderer is not only going to be detached but also going to be destroyed. Ideally such code should live in RenderObject::willBeDestroyed(),
        but no tree walk is possible in there anymore.

        The reason for the crash is that when we split the inline for continuation, we construct new anonymous containers and move subtrees over
        to these new renderers. However at this point these new parent containers are not yet attached to the tree
        so any tree-walking cleanup code will fail (in detachFromRenderElement).

        Test: fast/repaint/do-no-repaint-on-internal-move.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::detachFromRenderElement):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::splitInlines):

2020-05-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: show EventTarget listeners as an internal property
        https://bugs.webkit.org/show_bug.cgi?id=211766

        Reviewed by Timothy Hatcher.

        Test: inspector/runtime/getProperties-internalProperties.html

        Add a `listeners` internal property for `EventTarget` objects with the value
        ```
            listeners: {
                <event>: [
                    {
                        callback: <function>
                        capture: <boolean>
                        passive: <boolean>
                        once: <boolean>
                    }
                    ...
                ]
                ...
            }
        ```
        so long as at least one `JSEventListener` has been added prior to that point.

        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::objectForEventTargetListeners): Added.
        (WebCore::WebInjectedScriptHost::getInternalProperties):
        Drive-by: only add the `name` internal property if the `Worker` actually has a name.

2020-05-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename CSS.StyleSheetOrigin.Regular to CSS.StyleSheetOrigin.Author to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=211827

        Reviewed by Timothy Hatcher.

        Tests: inspector/css/add-rule.html
               inspector/css/getMatchedStylesForNode.html

        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForRule):

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

        JSDOMWindowBase m_windowCloseWatchpoints must be Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=211844

        Reviewed by Mark Lam.

        JSDOMWindowBase::m_windowCloseWatchpoints is WatchpointSet, not Ref<WatchpointSet>. And it is passed to JSC IC layer via PropertySlot::setWatchpoint(...).
        And ProxyableAccessCase can hold it as `RefPtr<WatchpointSet> m_additionalSet;`, this is wrong.

        This patch hides WatchpointSet constructor behind `protected` to disallow non Ref<> WatchpointSet construction. We made it `protected` since InferredValueWatchpointSet
        inherits WatchpointSet and uses this constructor.

        Possibly, this does not matter: ProxyableAccessCase keeps Structure, which points to JSDOMWindowBase. So, it would not happen that ProxyableAccessCase has a wrong pointer
        to WatchpointSet since JSDOMWindowBase is kept alive anyway. But avoid using RefCounted objects without RefCount allocation is better since this can cause bugs easily.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::fireFrameClearedWatchpointsForWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):

2020-05-13  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in InsertParagraphSeparatorCommand::doApply when the canonical position is uneditable
        https://bugs.webkit.org/show_bug.cgi?id=211864
        <rdar://problem/62982161>

        Reviewed by Geoffrey Garen.

        The position returned by positionAvoidingSpecialElementBoundary() is uneditable so we need to 
        check for uneditable insertion position and bail out before calling insertNodeAt to avoid assertion.

        Test: editing/inserting/insert-img-uneditable-canonical-position-crash.html

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2020-05-13  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in DeleteSelectionCommand::doApply() when merge node is disconnected.
        https://bugs.webkit.org/show_bug.cgi?id=211793
        <rdar://problem/62993645>

        Reviewed by Geoffrey Garen.

        Check for disconnected merge destination and endingSelection() after mergeParagraph is
        Called and bail out to avoid using corrupted positions for node insertion.

        Test: editing/inserting/insert-text-merge-node-removed-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs):

2020-05-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Re-enable 'OutsideViewport' rAF throttling
        https://bugs.webkit.org/show_bug.cgi?id=211482

        Reviewed by Darin Adler.

        Test: fast/animation/request-animation-frame-throttling-outside-viewport.html

        Make preferredFrameInterval return AggressiveThrottlingAnimationInterval
        if the OutsideViewport throttling reason exists.

        Add an internal setting for enabling 'OutsideViewport' rAF throttling. It
        is on by default but it is off by default for DRT and WTR. An Internals
        API is added to enable it for specific tests which want to test its
        functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScriptedAnimationsAndTimersThrottlingState):
        * page/Page.cpp:
        (WebCore::Page::setOutsideViewportThrottlingEnabledForTesting):
        * page/Page.h:
        (WebCore::Page::canUpdateThrottlingReason const):
        * platform/graphics/AnimationFrameRate.h:
        (WebCore::preferredFrameInterval):
        (WebCore::operator<<):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setOutsideViewportThrottlingEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-13  Andres Gonzalez  <andresg_22@apple.com>

        Remove unnecessary assert in {WebAccessibilityObjectWrapper attachmentView].
        https://bugs.webkit.org/show_bug.cgi?id=211857

        Reviewed by Chris Fleizach.

        This assert is unnecessary since the backing object that is relevant is
        the one on the main thread. This was causing crashes in LayoutTest in
        isolated tree mode.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper attachmentView]):

2020-05-13  Jer Noble  <jer.noble@apple.com>

        Replace isNullFunctionPointer with real weak-linking support
        https://bugs.webkit.org/show_bug.cgi?id=211751

        Reviewed by Sam Weinig.

        Use the new WTF_WEAK_LINK_FORCE_IMPORT macro.

        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2020-05-13  Andres Gonzalez  <andresg_22@apple.com>

        Implementation of AXIsolatedObject::hasBoldFont and hasItalicFont.
        https://bugs.webkit.org/show_bug.cgi?id=211858

        Reviewed by Chris Fleizach.

        Added hasBoldFont and hasItalicFont to the cached properties map.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData): Added properties to cache.
        (WebCore::AXIsolatedObject::hasBoldFont const): Deleted. Inlined in header.
        (WebCore::AXIsolatedObject::hasItalicFont const): Deleted. Inlined in header.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-13  Tim Horton  <timothy_horton@apple.com>

        Add SPI for reverting to touch events for iPad trackpad interactions
        https://bugs.webkit.org/show_bug.cgi?id=211824
        <rdar://problem/61363084>

        Reviewed by Megan Gardner.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::mouseEventPolicy const):
        (WebCore::DocumentLoader::setMouseEventPolicy):

2020-05-13  Kenneth Russell  <kbr@chromium.org>

        Bad flicker on three.js example
        https://bugs.webkit.org/show_bug.cgi?id=183151

        Reviewed by Dean Jackson.

        With preserveDrawingBuffer:true and antialias:false, allocate an
        intermediate texture and FBO, and blit from it to the destination
        texture in prepareTexture(). Use wipeAlphaChannelFromPixels on iOS
        as well as macOS.

        In addition to fixing the test case from the bug, this also fixes
        the webgl/2.0.0/conformance2/textures/webgl_canvas/ layout tests,
        which will be re-enabled in a subsequent patch. It also passes the
        more stringent webgl_canvas conformance tests in
        https://github.com/KhronosGroup/WebGL/pull/3071 .

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContextGLOpenGL::reshapeFBOs):
        (WebCore::GraphicsContextGLOpenGL::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContextGLOpenGL::readPixels):
        (WebCore::GraphicsContextGLOpenGL::validateDepthStencil):
        (WebCore::GraphicsContextGLOpenGL::prepareTexture):
        (WebCore::GraphicsContextGLOpenGL::reshape):
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::GraphicsContextGLOpenGL):
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

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

        [iOS] "Copy" context menu action for attachment element does not work in Mail
        https://bugs.webkit.org/show_bug.cgi?id=211817
        <rdar://problem/58043110>

        Reviewed by Tim Horton.

        Minor refactoring to help support writing attachment data to the pasteboard when using context menu actions to
        copy an attachment element on iOS. See below for more details, as well as the WebKit ChangeLog entry.

        Test: WKAttachmentTestsIOS.CopyAttachmentUsingElementAction

        * editing/Editor.cpp:
        (WebCore::Editor::platformContentTypeForBlobType const):
        (WebCore::Editor::promisedAttachmentInfo):

        Move promisedAttachmentInfo out of DragController and into Editor, so that it is accessible outside of drag
        and drop code.

        * editing/Editor.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::platformContentTypeForBlobType const):

        Move this private helper function out of DragController as well, and into Editor.

        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

        Refactor this to use Editor::promisedAttachmentInfo().

        (WebCore::DragController::platformContentTypeForBlobType const): Deleted.
        (WebCore::DragController::promisedAttachmentInfo): Deleted.
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::platformContentTypeForBlobType const): Deleted.

2020-05-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Calling reverse() on an accelerated animation has no effect
        https://bugs.webkit.org/show_bug.cgi?id=204717
        <rdar://problem/62503582>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-playback-rate.html

        We completely ignored the playbackRate set on a WebAnimation object when considering whether we could run an accelerated animation.
        To address this we do several things.

        First, we now add a playbackRate() on Animation objects such that we can make GraphicsLayerCA aware of the originating WebAnimation's
        playback rate and use this data to opt out of running CA animations for animations with a playbackRate other than 1 in
        GraphicsLayerCA::animationCanBeAccelerated(). We'll be looking to add support for variable playback rates for CA animations in
        https://bugs.webkit.org/show_bug.cgi?id=211839.

        Then, we make sure to completely replace an accelerated animation whenever one of the properties affected timing would change. Up until
        now we would onyl do this for a change in the effective currentTime, but this needs to also happen when the current time doesn't change
        but the animation may have changed playback rate or any of its timing properties that could change the duration of the animation. So we
        remove the "Seek" command and instead use an "UpdateTiming" command that will remove the existing animation and add a new one.

        This allows us to remove any notion of seeking in GraphicsLayer since now we'll just create a new animation when its timing attributes
        changed.

        This revealed an issue where if we called animationFinished() and startAnimation() on a RenderLayerModelObject in succession, theanimation
        removal would not occur on the GraphicsLayerCA because we disregarded any pending accelerated action for an animation we knew would be
        replaced. We now ensure we honor the removal in GraphicsLayerCA::appendToUncommittedAnimations().

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::updateTiming):
        * animation/AnimationEffect.h:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::addPendingAcceleratedAction):
        (WebCore::KeyframeEffect::animationDidChangeTimingProperties):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        (WebCore::KeyframeEffect::backingAnimationForCompositedRenderer const):
        (WebCore::KeyframeEffect::animationDidSeek): Deleted.
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::effectTimingDidChange):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::setPlaybackRate):
        (WebCore::WebAnimation::updatePlaybackRate):
        (WebCore::WebAnimation::reverse):
        * animation/WebAnimation.h:
        * platform/animation/Animation.h:
        (WebCore::Animation::playbackRate const):
        (WebCore::Animation::setPlaybackRate):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::pauseAnimation):
        (WebCore::GraphicsLayer::seekAnimation): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated const):
        (WebCore::GraphicsLayerCA::updateAnimations):
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::seekAnimation): Deleted.
        (WebCore::GraphicsLayerCA::seekCAAnimationOnLayer): Deleted.
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::animationPaused):
        (WebCore::RenderElement::animationSeeked): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::animationSeeked): Deleted.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::animationSeeked): Deleted.
        * rendering/RenderLayerModelObject.h:

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

        [Wheel event region] Debug overlay
        https://bugs.webkit.org/show_bug.cgi?id=211850

        Reviewed by Simon Fraser.

        This is tied to the existing Wheel event handler overlay debug flag.

        * platform/graphics/Color.cpp:
        (WebCore::makeRGB): Deleted.
        (WebCore::makeRGBA): Deleted.
        * platform/graphics/Color.h:
        (WebCore::makeRGB):
        (WebCore::makeRGBA):

        Make constexpr.

        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::eventListenerRegionForType const):
        * rendering/EventRegion.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::patternForDescription):

        Factor into a function.

        (WebCore::patternForTouchAction):
        (WebCore::patternForEventListenerRegionType):
        (WebCore::RenderLayerBacking::paintDebugOverlays):
        (WebCore::RenderLayerBacking::paintContents):

2020-05-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Fix refactoring issue with animation suspension following r261336
        https://bugs.webkit.org/show_bug.cgi?id=211842
        <rdar://problem/63118326>

        Reviewed by Dean Jackson.

        We moved up the suspension code up from DocumentTimeline to DocumentTimelinesController in r261336
        and forgot to move the code that set the initial suspension state from the DocumentTimeline constructor
        to the DocumentTimelinesController constructor. This is problematic because the suspension state is
        only recorded on DocumentTimelinesController itself.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::addTimeline):

2020-05-13  Simon Fraser  <simon.fraser@apple.com>

        composited scrolling interferes with the propagation of perspective
        https://bugs.webkit.org/show_bug.cgi?id=156435
        <rdar://problem/25642222>

        Reviewed by Antti Koivisto.
        
        When we made RenderLayerBacking-internal layers for composited scrolling (m_scrollContainerLayer,
        m_scrolledContentsLayer) we'd lose the effects of the sublayer transform, which was applied
        to the primary layer, causing perspective on the scroller to not propagate to transformed descendants.

        Fix by moving the sublayer transform to the scroll container layer (adjusting the perspective
        matrix as appropriate), and making the scrolled contents layer a "preserve3D" layer so
        that it doesn't flatten.

        This fixes both macOS and iOS.

        Test: compositing/transforms/perspective-with-scrolling.html

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

2020-05-13  Youenn Fablet  <youenn@apple.com>

        Allow WebAudioBufferList to dynamically change its number of frames
        https://bugs.webkit.org/show_bug.cgi?id=211720

        Reviewed by Eric Carlson.

        We sometimes create WebAudioBufferList on the stack which triggers allocation of several vectors.
        Instead of doing that for every audio sample chunk, we should allocate the WebAudioBufferList and resize it as necessary.
        For that purpose, we introduce WebAudioBufferList::updateWithNumberOfFrames and use it in two places:
        - When creating an audio track into WebAudio.
        - When receiving audio chunks from another process.
        Covered by existing tests.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::streamDescription):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        (WebCore::WebAudioBufferList::updateWithNumberOfFrames):
        (WebCore::WebAudioBufferList::channelCount const):
        * platform/audio/cocoa/WebAudioBufferList.h:
        * platform/mediastream/mac/MockAudioSharedUnit.mm:
        (WebCore::MockAudioSharedUnit::reconfigure):
        Drive-by fix, we do not need to give the size in bytes but the size in samples.

2020-05-13  Andres Gonzalez  <andresg_22@apple.com>

        Check for accessibilityEnabled() before posting notifications asynchronously.
        https://bugs.webkit.org/show_bug.cgi?id=211848

        Reviewed by Chris Fleizach.

        Covered by multiple tests. Fixes crashes in LayoutTests in isolated tree mode.

        During LayoutTests, accessibility may be disabled between the time the
        notifications are queued and the timer fires. Thus it is necessary to
        check for accessibilityEnabled() before posting the notifications
        asynchronously. Not doing so was causing crashes in isolated mode.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):

2020-05-13  Simon Fraser  <simon.fraser@apple.com>

        The perspective matrix is affected by overflow:hidden on a box with borders
        https://bugs.webkit.org/show_bug.cgi?id=211828

        Reviewed by Zalan Bujtas.

        For a box with non-uniform borders, the layer created for overflow:hidden is not
        centered in its parent layer. However, we push the childrenTransform onto this
        clipping layer, so that transform needs to be adjusted to account for the geometry
        of the clipping layer.

        Test: compositing/transforms/perspective-with-clipping.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::perspectiveTransform const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::scrollContainerLayerBox):
        (WebCore::clippingLayerBox):
        (WebCore::overflowControlsHostLayerBox):
        (WebCore::RenderLayerBacking::updateChildrenTransformAndAnchorPoint):

2020-05-13  Tomoki Imai  <Tomoki.Imai@sony.com>

        Selected element on Web Inspector is not highlighted with CPU Rendering.
        https://bugs.webkit.org/show_bug.cgi?id=195933

        Reviewed by Devin Rousso.

        Expose InspectorOverlay::shouldShowOverlay via InspectorController.
        It's used to determine whether WebPage needs a transparency layer to draw highlight.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::shouldShowOverlay const):
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.h:

2020-05-13  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r261023): [GTK][WPE] Several WebGL tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=211338

        Reviewed by Dean Jackson.

        For non-ANGLE-backed WebGL, we are still required to query the internal
        format of the target texture for the texture sub-image commands. Falling
        back to that behavior on !USE(ANGLE) removes regressions in a bunch of
        WebGL tests.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::texImageArrayBufferViewHelper):

2020-05-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK debug build after r261554

        Remove writeToClipboard that receives a const SelectionData& that is no longer used. Make
        readBufferFromClipboard pure virtual and remove the GTK leftovers from PlatformPasteboard.

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

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

        [Wheel event region] Add support for getting wheel event region from ScrollingTree
        https://bugs.webkit.org/show_bug.cgi?id=211785

        Reviewed by Simon Fraser.

        Add ScrollingTree::eventListenerRegionTypesForPoint. It is not used yet.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::eventListenerRegionTypesForPoint const):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeMac.h:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (collectDescendantLayersAtPoint):
        (ScrollingTreeMac::eventListenerRegionTypesForPoint const):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::eventRegionContainsPoint const): Deleted.
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::eventListenerRegionTypesForPoint const):
        * rendering/EventRegion.h:

2020-05-12  Alex Christensen  <achristensen@webkit.org>

        Give some NetworkLoadMetrics to WebCoreNSURLSession's delegate
        https://bugs.webkit.org/show_bug.cgi?id=211759
        <rdar://problem/62909440>

        Reviewed by Jer Noble.

        This required packaging the fetchStart time with the rest of the time deltas,
        passing a const NetworkLoadMetrics& down to the media loader, and packaging the data up
        in an ObjC object that pretends to be NSURLSessionTaskMetrics, just like WebCoreNSURLSession
        pretends to be an NSURLSession.

        I manually verified the NSDates are correct.  This is not straightforward to automate tests for
        because of the inherant dynamic nature of timing data, and because our other WebCoreNSURLSession
        tests use WebKitLegacy, and that approach won't work here because we are only hooking up data from
        NSURLSession, which is only used in modern WebKit.

        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::notifyFinished):
        * Modules/beacon/NavigatorBeacon.h:
        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::notifyFinished):
        * bindings/js/CachedModuleScriptLoader.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished):
        * dom/LoadableClassicScript.h:
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::finishedParsing):
        * loader/ApplicationManifestLoader.cpp:
        (WebCore::ApplicationManifestLoader::notifyFinished):
        * loader/ApplicationManifestLoader.h:
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::notifyFinished):
        * loader/CrossOriginPreflightChecker.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::notifyFinished):
        * loader/DocumentThreadableLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::notifyFinished):
        * loader/LinkLoader.h:
        * loader/LinkPreloadResourceClients.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::notifyFinished):
        * loader/MediaResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished):
        * loader/TextTrackLoader.h:
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::responseReceived):
        (WebCore::ApplicationCacheResourceLoader::notifyFinished):
        * loader/appcache/ApplicationCacheResourceLoader.h:
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::finishLoading):
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::finishLoading):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::finishLoading):
        (WebCore::CachedFont::checkNotify):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::finishLoading):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::finishLoading):
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::checkNotify):
        (WebCore::CachedResource::finishLoading):
        (WebCore::CachedResource::error):
        (WebCore::CachedResource::cancelLoad):
        (WebCore::CachedResource::didAddClient):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        (WebCore::CachedResourceClient::notifyFinished):
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::finishLoading):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::finishLoading):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::finishLoading):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::finishLoading):
        (WebCore::CachedXSLStyleSheet::checkNotify):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/KeepaliveRequestTracker.cpp:
        (WebCore::KeepaliveRequestTracker::notifyFinished):
        * loader/cache/KeepaliveRequestTracker.h:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::notifyFinished):
        * loader/icon/IconLoader.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::loadFinished):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::CachedResourceMediaLoader::notifyFinished):
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::operator== const):
        (WebCore::NetworkLoadMetrics::encode const):
        (WebCore::NetworkLoadMetrics::decode):
        (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::encode): Deleted.
        (WTF::Persistence::Coder<Optional<WebCore::NetworkLoadPriority>>::decode): Deleted.
        * platform/network/cocoa/NetworkLoadMetrics.mm:
        (WebCore::copyTimingData):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (networkLoadMetricsDate):
        (-[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics fetchStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics domainLookupEndDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics connectStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics secureConnectionStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics connectEndDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics requestStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics responseStartDate]):
        (-[WebCoreNSURLSessionTaskTransactionMetrics responseEndDate]):
        (-[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]):
        (-[WebCoreNSURLSessionTaskMetrics transactionMetrics]):
        (WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished):
        (-[WebCoreNSURLSessionDataTask _finish]):
        (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]):
        (-[WebCoreNSURLSessionDataTask resource:accessControlCheckFailedWithError:]):
        (-[WebCoreNSURLSessionDataTask resource:loadFailedWithError:]):
        (-[WebCoreNSURLSessionDataTask resourceFinished:metrics:]):
        (-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:]): Deleted.
        (-[WebCoreNSURLSessionDataTask resourceFinished:]): Deleted.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::notifyFinished):
        * rendering/RenderElement.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderImage.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::notifyFinished):
        * rendering/RenderLayerFilters.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFEImageElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyFinished):
        * svg/SVGUseElement.h:

2020-05-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [CG] Change the UTI of the "WebP" image to be "org.webmproject.webp"
        https://bugs.webkit.org/show_bug.cgi?id=211794
        <rdar://problem/63031187>

        Reviewed by Darin Adler.

        See https://developers.google.com/speed/webp/docs/riff_container.

        * platform/graphics/cg/UTIRegistry.cpp:
        (WebCore::defaultSupportedImageTypes):
        Fix review comments from bug 208038.

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

        Move perspective-setting code into its own function
        https://bugs.webkit.org/show_bug.cgi?id=211812

        Reviewed by Zalan Bujtas.

        Move the code that updates anchor point and children transform (for perspective)
        into its own function.

        No behavior change.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateChildrenTransformAndAnchorPoint):
        (WebCore::computeOffsetFromAncestorGraphicsLayer):
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerBacking.h:

2020-05-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Don't assume extensions always exist
        https://bugs.webkit.org/show_bug.cgi?id=211760
        <rdar://problem/61217642>

        Reviewed by Brent Fulgham.

        * Modules/webauthn/fido/U2fCommandConstructor.cpp:
        (fido::processGoogleLegacyAppIdSupportExtension):

2020-05-12  Jer Noble  <jer.noble@apple.com>

        [iOS] REGRESSION: (r261342) Play/pause button doesn't work upon first entering fullscreen mode
        https://bugs.webkit.org/show_bug.cgi?id=211797
        <rdar://problem/63118008>

        Reviewed by Eric Carlson.

        In r261342 we added code to handle "canplay" and "waiting" events without ever actually
        adding event listeners for them. So when we enter fullscreen before the "canplay" event, we
        never re-evaluate whether we're playing or not.

        Drive-by fix: Also noticed that stalls will cause the play/pause toggle to switch from the
        "pause icon" to the "play icon", which is incorrect; we're still "playing" event when we're
        stalled. So when we are in the stalled state, set the "playbackRate" property to some very
        small, but non-zero value. This will cause the playback slider to stop progressing, but
        won't also cause the play/pause button to swap states.

        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::observedEventNames):

2020-05-12  Chris Dumez  <cdumez@apple.com>

        [WK2] Neuter WKFrameIsFrameSet() / WKPageGetFrameSetLargestFrame() C API
        https://bugs.webkit.org/show_bug.cgi?id=211808

        Reviewed by Darin Adler.

        Neuter WKFrameIsFrameSet() / WKPageGetFrameSetLargestFrame() C API. This is only SPI and is only used for slightly
        different printing behavior in Safari. Framesets are no longer supported in HTML5 and are now super rare. Support
        for this C API adds quite a bit of code complexity and crashes such as <rdar://problem/60322282>, it just does not
        seem worth it anymore.

        * dom/Document.cpp:
        (WebCore::Document::resume):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedIntoAncestor):
        (WebCore::HTMLFrameSetElement::removedFromAncestor):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:

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

        Clean up some transformOrigin and perspectiveOrigin code
        https://bugs.webkit.org/show_bug.cgi?id=211807

        Reviewed by Zalan Bujtas.

        Add LengthPoint and LengthSize-based "value for length" functions so we can do
        point and size math as we do for LayoutPoint/FloatPoint etc.

        Use them in code that computes transform and perspective origins.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::computeTransformedExtentViaTransformList const):
        * css/LengthFunctions.cpp:
        (WebCore::sizeForLengthSize):
        (WebCore::pointForLengthPoint):
        (WebCore::floatPointForLengthPoint):
        * css/LengthFunctions.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::computeTransformedExtentViaTransformList const):
        * platform/Length.h:
        * platform/LengthPoint.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::perspectiveTransform const):
        (WebCore::RenderLayer::perspectiveOrigin const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::computeTransformOriginForPainting const):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path):
        (WebCore::floatSizeForLengthSize): Deleted.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::applyTransform const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::transformOriginXY const): Explicitly "xy" because it excludes the z component.
        (WebCore::RenderStyle::perspectiveOrigin const):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::StyleRareNonInheritedData::perspectiveOrigin const):
        * rendering/style/StyleTransformData.h:
        (WebCore::StyleTransformData::originXY const):

2020-05-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wattribute warning in BreakLines.cpp
        https://bugs.webkit.org/show_bug.cgi?id=211784

        Reviewed by Darin Adler.

        Remove export attribute. These only work in header files.

        * rendering/BreakLines.cpp:

2020-05-12  Eric Carlson  <eric.carlson@apple.com>

        Poster set after playback begins should be ignored
        https://bugs.webkit.org/show_bug.cgi?id=211464
        <rdar://problem/62605114>

        Reviewed by Darin Adler.

        Test: media/video-poster-set-after-playback.html

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute): Ignore `poster` changes after first video frame
        is available.
        (WebCore::HTMLVideoElement::updateDisplayState): Set mode to Video if the first video
        frame is available.

        * testing/Internals.cpp:
        (WebCore::Internals::elementShouldDisplayPosterImage const):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Perpective origin should be relative to the reference box
        https://bugs.webkit.org/show_bug.cgi?id=211769

        Reviewed by Zalan Bujtas.

        Use the reference box <https://drafts.csswg.org/css-transforms-1/#reference-box> when
        computing perspective-origin <https://drafts.csswg.org/css-transforms-2/#perspective-origin-property>,
        adding a referenceBox() helper on RenderBox.

        The code to compute the perspective transform is wrong; for now, fudge it by passing in the border box,
        but this code needs to account for GraphicsLayer geometry and transform-origin in future (webkit.org/b/211787).

        Test: compositing/transforms/perspective-transform-box.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::referenceBox const):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceRectFromBox):
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform const):
        (WebCore::RenderLayer::perspectiveTransform const):
        (WebCore::RenderLayer::computeClipPath const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):

2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed PlayStation / clang-cl build fix following r261533.

        Apparently r261572 only caught half of the cases.

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::estimateSize):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::generateIndexKeyMapForValue):

2020-05-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Text is clipped when rendered with fonts which have a negative line gap metric
        https://bugs.webkit.org/show_bug.cgi?id=211683
        <rdar://problem/62192986>

        Reviewed by Zalan Bujtas.

        ... As seen on nytimes.com.

        Some fonts have negative line gap metrics. Chrome and Firefox both clamp it to 0, so the
        line-height isn't decreased. However, we were honoring the negative line gap, thereby decreasing
        line-height.

        There are some typographical reasons to want a negative line gap, which is why this clamping
        behavior shouldn't be done in the platform text library. In the interest of matching other
        browsers, we should perform this clamping ourselves in WebKit.

        Test: fast/text/negative-line-gap.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::platformGlyphInit):

2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed PlayStation / clang-cl build fix following r261533.

        clang for Windows (< v10.0.0) cannot destructure a const class.
        See also r254471, r249524, etc.

        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):

2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed PlayStation build fix following r261494.

        * PlatformPlayStation.cmake:

2020-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rework drag and drop handling in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=211723

        Reviewed by Adrian Perez de Castro.

        Remove PasteboardHelper that is no longer used and add conversion functions to GtkUtilities.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * platform/gtk/GtkUtilities.cpp:
        (WebCore::gdkDragActionToDragOperation):
        (WebCore::dragOperationToGdkDragActions):
        (WebCore::dragOperationToSingleGdkDragAction):
        * platform/gtk/GtkUtilities.h:
        * platform/gtk/PasteboardHelper.cpp: Removed.
        * platform/gtk/PasteboardHelper.h: Removed.

2020-05-12  Jacob Uphoff  <jacob_uphoff@apple.com>

        Unreviewed, reverting r261557.

        This commit caused testing to exit early due to too many
        crashes on macOS Catalina Asan

        Reverted changeset:

        "Allow WebAudioBufferList to dynamically change its number of
        frames"
        https://bugs.webkit.org/show_bug.cgi?id=211720
        https://trac.webkit.org/changeset/261557

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

        Speculative fix for crash in ScrollingTree::handleWheelEvent()
        https://bugs.webkit.org/show_bug.cgi?id=211763
        <rdar://problem/62926117>

        Reviewed by Andy Estes.

        Crash data shows a null-deref crash in ScrollingTree::handleWheelEvent() which
        is most likely because m_rootNode is null. Protect against this.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):

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

        Allow WebAudioBufferList to dynamically change its number of frames
        https://bugs.webkit.org/show_bug.cgi?id=211720

        Reviewed by Eric Carlson.

        We sometimes create WebAudioBufferList on the stack which triggers allocation of several vectors.
        Instead of doing that for every audio sample chunk, we should allocate the WebAudioBufferList and resize it as necessary.
        For that purpose, we introduce WebAudioBufferList::updateWithNumberOfFrames and use it in two places:
        - When creating an audio track into WebAudio.
        - When receiving audio chunks from another process.
        Covered by existing tests.

        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::~MediaStreamAudioSource):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp:
        (WebCore::streamDescription):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * platform/audio/cocoa/WebAudioBufferList.cpp:
        (WebCore::WebAudioBufferList::WebAudioBufferList):
        (WebCore::WebAudioBufferList::updateWithNumberOfFrames):
        (WebCore::WebAudioBufferList::channelCount const):
        * platform/audio/cocoa/WebAudioBufferList.h:

2020-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Rework clipboard handling in preparation for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=211511

        Reviewed by Adrian Perez de Castro.

        Remove PlatformPasteboard implementation that has been replaced by Clipboard class in the WebKit
        layer. When Pasteboard class is created for copy and paste operations, it no longer has a SelectionData member,
        it just uses the new methods in the pasteboard strategy to communicate with the clipboard. WebContentReader has
        now an implementation for GTK and it's used when reading from the clipboard, the same way it's done in other ports.

        * SourcesGTK.txt:
        * editing/WebContentReader.h:
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard): Use webContentFromPasteboard().
        (WebCore::Editor::webContentFromPasteboard): Use WebContentReader.
        * editing/gtk/WebContentReaderGtk.cpp: Added.
        (WebCore::WebContentReader::readFilePath):
        (WebCore::WebContentReader::readFilePaths):
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentReader::readPlainText):
        (WebCore::WebContentReader::readImage):
        (WebCore::WebContentReader::readURL):
        (WebCore::WebContentMarkupReader::readHTML):
        * platform/Pasteboard.h:
        (WebCore::PasteboardWebContentReader::readDataBuffer):
        * platform/PasteboardStrategy.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::selectionData const):
        (WebCore::Pasteboard::writeString):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings):
        (WebCore::Pasteboard::readString):
        (WebCore::Pasteboard::fileContentState):
        * platform/gtk/PasteboardHelper.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/PlatformPasteboardGtk.cpp: Removed.
        * platform/gtk/SelectionData.cpp:
        (WebCore::SelectionData::setURL): Do not override the text and markup if it has already been set.

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

        Introduce a RealtimeMediaSource video sample observer
        https://bugs.webkit.org/show_bug.cgi?id=211718

        Reviewed by Eric Carlson.

        We introduce an observer dedicated to video samples similarly to AudioSampleObserver for audio.
        This will allow to move video frame processing out of the main thread progressively.
        For now, we remove video sample observing from the track private and observers should now register directly to the realtime media source.
        We update the various users, including MediaRecorder and the media player.
        In both cases, they will only observe the video track to be played/recorded, which is both more efficient and simpler.

        We introduced RealtimeMediaSource::Observer::hasStartedProducingData callback for MediaStreamTrackPrivate so 
        that the processing to do when the first samples are available can be done on the main thread.

        MediaStreamTrackPrivate no longer filters out samples if it is not enabled.
        As such, each consumer is now responsible to observe/unobserve the source when its track gets enabled/disabled similarly as for audio,
        or do nothing if track is not enabled.

        Similarly, RealtimeOutgoingVideoSourceCocoa will now only observe video samples when the track is enabled and not muted.

        Covered by existing tests.

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::sampleBufferUpdated): Deleted.
        * Modules/mediarecorder/MediaRecorder.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample):
        We can renove the track check since we only observe the active video track.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::videoSampleAvailable):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::checkSelectedVideoTrack):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sampleBufferUpdated): Deleted.
        * platform/mediarecorder/MediaRecorderPrivate.h:
        (WebCore::MediaRecorderPrivate::setVideoSource):
        (WebCore::MediaRecorderPrivate::~MediaRecorderPrivate):
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.cpp:
        (WebCore::MediaRecorderPrivateAVFImpl::create):
        (WebCore::MediaRecorderPrivateAVFImpl::~MediaRecorderPrivateAVFImpl):
        (WebCore::MediaRecorderPrivateAVFImpl::videoSampleAvailable):
        (WebCore::MediaRecorderPrivateAVFImpl::stopRecording):
        (WebCore::MediaRecorderPrivateAVFImpl::sampleBufferUpdated): Deleted.
        * platform/mediarecorder/MediaRecorderPrivateAVFImpl.h:
        * platform/mediarecorder/MediaRecorderPrivateMock.cpp:
        (WebCore::MediaRecorderPrivateMock::MediaRecorderPrivateMock):
        (WebCore::MediaRecorderPrivateMock::~MediaRecorderPrivateMock):
        (WebCore::MediaRecorderPrivateMock::stopRecording):
        (WebCore::MediaRecorderPrivateMock::videoSampleAvailable):
        (WebCore::MediaRecorderPrivateMock::sampleBufferUpdated): Deleted.
        * platform/mediarecorder/MediaRecorderPrivateMock.h:
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::hasStartedProducingData):
        (WebCore::MediaStreamTrackPrivate::updateReadyState):
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable): Deleted.
        (WebCore::MediaStreamTrackPrivate::hasStartedProducingAudioData): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::addVideoSampleObserver):
        (WebCore::RealtimeMediaSource::removeVideoSampleObserver):
        (WebCore::RealtimeMediaSource::updateHasStartedProducingData):
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::audioSamplesAvailable):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::unobserveSource):
        (WebCore::RealtimeOutgoingVideoSource::updateBlackFramesSending):
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::~RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::startProducingData):
        (WebCore::RealtimeVideoSource::stopProducingData):
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::~Internals):
        (WebCore::Internals::stopObservingRealtimeMediaSource):
        (WebCore::Internals::observeMediaStreamTrack):
        * testing/Internals.h:

2020-05-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Audio messages in web.whatsapp.com only play once.
        https://bugs.webkit.org/show_bug.cgi?id=211627

        Reviewed by Xabier Rodriguez-Calvar.

        Test: media/video-src-blob-replay.html
        
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateDownloadBufferingFlag): Make sure on-disk
        buffering is disabled for blob URIs, because it messes up the pipeline for replays, and it's
        useless for that use-case anyway.

2020-05-12  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Need to advertise support for WebP in the Accept header
        https://bugs.webkit.org/show_bug.cgi?id=211735

        Reviewed by Darin Adler.

        On Mac and iOS, the system has to support WebP: HAVE(WEBP).
        On other platforms, WebKit has to be able to decode WebP images: USE(WEBP).

        * css/CSSCalculationValue.cpp:
        (WebCore::createCSS):
        Fix unrealted coding style issue.

        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::acceptHeaderValueForImageResource):
        (WebCore::acceptHeaderValueFromType):

2020-05-11  Darin Adler  <darin@apple.com>

        Fix problems caught by replacing WTF::Optional with std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211703

        Reviewed by Chris Dumez.

        * editing/EditorCommand.cpp:
        (WebCore::executeSelectToMark): Remove erroneous code that converts
        a live range to a SimpleRange and then back again.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest): Pass a pointer to
        a ResourceRequest.
        (WebCore::InspectorNetworkAgent::didLoadResourceFromMemoryCache): Ditto.
        (WebCore::InspectorNetworkAgent::buildInitiatorObject): Take a const*
        to a ResourceRequest instead of an Optional<const ResourceRequest&>
        because std::optional does not work with reference types.
        * inspector/agents/InspectorNetworkAgent.h: Update for the change above.

        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::Iterator::operator++): Fix code that was accidentally
        comparing two optionals, after already checking them for null. Instead
        we should compare their values.

        * platform/PlatformScreen.cpp:
        (WebCore::screenData): Return a const* instead of an Optional<const&>
        because std::optonal does not work with reference types.
        * platform/PlatformScreen.h: Updated for the above. Also removed both
        the unneeded include of Optional.h (could have included Forward.h) and
        of HashMap.h and put the Mac-specific type IORegistryGPUID inside a
        PLATFORM(MAC) #if statement.

        * platform/ScreenProperties.h: Moved the HashMap.h include here, since
        this is the header that uses it. Changed the EncodedColorSpaceDataType
        enum to an enum class and gave it much shorter names.
        (WebCore::ScreenData::encode const): Updated for the enum class change.
        Also fixed a mistake where the code would use operator<< instead of
        encodeEnum for the color space type of Null. This would lead to some
        kind of decoding error, rather than a null cgColorSpace.
        (WebCore::ScreenData::decode): Ditto.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenIsMonochrome): Updated since screenData returns a pointer.
        (WebCore::screenHasInvertedColors): Ditto.
        (WebCore::screenSupportsExtendedColor): Ditto.
        (WebCore::screenSize): Ditto.
        (WebCore::availableScreenSize): Ditto.

        * platform/mac/PlatformScreenMac.mm: Moved declaration of
        CGDisplayUsesForceToGray to CoreGraphicsSPI.h. Removed unused declaration
        of CGDisplayUsesInvertedPolarity.
        (WebCore::primaryOpenGLDisplayMask): Updated since screendData returns a pointer.
        (WebCore::displayMaskForDisplay): Ditto.
        (WebCore::gpuIDForDisplay): Ditto.
        (WebCore::screenProperties): Ditto. Also renamed from getScreenProperties to
        adhere to WebKit coding style.
        (WebCore::screenIsMonochrome): Ditto.
        (WebCore::screenHasInvertedColors): Ditto.
        (WebCore::screenDepth): Ditto.
        (WebCore::screenDepthPerComponent): Ditto.
        (WebCore::screenRectForDisplay): Ditto.
        (WebCore::screenRect): Ditto.
        (WebCore::screenAvailableRect): Ditto.
        (WebCore::screenColorSpace): Ditto.
        (WebCore::screenSupportsExtendedColor): Ditto.
        (WebCore::screenSupportsHighDynamicRange): Ditto.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::queueTaskToFireInstallEvent):
        Removed capture of unused jobDataIdentifier.

2020-05-11  James Darpinian  <jdarpinian@chromium.org>

        WebGLLayer clobbers TEXTURE_2D binding on iOS
        https://bugs.webkit.org/show_bug.cgi?id=211758

        Reviewed by Dean Jackson.

        WebGLLayer was accidentally clobbering the TEXTURE_2D binding on iOS because IOSurfaces
        are bound to TEXTURE_2D instead of TEXTURE_RECTANGLE. This fixes a bunch of iOS-specific
        WebGL conformance failures including:
        texture-bindings-unaffected-on-resize.html
        default-texture.html
        tex-image-and-sub-image-2d-with-canvas-rgb565.html and friends

        * platform/graphics/GraphicsContextGL.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]):
        (-[WebGLLayer bindFramebufferToNextAvailableSurface]):

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

        [ macOS ] scrollingcoordinator/mac/latching/scrolling-select-should-not-latch-mainframe.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211747

        Reviewed by Tim Horton.

        Add an option to monitorWheelEvents to reset latching.

        * page/Page.cpp:
        (WebCore::Page::startMonitoringWheelEvents):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::startMonitoringWheelEvents):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::startMonitoringWheelEvents):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::monitorWheelEvents):
        * testing/js/WebCoreTestSupport.h:

2020-05-11  Andres Gonzalez  <andresg_22@apple.com>

        Fixes for crashes in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211740

        Reviewed by Chris Fleizach.

        Fixes for several LayoutTests in isolated tree mode.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase attachIsolatedObject:]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]):
        (-[WebAccessibilityObjectWrapper textMarkerForVisiblePosition:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):

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

        Scrollbars flicker in RTL scrollable regions
        https://bugs.webkit.org/show_bug.cgi?id=211757

        Reviewed by Tim Horton.

        Scrollbars deal in scroll offsets (zero-based), not scroll positions (scroll-origin based) so
        the scrolling thread needs to update scrollbar painters using offsets.

        Not testable because this is a transient state that gets fixed by the main thread.

        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateScrollbarPainters):

2020-05-11  Ben Nham  <nham@apple.com>

        Improve accuracy of IndexedDB estimated write size computation
        https://bugs.webkit.org/show_bug.cgi?id=211360

        Reviewed by Brady Eidson.

        We currently estimate the size of a put in IndexedDB for quota check purposes with something
        like:

          estimatedWriteSize = (1 + numIndices) * (keySize + valueSize)

        However, this can lead to large overestimates of write sizes. This is because secondary
        indices only store a mapping of secondary index key => primary key; they do not store the
        entire value. In the example site attached to 202137 (another DB quota-related bug), the
        the heuristic estimates that one of the put operations would use more than 800 MB when it
        actually uses 220 MB. This inaccuracy leads to spurious disk quota permission modals being
        presented in Safari.

        This patch improves the write size computation by generating the secondary index keys before
        estimating the write size. The performance should be about the same since we save the
        generated index keys for later usage when we actually add the record to the DB.

        * Headers.cmake:
        * Modules/indexeddb/server/IDBBackingStore.h:
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::MemoryIDBBackingStore):
        (WebCore::IDBServer::MemoryIDBBackingStore::addRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::serializationContext):
        * Modules/indexeddb/server/MemoryIDBBackingStore.h:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        (WebCore::IDBServer::MemoryObjectStore::addRecord):
        (WebCore::IDBServer::MemoryObjectStore::updateIndexesForPutRecord):
        * Modules/indexeddb/server/MemoryObjectStore.h:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::serializationContext):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::estimateSize):
        (WebCore::IDBServer::UniqueIDBDatabase::putOrAdd):
        * Modules/indexeddb/shared/IndexKey.h:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::generateIndexKeyMapForValue):
        * bindings/js/IDBBindingUtilities.h:

2020-05-11  Kate Cheney  <katherine_cheney@apple.com>

        Fail navigations to non app-bound domains after use of app-bound APIs
        https://bugs.webkit.org/show_bug.cgi?id=211647
        <rdar://problem/62978159>

        Reviewed by Brent Fulgham.

        Simplified in-app browser privacy protections check into one, better
        named function.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):
        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * page/Page.cpp:
        (WebCore::Page::injectUserStyleSheet):
        * page/WebKitNamespace.cpp:
        (WebCore::WebKitNamespace::messageHandlers):
        * style/StyleScopeRuleSets.cpp:
        (WebCore::Style::ScopeRuleSets::initializeUserStyle):
        Rearranged ordering so the message to WebPageProxy only gets sent to
        indicate app-bound behavior if user style sheets actually exist.

2020-05-11  Peng Liu  <peng.liu6@apple.com>

        Enable the mock video presentation mode in related layout tests and fix test failures
        https://bugs.webkit.org/show_bug.cgi?id=211645

        Reviewed by Eric Carlson.

        Revert the unnecessary change in r261493 to fix the build failures when
        the Picture-in-Picture API is disabled.

        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:

2020-05-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove some unnecessary indirection when getting Document’s Editor
        https://bugs.webkit.org/show_bug.cgi?id=211744

        Reviewed by Geoffrey Garen.

        After r261018, there's no longer a need to reach into Document's Frame to get the Editor instance, since
        Document itself owns the Editor (and Frame's implementation of editor() just calls back into the document
        anyways). No change in behavior.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetSpelling):
        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):
        (WebCore::Document::registerAttachmentIdentifier):
        (WebCore::Document::didInsertAttachmentElement):
        (WebCore::Document::didRemoveAttachmentElement):
        * testing/Internals.cpp:
        (WebCore::Internals::markerCountForNode):
        (WebCore::Internals::setMarkedTextMatchesAreHighlighted):
        (WebCore::Internals::lastSpellCheckRequestSequence):
        (WebCore::Internals::lastSpellCheckProcessedSequence):
        (WebCore::Internals::hasSpellingMarker):
        (WebCore::Internals::hasAutocorrectedMarker):
        (WebCore::Internals::setContinuousSpellCheckingEnabled):
        (WebCore::Internals::setAutomaticQuoteSubstitutionEnabled):
        (WebCore::Internals::setAutomaticLinkDetectionEnabled):
        (WebCore::Internals::setAutomaticDashSubstitutionEnabled):
        (WebCore::Internals::setAutomaticTextReplacementEnabled):
        (WebCore::Internals::setAutomaticSpellingCorrectionEnabled):
        (WebCore::Internals::handleAcceptedCandidate):
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore::Internals::toggleOverwriteModeEnabled):
        (WebCore::Internals::rangeOfString):
        (WebCore::Internals::countMatchesForText):
        (WebCore::Internals::hasGrammarMarker):

2020-05-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: show JavaScript Worker name as an internal property
        https://bugs.webkit.org/show_bug.cgi?id=211708

        Reviewed by Timothy Hatcher.

        Test: inspector/worker/worker-create-and-terminate.html

        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::getInternalProperties):

        * workers/Worker.h:
        (WebCore::Worker::name const): Added.

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

        Have ScrollingThread use a RunLoop rather than rolling its own
        https://bugs.webkit.org/show_bug.cgi?id=211730

        Reviewed by Darin Adler.

        ScrollingThread rolled its own runloop/function dispatch by dropping to CF for macOS.
        Fix to use RunLoop which provides the same functionality.

        There was also a race creating the ScrollingThread for the first time, since both
        the main thread, and EventDispatcher can call ScrollingThread::dispatch() early on,
        so fix with a std::once block.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::singleton):
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::initializeRunLoop):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread): Deleted.
        (WebCore::ScrollingThread::wakeUpRunLoop): Deleted.
        (WebCore::ScrollingThread::threadRunLoopSourceCallback): Deleted.
        * page/scrolling/ScrollingThread.h:
        (WebCore::ScrollingThread::runLoop):
        * page/scrolling/mac/ScrollingThreadMac.mm: Removed.

2020-05-11  Peng Liu  <peng.liu6@apple.com>

        Enable the mock video presentation mode in related layout tests and fix test failures
        https://bugs.webkit.org/show_bug.cgi?id=211645

        Reviewed by Darin Adler.

        Clean up the internal states of video element regarding video presentation mode
        to simplify the task to write reliable layout tests for video fullscreen and
        Picture-in-Picture.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        Update the states after we are sure the video element will enter fullscreen.

        (WebCore::HTMLMediaElement::exitFullscreen):
        Remove the unnecessary "fullscreenModeChanged(VideoFullscreenModeNone)".

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::waitingToEnterFullscreen):

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitDisplayingFullscreen):
        The function webkitDisplayingFullscreen() will return true after the process
        to enter fullscreen is completed.

        * html/HTMLVideoElement.h:
        Expose didBecomeFullscreenElement() when VIDEO_PRESENTATION_MODE is enabled.

2020-05-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Document.getAnimations() should only consider document connection and not timeline association
        https://bugs.webkit.org/show_bug.cgi?id=211697

        Reviewed by Dean Jackson.

        The Document.getAnimations() function should return any animation running for an element that is a child of the
        target Document. We now consider all current animations, regardless of which timeline they might be associated
        with. This lets us pass the final two WPT Document.getAnimations() tests.

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

2020-05-11  Andres Gonzalez  <andresg_22@apple.com>

        Add implementation  for AXIsolatedObject::elementPath, hasHighlighting, isBlockquote, isKeyboardFocusable.
        https://bugs.webkit.org/show_bug.cgi?id=211732

        Reviewed by Chris Fleizach.

        Covered by several tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isBlockquote const): Moved to base class.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        (WebCore::AXCoreObject::isBlockquote const):
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData): Cache the above mentioned properties.
        (WebCore::AXIsolatedObject::pathAttributeValue const):
        (WebCore::AXIsolatedObject::isBlockquote const): Moved to base class.
        (WebCore::AXIsolatedObject::isKeyboardFocusable const): Implemented inline in header.
        (WebCore::AXIsolatedObject::hasHighlighting const): Implemented inline in header.
        (WebCore::AXIsolatedObject::elementPath const): Implemented inline in header.
        * accessibility/isolatedtree/AXIsolatedObject.h:

2020-05-11  Alex Christensen  <achristensen@webkit.org>

        Fix assertion after r261414
        https://bugs.webkit.org/show_bug.cgi?id=211731

        This fixes a debug assertion that fired 100% of the time when running the test introduced in r261414
        I also respond to Darin's and Youenn's post-commit feedback.

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setHTTPReferrer):

2020-05-11  Andres Gonzalez  <andresg_22@apple.com>

        Check the validity of the underlying Document before updating the isolated tree.
        https://bugs.webkit.org/show_bug.cgi?id=211728

        Reviewed by Chris Fleizach.

        Solves crashes in isolated tree mode for several LayoutTests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedUIElementForPage): Update the focused
        document styles before returning the isolated tree focused object.

        (WebCore::AXObjectCache::notificationPostTimerFired): Ignored
        notification if underlying Document doesn't have a living render tree.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::updateChildren): Don't update isolated object
        if associated AXObject doesn't have a Document or the Document doesn't have a live render tree.

2020-05-11  Andres Gonzalez  <andresg_22@apple.com>

        Add mechanism to turn on accessibility isolated tree mode from WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=211725

        Reviewed by Chris Fleizach.

        If the client is WebKitTestRunner, enable isolated tree mode.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::isIsolatedTreeEnabled):

2020-05-11  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed, reverting r261296.

        Rolling r260769 back in, since this was not causing a
        regression.

        Reverted changeset:

        "Unreviewed, reverting r260769."
        https://bugs.webkit.org/show_bug.cgi?id=211578
        https://trac.webkit.org/changeset/261296

2020-05-11  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Introduce GridSpace
        https://bugs.webkit.org/show_bug.cgi?id=211712

        Reviewed by Antti Koivisto.

        Normally we use the initial width/height (minimum width/height) value to compute the
        distribution ratio for the extra space (e.g minimum widths are [ 1 ] [ 2 ] extra space: 6; final widths [ 1 + 2 ] [ 2 + 4 ]).
        However is some rare case, while we use the minimum widths as the initial widths, the distribution ratio
        is computed using the maximum widths.
        This patch introduces GridSpace to be able to differentiate initial and distribution widths/heights (no functional change yet).

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::GridSpace::isEmpty const):
        (WebCore::Layout::max):
        (WebCore::Layout::operator-):
        (WebCore::Layout::operator+=):
        (WebCore::Layout::operator-=):
        (WebCore::Layout::operator/):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):

2020-05-10  Antoine Quint  <graouts@apple.com>

        [Web Animations] Refactor animation comparison by composite order in a single utility function
        https://bugs.webkit.org/show_bug.cgi?id=211695

        Reviewed by Darin Adler.

        We used to split sorting of animations by composite order across several functions and files. Specifically,
        DocumentTimeline::getAnimations() would first collect animations by class (CSS Transitions, then CSS
        Animations, then JS-originated animations), and then sort each class, calling into the static function
        compareDeclarativeAnimationOwningElementPositionsInDocumentTreeOrder() in some cases and into the
        WebAnimationUtilities compareAnimationsByCompositeOrder() function in other.

        Since we need to be able to sort animations by composite order in other situations, for instance when sorting
        events when updating animations and sending events (which we will do in a future patch), we refactor all
        of the comparison logic into compareAnimationsByCompositeOrder(), removing the need to provide an AnimationList,
        which is specific to the case where we know we are comparing CSSAnimation objects targeting a shared element.

        This effectively empties DocumentTimeline::getAnimations() so we remove this function and filter relevant
        animations in Document::matchingAnimations() and call compareAnimationsByCompositeOrder() before returning
        the compiled animations.

        No new tests since there is no change of behavior.

        * animation/DocumentTimeline.cpp:
        (WebCore::compareDeclarativeAnimationOwningElementPositionsInDocumentTreeOrder): Deleted.
        (WebCore::DocumentTimeline::getAnimations const): Deleted.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::ensureEffectsAreSorted):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::commitStyles):
        * animation/WebAnimationUtilities.cpp:
        (WebCore::compareDeclarativeAnimationOwningElementPositionsInDocumentTreeOrder):
        (WebCore::compareCSSTransitions):
        (WebCore::compareCSSAnimations):
        (WebCore::compareAnimationsByCompositeOrder):
        * animation/WebAnimationUtilities.h:
        * dom/Document.cpp:
        (WebCore::Document::matchingAnimations):

2020-05-11  Charlie Turner  <cturner@igalia.com>

        [WPE] Layout test media/encrypted-media/mock-MediaKeySystemAccess.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=181225

        Reviewed by Darin Adler.

        WebCore::CDM::createInstance assumes its private instance always
        produces a valid pointer. This is not the case in the testing
        mocks. Guard against it.

        Test: media/encrypted-media/mock-MediaKeySystemAccess.html

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::createInstance): Guard against null pointers in
        mock scenarios.

2020-05-10  Rob Buis  <rbuis@igalia.com>

        Fix base64.any.html test
        https://bugs.webkit.org/show_bug.cgi?id=211671

        Reviewed by Darin Adler.

        Fix base64.any.html test by extending DataURLDecoder with a
        forgiving-base64 decode mode [1], as used by the Fetch
        data: URL processor algorithm [2].

        Behavior matches Chrome and Firefox.

        [1] https://infra.spec.whatwg.org/#forgiving-base64-decode
        [2] https://fetch.spec.whatwg.org/#data-url-processor

        Test: imported/w3c/web-platform-tests/fetch/data-urls/base64.any.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):
        (WebCore::DataURLDecoder::decode):
        * platform/network/DataURLDecoder.h:

2020-05-10  Darin Adler  <darin@apple.com>

        Add copy constructor and assignment operator to Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=211705

        Reviewed by Sam Weinig.

        * dom/BoundaryPoint.h: As a test of the change to Ref, remove the explicit
        copy and move constructors and assignment operators, relying on the defaults
        instead, which are now exactly what we want.

2020-05-10  Michael Catanzaro  <mcatanzaro@gnome.org>

        Update user agent quirk for bankofamerica.com
        https://bugs.webkit.org/show_bug.cgi?id=211700

        Reviewed by Carlos Garcia Campos.

        The Mac platform quirk isn't working anymore. The Chrome quirk works.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):
        (WebCore::urlRequiresMacintoshPlatform):

2020-05-10  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(CORE_VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=211677

        Reviewed by Dan Bernstein.

        * page/cocoa/MemoryReleaseCocoa.mm:
        * platform/cocoa/CoreVideoSoftLink.cpp: Remove HAVE(CORE_VIDEO).
        * platform/cocoa/CoreVideoSoftLink.h: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage): Ditto.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const): Ditto.
        * platform/graphics/cv/PixelBufferConformerCV.cpp: Ditto.
        * platform/graphics/cv/PixelBufferConformerCV.h: Ditto.
        * platform/graphics/cv/TextureCacheCV.h: Ditto.
        * platform/graphics/cv/TextureCacheCV.mm: Ditto.
        * platform/graphics/cv/VideoTextureCopierCV.cpp: Ditto.
        * platform/graphics/cv/VideoTextureCopierCV.h: Ditto.

2020-05-09  Darin Adler  <darin@apple.com>

        Tighten up logic in DocumentTimelinesController::updateAnimationsAndSendEvents
        https://bugs.webkit.org/show_bug.cgi?id=211668

        Reviewed by Antoine Quint.

        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        Use Ref instead of RefPtr. Use Ref even in timelinesToUpdate; no harm in doing
        a little bit of extra ref'ing. Use copyToVector when iterating relevantAnimations
        since it could be a problem if the current animation was removed from the
        ListHashSet while we are iterating it and there is no obvious reason that can't
        happen. Use makeRef instead of makeRefPtr. Take advantage of the behavior of
        the Optional operator<, which already treats nullopt as less than any non-nullopt
        value, and remove unnecessary checks that weere doing the same thing explicitly.
        This fixes a mistake where we were returning true when both are nullopt, which
        could harm the stability of the sort, in theory. Add a null check of the timeline
        when iterating completedTransitions, since there is no obvious guarantee they
        could not have been removed as a side effect earlier.

2020-05-10  Darin Adler  <darin@apple.com>

        Use makeReversedRange and get rid of one-off ReverseView
        https://bugs.webkit.org/show_bug.cgi?id=211675

        Reviewed by Sam Weinig.

        * editing/markup.cpp:
        (WebCore::ReverseView): Deleted.
        (WebCore::StyledMarkupAccumulator::takeResults): Use makeReversedRange.

2020-05-10  Tim Horton  <timothy_horton@apple.com>

        Clicking a tel:// link on iPad with a trackpad presents different UI than tapping on it
        https://bugs.webkit.org/show_bug.cgi?id=211686
        <rdar://problem/57941589>

        Reviewed by Wenson Hsieh.

        * dom/MouseRelatedEvent.h:
        * editing/cocoa/DataDetection.h:
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::canPresentDataDetectorsUIForElement):
        (WebCore::DataDetection::shouldCancelDefaultAction): Deleted.
        Rename shouldCancelDefaultAction to canPresentDataDetectorsUIForElement.
        This bit indicates whether a given element should invoke DD UI instead of
        doing its default action, so either name is OK, but it feels better to
        have it in the affirmative direction.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        Determine if tapping on an anchor should invoke DataDetectors UI instead
        of performing the default action, and short-circuit if that is possible.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:

2020-05-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Search field on mayoclinic.org/forms/us-resident-appointment clips the submit button
        https://bugs.webkit.org/show_bug.cgi?id=211673
        <rdar://problem/62572501>

        Reviewed by Tim Horton.

        Allow search fields to be style-able, but only if the CSS `border` value is non-default.

        Note that there was a previous attempt to achieve something similar in r157443 by adding search fields to the
        base class implementation of `RenderTheme::isControlStyled`; however, this patch wasn't actually accompanied by
        support for rendering native search fields with a non-default background, which meant that  customizing just the
        background of a search field would cause the entire search field to opt out of the native search field
        appearance (a pill with rounded corners on macOS).

        However, in the case where the border is customized on macOS, it is incorrect to use the default search field
        appearance, since the search field cell just consists of a border; as such, there should be little compatibility
        risk of a web page unexpectedly getting the fallback (non-native) appearance for a search field, due to having
        custom border styles.

        This also makes the behavior of search fields match that of text fields, textareas, and list boxes (multi-option
        selects) on macOS, in terms of what is needed in order to bail out of native appearance rendering.

        Rebaselined existing tests: fast/css/text-input-with-webkit-border-radius.html
                                    fast/forms/search-styled.html

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::isControlStyled const): Add SearchFieldPart.

2020-05-09  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r258493): CRASH running fast/mediastream/RTCPeerConnection tests
        https://bugs.webkit.org/show_bug.cgi?id=211666
        <rdar://problem/63055644>

        Reviewed by Eric Carlson.

        MockMediaStreamTrack advertises that it's a webrtc::VideoTrackInterface, but doesn't inherit from
        that interface, leading to a crash when its pointer is cast to webrtc::VideoTrackInterface and a
        virtual method called on the resulting pointer. Since it's only used in one place, and since there's
        an existing mock webrtc::VideoTrackInterface object in that same file, remove MockMediaStreamTrack
        and replace the one place it's used with MockLibWebRTCVideoTrack.

        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockMediaStreamTrack::state const): Deleted.

2020-05-09  David Kilzer  <ddkilzer@apple.com>

        XML external entity resources should only be loaded from XML MIME types
        <https://webkit.org/b/211488>
        <rdar://problem/62869515>

        Reviewed by Darin Adler.

        Tests: dom/xhtml/level3/core/entitygetinputencoding03.xhtml
               dom/xhtml/level3/core/entitygetinputencoding04.xhtml
               dom/xhtml/level3/core/entitygetxmlencoding02.xhtml
               dom/xhtml/level3/core/entitygetxmlencoding03.xhtml
               dom/xhtml/level3/core/entitygetxmlencoding04.xhtml
               dom/xhtml/level3/core/entitygetxmlversion03.xhtml
               dom/xhtml/level3/core/entitygetxmlversion04.xhtml
               dom/xhtml/level3/core/nodegetbaseuri16.xhtml
               dom/xhtml/level3/core/nodegetbaseuri19.xhtml
               dom/xhtml/level3/core/nodegetbaseuri20.xhtml
               fast/parser/external-entities-in-xslt.xml
               fast/xsl/dtd-in-source-document.xml
               fast/xsl/xslt-second-level-import.xml
               http/tests/security/contentTypeOptions/nosniff-xml-external-entity.xhtml
               http/tests/security/xss-DENIED-xsl-external-entity-redirect.xml

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::href const):
        - Add comment about keeping code in sync with openFunc() in
          XMLDocumentParserLibxml2.cpp.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseMIMEType const):
        - Add comment about keeping code in sync with
          externalEntityMimeTypeAllowed() in
          XMLDocumentParserLibxml2.cpp.
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::externalEntityMimeTypeAllowed):
        - Rename from externalEntityMimeTypeAllowedByNosniff().
        - Change to only allow XML MIME types regardless of nosniff
          option.
        - Add fallback path to determine MIME type for file:/// URLs to
          make layout tests work properly.  Logic taken from
          XMLHttpRequest::responseMIMEType().  Not sure if there was a
          good place to share it.
        (WebCore::openFunc):
        - Fix relative URLs by providing the document's URL as a base.
          Also provide an encoding if needed.  Logic taken from
          HTMLBaseElement::href().  (Not sure if there was a good place
          to share it.)  This was required to fix loading of external
          entity resources in the dom/xhtml/level3/core tests, which
          hadn't been loading these resources for a while.  Ultimately
          this didn't matter--except for new error messages being
          printed in test results--because the tests fail due to missing
          DOM features for XHTML documents).
        - Change the fix for Bug 21963 into an empty URL check since
          setting FetchOptions.mode to Mode::SameOrigin prevents a
          redirect from loading a resource outside the document's
          origin.  The previous check worked, but the relaxed check in
          externalEntityMimeTypeAllowed() caused the XML MIME type
          warning to be output on redirects to non-same-origin URLs.  I
          didn't see a way to check for a cross-origin loading error.
        - Add a console message for a cross-origin load failing.
        - Update for function rename.
        - Remove double negative from console message for an invalid
          MIME type.
        (WebCore::externalEntityMimeTypeAllowedByNosniff):
        - Rename to externalEntityMimeTypeAllowed().

2020-05-09  David Kilzer  <ddkilzer@apple.com>

        Adapt LocalCurrentGraphicsContext for iOS
        <https://webkit.org/b/211660>

        Reviewed by Darin Adler.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        - Update build files for:
          - Rename of LocalCurrentGraphicsContext.mm to
            LocalCurrentGraphicsContextMac.mm.
          - Move of LocalCurrentGraphicsContext.h from platform/mac to
            platform/cocoa.
          - Addition of LocalCurrentGraphicsContextIOS.mm.

        * platform/cocoa/LocalCurrentGraphicsContext.h: Renamed from Source/WebCore/platform/mac/LocalCurrentGraphicsContext.h.
        - Make this work for iOS by using PLATFORM(COCOA) for the outer
          guard and USE(APPKIT) for the Mac-specific bits.
        - Use RetainPtr<> for NSGraphicsContext to clean up code in
          LocalCurrentGraphicsContextMac.mm.
        (WebCore::LocalCurrentGraphicsContext::cgContext):
        - Inline from LocalCurrentGraphicsContextMac.mm.

        * platform/ios/LocalCurrentGraphicsContextIOS.mm: Copied from Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm.
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        - Implement based on LocalCurrentGraphicsContextMac.mm.  Use
          UIGraphics{GetCurrent,Pop,Push}Context() functions added to
          UIKitSoftLink.h.

        * platform/mac/LocalCurrentGraphicsContextMac.mm: Renamed from Source/WebCore/platform/mac/LocalCurrentGraphicsContext.mm.
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        - Use m_savedGraphicsContext instead of graphicsContext in the
          body of the constructor.
        - Remove set-to-nil/retain of m_savedNSGraphicsContext since
          that is handled by RetainPtr<> now.
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        - Remove release of m_savedNSGraphicsContext since that is
          handled by RetainPtr<> now.
        (WebCore::LocalCurrentGraphicsContext::cgContext): Delete.
        - Inline into header to share implementation with iOS.

2020-05-09  Darin Adler  <darin@apple.com>

        Fix null-dereference in DocumentTimelinesController::updateAnimationsAndSendEvents
        https://bugs.webkit.org/show_bug.cgi?id=211667

        Reviewed by Antoine Quint.

        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents): Add null
        check before removing animationsToRemove, which may already have been removed
        since any arbitrary change could occur while animations are firing.

2020-05-09  Darin Adler  <darin@apple.com>

        Add missing null-check of page in ResourceLoader::loadDataURL
        https://bugs.webkit.org/show_bug.cgi?id=211589
        rdar://57213601

        Reviewed by Anders Carlsson.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL): Add null check before using page.

2020-05-08  Darin Adler  <darin@apple.com>

        Streamline MarkupAccumulator to improve efficiency a bit
        https://bugs.webkit.org/show_bug.cgi?id=211656

        Reviewed by Anders Carlsson.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendCharactersReplacingEntities): Corrected early
        exit so it returns any time the length is 0. For some reason the code before
        wouldn't do the early return when offset is non-zero, which is unnecessary.
        (WebCore::MarkupAccumulator::appendString): Deleted.
        (WebCore::MarkupAccumulator::appendStringView): Deleted.
        (WebCore::MarkupAccumulator::appendEndTag): Use variadic append to cut down
        on memory allocations.
        (WebCore::MarkupAccumulator::totalLength): Deleted.
        (WebCore::MarkupAccumulator::concatenateMarkup): Deleted.
        (WebCore::MarkupAccumulator::takeMarkup): Added.
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue): Use variadic
        append to cut down on memory allocations. Also use char instead of UChar so
        the string building code doesn't have to do an 8/16 bit check.
        (WebCore::shouldAddNamespaceElement): Prepend a literal, don't bother to
        make a String just to append to another String. Also made this a
        non-member function.
        (WebCore::shouldAddNamespaceAttribute): Made this a non-member function.
        (WebCore::MarkupAccumulator::appendNamespace): Fix hash table usage
        to use add instead of get followed by set to avoid double hashing.
        Use variadic append to cut down on memory allocation.
        (WebCore::MarkupAccumulator::appendText): Tweaked style to make this a
        one-line function.
        (WebCore::appendComment): Deleted.
        (WebCore::appendXMLDeclaration): Made this a non-member function.
        Use variadic append to cut down on memory allocation.
        (WebCore::appendDocumentType): Made this a non-member function.
        Use variadic append to cut down on memory allocation.
        (WebCore::MarkupAccumulator::appendCDATASection): Deleted.
        (WebCore::MarkupAccumulator::appendNonElementNode): Moved the bodies of
        appendComment, appendProcessingInstruction, and appendCDATASection in
        here since they can all be one-line variadic append calls.

        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::length const): Changed the return type
        of length to be unsigned since that's what StringBuilder returns.
        Made isAllASCII call StringBuilder::isAllASCII. Replaced appendString
        and appendStringView with variadic append. Removed many functions
        that no longer need to be member functions. Made appendAttributeValue
        a static member function. Made appendNamespace private. Made
        m_serializationSyntax const.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode): Use append
        instead of appenString.
        (WebCore::StyledMarkupAccumulator::isAllASCII const): Added. Before
        the code would only check the StringBuilder, but we also need to
        check m_reversedPrecedingMarkup.
        (WebCore::StyledMarkupAccumulator::takeResults): Use CheckedUint32
        since StringBuilder's reserveCapacity function takes unsigned, not
        size_t. The old code, using totalLength, would just pass a size_t
        and let it get chopped off, which didn't do any harm, but it seems
        strange to compute a 64-bit value just to chop off the lower 32
        bits. An alternative is to compute the 32-bit value and just let
        it overflow. Use a modern for loop by defining a ReverseView
        template rather than writing a confusing backwards loop. Use the
        new takeMarkup instead of concatenateMarkup.
        (WebCore::StyledMarkupAccumulator::appendText): Tweak coding
        style a little bit.
        (WebCore::StyledMarkupAccumulator::appendStartTag): Ditto.
        (WebCore::StyledMarkupAccumulator::appendNodeToPreserveMSOList):
        Use variadic append to cut down on memory allocations.
        (WebCore::propertyMissingOrEqualToNone): Tweak coding style a bit.
        (WebCore::serializePreservingVisualAppearanceInternal): Use
        append instead of appendString.
        (WebCore::shouldPreserveMSOLists): Take a StringView instead of a
        String to eliminate unnecessary memory allocation in call to substring.
        (WebCore::sanitizedMarkupForFragmentInDocument): Use makeString
        instead of StringBuilder to cut down on memory allocation.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::resetDefaultButton): Fix spelling error
        in the word "explicitly".
        * mathml/MathMLOperatorDictionary.cpp:
        (WebCore::MathMLOperatorDictionary::search): Ditto.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::SerializerMarkupAccumulator::SerializerMarkupAccumulator):
        Use variadic append instead of appendString to cut down on
        memory allocations.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint): Fix spelling error in the word
        "explicitly".

2020-05-09  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in LegacyWebArchive::createPropertyListRepresentation when copying selected range that contains surrogate characters
        https://bugs.webkit.org/show_bug.cgi?id=211658
        <rdar://problem/62844424>

        Reviewed by Ryosuke Niwa.

        Added check for null LegacyWebArchive in LegacyWebArchive::createFromSelection. Return nullptr when creation fails.

        Test: webarchive/copy-surrogate-char-crash.html

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):

2020-05-09  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Fix wpt shadow-dom/slots-fallback-in-document.html
        https://bugs.webkit.org/show_bug.cgi?id=211640

        Reviewed by Ryosuke Niwa.

        By specs, HTMLSlotElement.assignedNodes() should not count children of
        a slot in a document tree for flattened assigned nodes.

        https://html.spec.whatwg.org/multipage/scripting.html#dom-slot-assignednodes
        https://dom.spec.whatwg.org/#find-flattened-slotables

        As sideeffect, this patch also fix wpt
        shadow-dom/slots-outside-shadow-dom-expected.html

        Test: web-platform-tests/shadow-dom/slots-fallback-in-document.html
              web-platform-tests/shadow-dom/slots-outside-shadow-dom.html

        * html/HTMLSlotElement.cpp:
        (WebCore::flattenAssignedNodes):

2020-05-08  Basuke Suzuki  <basuke.suzuki@sony.com>

        Fix build error on PlatStation port after r261132
        https://bugs.webkit.org/show_bug.cgi?id=211659

        Unreviewed build fix after r261132.

        * page/scrolling/ScrollingTreeGestureState.cpp:

2020-05-08  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/211644>

        Reviewed by Darin Adler.

        * Modules/webgpu/cocoa: Removed.
        * page/scrolling/ios: Removed.
        * platform/graphics/metal: Removed.

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

        Async overflow scroll: sometimes a <select> becomes non-scrollable
        https://bugs.webkit.org/show_bug.cgi?id=211433
        <rdar://problem/62338474>

        Reviewed by Dean Jackson.

        Scrollable <select>s (RenderListBox) contribute to the non-fast scrollable region, so
        wheel events inside them are propagated to the main thread. If the select is scrolled
        to the end, the event will propagate to the enclosing scroller, then then FrameView::wheelEvent()
        may send it back to the scrolling thread. If the scrolling thread is processing such an event
        after the main thread, it should not perform any latching on the main thread.

        Test: scrollingcoordinator/mac/latching/scrolling-select-should-not-latch-mainframe.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::handleWheelEvent):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeLatchingController.cpp:
        (WebCore::ScrollingTreeLatchingController::receivedWheelEvent):
        (WebCore::ScrollingTreeLatchingController::latchedNodeForEvent const):
        (WebCore::ScrollingTreeLatchingController::nodeDidHandleEvent):
        (WebCore::ScrollingTreeLatchingController::clearLatchedNode):
        * page/scrolling/ScrollingTreeLatchingController.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::handleWheelEventAfterMainThread):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        * platform/PlatformWheelEvent.cpp:
        (WebCore::operator<<):

2020-05-08  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(AVFOUNDATION_LOADER_DELEGATE)
        https://bugs.webkit.org/show_bug.cgi?id=211646

        Reviewed by Eric Carlson.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource): Remove check of
        HAVE(AVFOUNDATION_LOADER_DELEGATE) in a place where it also checks PLATFORM(MAC).

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        Remove HAVE(AVFOUNDATION_LOADER_DELEGATE) in Cocoa-only code.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: Ditto.
        (WebCore::globalLoaderDelegateQueue): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didStopLoadingRequest): Ditto.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h: Ditto.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm: Ditto.

2020-05-08  Tomoki Imai  <Tomoki.Imai@sony.com>

        TextureMapper should skip clipping a content layer if it's not needed
        https://bugs.webkit.org/show_bug.cgi?id=210787

        Reviewed by Don Olmstead.

        This patch follows up r260174.
        We don't need to clip a content layer if the clipping rect contains the content rect.
        This patch doesn't change the behavior but saves stencil indices.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):

2020-05-08  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Text-style fonts aren't locale-specific
        https://bugs.webkit.org/show_bug.cgi?id=211438
        <rdar://problem/51654163>

        Reviewed by Sam Weinig.

        Simply hook up the locale to the Core Text function.

        It turns out that this patch actually has no behavior change,
        because this locale is only used for font fallback, but WebKit
        does its own font fallback and we already pass the locale into
        CTFontCopyDefaultCascadeListForLanguages(). However, for
        symmetry with CTFontCreateUIFontWithLanguage() it's a good idea
        to just supply it anyway. Just in case.

        Test: platform/ios/fast/text/lang-text-style.html

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

2020-05-08  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Complete new texture upload entry points in WebGL2RenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=208875

        Reviewed by Dean Jackson.

        Implement the remaining texture upload entry points - mainly for
        3D textures - in WebGL2RenderingContext. Add support for uploading
        from the pixel unpack buffer.

        Refactor the WebGL 2.0 binding points into WebGL2RenderingContext,
        where they had previously been in the base class. Refactor
        validation code to override the base class where necessary.
        Refactor getParameter into WebGLRenderingContextBase and override
        it in WebGL2RenderingContext, eliminating duplicate code and
        fixing bugs.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::~WebGL2RenderingContext):
        (WebCore::WebGL2RenderingContext::getInt64Parameter):
        (WebCore::WebGL2RenderingContext::validateBufferTarget):
        (WebCore::WebGL2RenderingContext::validateBufferTargetCompatibility):
        (WebCore::WebGL2RenderingContext::validateBufferDataTarget):
        (WebCore::WebGL2RenderingContext::validateAndCacheBufferBinding):
        (WebCore::WebGL2RenderingContext::validateTexImageBinding):
        (WebCore::WebGL2RenderingContext::validateTexture3DBinding):
        (WebCore::WebGL2RenderingContext::copyBufferSubData):
        (WebCore::WebGL2RenderingContext::bindFramebuffer):
        (WebCore::WebGL2RenderingContext::deleteFramebuffer):
        (WebCore::WebGL2RenderingContext::getTexParameter):
        (WebCore::WebGL2RenderingContext::texStorage2D):
        (WebCore::WebGL2RenderingContext::texStorage3D):
        (WebCore::WebGL2RenderingContext::texImage2D):
        (WebCore::WebGL2RenderingContext::texImage3D):
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        (WebCore::WebGL2RenderingContext::bindBufferBase):
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGL2RenderingContext::validateFramebufferTarget):
        (WebCore::WebGL2RenderingContext::getFramebufferBinding):
        (WebCore::WebGL2RenderingContext::getReadFramebufferBinding):
        (WebCore::WebGL2RenderingContext::restoreCurrentFramebuffer):
        (WebCore::WebGL2RenderingContext::getParameter):
        (WebCore::WebGL2RenderingContext::uncacheDeletedBuffer):
        (WebCore::WebGL2RenderingContext::validateFramebufferFuncParameters): Deleted.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::setTarget):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::setAttachmentForBoundFramebuffer):
        (WebCore::WebGLFramebuffer::attach):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::isBound const):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters): Deleted.
        (WebCore::WebGLRenderingContext::getParameter): Deleted.
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::validateBufferTarget):
        (WebCore::WebGLRenderingContextBase::validateBufferDataTarget):
        (WebCore::WebGLRenderingContextBase::validateAndCacheBufferBinding):
        (WebCore::WebGLRenderingContextBase::bindBuffer):
        (WebCore::WebGLRenderingContextBase::bindFramebuffer):
        (WebCore::WebGLRenderingContextBase::bindTexture):
        (WebCore::WebGLRenderingContextBase::checkFramebufferStatus):
        (WebCore::WebGLRenderingContextBase::uncacheDeletedBuffer):
        (WebCore::WebGLRenderingContextBase::deleteFramebuffer):
        (WebCore::WebGLRenderingContextBase::deleteRenderbuffer):
        (WebCore::WebGLRenderingContextBase::deleteTexture):
        (WebCore::WebGLRenderingContextBase::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContextBase::framebufferTexture2D):
        (WebCore::WebGLRenderingContextBase::getParameter):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        (WebCore::WebGLRenderingContextBase::texParameter):
        (WebCore::WebGLRenderingContextBase::getBoundReadFramebufferColorFormat):
        (WebCore::WebGLRenderingContextBase::getBoundReadFramebufferWidth):
        (WebCore::WebGLRenderingContextBase::getBoundReadFramebufferHeight):
        (WebCore::WebGLRenderingContextBase::validateFramebufferTarget):
        (WebCore::WebGLRenderingContextBase::getFramebufferBinding):
        (WebCore::WebGLRenderingContextBase::getReadFramebufferBinding):
        (WebCore::WebGLRenderingContextBase::validateFramebufferFuncParameters):
        (WebCore::WebGLRenderingContextBase::validateBufferDataParameters):
        (WebCore::WebGLRenderingContextBase::setFramebuffer):
        (WebCore::WebGLRenderingContextBase::restoreCurrentFramebuffer):
        (WebCore::WebGLRenderingContextBase::getInt64Parameter): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:

2020-05-08  Nikos Mouchtaris  <nmouchtaris@apple.com>

        Implement web-share v2 for files
        https://bugs.webkit.org/show_bug.cgi?id=209265

        Reviewed by Andy Estes.

        Modified existing tests for new behavior.

        Added support for handling of files in share/canShare,
        and implemented asynchronous reading of data from blobs on
        disk into memory.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Navigator.cpp:
        (WebCore::Navigator::canShare):
        (WebCore::Navigator::share):
        (WebCore::Navigator::finishedLoad):
        * page/Navigator.h:
        * page/ReadShareDataAsync.cpp: Added.
        (WebCore::ReadShareDataAsync::readInternal):
        (WebCore::ReadShareDataAsync::ReadShareDataAsync):
        (WebCore::ReadShareDataAsync::~ReadShareDataAsync):
        (WebCore::ReadShareDataAsync::start):
        (WebCore::ReadShareDataAsync::didFinishLoading):
        (WebCore::ReadShareDataAsync::didReceiveData):
        (WebCore::ReadShareDataAsync::didStartLoading):
        (WebCore::ReadShareDataAsync::didFail):
        * page/ReadShareDataAsync.hpp: Added.
        * page/ShareData.h:

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

        Unreviewed, reverting r261341 and r261392.

        Caused multiple regression test failures

        Reverted changesets:

        "Poster set after playback begins should be ignored"
        https://bugs.webkit.org/show_bug.cgi?id=211464
        https://trac.webkit.org/changeset/261341

        "REGRESSION(r261341): imported/w3c/web-platform-
        tests/html/semantics/embedded-content/the-video-
        element/intrinsic_sizes.htm is failing"
        https://bugs.webkit.org/show_bug.cgi?id=211612
        https://trac.webkit.org/changeset/261392

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

        Limit HTTP referer to 4kb
        https://bugs.webkit.org/show_bug.cgi?id=211603
        <rdar://problem/56768823>

        Reviewed by Chris Dumez.

        Use the origin if it's longer, unless the origin is too long.
        This matches the behavior of other browsers.
        See https://bugzilla.mozilla.org/show_bug.cgi?id=1557346

        Tested by API tests.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setHTTPReferrer):

2020-05-08  Pinki Gyanchandani  <pgyanchandani@apple.com>

        SIGILL @ WebCore::Shape::createRasterShape -- DOS ASAN
        https://bugs.webkit.org/show_bug.cgi?id=211539

        Reviewed by Simon Fraser.
 
        Corrected the comment.

        No new test needed.

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

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

        Fix urlsearchparams-delete.html
        https://bugs.webkit.org/show_bug.cgi?id=211456

        Reviewed by Daniel Bates.

        Step 2 of URLSearchParams.delete algorithm [1] indicates
        we should run the update steps, even if no name-value
        pairs were removed.

        Behavior matches Chrome and Firefox.

        [1] https://url.spec.whatwg.org/#dom-urlsearchparams-delete

        Test: web-platform-tests/url/urlsearchparams-delete.html

        * html/URLSearchParams.cpp:
        (WebCore::URLSearchParams::remove):

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

        [iOS] caret appears in the middle of a search field when field is focused on agoda.com
        https://bugs.webkit.org/show_bug.cgi?id=211591
        <rdar://problem/60605873>

        Reviewed by Antoine Quint.

        See WebKit/ChangeLog for more details.

        Test: editing/selection/ios/caret-rect-after-animating-focused-text-field.html

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::finishNotificationSteps):

        Add plumbing to call out to the WebKit client layer after an animation finishes running.

        * dom/Node.h:
        * editing/VisibleSelection.h:

        WEBCORE_EXPORT a couple of methods.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::animationDidFinishForElement):

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

        Preserve character set information when writing to the pasteboard when copying rich text
        https://bugs.webkit.org/show_bug.cgi?id=211524

        Reviewed by Darin Adler.

        This patch is a followup to r261247, which introduced a workaround for Cocoa platforms to automatically add a
        `meta charset` when writing HTML data to the platform pasteboard. When copying a rich text selection, we use a
        different codepath when sanitizing DOM content - that is, `serializePreservingVisualAppearance`.

        The previous change also introduced an enum, `AddMetaCharsetIfNeeded`, to limit applying this workaround to only
        when we're writing HTML to the clipboard. However, it should be harmless to include this when reading sanitized
        HTML as well, so we can also simplify this code by removing the `AddMetaCharsetIfNeeded` enum (and all of its
        uses).

        Test: CopyHTML.SanitizationPreservesCharacterSetInSelectedText

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::setDataFromItemList):
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::isAllASCII const):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentMarkupReader::readHTML):
        * editing/markup.cpp:
        (WebCore::sanitizeMarkup):
        (WebCore::serializePreservingVisualAppearanceInternal):

        Move the `meta charset` workaround from sanitizedMarkupForFragmentInDocument to
        serializePreservingVisualAppearanceInternal, such that HTML data written to the pasteboard when copying rich
        text can be used to load a web view, without losing the fact that the copied content was UTF-8 encoded.

        (WebCore::sanitizedMarkupForFragmentInDocument):
        * editing/markup.h:

2020-05-08  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crashes in LayoutTests in isolated tree mode.
        https://bugs.webkit.org/show_bug.cgi?id=211622

        Reviewed by Chris Fleizach.

        Several LayoutTests.

        Return the root from the isolated tree when it is really ready.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::rootObject):

        Some code cleanup.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::clickPoint):

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

        Overflow scrollers in iframes don't get mouseMovedInContentArea()
        https://bugs.webkit.org/show_bug.cgi?id=211347
        <rdar://problem/62784560>

        Reviewed by Tim Horton.

        We never dispatched mouseMovedInContentArea() on ScrollableAreas in subframes, so overlay scrollbar
        interactions there were broken. This is because the code ran from EventHandler::mouseMoved(), which
        only runs for the main frame.

        Instead, move the mouseMovedInContentArea() dispatch down into updateMouseEventTargetNode() which
        is run for each subframe. notifyScrollableAreasOfMouseEvents() takes an event name so we only dispatch
        for mouseMove events. There's some complexity here related to whether the old and new ScrollableArea
        targets are nested; this code doesn't try to do the right thing with nesting, but does handle the mouse
        moving between the scrollable main frame and an overflow region.
        
        enclosingScrollableArea() is fixed to return the FrameView. enclosingScrollableLayer() is flawed, as noted
        in the RenderLayer.h comment.

        Tests: fast/scrolling/mac/scrollbars/overflow-in-iframe-overlay-scrollbar-hovered.html
               fast/scrolling/mac/scrollbars/overflow-in-iframe-overlay-scrollbar-reveal.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::enclosingScrollableArea):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::pointerCaptureElementDidChange):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::notifyScrollableAreasOfMouseEvents):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::enclosingScrollableArea): Deleted.
        (WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit): Deleted.
        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::dispatchSyntheticMouseOut):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::debugDescription const):
        * rendering/RenderLayer.h:

2020-05-08  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] The fixed logical width should be used as the max width for a cell
        https://bugs.webkit.org/show_bug.cgi?id=211610

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-with-fixed-widht-and-inline-content.html

        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):

2020-05-08  Youenn Fablet  <youenn@apple.com>

        Handle remote audio capture IPC messages in a background thread
        https://bugs.webkit.org/show_bug.cgi?id=211583

        Reviewed by Eric Carlson.

        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        Add assertion to check that we are not running on the main thread.

2020-05-08  Youenn Fablet  <youenn@apple.com>

        Video capture does not get unmuted in case of tab switch on iOS
        https://bugs.webkit.org/show_bug.cgi?id=211509

        Reviewed by Eric Carlson.

        Remove setInterrupted and related code.
        Instead, directly use setMuted(true/false) of the source of capture tracks.
        To ensure we validate that the active source is tied to a track of the document,
        we add RealtimeSource::isSameAs which handles the case of a RealtimeVideoSource wrapping an AVVideoCaptureSource.
        There might be multiple video tracks with each one its RealtimeVideoSource using the same AVVideoCaptureSource.
        We mute the AVVideoCaptureSource directly to make sure all linked tracks will get muted/unmuted at the same time.
        Tests to be fixed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        (WebCore::isSourceCapturingForDocument):
        (WebCore::MediaStreamTrack::updateCaptureAccordingToMutedState):
        * Modules/mediastream/MediaStreamTrack.h:
        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        * platform/mediastream/RealtimeMediaSource.cpp:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

2020-05-07  Simon Fraser  <simon.fraser@apple.com>

        MayBegin wheel event in a <select> doesn't flash the scrollers
        https://bugs.webkit.org/show_bug.cgi?id=211605

        Reviewed by Antti Koivisto.

        We need to special-case scrollable <select> elements, because they are ScrollableAreas
        which are never asynchronously scrolled, so the ScrollingTree never dispatches the handleWheelEventPhase()
        which is necessary to flash overlay scrollbars. Scrollable <select> elements are always in the
        non-fast scrollable region.
        
        Fix findEnclosingScrollableContainer() to return a ScrollableArea for the "maybegin" and "canceled" events
        that have no delta.
        
        Remove some "inline" and make some things references.

        Tests: fast/scrolling/mac/scrollbars/select-overlay-scrollbar-hovered.html
               fast/scrolling/mac/scrollbars/select-overlay-scrollbar-reveal.html

        * page/EventHandler.cpp:
        (WebCore::handleWheelEventPhaseInScrollableArea):
        (WebCore::didScrollInScrollableArea):
        (WebCore::handleWheelEventInAppropriateEnclosingBox):
        (WebCore::shouldGesturesTriggerActive):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::eventLoopHandleMouseDragged):
        * page/mac/EventHandlerMac.mm:
        (WebCore::findEnclosingScrollableContainer):
        (WebCore::EventHandler::determineWheelEventTarget):
        * testing/Internals.cpp:
        (WebCore::Internals::scrollableAreaForNode): Fix to find the ScrollableArea for RenderListBoxes.

2020-05-07  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r261252.

        Reland r260684 now that a proper fix has landed in Reader

        Reverted changeset:

        "REGRESSION (r260684): Reader background is lost after
        multitasking"
        https://bugs.webkit.org/show_bug.cgi?id=211533
        https://trac.webkit.org/changeset/261252

2020-05-07  Pinki Gyanchandani  <pgyanchandani@apple.com>

        SIGILL @ WebCore::Shape::createRasterShape -- DOS ASAN
        https://bugs.webkit.org/show_bug.cgi?id=211539

        Reviewed by Geoffrey Garen.

        Removed the RELEASE_ASSERT because its possible for imageData to be null when imageRect size is huge value. 

        Test: fast/shapes/shape-outside-floats/shape-outside-imagedata-overflow.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):

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

        Remove AudioMediaStreamTrackRenderer::muted
        https://bugs.webkit.org/show_bug.cgi?id=211289

        Reviewed by Eric Carlson.

        * platform/mediastream/AudioMediaStreamTrackRenderer.h:
        muted is unnecessary since we are using start/stop instead.

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

        [macOS] Playhead in Touch Bar continues when loading stalls
        https://bugs.webkit.org/show_bug.cgi?id=211585
        <rdar://problem/33893306>

        Reviewed by Darin Adler.

        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName): Listen for `waitingEvent`
        and `canplay` events. Don't claim to be playing when stalled.
        (WebCore::PlaybackSessionModelMediaElement::isStalled const): New.

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

        Poster set after playback begins should be ignored
        https://bugs.webkit.org/show_bug.cgi?id=211464

        Reviewed by Jer Noble.
        
        Redo the poster frame logic to use the `show poster flag` logic from the spec.

        Test: media/video-poster-set-after-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_showPoster.
        (WebCore::HTMLMediaElement::prepareForLoad): m_displayMode was removed.
        (WebCore::HTMLMediaElement::selectMediaResource): Call setShowPosterFlag.
        (WebCore::HTMLMediaElement::loadResource): Remove calls to setDisplayMode and updateDisplayState,
        they have been deleted.
        (WebCore::HTMLMediaElement::waitForSourceChange): Call setShowPosterFlag. Update spec text.
        (WebCore::HTMLMediaElement::noneSupported): Call setShowPosterFlag.
        (WebCore::HTMLMediaElement::mediaLoadingFailed): Remove call to updateDisplayState.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::seekWithTolerance): Call setShowPosterFlag.
        (WebCore::HTMLMediaElement::seekTask):  Check m_showPoster, not displayMode.
        (WebCore::HTMLMediaElement::playInternal): Call setShowPosterFlag.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Don't check displayMode.
        (WebCore::HTMLMediaElement::updatePlayState): No more setDisplayMode.
        (WebCore::HTMLMediaElement::userCancelledLoad):  Call setShowPosterFlag.
        (WebCore::HTMLMediaElement::mediaPlayerFirstVideoFrameAvailable): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::showPosterFlag const):
        (WebCore::HTMLMediaElement::setShowPosterFlag):
        (WebCore::HTMLMediaElement::displayMode const): Deleted.
        (WebCore::HTMLMediaElement::setDisplayMode): Deleted.
        (WebCore::HTMLMediaElement::updateDisplayState): Deleted.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers): No more updateDisplayState.
        (WebCore::HTMLVideoElement::parseAttribute): Ditto. Call updateFromElement when poster is removed.
        (WebCore::HTMLVideoElement::shouldDisplayPosterImage const): New.
        (WebCore::HTMLVideoElement::mediaPlayerFirstVideoFrameAvailable): New, update player and 
        renderer if the poster isn't supposed to be visible.
        (WebCore::HTMLVideoElement::setDisplayMode): Deleted.
        (WebCore::HTMLVideoElement::updateDisplayState): Deleted.
        * html/HTMLVideoElement.h:

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::failedToLoadPosterImage const): New.
        * rendering/RenderVideo.h:

        * testing/Internals.cpp:
        (WebCore::Internals::elementShouldDisplayPosterImage const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-07  Jack Lee  <shihchieh_lee@apple.com>

        In Document::willBeRemovedFromFrame, clear FrameSelection before Editor so the selection is removed.
        https://bugs.webkit.org/show_bug.cgi?id=211551

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

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

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

        [Web Animations] imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update-and-send-events.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211232
        <rdar://problem/62650227>

        Reviewed by Dean Jackson.

        The flakiness came from this porting of the test:
        
            animA.finished.then(() => { animB.cancel() });
            animB.finished.then(() => { animA.cancel() });

        Sometimes, animA and animB would finish in different frames even though they were designed to finish at the
        same time. If this happened, animA.finished would resolve and trigger animB.cancel, which then rejected
        animB.finished. This happened because animB was attached to a DocumentTimeline created by script which isn't
        the main DocumenTimeline accessed via document.timeline. Some curious code would handle syncing of the
        various timelines such that they would use a shared timebase. This was in DocumentTimeline::currentTime():

            auto& mainDocumentTimeline = m_document->timeline();
            if (&mainDocumentTimeline != this) {
                if (auto mainDocumentTimelineCurrentTime = mainDocumentTimeline.currentTime())
                    return *mainDocumentTimelineCurrentTime - m_originTime;
                return WTF::nullopt;
            }

        We now move the currentTime caching at the DocumentTimelinesController level which ensures all DocumentTimeline
        objects attached to a given Document use the exact same currentTime(). This prompted some overdue refactoring
        where also all the related animation suspension code is moved from DocumentTimeline up to DocumentTimelinesController.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::detachFromDocument):
        (WebCore::DocumentTimeline::suspendAnimations):
        (WebCore::DocumentTimeline::resumeAnimations):
        (WebCore::DocumentTimeline::animationsAreSuspended const):
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        (WebCore::DocumentTimeline::documentWillUpdateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::animationsAreSuspended): Deleted.
        (WebCore::DocumentTimeline::liveCurrentTime const): Deleted.
        (WebCore::DocumentTimeline::cacheCurrentTime): Deleted.
        (WebCore::DocumentTimeline::maybeClearCachedCurrentTime): Deleted.
        * animation/DocumentTimeline.h:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::detachFromDocument):
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        (WebCore::DocumentTimelinesController::suspendAnimations):
        (WebCore::DocumentTimelinesController::resumeAnimations):
        (WebCore::DocumentTimelinesController::animationsAreSuspended const):
        (WebCore::DocumentTimelinesController::liveCurrentTime const):
        (WebCore::DocumentTimelinesController::currentTime):
        (WebCore::DocumentTimelinesController::cacheCurrentTime):
        (WebCore::DocumentTimelinesController::maybeClearCachedCurrentTime):
        * animation/DocumentTimelinesController.h:
        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::resume):
        * dom/Document.h:
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::resumeActiveDOMObjectsAndAnimations):
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * testing/Internals.cpp:
        (WebCore::Internals::animationsAreSuspended const):
        (WebCore::Internals::suspendAnimations const):
        (WebCore::Internals::resumeAnimations const):

2020-05-07  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r252161): Animation of box-shadow with border-radius set is flashy
        https://bugs.webkit.org/show_bug.cgi?id=211530
        <rdar://problem/62570229>

        Reviewed by Zalan Bujtas.

        Drawing inset box shadows with spread was broken, and in some cases generated invalid
        rounded rects, causing inset shadows with border-radius to lose the radius.

        First, with split inlines, the spread was not getting removed from the excluded edges.
        Fix in the includeLogicalLeftEdge/includeLogicalRightEdge clauses, adding shiftXEdgeBy()/shiftYEdgeBy() helpers
        to LayoutRect to simplify logic.

        Second, when computing the rounded hole rect, we'd use the result of style.getRoundedInnerBorderFor()
        but that doesn't take shadow spread into account, so we'd build a rounded rect with a rect that
        accounted for spread, but radii computed without. That could result in unrenderable rounded rects.
        Fix by calling style.getRoundedInnerBorderFor() a second time if we have spread; this will fix
        up the radii for spread.


        Tests: fast/box-shadow/inset-box-shadow-fractional-radius.html
               fast/box-shadow/inset-shadow-split-inline.html
               fast/box-shadow/inset-spread-box-shadow-split-inline.html

        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::shiftXEdgeBy):
        (WebCore::LayoutRect::shiftYEdgeBy):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):

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

        Remove unused USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
        https://bugs.webkit.org/show_bug.cgi?id=211582

        Reviewed by Fujii Hironori.

        After r261264 all ports implemented USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::createDisplayRefreshMonitor const):
        * page/Page.cpp:
        (WebCore::Page::windowScreenDidChange):
        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::RenderingUpdateScheduler):
        (WebCore::RenderingUpdateScheduler::adjustRenderingUpdateFrequency):
        (WebCore::RenderingUpdateScheduler::scheduleTimedRenderingUpdate):
        (WebCore::RenderingUpdateScheduler::windowScreenDidChange):
        * page/RenderingUpdateScheduler.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/DisplayRefreshMonitorClient.cpp:
        * platform/graphics/DisplayRefreshMonitorClient.h:
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        * platform/graphics/DisplayRefreshMonitorManager.h:
        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        (WebCore::GraphicsLayerUpdater::scheduleUpdate):
        (WebCore::GraphicsLayerUpdater::screenDidChange):
        (WebCore::GraphicsLayerUpdater::displayRefreshFired):
        (WebCore::GraphicsLayerUpdater::createDisplayRefreshMonitor const):
        * platform/graphics/GraphicsLayerUpdater.h:
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::createDisplayRefreshMonitor const):
        * rendering/RenderLayerCompositor.h:

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

        Add watchOS media controls assets
        https://bugs.webkit.org/show_bug.cgi?id=211508

        Unreviewed. Cleaning up some stray logging.

        * WebCore.xcodeproj/project.pbxproj:

2020-05-07  Darin Adler  <darin@apple.com>

        Add some missing null checks for DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=211544
        rdar://62843516

        Reviewed by Anders Carlsson.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): Use some more RefPtr,
        and check for null before calling DocumentLoader::responseMIMEType.
        Also removed a comment that made no sense, and an assertion that was
        there for no reason, left over from some point in history where it
        made sense.

        * loader/HistoryController.cpp:
        (WebCore::FrameLoader::HistoryController::updateForRedirectWithLockedBackForwardList):
        Add checks for null before calling urlForHistory and isClientRedirect.

2020-05-07  Darin Adler  <darin@apple.com>

        Remove USE(INSERTION_UNDO_GROUPING) checks in macOS platform code
        https://bugs.webkit.org/show_bug.cgi?id=211525

        Reviewed by Anders Carlsson.

        * editing/mac/TextUndoInsertionMarkupMac.h: Remove
        NSTextInputContext_Private.h usage. Moving to NSTextInputContextSPI.h
        instead. Also remove #pragma once since this is an Objective-C-only
        header, not for cross-platform use.

        * editing/mac/TextUndoInsertionMarkupMac.mm: Above, plus move
        NSUndoManager_Private.h to NSUndoManagerSPI.h.

2020-05-07  Sergio Villar Senin  <svillar@igalia.com>

        [Conditional=] not working for operations in WebGLRenderingContextBase.idl
        https://bugs.webkit.org/show_bug.cgi?id=211528

        Reviewed by Chris Dumez.

        When an IDL interface under a given Condition defined an operation with
        another Condition the generated source file should guard the operation
        with both the Condition from the interface and the one from the
        operation. This was working fine for sole interfaces but not for those
        who were inheriting from a base one, i.e., it was not working for
        supplemental interfaces.

        Added a new minimalistic binding test showcasing the problem.

        * bindings/scripts/CodeGenerator.pm:
        (ProcessSupplementalDependencies): Add Conditionals from both interface and operation.
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::jsTestGlobalObjectTestOperationConditionalConstructorGetter): Updated result.
        (WebCore::jsTestGlobalObjectTestOperationConditionalConstructor): Ditto.
        (WebCore::setJSTestGlobalObjectTestOperationConditionalConstructorSetter): Ditto.
        (WebCore::setJSTestGlobalObjectTestOperationConditionalConstructor): Ditto.
        * bindings/scripts/test/JS/JSTestOperationBase.cpp: Added.
        * bindings/scripts/test/JS/JSTestOperationBase.h: Added.
        * bindings/scripts/test/JS/JSTestOperationConditional.cpp: Added.
        * bindings/scripts/test/JS/JSTestOperationConditional.h: Added.
        * bindings/scripts/test/TestOperationBase.idl: Added.
        * bindings/scripts/test/TestOperationConditional.idl: Added.

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

        [Wheel event region] Include listeners on Window
        https://bugs.webkit.org/show_bug.cgi?id=211577

        Reviewed by Simon Fraser.

        Test: fast/scrolling/mac/wheel-event-listener-region-window.html

        * dom/EventTarget.h:
        * dom/Node.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::computeEventListenerRegionTypes):

        Take EventTarget so this can be used with DOMWindow.

        * style/StyleAdjuster.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2020-05-07  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r261056): [ Mac WK1 ] inspector/console/console-api.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=211386

        Reviewed by Darin Adler.

        Address additional review feedback.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):

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

        [LFC[TFC] Adjust the table wrapper box style
        https://bugs.webkit.org/show_bug.cgi?id=211574

        Reviewed by Antti Koivisto.

        The computed values of properties 'position', 'float', 'margin-*', 'top', 'right', 'bottom', and 'left'
        on the table element are used on the table wrapper box and not the table box; all other values of non-inheritable
        properties are used on the table box and not the table wrapper box.

        https://www.w3.org/TR/CSS22/tables.html#model
        
        Test: fast/layoutformattingcontext/table-simple-with-border.html

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isBlockContainerBox const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutBox):
        (WebCore::Layout::TreeBuilder::buildTableStructure):

2020-05-07  Andres Gonzalez  <andresg_22@apple.com>

        Make debug build run in accessibility isolated tree mode = 1.
        https://bugs.webkit.org/show_bug.cgi?id=211567

        Reviewed by Chris Fleizach.

        - Removed several unnecessary ASSERTs that prevent debug builds to run
        in isolated tree mode = 1, i.e., isolated tree mode on main thread.
        - AXIsolatedObject::children and updateBackingStore need to be executed
        on both threads.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::detachRemoteParts):
        (WebCore::AXIsolatedObject::children): Need to update the children
        regardless of the thread in which it is invoked. Pending, must add a
        lock to prevent thread collision.

        (WebCore::AXIsolatedObject::updateBackingStore): Need to update the
        backing store regardless of the thread in whhich it is invoked.

        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::setRootNodeID):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm: Enable
        isolated tree mode = 1.
        (-[WebAccessibilityObjectWrapperBase detach]):
        (-[WebAccessibilityObjectWrapperBase axBackingObject]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: Use makeString
        instead of String concatenation as pointed out by Darin Adler in bug 210914.
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

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

        [LFC][TFC] Set section [top, left] used position.
        https://bugs.webkit.org/show_bug.cgi?id=211546

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-simple-with-padding.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        * layout/tableformatting/TableFormattingContext.h:

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

        [Wheel event region] Include listeners on Document
        https://bugs.webkit.org/show_bug.cgi?id=211571

        Reviewed by Simon Fraser.

        Test: fast/scrolling/mac/wheel-event-listener-region-document.html

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::computeEventListenerRegionTypes):
        (WebCore::Style::computeEventListenerRegionTypes): Deleted.

        Make public and take Node instead of Element.

        * style/StyleAdjuster.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

        Gather event region bits from Document too.

2020-05-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260769.
        https://bugs.webkit.org/show_bug.cgi?id=211578

        Introduced regressions related to sharing (Requested by
        perarne on #webkit).

        Reverted changeset:

        "[Cocoa] After r258891, r255119 can be reverted"
        https://bugs.webkit.org/show_bug.cgi?id=211083
        https://trac.webkit.org/changeset/260769

2020-05-07  Darin Adler  <darin@apple.com>

        Fix assertions seen when trying to draw an absurdly large shadow
        https://bugs.webkit.org/show_bug.cgi?id=211541
        rdar://62843377

        Reviewed by Geoffrey Garen.

        * platform/graphics/IntSize.h:
        (WebCore::IntSize::unclampedArea const): Return uint64_t instead of
        size_t. Two 32-bit positive integers multiplied fit in a 64-bit integer,
        but there's no guarantee they fit in a "pointer sized" integer.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawRectShadow): When comparing an IntSize area with
        a FloatSize area, avoid checked overflow by using IntSize::unclampedArea,
        which returns something we can compare with a float. Using IntSize::area
        meant we'd intentionally crash the process if the area number doesn't fit
        in a 32-bit int, which is not important or helpful.
        (WebCore::ShadowBlur::drawRectShadowWithTiling): Make sure
        ScratchBuffer::scheduleScratchBufferPurge is always called after
        ScratchBuffer::getScratchBuffer, even it returns nullptr. An alternative
        would have been to change the logic inside getScratchBuffer, but this
        seems easier to get right, and no need to optimize the failure case.
        (WebCore::ShadowBlur::drawInsetShadowWithTiling): Ditto.

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

        Fix potential threading issue in AudioMediaStreamTrackRendererCocoa::render
        https://bugs.webkit.org/show_bug.cgi?id=211560

        Reviewed by Eric Carlson.

        When the audio description is updated, the audio renderer is creating a new AudioSampleDataSource.
        The refing of the source in the render method is not sufficient to protect agains the change.
        For that purpose, we keep a separate reference to the source that is only used in the render method/render thread.
        We add a boolean that tells the render method whether to update its source reference.
        As long as the source reference is not updated, no new source will be created n the method processing the pushed samples.

        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        (WebCore::AudioMediaStreamTrackRendererCocoa::render):
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h:

2020-05-07  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in AXIsolatedObject::identifierAttribute.
        https://bugs.webkit.org/show_bug.cgi?id=211565

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        When adding the identifierAttribute property to the AXIsolatedObject's
        properties map, must make an isolatedCopy of it in order to retrieve it
        on the secondary thread.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):

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

        Add basic support for generating accurate wheel event listener region
        https://bugs.webkit.org/show_bug.cgi?id=211512

        Reviewed by Simon Fraser.

        Add fake properties for wheel event listeners to RenderStyle and use them to
        generate regions in EventRegion. There is a separate region for non-passive
        wheel event listeners (that will require synchronous handling).

        The generated regions are not used for anything in this patch.
        Style is not yet invalided on event listener additions and removals.

        Test: fast/scrolling/mac/wheel-event-listener-region-basic.html

        * dom/Node.h:
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::uniteEventListeners):
        (WebCore::EventRegion::dump const):
        * rendering/EventRegion.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::eventListenerRegionTypes const):
        (WebCore::RenderStyle::setEventListenerRegionTypes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::computeEventListenerRegionTypes):
        (WebCore::Style::Adjuster::adjust const):

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

        Sending WebRTC network packets should not go through the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211291

        Reviewed by Eric Carlson.

        Covered by existing tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::filterSDP const):
        Fix a case where the SDP would be badly formatted if we do not have yet a MDNS name for the corresponding IP address.
        Small refactoring to use early returns.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::getStaticFactoryAndThreads):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        Add the ability for WebKit LibWebRTCProvider to do some processing on creation of the RTC threads.

2020-05-06  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement simulateUserActivation()
        https://bugs.webkit.org/show_bug.cgi?id=211516

        Reviewed by Youenn Fablet.

        simulateUserActivation() is the method used by the WebXR Test API to
        mock a user activation and thus let WebXR API think that the user is
        behind the request that is going to be made in the function passed as
        argument.

        No new tests added as the imported WebXR web-platform-tests already make
        use of this API.

        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::simulateUserActivation): Implemented.
        * testing/WebXRTest.h: Added Document parameter.
        * testing/WebXRTest.idl: Call with Document.
        * testing/XRSimulateUserActivationFunction.h: Removed function params.
        * testing/XRSimulateUserActivationFunction.idl: Ditto.

2020-05-06  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Implement DisplayRefreshMonitor by using RunLoop::Timer
        https://bugs.webkit.org/show_bug.cgi?id=211431

        Reviewed by Don Olmstead.

        * PlatformWin.cmake:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        * platform/graphics/win/DisplayRefreshMonitorWin.cpp: Added.
        (WebCore::DisplayRefreshMonitorWin::create):
        (WebCore::DisplayRefreshMonitorWin::DisplayRefreshMonitorWin):
        (WebCore::DisplayRefreshMonitorWin::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorWin::displayLinkFired):
        * platform/graphics/win/DisplayRefreshMonitorWin.h: Added.

2020-05-06  Zalan Bujtas  <zalan@apple.com>

        [ContentObservation] Shutterstock search bar is not activated on the first tap
        https://bugs.webkit.org/show_bug.cgi?id=211529
        <rdar://problem/58843932>

        Reviewed by Simon Fraser.

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

2020-05-06  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in indentOutdentCommand::formatRange with asynchronous commands: indent and insert list.
        https://bugs.webkit.org/show_bug.cgi?id=211466
        <rdar://problem/62845430>

        Reviewed by Geoffrey Garen.

        Check for null outerBlock returned by splitTreeToNode and bail out.

        Test: fast/editing/indent-then-insertUL-crash.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):

2020-05-06  Darin Adler  <darin@apple.com>

        Make a helper for the pattern of ICU functions that may need to be called twice to populate a buffer
        https://bugs.webkit.org/show_bug.cgi?id=211499

        Reviewed by Ross Kirsling.

        * editing/TextIterator.cpp:
        (WebCore::normalizeCharacters): Use callBufferProducingFunction.

2020-05-06  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r261056): [ Mac WK1 ] inspector/console/console-api.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=211386

        Reviewed by Tim Horton.

        This bug was caused by the failure to clear the delegate on an NSScrollerImp when, for testing,
        we flip between the native scrollbar theme, and the mock scrollbar theme.

        The crux of the fix is to have ScrollAnimatorMac's scrollerImpForScrollbar() call a
        static function on ScrollbarThemeMac to get the painters, rather than going through
        the possibly-null ScrollbarThemeMac instance.

        A belt-and-braces fix in ScrollbarThemeMac::unregisterScrollbar() always clears the delegate
        on the NSScrollerImp when unregistering a scrollbar.

        Finally, modernize code in various places.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollerImpForScrollbar):
        (WebCore::ScrollAnimatorMac::updateScrollerStyle):
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarMap):
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::unregisterScrollbar):
        (WebCore::ScrollbarThemeMac::setNewPainterForScrollbar):
        (WebCore::ScrollbarThemeMac::painterForScrollbar):
        (WebCore::ScrollbarThemeMac::hasThumb):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::paint):

2020-05-06  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in InsertListCommand::doApply with user-select:none elements
        https://bugs.webkit.org/show_bug.cgi?id=211534
        <rdar://problem/62898521>

        Reviewed by Geoffrey Garen.

        Check for empty position in InsertListCommand::doApply when searching for the start of
        last paragraph in the selected range. Skip listifying individual paragraphs in the range.

        Test: editing/inserting/insert-list-user-select-none-crash.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):

2020-05-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r261239.

        Caused fast/events/wheel-event-outside-body.html to assert on
        macOS WK1

        Reverted changeset:

        "Add basic support for generating accurate wheel event
        listener region"
        https://bugs.webkit.org/show_bug.cgi?id=211512
        https://trac.webkit.org/changeset/261239

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

        REGRESSION (r260684): Reader background is lost after multitasking
        https://bugs.webkit.org/show_bug.cgi?id=211533
        <rdar://problem/62941837>

        Unreviewed, revert r260684 due to regression.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.h:
        (WebCore::Page::shouldFireResizeEvents const):
        (WebCore::Page::setShouldFireResizeEvents):

2020-05-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement accessibility of HTML 5.1 Drag & Drop
        https://bugs.webkit.org/show_bug.cgi?id=211415
        <rdar://problem/22695531>

        Reviewed by Joanmarie Diggs.
        Support HTML5 drag and drop. Support dropzone attribute.
        Add new notifications for VoiceOver to consume.

        It appears that most of the dragging tests are skipped because of eventSender issues.
        I think this test could do a little more if those issues were resolved. Specifically, not all
        the notifications are seen that are expected.

        Test: accessibility/mac/draggable.html

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        (WebCore::AccessibilityObject::isAXHidden const):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityObjectInterface.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsDropping const):
        (WebCore::AccessibilityRenderObject::supportsDragging const):
        (WebCore::AccessibilityRenderObject::isGrabbed):
        (WebCore::AccessibilityRenderObject::determineDropEffects):
        (WebCore::AccessibilityRenderObject::supportsARIADropping const): Deleted.
        (WebCore::AccessibilityRenderObject::supportsARIADragging const): Deleted.
        (WebCore::AccessibilityRenderObject::isARIAGrabbed): Deleted.
        (WebCore::AccessibilityRenderObject::determineARIADropEffects): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLAttributeNames.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::draggingElement const):
        * page/EventHandler.h:

2020-05-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Cut and paste from Google Doc to Notes in several (non-Latin) languages doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=211498
        <rdar://problem/56675345>

        Reviewed by Darin Adler.

        When copying text in Google Docs, the page uses `DataTransfer.setData` to write text/html data to the system
        pasteboard. This markup string includes a meta tag with `charset="utf-8"`, indicating that the HTML string that
        was copied should be interpreted as UTF-8 data.

        However, before we write this data to the system pasteboard, we first sanitize it by loading it in a separate
        page, and then build the final sanitized markup string to write by iterating over only visible content in the
        main document of this page. Importantly, this last step skips over the meta element containing the charset.

        Later, when pasting in Notes or TextEdit, both apps use `-[NSAttributedString initWithData:...:]` to convert the
        HTML data on the pasteboard into an NSAttributedString. This takes the NSPasteboard's HTML data (a blob of
        `NSData`) and synchronously loads it in a new legacy WebKit view by calling `-[WebFrame
        loadData:MIMEType:textEncodingName:baseURL:]`, passing in `nil` as the text encoding name. Since WebKit is only
        given a blob of data and no particular encoding, we fall back to default Latin-1 encoding, which produces
        gibberish for CJK text.

        To fix this, we automatically insert a `<meta charset="utf-8">` tag when writing HTML to the pasteboard, if the
        sanitized markup contains non-ASCII characters.

        Test: CopyHTML.SanitizationPreservesCharacterSet

        * Modules/async-clipboard/ClipboardItemBindingsDataSource.cpp:
        (WebCore::ClipboardItemBindingsDataSource::ClipboardItemTypeLoader::sanitizeDataIfNeeded):

        Pass in AddMetaCharsetIfNeeded::Yes.

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

        Pass in AddMetaCharsetIfNeeded::Yes here too.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readHTML):
        (WebCore::WebContentMarkupReader::readHTML):
        * editing/markup.cpp:
        (WebCore::sanitizeMarkup):

        Add a new enum so that we only add the extra meta tag when sanitizing content that is being written to the
        system pasteboard through one of the clipboard DOM APIs.

        (WebCore::sanitizedMarkupForFragmentInDocument):
        * editing/markup.h:

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

        REGRESSION (r260753): Frequent crashes under TextIndicator's estimatedTextColorsForRange
        https://bugs.webkit.org/show_bug.cgi?id=211523
        <rdar://problem/62860203>

        Reviewed by Darin Adler.

        * page/TextIndicator.cpp:
        (WebCore::estimatedTextColorsForRange):
        TextIterator's node() getter can return null. r260753 accidentally refactored away the null check.

2020-05-06  John Wilander  <wilander@apple.com>

        Exempt app-bound domains from ITP's website data deletion and third-party cookie blocking between themselves
        https://bugs.webkit.org/show_bug.cgi?id=210674
        <rdar://problem/61950767>

        Reviewed by Chris Dumez.

        This change adds functionality to NetworkStorageSession to allow it to exempt
        app-bound domains from third-party cookie blocking.

        Tests: http/tests/resourceLoadStatistics/exemptDomains/app-bound-domains-exempt-from-cookie-blocking-between-each-other.html
               http/tests/resourceLoadStatistics/exemptDomains/app-bound-domains-exempt-from-website-data-deletion-database.html
               http/tests/resourceLoadStatistics/exemptDomains/app-bound-domains-exempt-from-website-data-deletion.html

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
        (WebCore::NetworkStorageSession::shouldExemptDomainPairFromThirdPartyCookieBlocking const):
        (WebCore::NetworkStorageSession::setAppBoundDomains):
        (WebCore::NetworkStorageSession::resetAppBoundDomains):
        * platform/network/NetworkStorageSession.h:

2020-05-06  Antti Koivisto  <antti@apple.com>

        Add basic support for generating accurate wheel event listener region
        https://bugs.webkit.org/show_bug.cgi?id=211512

        Reviewed by Simon Fraser.

        Add fake properties for wheel event listeners to RenderStyle and use them to
        generate regions in EventRegion. There is a separate region for non-passive
        wheel event listeners (that will require synchronous handling).

        The generated regions are not used for anything in this patch.
        Style is not yet invalided on event listener additions and removals.

        Test: fast/scrolling/mac/wheel-event-listener-region-basic.html

        * dom/Node.h:
        * rendering/EventRegion.cpp:
        (WebCore::EventRegion::unite):
        (WebCore::EventRegion::uniteEventListeners):
        (WebCore::EventRegion::dump const):
        * rendering/EventRegion.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateEventRegion):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::eventListenerRegionTypes const):
        (WebCore::RenderStyle::setEventListenerRegionTypes):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:
        * style/StyleAdjuster.cpp:
        (WebCore::Style::computeEventListenerRegionTypes):
        (WebCore::Style::Adjuster::adjust const):

2020-05-06  Darin Adler  <darin@apple.com>

        Remove now-unneeded USE(GRAMMAR_CHECKING)
        https://bugs.webkit.org/show_bug.cgi?id=211452

        Reviewed by Anders Carlsson.

        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling): Remove USE(GRAMMAR_CHECKING).
        (WebCore::Editor::isSelectionUngrammatical): Ditto.
        (WebCore::Editor::markMisspellingsOrBadGrammar): Ditto.
        (WebCore::Editor::markBadGrammar): Ditto.
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::markAllBadGrammar): Ditto.
        (WebCore::checkTextOfParagraph): Ditto. Also correct misspelling of the
        word "misspelling".
        * editing/TextCheckingHelper.h: Ditto.

2020-05-06  Devin Rousso  <drousso@apple.com>

        ASSERT_WITH_MESSAGE(m_isOwnedByMainThread == isMainThread()) when web inspecting
        https://bugs.webkit.org/show_bug.cgi?id=203638
        <rdar://problem/56761893>

        Reviewed by Brian Burg.

        Mark the `InspectorEnvironment::executionStopwatch` abstract function as `const` and have it
        return a `Stopwatch&` instead of a `RefPtr<Stopwatch>&` as callers assume that it exists.
        By not using a `RefPtr`, an additional `copyRef` can be avoided.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::executionStopwatch const): Added.
        (WebCore::InspectorController::executionStopwatch): Deleted.
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::executionStopwatch const): Added.
        (WebCore::WorkerInspectorController::executionStopwatch): Deleted.

        * inspector/agents/InspectorAnimationAgent.cpp:
        (WebCore::InspectorAnimationAgent::startTracking):
        (WebCore::InspectorAnimationAgent::stopTracking):
        (WebCore::InspectorAnimationAgent::willApplyKeyframeEffect):
        (WebCore::InspectorAnimationAgent::stopTrackingDeclarativeAnimation):
        * inspector/agents/InspectorCPUProfilerAgent.cpp:
        (WebCore::InspectorCPUProfilerAgent::startTracking):
        (WebCore::InspectorCPUProfilerAgent::stopTracking):
        (WebCore::InspectorCPUProfilerAgent::collectSample):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::mediaMetricsTimerFired):
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::startTracking):
        (WebCore::InspectorMemoryAgent::stopTracking):
        (WebCore::InspectorMemoryAgent::didHandleMemoryPressure):
        (WebCore::InspectorMemoryAgent::collectSample):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForTiming):
        (WebCore::InspectorNetworkAgent::timestamp):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::timestamp):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::timestamp):

2020-05-06  Darin Adler  <darin@apple.com>

        Eliminate checks of USE(DICTATION_ALTERNATIVES) in Cocoa-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211460

        Reviewed by Anders Carlsson.

        * editing/cocoa/AlternativeTextContextController.h: Remove USE(DICTATION_ALTERNATIVES).
        Also remove unnecessary use of RetainPtr and add a FIXME. Also remove #pragma once
        since this header is only imported from Objective-C++ sources.
        * editing/cocoa/AlternativeTextContextController.mm: Ditto.
        * editing/cocoa/AlternativeTextUIController.h: Ditto.
        * editing/cocoa/AlternativeTextUIController.mm: Ditto.
        * editing/mac/TextAlternativeWithRange.h: Ditto.
        * editing/mac/TextAlternativeWithRange.mm: Ditto.

2020-05-06  Simon Fraser  <simon.fraser@apple.com>

        Factor EventHandler code that sends mouseEnteredContentArea/mouseExitedContentArea into its own function
        https://bugs.webkit.org/show_bug.cgi?id=211494

        Reviewed by Antti Koivisto.

        mouseEnteredContentArea/mouseEnteredContentArea are used only to notify overlay scrollbars
        of state changes. Factor the code that calls these functions into a separate EventHandler
        function, and refactor it for clarity, now we know that both lastElementUnderMouse and elementUnderMouse
        must belong to this EventHandler's Frame's Document.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        (WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit):
        * page/EventHandler.h:

2020-05-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] BlockFormattingContext::computeHeightAndMargin should special case the table box
        https://bugs.webkit.org/show_bug.cgi?id=211493

        Reviewed by Antti Koivisto.

        By the time we get to BlockFormattingContext::computeHeightAndMargin(), the used valued for the table height is already been computed.
        (Table box height is mostly content driven, and both the computed height and the min/max pair are taken into account
        while we are laying out the table content).

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

2020-05-06  Antoine Quint  <graouts@apple.com>

        Add watchOS media controls assets
        https://bugs.webkit.org/show_bug.cgi?id=211508
        <rdar://problem/62926565>

        Reviewed by Eric Carlson.

        * Modules/modern-media-controls/images/watchOS/ActivityIndicatorSpriteCompact@2x.png: Added.
        * Modules/modern-media-controls/images/watchOS/InvalidCompact.pdf: Added.
        * Modules/modern-media-controls/images/watchOS/PlayCompact.pdf: Added.
        * WebCore.xcodeproj/project.pbxproj:

2020-05-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] FormattingContext::ConstraintsForInFlowContent should include the computed value of height
        https://bugs.webkit.org/show_bug.cgi?id=211487

        Reviewed by Antti Koivisto.

        When the formatting context root has fixed height, the computed value should be passed in to the formatting context layout
        as the available vertical space.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::constraintsForInFlowContent):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):

2020-04-29  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Implement isSessionSupported()
        https://bugs.webkit.org/show_bug.cgi?id=211187

        Reviewed by Dean Jackson.

        The isSessionSupported() method queries if a given mode may be supported
        by the UA and device capabilities. Apart from the needed machinery in
        the webxr Module we're adding an OpenXR implementation of the
        enumerateImmersiveXRDevices() method required by isSessionSupported().

        The method is not completely implemented as it lacks a few action at its
        very end, like firing events. They'll be implemented in follow up
        patches as they require additional changes.

        Some OpenXR runtimes as Monado always enumerate at least one device even
        if none is connected. This dummy device might interfere with tests
        execution (as there will be more devices than expected) so we're adding
        a testMode to WebXRSystem which does not query platform for existing
        devices.

        Added expected results and unskipped some WPT that are now passing.

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::ensureImmersiveXRDeviceIsSelected): Asks platform
        code for the list of attached XR devices and properly set the active
        immersive device if any.
        (WebCore::WebXRSystem::isSessionSupported): Partially implemented.
        (WebCore::WebXRSystem::registerSimulatedXRDeviceForTesting): Set the
        passed in mock device as either the current active immersive or inline
        device.
        (WebCore::WebXRSystem::unregisterSimulatedXRDeviceForTesting): Removes
        the passed in mock device from the list of immersive devices.
        * Modules/webxr/WebXRSystem.h:
        * html/FeaturePolicy.cpp:
        (WebCore::policyTypeName): Handle XRSpatialTracking.
        (WebCore::FeaturePolicy::parse): Parse "xr-spatial-tracking".
        (WebCore::FeaturePolicy::allows const): Handle XRSpatialTracking.
        * html/FeaturePolicy.h: Added XRSpatialTracking.
        * platform/xr/PlatformXR.h:
        (PlatformXR::Instance::immersiveXRDevices const): Keep a list of immersive devices.
        * platform/xr/openxr/PlatformXR.cpp:
        (PlatformXR::Instance::Impl::collectSupportedSessionModes): Gather supported session
        modes for a given device from OpenXR.
        (PlatformXR::Instance::enumerateImmersiveXRDevices): Collect devices from OpenXR. We
        are currently asking for HMD devices.

2020-05-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Coordinate "update animations and send events" procedure across multiple timelines
        https://bugs.webkit.org/show_bug.cgi?id=202109

        Unreviewed.

        Remove an unused function.

        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::allAnimations const): Deleted.

2020-05-05  Antoine Quint  <graouts@apple.com>

        Fix animation ordering to make imported/w3c/web-platform-tests/css/css-animations/Element-getAnimations.tentative.html pass
        https://bugs.webkit.org/show_bug.cgi?id=211468
        <rdar://problem/62732578>

        Reviewed by David Kilzer.

        The "Animation composite order" section of the CSS Animations Level 2 specification (https://drafts.csswg.org/css-animations-2/#animation-composite-order)
        defines the relative composite order of animations. We bake this into compareAnimationsByCompositeOrder(), but this function would not yield consistent
        results if it is called in a non-stable sort, because if both CSSAnimation objects passed to this function have the same backing Animation object, they
        would not return the same value if passed in a different order. The Web Animations spec always ensures that procedures that sort using the composite
        order are called as part of a stable sort. So we change all call sites to use std::stable_sort and add an assertion in case we have two CSSAnimation
        objects with the same backing Animation objects to catch cases like this in the future.

        Finally, since we already know only relevant animations can find their way into the output of Document::getAnimations(), we also ensure we iterate over
        m_animations (which holds only relevant animations) rather than m_allAnimations (which may not).

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::getAnimations const):
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::ensureEffectsAreSorted):
        * animation/WebAnimationUtilities.cpp:
        (WebCore::compareAnimationsByCompositeOrder):

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

        EventHandler::dispatchMouseEvent() cleanup
        https://bugs.webkit.org/show_bug.cgi?id=211491

        Reviewed by Zalan Bujtas.

        Replace the last bool argument with FireMouseOverOut, and remove the "cancelable" argument that was unused.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleMouseForceEvent):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        * page/EventHandler.h:

2020-05-05  Rob Buis  <rbuis@igalia.com>

        Fix setting host on URL when no port is specified
        https://bugs.webkit.org/show_bug.cgi?id=211453

        Reviewed by Darin Adler.

        Behavior matches Firefox and Chrome.

        Test: web-platform-tests/url/url-setters.html

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setHost):

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

        Minor EventHandler and test cleanup
        https://bugs.webkit.org/show_bug.cgi?id=211475

        Reviewed by Zalan Bujtas.

        Now that we assert that m_elementUnderMouse and m_lastElementUnderMouse are either null
        or in this EventHandler's document, we can remove the document comparisons (but this code
        is probably wrong as well).

        Fix enclosingScrollableArea(), which would return any RenderLayer, but should only
        return scrollable ones, and should only return scrollable RenderListBoxes.

        * page/EventHandler.cpp:
        (WebCore::enclosingScrollableArea):
        (WebCore::EventHandler::updateMouseEventTargetNode):

2020-05-05  David Kilzer  <ddkilzer@apple.com>

        Fix deprecated NSGraphicsContext methods using 'graphicsPort'
        <https://webkit.org/b/211481>

        Reviewed by Darin Adler.

        - Replace uses of -graphicsPort with -CGContext.
        - Replace uses of -graphicsContextWithGraphicsPort:flipped: with
          -graphicsContextWithCGContext:flipped:.
        - Remove ALLOW_DEPRECATED_DECLARATIONS_{BEGIN,END} if possible.

        * platform/cocoa/DragImageCocoa.mm:
        (WebCore::createDragImageForLink):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayer::drawLayerContents):
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):

2020-05-05  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Crash in match_constness<WebCore::CSSValue, WebCore::CSSPrimitiveValue>::type& WTF::downcast<WebCore::CSSPrimitiveValue, WebCore::CSSValue> -- ASAN
        https://bugs.webkit.org/show_bug.cgi?id=211479

        Reviewed by Geoffrey Garen.
    
        Added check to downcast CSSValue to CSSPrimitiveValue, only if valid CSSPrimitveValue is associated with the property.

        New test would be added to Internal repository.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::pageBreakPropertyValue const):

2020-05-05  Peng Liu  <peng.liu6@apple.com>

        Update WebKitTestRunner to support running multiple video fullscreen and Picture-in-Picture tests simultaneously
        https://bugs.webkit.org/show_bug.cgi?id=203723

        Reviewed by Jer Noble.

        Test: media/video-presentation-mode.html

        Add a flag MockVideoPresentationModeEnabled to "internals" for video fullscreen
        and picture-in-picture tests.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::setMockVideoPresentationModeEnabled):
        * testing/Internals.cpp:
        (WebCore::Internals::setMockVideoPresentationModeEnabled):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-05  Darin Adler  <darin@apple.com>

        Remove HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
        https://bugs.webkit.org/show_bug.cgi?id=211461

        Reviewed by Eric Carlson.

        * PlatformMac.cmake: Removed InbandTextTrackPrivateLegacyAVFObjC.mm.
        * SourcesCocoa.txt: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto, also the header.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h: Removed.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm: Removed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        Removed HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT). Also moved data member
        initialization to the class definition, made more things private and final,
        made outputObscuredDueToInsufficientExternalProtectionChanged unconditional,
        changed friend class MediaPlayerFactoryAVFoundationObjC into member class
        MediaPlayerPrivateAVFoundationObjC::Factory, removed unused removeSession function,
        and tweaked conditionals.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        Removed import of InbandTextTrackPrivateLegacyAVFObjC.h. Moved data member
        initialization to the class definition. Moved include of BinarySemaphore here.

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

        Assert that EventHandler only tracks event target nodes in its own document
        https://bugs.webkit.org/show_bug.cgi?id=211462

        Reviewed by Zalan Bujtas.

        EventHandler is per-Frame, so should not track Nodes from different documents. However, it did so
        by mistake if an event handler moved a node between documents.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::targetNode const):

2020-05-05  Antti Koivisto  <antti@apple.com>

        Factor RenderLayerBacking::updateEventRegion skip conditions into a lambda
        https://bugs.webkit.org/show_bug.cgi?id=211450

        Reviewed by Simon Fraser.

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

2020-05-05  Chris Dumez  <cdumez@apple.com>

        Drop code path using the legacy CFNetwork cookie change notification SPI
        https://bugs.webkit.org/show_bug.cgi?id=211411
        <rdar://problem/62869148>

        Reviewed by John Wilander.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::registerCookieChangeListenersIfNecessary):
        (WebCore::NetworkStorageSession::unregisterCookieChangeListenersIfNecessary):
        (WebCore::NetworkStorageSession::supportsCookieChangeListenerAPI const):

2020-05-05  Timothy Horton  <timothy_horton@apple.com>

        "Essential Skeleton" does not respond to mouse events, only touch events
        https://bugs.webkit.org/show_bug.cgi?id=211439
        <rdar://problem/62694519>

        Reviewed by Wenson Hsieh.

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

2020-05-05  Megan Gardner  <megan_gardner@apple.com>

        Style is not applied when changed on the first line of a new mail message.
        https://bugs.webkit.org/show_bug.cgi?id=211200
        <rdar://problem/62087514>

        Reviewed by Darin Adler.

        After r257487 when we resign first responder, we immediatly 
        update activity state. This means that if we resign first responder, and then
        become first responder, we are clearing the selection if the caret is at the beginning
        of the document, due to a check in setSelectionFromNone. This check was originally added
        in 2006 because it happened to fix <rdar://problem/4483145>. Removing this check and
        merging the iOS and Mac logic.

        Test: editing/execCommand/ios/first-line-text-attribute-change-presist-through-resigning-first-responder.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionFromNone):

2020-05-05  Rob Buis  <rbuis@igalia.com>

        A URL cannot have a username/password/port if its host is null
        https://bugs.webkit.org/show_bug.cgi?id=211358

        Reviewed by Darin Adler.

        A URL cannot have a username/password/port if its host is null [1], so
        adjust URL.cpp accordingly.

        Behavior matches Chrome and Firefox.

        [1] https://url.spec.whatwg.org/#cannot-have-a-username-password-port

        * html/URLDecomposition.cpp:
        (WebCore::URLDecomposition::setUsername):
        (WebCore::URLDecomposition::setPassword):
        (WebCore::URLDecomposition::setPort):

2020-05-05  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC should unobserve the tracks from its audio and video track sets
        https://bugs.webkit.org/show_bug.cgi?id=211444
        <rdar://problem/62886221>

        Reviewed by Eric Carlson.

        Test: fast/mediastream/MediaStream-removeTrack-while-playing.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC):
        We keep maps of audio and video tracks we are observing.
        Use these two maps to properly unobserve all tracks at destruction time.
        While this is not strictly needed since we are using weak pointers, this helps keeping the code healthy.
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::forEachObserver):
        Add a debug ASSERT so that we ensure add/remove observers is done properly.

2020-05-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r261130.

        Caused crashes on some of our bots

        Reverted changeset:

        "Drop code path using the legacy CFNetwork cookie change
        notification SPI"
        https://bugs.webkit.org/show_bug.cgi?id=211411
        https://trac.webkit.org/changeset/261130

2020-05-05  Darin Adler  <darin@apple.com>

        Remove now-unneeded USE(COREMEDIA) and USE(VIDEOTOOLBOX)
        https://bugs.webkit.org/show_bug.cgi?id=211437

        Reviewed by Eric Carlson.

        * platform/cocoa/VideoToolboxSoftLink.cpp: Remove USE(VIDEOTOOLBOX).
        * platform/cocoa/VideoToolboxSoftLink.h: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage): Ditto.
        * platform/graphics/cocoa/WebCoreDecompressionSession.h: Ditto. Also remove
        #pragma once since this header is only used with #import, not #include.
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm: Ditto.
        * platform/graphics/cv/ImageRotationSessionVT.h: Ditto.
        * platform/graphics/cv/ImageRotationSessionVT.mm: Ditto.
        * platform/graphics/cv/ImageTransferSessionVT.h: Ditto.
        * platform/graphics/cv/ImageTransferSessionVT.mm: Ditto.
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        (WebCore::PixelBufferConformerCV::PixelBufferConformerCV): Ditto.
        (WebCore::PixelBufferConformerCV::convert): Ditto.
        (WebCore::PixelBufferConformerCV::createImageFromPixelBuffer): Ditto.
        * platform/graphics/cv/PixelBufferConformerCV.h: Ditto.

2020-05-05  Youenn Fablet  <youenn@apple.com>

        Remove LegacySchemeRegistry::canServiceWorkersHandleURLScheme
        https://bugs.webkit.org/show_bug.cgi?id=211170

        Reviewed by Alex Christensen.

        Since we no longer use custom service worker schemes in API tests,
        we no longer need custom schemes in web process, given they are not supported in network process anyway.
        Remove related code.

        * Modules/cache/DOMWindowCaches.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NeedsRuntimeCheck):
        (GenerateRuntimeEnableConditionalString):
        * bindings/scripts/IDLAttributes.json:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::hasServiceWorkerScheme const): Deleted.
        * dom/ScriptExecutionContext.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::matchRegistration):
        (WebCore::DocumentLoader::commitData):
        * page/NavigatorServiceWorker.idl:
        * platform/LegacySchemeRegistry.cpp:
        (WebCore::serviceWorkerSchemes): Deleted.
        (WebCore::LegacySchemeRegistry::registerURLSchemeServiceWorkersCanHandle): Deleted.
        (WebCore::LegacySchemeRegistry::canServiceWorkersHandleURLScheme): Deleted.
        (WebCore::LegacySchemeRegistry::isServiceWorkerContainerCustomScheme): Deleted.
        * platform/LegacySchemeRegistry.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):

2020-05-05  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(DISALLOWABLE_USER_INSTALLED_FONTS)
        https://bugs.webkit.org/show_bug.cgi?id=211428

        Reviewed by Anders Carlsson.

        * platform/graphics/Font.h: Removed isUserInstalledFont, only used for
        an assertion that I took the liberty of removing.

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback): Removed an
        assertion since it was the only reason to introduce the concept of a
        user-installed font to the cross-platform code. The assertion is a bit
        of a self-check that doesn't seem critical.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::singleton): Deleted.
        (WebCore::FontDatabase::singletonAllowingUserInstalledFonts): Remove
        HAVE(DISALLOWABLE_USER_INSTALLED_FONTS).
        (WebCore::FontDatabase::singletonDisallowingUserInstalledFonts): Ditto.
        (WebCore::isUserInstalledFont): Ditto.
        (WebCore::addAttributesForInstalledFonts): Ditto.
        (WebCore::isFontMatchingUserInstalledFontFallback): Ditto.
        (WebCore::addAttributesForWebFonts): Ditto.
        (WebCore::installedFontMandatoryAttributes): Ditto.

        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::isUserInstalledFont const): Deleted.

2020-05-05  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Video loops when ran in rr record --chaos
        https://bugs.webkit.org/show_bug.cgi?id=211182

        Reviewed by Philippe Normand.

        While trying to investigate a different bug, I ran the browser with
        `rr record --chaos`, which makes it run very slowly and shuffles
        thread scheduling to try to make existing race conditions more likely
        to show up, also inevitably making the software run very slow.

        Doing so I found something strange: the video kept looping even though
        it didn't have the `loop` attribute set.

        After some debugging I found that MediaPlayer decides if the video has
        ended in part by checking `currentMediaTime()` is greater or equal to
        the video duration, which was not guaranteed to be the case in
        MediaPlayerPrivateGStreamer.

        As a consequence of this patch, one new LayoutTest has passed.

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

2020-05-05  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename computedContentHeight/Width to computedHeight/Width
        https://bugs.webkit.org/show_bug.cgi?id=211432

        Reviewed by Darin Adler.

        These functions used to return the computed content box height/width but with box-sizing
        support the name is not correct anymore. 

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedHeight const):
        (WebCore::Layout::FormattingContext::Geometry::computedWidth const):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases const):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
        (WebCore::Layout::FormattingContext::Geometry::computedContentHeight const): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::computedContentWidth const): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::cellHeigh const):
        (WebCore::Layout::TableFormattingContext::Geometry::computedColumnWidth const):

2020-05-05  Antoine Quint  <graouts@apple.com>

        Unreviewed, reverting r260989.

        Mistakenly identified cause of MotionMark 1.1 performance regression

        Reverted changeset:

        "REGRESSION: MotionMark 1.1 regressed due to r260016"
        https://bugs.webkit.org/show_bug.cgi?id=211280
        https://trac.webkit.org/changeset/260989

2020-05-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        Object.prototype.toString is not spec-perfect
        https://bugs.webkit.org/show_bug.cgi?id=199138

        Reviewed by Darin Adler and Keith Miller.

        This patch defines @@toStringTag symbols for all WebIDL prototypes, including
        interfaces that are not exposed, as required by the spec [1].

        With updated JSObject::toStringName() and @@toStringTag symbols added in r260992,
        className() and toStringName() methods of JSDOMConstructorBase can be safely removed.

        [1]: https://heycam.github.io/webidl/#dfn-class-string

        Tests: imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/class-string-interface.any.js
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/class-string-iterator-prototype-object.any.js

        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::JSDOMConstructorBase::className): Deleted.
        (WebCore::JSDOMConstructorBase::toStringName): Deleted.
        * bindings/js/JSDOMConstructorBase.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectPrototype::finishCreation):

2020-05-04  Darin Adler  <darin@apple.com>

        [Mac] Remove __MAC_OS_X_VERSION_MIN_REQUIRED checks for versions older than 10.14
        https://bugs.webkit.org/show_bug.cgi?id=211420

        Reviewed by Alex Christensen.

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItem): Remove __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400.
        * editing/cocoa/HTMLConverter.mm:
        (_WebMessageDocumentClass): Ditto.
        * platform/graphics/cg/GraphicsContextCG.cpp: Ditto.
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]): Ditto.
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::nsSameSitePolicy): Ditto.
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const): Ditto.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::cookiesForURL): Ditto.
        (WebCore::NetworkStorageSession::setHTTPCookiesForURL const): Ditto.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.
        (WebCore::siteForCookies): Ditto.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Ditto.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField): Ditto.
        * testing/Internals.h: Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(NETWORK_EXTENSION)
        https://bugs.webkit.org/show_bug.cgi?id=211424

        Reviewed by Alex Christensen.

        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::types): Remove check of HAVE(NETWORK_EXTENSION),
        not needed because ENABLE(CONTENT_FILTER) is only done on Cocoa platforms,
        and HAVE(NETWORK_EXTENSION) is true for all of those.
        * platform/cocoa/NetworkExtensionContentFilter.mm: Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(SEC_TRUST_EVALUATE_WITH_ERROR)
        https://bugs.webkit.org/show_bug.cgi?id=211429

        Reviewed by Alex Christensen.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):
        Remove HAVE(SEC_TRUST_EVALUATE_WITH_ERROR).

2020-05-04  Simon Fraser  <simon.fraser@apple.com>

        Code cleanup in EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=211413

        Reviewed by Tim Horton.

        Use a better name for "hoveredNode" which is a HitTestResult.

        Convert Frame* to Frame&.

        Have a couple of helper functions return RefPtr<Frame>.

        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::stopAutoscrollTimer):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::subframeForHitTestResult):
        (WebCore::EventHandler::subframeForTargetNode):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::passMouseMovedEventToScrollbars):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::passMousePressEventToScrollbar):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        (WebCore::EventHandler::tryToBeginDragAtPoint):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::passMouseMoveEventToSubframe):

2020-05-04  Ben Nham  <nham@apple.com>

        IndexedDB WAL file keeps growing while app is in use
        https://bugs.webkit.org/show_bug.cgi?id=202137

        Reviewed by Brady Eidson.

        It's easy to get into a situation where the WAL file associated with a SQLite-backed
        IndexedDB grows indefinitely while a site is in use for two reasons:

        1. We don't promptly reset cached prepared statements in SQLiteIDBBackingStore. Many
        statements are left hanging in the SQLITE_ROW state without being reset or fully stepped to
        the SQLITE_DONE state. These hanging statements keep their associated transactions open and
        prevent the WAL checkpointer from progressing past those active transactions.

        To fix this, I added SQLiteStatementAutoResetScope. This is a scope guard that
        SQLiteIDBBackingStore uses to ensure that cached statements are reset in a timely manner.

        While going through the reset code I also noticed we aren't clearing bindings after
        resetting statements. We should be doing this because sqlite3_reset does not clear bindings
        (and their associated copies of blobs/strings); sqlite3_clear_bindings does that.

        2. The default WAL hook for auto-checkpointing in upstream SQLite uses the
        SQLITE_CHECKPOINT_PASSIVE mode, which doesn't truncate the WAL until the next write
        transaction occurs. (It actually doesn't truncate at all when compiled with default
        settings, but macOS's SQLite sets SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT, which causes the
        truncation to occur on the next write.)

        We want the WAL to be truncated more promptly, because otherwise the quota check that
        happens on each mutation won't be as accurate. To do this, I installed a WAL hook that
        truncates the WAL with SQLITE_CHECKPOINT_TRUNCATE after the default threshold of 1000 WAL
        pages. I didn't enable this for all SQLiteDatabases because this checkpoint call can block
        on the busy handler. This isn't a problem for IDB since we don't use busy handlers in IDB.

        * Headers.cmake:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::clearObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::createIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedHasIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedPutIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::renameIndex):
        (WebCore::IDBServer::SQLiteIDBBackingStore::keyExistsInObjectStore):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteUnusedBlobFileRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatementForGetAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::cachedStatement):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::walAutomaticTruncationHook):
        (WebCore::SQLiteDatabase::enableAutomaticWALTruncation):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::reset):
        * platform/sql/SQLiteStatementAutoResetScope.cpp: Added.
        (WebCore::SQLiteStatementAutoResetScope::SQLiteStatementAutoResetScope):
        (WebCore::SQLiteStatementAutoResetScope::operator=):
        (WebCore::SQLiteStatementAutoResetScope::~SQLiteStatementAutoResetScope):
        * platform/sql/SQLiteStatementAutoResetScope.h: Added.
        (WebCore::SQLiteStatementAutoResetScope::operator bool const):
        (WebCore::SQLiteStatementAutoResetScope::operator! const):
        (WebCore::SQLiteStatementAutoResetScope::get):
        (WebCore::SQLiteStatementAutoResetScope::operator->):

2020-05-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Tapping to focus editable elements should start caret selection at word boundary
        https://bugs.webkit.org/show_bug.cgi?id=211409
        <rdar://problem/62869098>

        Reviewed by Megan Gardner.

        Match platform behavior when focusing editable text content by beginning the caret selection at word
        granularity (i.e. the start or end of a word), rather than character granularity. This will match behavior of
        other editable widgets on iOS (such as UITextField and UITextView), as well as our current behavior when tapping
        to change the selection when the text interaction is editable (i.e. when the caret is already visible when
        tapping).

        Rebaselined existing layout tests.

        * editing/VisibleUnits.cpp:
        (WebCore::wordBoundaryForPositionWithoutCrossingLine):

        Move logic previously in `WebPage::selectWithGesture` down into `VisibleUnits.h`, as a new standalone helper
        function. Given a `VisiblePosition`, this new helper will return the given position if it is either already at
        word boundary or line boundary; if it is within the boundary of a word, it will instead return the start or end
        of the word.

        * editing/VisibleUnits.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):

        When setting the selection due to a synthetic single click, automatically adjust the caret position to be at
        word boundary instead of using the hit-tested position directly.

2020-05-04  Darin Adler  <darin@apple.com>

        Make __IPHONE_OS_VERSION_MIN_REQUIRED checks against old versions explicit about watchOS and tvOS
        https://bugs.webkit.org/show_bug.cgi?id=211402

        Reviewed by Alexey Proskuryakov.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attributesForAttributedStringConversion): Move from __IPHONE_OS_VERSION_MIN_REQUIRED
        to !PLATFORM(WATCHOS) && !PLATFORM(APPLETV). Move NSExcludedElementsDocumentAttribute to
        AttributedStringSPI.h.

        * page/SettingsDefaultValues.h: Rewrite conic gradient conditional to call out
        tvOS as an exception rather than doing that indirectly through __IPHONE_OS_VERSION_MIN_REQUIRED.
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint): Ditto.

        * platform/graphics/cocoa/FontCacheCoreText.cpp: Rewrite
        HAS_CORE_TEXT_WIDTH_ATTRIBUTE to use !PLATFORM(WATCHOS) && !PLATFORM(APPLETV).
        (WebCore::variationCapabilitiesForFontDescriptor): Ditto.
        (WebCore::FontCache::lastResortFallbackFont): Ditto.

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::matchSystemFontUse): Use HAVE(SYSTEM_FONT_STYLE_TITLE_0) and
        HAVE(SYSTEM_FONT_STYLE_TITLE_4) instead of __IPHONE_OS_VERSION_MIN_REQUIRED.
        This consolidates the watchOS/tvOS issue into the PlatformHave.h file, and
        does not change behavior at this time.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::cascadeToLastResortAttributesDictionary): Changed this to not use
        a global since it's only called as part of initializing another global, and
        to return a RetainPtr.
        (WebCore::cascadeToLastResortAndVariationsFontDescriptor): Removed
        WORKAROUND_CORETEXT_VARIATIONS_WITH_FALLBACK_LIST_BUG after researching to
        be sure it's fixed on recent watchOS and tvOS. Also changed this to return
        a raw pointer instead of RetainPtr since it returns a single global object.
        Also removed the CTFontRef argument.
        (WebCore::FontPlatformData::ctFont const): Updated for the changes above.

        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::surfaceID const): Move from __IPHONE_OS_VERSION_MIN_REQUIRED
        to !PLATFORM(WATCHOS) && !PLATFORM(APPLETV).
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase): Ditto.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): Ditto.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove HAVE(IOSURFACE) checks in Cocoa-platform-specific code
        https://bugs.webkit.org/show_bug.cgi?id=211389

        Reviewed by Alexey Proskuryakov.

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory): Remove HAVE(IOSURFACE) since it's always true
        on Cocoa platforms.
        * platform/graphics/RemoteVideoSample.cpp:
        (WebCore::RemoteVideoSample::surface const): Ditto.
        * platform/graphics/RemoteVideoSample.h: Ditto.
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::allocateIOSurfaceBackingStore): Ditto.
        (WebCore::GraphicsContextGLOpenGL::updateFramebufferTextureBackingStoreFromLayer): Ditto.
        * platform/graphics/cocoa/IOSurface.mm: Ditto.
        * platform/graphics/cocoa/IOSurfacePoolCocoa.mm: Ditto.
        * platform/graphics/cocoa/WebGLLayer.h: Ditto.
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]): Ditto.
        * platform/graphics/cv/ImageTransferSessionVT.h: Ditto.
        * platform/graphics/cv/ImageTransferSessionVT.mm: Ditto.
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction): Ditto.
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture): Ditto.
        * platform/graphics/cv/VideoTextureCopierCV.h: Ditto.
        * rendering/RenderThemeIOS.h: Ditto.

2020-05-04  Simon Fraser  <simon.fraser@apple.com>

        Overflow scrollbars don't grow when hovered
        https://bugs.webkit.org/show_bug.cgi?id=210692
        <rdar://problem/61977273>

        Reviewed by Tim Horton.

        Overlay scrollar interaction has a few behaviors that are mediated by ScrollAnimatorMac. These
        are a trackpad two-finger tap, which sends a "MayBegin" wheel event (which can be followed by
        a "Cancelled" on fingers up, if they didn't move), and hovering the scrollbar when visible, which
        causes it to expand (unhovering causes it to fade out).
        
        To track these gestures on the scrolling thread, give ScrollingTree a ScrollingTreeGestureState.

        Flashing the scrollbars on "MayBegin" is driven by didBeginScrollGesture()/didEndScrollGesture().
        This relies on sending these for the correct scrollable area, and matching the begin/cancel,
        so use the normal scrolling tree event handling code path for "MayBegin", and always send
        "Cancelled" on the node that received "MayBegin. Do the same for "Began" and "Ended".
        
        Scrollbars expanding on hover is controlled by these functions on ScrollAnimatorMac:
            void mouseEnteredContentArea();
            void mouseExitedContentArea();
            void mouseMovedInContentArea();
            void mouseEnteredScrollbar(Scrollbar*) const;
            void mouseExitedScrollbar(Scrollbar*) const;

        This mostly (webkit.org/b/211347) works now that the mayBegin/Canceled state is updated correctly,
        and is tested by a new test.

        Tests: fast/scrolling/mac/scrollbars/overflow-overlay-scrollbar-hovered.html
               fast/scrolling/mac/scrollbars/overflow-overlay-scrollbar-reveal.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::handleWheelEvent):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeGestureState.cpp: Added.
        (WebCore::ScrollingTreeGestureState::ScrollingTreeGestureState):
        (WebCore::ScrollingTreeGestureState::receivedWheelEvent):
        (WebCore::ScrollingTreeGestureState::handleGestureCancel):
        (WebCore::ScrollingTreeGestureState::nodeDidHandleEvent):
        (WebCore::ScrollingTreeGestureState::clearAllNodes):
        * page/scrolling/ScrollingTreeGestureState.h: Copied from Source/WebCore/page/scrolling/ScrollingTreeLatchingController.h.
        * page/scrolling/ScrollingTreeLatchingController.cpp:
        (WebCore::ScrollingTreeLatchingController::nodeDidHandleEvent):
        * page/scrolling/ScrollingTreeLatchingController.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::canHandleWheelEvent const):
        (WebCore::ScrollingTreeScrollingNode::canScrollWithWheelEvent const): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::handleWheelEvent):
        * platform/Logging.cpp:
        (WebCore::initializeLogChannelsIfNecessary):
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::isGestureStart const):
        (WebCore::PlatformWheelEvent::isGestureCancel const):
        * platform/cocoa/ScrollController.mm:
        (WebCore::ScrollController::handleWheelEvent):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollbarState):

2020-05-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r261102.
        https://bugs.webkit.org/show_bug.cgi?id=211418

        Revert some debug logging (Requested by smfr on #webkit).

        Reverted changeset:

        "REGRESSION: [ Mac WK1 ] inspector/console/console-api.html is
        flaky crashing"
        https://bugs.webkit.org/show_bug.cgi?id=211386
        https://trac.webkit.org/changeset/261102

2020-05-04  Chris Dumez  <cdumez@apple.com>

        Drop code path using the legacy CFNetwork cookie change notification SPI
        https://bugs.webkit.org/show_bug.cgi?id=211411

        Reviewed by John Wilander.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::registerCookieChangeListenersIfNecessary):
        (WebCore::NetworkStorageSession::unregisterCookieChangeListenersIfNecessary):

2020-05-04  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in CompositeEditCommand::moveParagraphs when changing style on elements that are
        user-select:none and dir:rtl.
        https://bugs.webkit.org/show_bug.cgi?id=211206
        <rdar://problem/61830589>

        Reviewed by Geoffrey Garen.

        In function moveParagraphs check if the destination is an empty position and 
        bail out before moving the paragraphs.

        Test: fast/editing/justify-user-select-none-dir-rtl-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):

2020-05-04  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Implement +[_WKWebAuthenticationPanel clearAllLocalAuthenticatorCredentials]
        https://bugs.webkit.org/show_bug.cgi?id=211369
        <rdar://problem/60246635>

        Reviewed by Brent Fulgham.

        Covered by manual tests given auto tests could clear developers' actual credentials.

        * Modules/webauthn/WebAuthenticationConstants.h:

2020-05-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Throttling requestAnimationFrame should be controlled by RenderingUpdateScheduler
        https://bugs.webkit.org/show_bug.cgi?id=204713

        Reviewed by Simon Fraser.

        rAF and Page rendering were managed by two different timers. Throttling
        rAF was implemented by changing its timer. After r242624, RenderingUpdate
        steps have been managed by RenderingUpdateScheduler. This means rAF is
        now serviced by the preferredFramesPerSecond which is 60 fps regardless
        it's throttled or not. Moreover the rAF throttling timer was mistakenly
        kept and it has been running under the old assumption which is: rAF is
        serviced by a timer only. This means rAF will be serviced by its timer
        and by the RenderingUpdate steps at the same time when it is supposed to
        throttle. This will make it fire more than 60 fps in cases which it is
        supposed to run less than 60 fps.

        The solution is to have two throttling types:

        1) Page throttling (or full throttling): This slows down all the steps
           of RenderingUpdate for the main document and all the sub-documents.
           Page throttling reasons are:
           -- VisuallyIdle: Aggressive throttling.
           -- LowPowerMode: Half speed throttling.
        2) Document throttling (or partial throttling): This only slows down the
           rAF of a certain document. Document throttling reasons are:
           -- OutsideViewport: Aggressive throttling.
           -- NonInteractedCrossOriginFrame: Half speed throttling.

        RenderingUpdate steps will still be managed by RenderingUpdateScheduler
        which can be throttled. The assumption is none of these steps will need
        to run faster than the Page preferredFramesPerSecond. If rAF wants to
        run slower than the Page because of a Document throttling reason, no rAF
        callbacks will be serviced before its preferredFrameInterval has elapsed.

        In this patch, "Half speed throttling" is only implemented for the Page
        and the Document throttling. The "Aggressive throttling" will be done in
        following patches. Page rendering was never throttled before. We need to
        make sure this is not going to affect PLT. Some tests need to be changed
        and new tests need to be written.  All of the throttling tests checks the
        state of the code but none of them checks the real user's experience.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animationInterval const):
        (WebCore::DocumentTimeline::updateThrottlingState): Deleted.
        * animation/DocumentTimeline.h:
        There is no need to have DocumentTimeline throttling. It is already 
        throttled when the page RenderingUpdate is throttled.

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        (WebCore::Document::updateLastHandledUserGestureTimestamp):
        LowPowerMode throttling is now handled by the Page. So remove its handling
        from the Document.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::page const):
        (WebCore::ScriptedAnimationController::interval const):
        (WebCore::ScriptedAnimationController::preferredScriptedAnimationInterval const):
        (WebCore::ScriptedAnimationController::throttlingReasons const):
        (WebCore::ScriptedAnimationController::isThrottledRelativeToPage const):
        (WebCore::ScriptedAnimationController::shouldRescheduleRequestAnimationFrame const):
        (WebCore::ScriptedAnimationController::registerCallback):
        (WebCore::ScriptedAnimationController::cancelCallback):
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::throttlingReasonToString): Deleted.
        (WebCore::throttlingReasonsToString): Deleted.
        (WebCore::ScriptedAnimationController::addThrottlingReason): Deleted.
        (WebCore::ScriptedAnimationController::removeThrottlingReason): Deleted.
        (WebCore::ScriptedAnimationController::isThrottled const): Deleted.
        (WebCore::ScriptedAnimationController::animationTimerFired): Deleted.
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        Get rid of the rAF throttling timer. Service the rAF callback only when
        the period from the current time stamp till the last service time stamp
        is greater than the preferred rAF interval.

        * page/FrameView.cpp:
        (WebCore::FrameView::updateScriptedAnimationsAndTimersThrottlingState):
        ThrottlingReason is now defined outside ScriptedAnimationController.

        * page/Page.cpp:
        (WebCore::m_loadsFromNetwork):
        (WebCore::Page::setLowPowerModeEnabledOverrideForTesting):

        (WebCore::Page::preferredRenderingUpdateInterval const):
        Calculate the preferred RenderingUpdate interval from the throttling
        reasons.

        (WebCore::Page::setIsVisuallyIdleInternal):
        (WebCore::Page::handleLowModePowerChange):
        Call adjustRenderingUpdateFrequency() when isLowPowerModeEnabled or 
        IsVisuallyIdle is toggled.

        (WebCore::Page::isLowPowerModeEnabled const): Deleted.
        (WebCore::updateScriptedAnimationsThrottlingReason): Deleted.
        * page/Page.h:
        (WebCore::Page::isLowPowerModeEnabled const):
        (WebCore::Page::throttlingReasons const):
        (WebCore::Page::canUpdateThrottlingReason const):

        * page/RenderingUpdateScheduler.cpp:
        (WebCore::RenderingUpdateScheduler::setPreferredFramesPerSecond):
        (WebCore::RenderingUpdateScheduler::scheduleAnimation):
        (WebCore::RenderingUpdateScheduler::adjustRenderingUpdateFrequency):
        Change the preferredFramesPerSecond of the DisplayRefreshMonitor if the
        throttling is not aggressive e.g. 10_s. Otherwise use the timer.

        (WebCore::RenderingUpdateScheduler::scheduleTimedRenderingUpdate):
        Call adjustFramesPerSecond() when DisplayRefreshMonitor is created.

        (WebCore::RenderingUpdateScheduler::startTimer):
        * page/RenderingUpdateScheduler.h:
        * platform/graphics/AnimationFrameRate.h: Added.
        (WebCore::preferredFrameInterval):
        (WebCore::preferredFramesPerSecond):
        (WebCore::operator<<):
        Push names of ThrottlingReasons to a TextStream.

        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::setPreferredFramesPerSecond):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::monitorForClient):
        Rename createMonitorForClient() to monitorForClient() since it may return
        a cached DisplayRefreshMonitor.

        (WebCore::DisplayRefreshMonitorManager::setPreferredFramesPerSecond):
        (WebCore::DisplayRefreshMonitorManager::scheduleAnimation):
        (WebCore::DisplayRefreshMonitorManager::windowScreenDidChange):
        No need to call registerClient(). This function was just ensuring the
        DisplayRefreshMonitor is created. scheduleAnimation() does the same thing.

        (WebCore::DisplayRefreshMonitorManager::createMonitorForClient): Deleted.
        (WebCore::DisplayRefreshMonitorManager::registerClient): Deleted.
        * platform/graphics/DisplayRefreshMonitorManager.h:
        (WebCore::DisplayRefreshMonitorManager::DisplayRefreshMonitorManager): Deleted.

        * platform/graphics/GraphicsLayerUpdater.cpp:
        (WebCore::GraphicsLayerUpdater::GraphicsLayerUpdater):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        (-[WebDisplayLinkHandler setPreferredFramesPerSecond:]):
        Set the preferredFramesPerSecond of the CADisplayLink.

        * testing/Internals.cpp:
        (WebCore::Internals::requestAnimationFrameThrottlingReasons const):
        (WebCore::Internals::isRequestAnimationFrameThrottled const): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        Replace isRequestAnimationFrameThrottled() which returns a boolean by
        requestAnimationFrameThrottlingReasons() which returns a string. The 
        string represents the throttling reasons.

2020-05-04  Darin Adler  <darin@apple.com>

        Remove unneeded USE(MEDIAREMOTE)
        https://bugs.webkit.org/show_bug.cgi?id=211385

        Reviewed by Eric Carlson.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateNowPlayingInfo): Remove USE(MEDIAREMOTE).
        * platform/mac/MediaRemoteSoftLink.cpp: Ditto.
        * platform/mac/MediaRemoteSoftLink.h: Ditto.
        * platform/mac/RemoteCommandListenerMac.mm:
        (WebCore::RemoteCommandListenerMac::updateSupportedCommands): Ditto.
        (WebCore::RemoteCommandListenerMac::RemoteCommandListenerMac): Ditto.
        (WebCore::RemoteCommandListenerMac::~RemoteCommandListenerMac): Ditto.

2020-05-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Worker: should use the name of the worker if it exists
        https://bugs.webkit.org/show_bug.cgi?id=211244

        Reviewed by Brian Burg.

        Test: inspector/worker/runtime-basic.html

        Pass the `name` from the `WorkerOptions` given to the `Worker` when it's constructed to Web
        Inspector so it can be used in the frontend UI.

        Drive-by: replace lots of pointers with references.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):

        * workers/WorkerInspectorProxy.h:
        (WebCore::WorkerInspectorProxy::name const): Added.
        * workers/WorkerInspectorProxy.cpp:
        (WebCore::WorkerInspectorProxy::workerStarted):
        (WebCore::WorkerInspectorProxy::workerTerminated):
        (WebCore::WorkerInspectorProxy::connectToWorkerInspectorController):
        (WebCore::WorkerInspectorProxy::sendMessageFromWorkerToFrontend):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::workerStarted):
        (WebCore::InspectorInstrumentation::workerTerminated):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::workerStartedImpl):
        (WebCore::InspectorInstrumentation::workerTerminatedImpl):

        * inspector/agents/InspectorWorkerAgent.h:
        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::sendMessageFromWorkerToFrontend):
        (WebCore::InspectorWorkerAgent::workerStarted):
        (WebCore::InspectorWorkerAgent::workerTerminated):
        (WebCore::InspectorWorkerAgent::connectToAllWorkerInspectorProxiesForPage):
        (WebCore::InspectorWorkerAgent::connectToWorkerInspectorProxy):
        (WebCore::InspectorWorkerAgent::disconnectFromWorkerInspectorProxy):

2020-05-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way for inspector to turn on/off ITP debug mode and AdClickAttribution debug mode
        https://bugs.webkit.org/show_bug.cgi?id=209763

        Reviewed by Brian Burg.

        Tests: inspector/page/overrideSetting-AdClickAttributionDebugModeEnabled.html
               inspector/page/overrideSetting-ITPDebugModeEnabled.html

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::overrideSetting):

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::setDeveloperPreferenceOverride): Added.
        (WebCore::InspectorClient::setMockCaptureDevicesEnabledOverride): Deleted.

2020-05-04  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION: [ Mac WK1 ] inspector/console/console-api.html is flaky crashing
        https://bugs.webkit.org/show_bug.cgi?id=211386

        Reviewed by David Kilzer.

        Add some temporary logging code to get data from Mojave bots related to this
        NSScrollerImp crash.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::dumpPaintersWithDelegates):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        (WebCore::ScrollAnimatorMac::willRemoveHorizontalScrollbar):

2020-05-04  Doug Kelly  <dougk@apple.com>

        Add additional null checks to MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=211134
        <rdar://problem/62056577>

        Reviewed by Daniel Bates.

        Add additional null checks for a set m_mediaSourcePrivate to MediaPlayerPrivateMediaSourceAVFObjC.  Most uses in this
        class are already guarded, but a few were not, which could lead to a null pointer crash if encountered.

        No new tests; no functional changes.

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

2020-05-04  Darin Adler  <darin@apple.com>

        Remove now-unneeded HAVE(MEDIA_PLAYER)
        https://bugs.webkit.org/show_bug.cgi?id=211378

        Reviewed by Alex Christensen.

        * platform/RemoteCommandListener.cpp: Remove uneeded check for HAVE(MEDIA_PLAYER)
        in code that already checks for Cocoa platforms explicitly.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring): Removed
        check of HAVE(MEDIA_PLAYER) in a Cocoa-only source file.
        * platform/ios/RemoteCommandListenerIOS.h: Ditto. Also removed #pragma once and
        some other unnecessary things because this is only included in the .mm file below.
        * platform/ios/RemoteCommandListenerIOS.mm: Ditto.

2020-05-04  Guillem Vinals  <gvinals@apple.com>

        WebGPU: Textures should be able to have OUTPUT_ATTACHMENT | SAMPLED usage flags
        https://bugs.webkit.org/show_bug.cgi?id=211345
        <rdar://problem/62264423>

        Reviewed by Myles C. Maxfield.

        Added support for off-screen render targets. 

        Test: webgpu/textures-textureviews.html

        * platform/graphics/gpu/cocoa/GPUTextureMetal.mm:
        (WebCore::mtlTextureUsageForGPUTextureUsageFlags):

2020-05-04  Guillem Vinals  <gvinals@apple.com>

        WebGPU: copyTextureToTexture() has an implementation bug (src copy view info is used also as dst)
        https://bugs.webkit.org/show_bug.cgi?id=211303

        Reviewed by Daniel Bates.

        The source copy information is also used as the destination copy information.

        Test: webgpu/blit-commands-texture-to-texture.html

        * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::copyTextureToTexture):

2020-05-04  Antoine Quint  <graouts@apple.com>

        Media controls tracks menu shows "Auto" selected instead of track selected via the JS API
        https://bugs.webkit.org/show_bug.cgi?id=211230
        <rdar://problem/62648409>

        Reviewed by Eric Carlson.

        Test: media/modern-media-controls/tracks-support/tracks-support-text-track-selected-via-media-api.html

        We're fixing two issues with the captions menu on macOS here.
    
        First, if a text track was marked as "showing" with the JS API, we would not show it as selected in the UI
        because MediaControlsHost would report that the captionDisplayMode was "automatic" and we'd take this as
        sufficient data to say that the "Automatic (Recommended)" item should be shown as selected. We now only
        do this if we also don't have any text tracks set as "showing".

        The second issue was when trying to select "Automatic (Recommended)" when a text track had been marked as
        "showing" with the JS API. Calling `setSelectedTextTrack()` on MediaControlsHost in this case was not sufficient
        because HTMLMediaElement::setSelectedTextTrack is a no-op if the automatic text track is provided but captionDisplayMode
        is still set to "automatic". To address this, we first disable all text tracks before calling `setSelectedTextTrack()`.

        * Modules/modern-media-controls/media/tracks-support.js:
        (TracksSupport.prototype.tracksPanelIsTrackInSectionSelected):
        (TracksSupport.prototype.tracksPanelSelectionDidChange):

2020-05-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Override the table computed height when content needs more space
        https://bugs.webkit.org/show_bug.cgi?id=211367

        Reviewed by Antti Koivisto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::contentHeightForFormattingContextRoot const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):

2020-05-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Use distributeAvailableSpace for row sizing
        https://bugs.webkit.org/show_bug.cgi?id=211366

        Reviewed by Antti Koivisto.

        Switch over to the generic space distribution for table row sizing. 

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::RowSpan::hasSpan):
        (WebCore::Layout::RowSpan::isSpanned):
        (WebCore::Layout::RowSpan::spanCount):
        (WebCore::Layout::RowSpan::startSpan):
        (WebCore::Layout::RowSpan::endSpan):
        (WebCore::Layout::RowSpan::index):
        (WebCore::Layout::RowSpan::size):
        (WebCore::Layout::RowSpan::spacing):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):

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

        Camera video samples have a bad orientation if upside down
        https://bugs.webkit.org/show_bug.cgi?id=211373

        Reviewed by Eric Carlson.

        Manually tested on iPad and iPhones.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::computeSampleRotation):
        -90 should be the same as 270 not -270.

2020-05-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [gtk] isMainThread() assert when running minibrowser in debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=211355

        Reviewed by Mark Lam.

        Using NeverDestroyed<const AtomString> is discouraged if it is in the non main thread. This can be quite easily wrong:
        if the running thread is one of WorkerPool, then this is wrong since AtomStringTable will be destroyed every time underlying
        Thread is shutdown. If this is invoked by AutomaticThread, this is also wrong due to the same reason etc. This is why
        we introduced MainThreadNeverDestroyed and use it for const AtomString. This restriction found the bug that we are using
        `NeverDestroyed<const AtomString>` in non main thread. We should not do that.

        This patch fixes the issue by introducing TextureMapperShaderProgram::Variable instead of using AtomString. Then this code
        no longer has thread affinity.

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::getLocation): Deleted.
        * platform/graphics/texmap/TextureMapperShaderProgram.h:

2020-05-04  Emilio Cobos Álvarez  <emilio@crisal.io>

        Put lh / rlh units behind a flag until bug 211351 is sorted out.
        https://bugs.webkit.org/show_bug.cgi?id=211356

        Reviewed by Antti Koivisto.

        * css/parser/CSSParserToken.cpp: Use the new runtime flag to disable parsing the units.
        (WebCore::cssPrimitiveValueUnitFromTrie):
        * page/RuntimeEnabledFeatures.h: Define the new runtime flag.
        (WebCore::RuntimeEnabledFeatures::setLineHeightUnitsEnabled):
        (WebCore::RuntimeEnabledFeatures::lineHeightUnitsEnabled const):

2020-05-03  David Kilzer  <ddkilzer@apple.com>

        Use LocalCurrentGraphicsContext in WebKit::convertPlatformImageToBitmap()
        <https://webkit.org/b/211274>

        Reviewed by Darin Adler.

        * platform/mac/LocalCurrentGraphicsContext.h:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):
        - Export methods for use in WebKit.

2020-05-03  David Kilzer  <ddkilzer@apple.com>

        Fix static analyzer false positive in -[WebUndefined undefined]
        <https://webkit.org/b/211353>

        Reviewed by Darin Adler.

        * bridge/objc/WebScriptObject.mm:
        (+[WebUndefined allocWithZone:]):
        (-[WebUndefined initWithCoder:]):
        (-[WebUndefined retain]):
        (-[WebUndefined autorelease]):
        - Update method signatures.
        (+[WebUndefined undefined]):
        - Fix clang static analyzer false positive by using idiomatic
          -alloc, -init calls to create object.  These methods call
          -allocWithZone:, so this still uses the singleton pattern.

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

        Sometimes cannot find <textarea> in list of editable elements
        https://bugs.webkit.org/show_bug.cgi?id=211348
        <rdar://problem/62231067>

        Reviewed by Simon Fraser.

        When building the editable region add the bounds of the text control to the region instead
        of the bounds of its inner text element even though it is the latter that is actually editable.
        Using the bounds of the text control is more in line with a user's expectation for the editable
        portion of a text control: the entire control. So, do that.

        Tests: editing/editable-region/hit-test-textarea-empty-space.html
               editing/editable-region/search-field-basic.html
               editing/editable-region/text-field-basic.html
               editing/editable-region/textarea-basic.html

        * rendering/EventRegion.cpp:
        (WebCore::EventRegionContext::unite):
        (WebCore::EventRegion::unite):
        Add a new bool as to whether to override the user-modify check and just assume that the region
        is for something editable. This is needed because the form control (e.g. the <input> or <textarea>
        aka the shadow host element) isn't actually editable itself. Its inner text element is editable.
        RenderBlock::paintObject() will pass true for this override when event region painting such a
        control and the control's inner text element is editable so that the controls bounds are added to
        the editable region.
        * rendering/EventRegion.h: Add a bool, defaulting to false to keep the current behavior. While
        I am here remove some unneeded WEBCORE_EXPORT attributions.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): Pass a value for the override argument. It will be true
        if this block is actually a text control and its inner text element is editable. Otherwise, it
        will be false. There is also no longer a need to descend into the children of a text control
        because I only care to record the bounds of the control itself as editable, not its inner text
        element.

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

        [LFC][TFC] Turns horizontal space distribution into a generic space distribution
        https://bugs.webkit.org/show_bug.cgi?id=211352

        Reviewed by Antti Koivisto.

        Horizontal(column) and vertical(row) space distributions use essentially the same logic to distribute
        the extra space among the columns/rows.
        This patch turns the horizontal space distribution function into a generic space distribution code so
        that we can use it for row sizing as well.  

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::ColumnSpan::hasSpan):
        (WebCore::Layout::ColumnSpan::isSpanned):
        (WebCore::Layout::ColumnSpan::spanCount):
        (WebCore::Layout::ColumnSpan::startSpan):
        (WebCore::Layout::ColumnSpan::endSpan):
        (WebCore::Layout::ColumnSpan::index):
        (WebCore::Layout::ColumnSpan::size):
        (WebCore::Layout::ColumnSpan::spacing):
        (WebCore::Layout::distributeAvailableSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::slot const):

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

        AudioMediaStreamTrackRendererCocoa should create/start/stop its remote unit on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211287

        Reviewed by Eric Carlson.

        Creating/starting/stopping audio units in different threads is error prone.
        Now that we have an observer model where we have observers for when to play in the main thread and
        based on that, we decide to receive audio samples in a background thread, we can simplify the logic of AudioMediaStreamTrackRendererCocoa.
        We do this by creating/starting the unit in AudioMediaStreamTrackRendererCocoa::start.
        At that point, AudioMediaStreamTrackRendererCocoa is not expected to receive any sample.
        Just after starting, AudioTrackPrivateMediaStream will receive audio samples and forward them to AudioMediaStreamTrackRendererCocoa.
        AudioMediaStreamTrackRendererCocoa will then create in a background thread the AudioSampleDataSource that is responsible to adapt the received audio samples to the unit.

        Manually tested.

        * platform/audio/mac/AudioSampleDataSource.h:
        (WebCore::AudioSampleDataSource::inputDescription const):
        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::startRenderer):
        Ensure to start the unit and then start gettting audio samples.
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
        (WebCore::AudioMediaStreamTrackRendererCocoa::start):
        (WebCore::AudioMediaStreamTrackRendererCocoa::stop):
        (WebCore::AudioMediaStreamTrackRendererCocoa::clear):
        (WebCore::AudioMediaStreamTrackRendererCocoa::pushSamples):
        (WebCore::AudioMediaStreamTrackRendererCocoa::render):
        * platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.h:

2020-05-03  Rob Buis  <rbuis@igalia.com>

        atob() should not accept a vertical tab
        https://bugs.webkit.org/show_bug.cgi?id=184529

        Reviewed by Darin Adler.

        The forgiving-base64 decode algorithm [1] uses [2] to strip
        out ASCII whitespace which does not include vertical tabs, so
        change the atob() implementation to not strip out vertical
        tabs and thus to fail decode on vertical tabs.

        [1] https://infra.spec.whatwg.org/#forgiving-base64-decode
        [2] https://infra.spec.whatwg.org/#ascii-whitespace

        Behavior matches Firefox and Chrome.

        * page/Base64Utilities.cpp:
        (WebCore::Base64Utilities::atob):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::decodeBase64):

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

        Add a log channel for OverlayScrollbars
        https://bugs.webkit.org/show_bug.cgi?id=211329

        Reviewed by Zalan Bujtas.

        Overlay scrollbar behavior is opaque. This log channel will add clarity.

        * platform/Logging.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (operator<<):
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        (-[WebScrollbarPartAnimation startAnimation]):
        (-[WebScrollbarPartAnimation setCurrentProgress:setCurrentProgress:]):
        (WebCore::ScrollAnimatorMac::mouseEnteredContentArea):
        (WebCore::ScrollAnimatorMac::mouseExitedContentArea):
        (WebCore::ScrollAnimatorMac::mouseMovedInContentArea):
        (WebCore::ScrollAnimatorMac::didBeginScrollGesture const):
        (WebCore::ScrollAnimatorMac::didEndScrollGesture const):
        (WebCore::ScrollAnimatorMac::mayBeginScrollGesture const):
        (WebCore::ScrollAnimatorMac::handleWheelEventPhase):

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

        Make it possible to test overlay scrollbar interactions
        https://bugs.webkit.org/show_bug.cgi?id=211342

        Reviewed by Daniel Bates.

        Add internals.horizontalScrollbarState() and internals.verticalScrollbarState() and hook them
        up via ScrollableArea to ScrollAnimatorMac. They dump state based on the NSScrollerImp state.

        Make internals.setUsesOverlayScrollbars(true) actually trigger real overlay scrollbars by notifying
        the ScrollbarTheme about the scrollbar style change.

        Tests: fast/scrolling/mac/scrollbars/overlay-scrollbar-hovered.html
               fast/scrolling/mac/scrollbars/overlay-scrollbar-reveal.html
               fast/scrolling/mac/scrollbars/overlay-scrollbar-state.html
               fast/scrolling/mac/scrollbars/scrollbar-state.html

        * platform/ScrollAnimator.h:
        (WebCore::ScrollAnimator::ScrollAnimator::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollAnimator::ScrollAnimator::verticalScrollbarStateForTesting const):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollableArea::verticalScrollbarStateForTesting const):
        * platform/ScrollableArea.h:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollbarState):
        (WebCore::ScrollAnimatorMac::horizontalScrollbarStateForTesting const):
        (WebCore::ScrollAnimatorMac::verticalScrollbarStateForTesting const):
        * testing/Internals.cpp:
        (WebCore:: const):
        (WebCore::Internals::scrollbarOverlayStyle const):
        (WebCore::Internals::scrollbarUsingDarkAppearance const):
        (WebCore::Internals::horizontalScrollbarState const):
        (WebCore::Internals::verticalScrollbarState const):
        (WebCore::Internals::setUsesOverlayScrollbars):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-05-02  Daniel Bates  <dabates@apple.com>

        Page::editableElementsInRect() should return root editable elements
        https://bugs.webkit.org/show_bug.cgi?id=211343
        <rdar://problem/60015801>

        Reviewed by Simon Fraser.

        Return the root editable element for each non-text form control editable element
        inside the search rect as it may not have been hit itself. This can happen if the
        search rect is small enough to intersect only child elements of the root editable
        elements.

        * page/Page.cpp:
        (WebCore::Page::editableElementsInRect const):
        (WebCore::isEditableTextInputElement): Deleted.

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

        scrollableAreaForScrollingNodeID() gives the wrong answer for the FrameView
        https://bugs.webkit.org/show_bug.cgi?id=211310

        Reviewed by Zalan Bujtas.

        Given the FrameView's scrollingNodeID, RenderLayerCompositor::scrollableAreaForScrollingNodeID()
        would return the RenderView's layer when it should return the FrameView itself.

        Fixing this allows removal of a special-case in setActiveScrollSnapIndices().

        No behavior change.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setActiveScrollSnapIndices):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scrollableAreaForScrollingNodeID const):

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

        handleWheelEventPhase() should include the relevant ScrollingNodeID
        https://bugs.webkit.org/show_bug.cgi?id=211315

        Reviewed by Tim Horton.

        handleWheelEventPhase() is used to send information about wheel event phases
        to the main thread, which make their way to ScrollAnimatorMac::handleWheelEventPhase()
        and are used to update the state of overlay scrollbars. In order to talk to the
        correct set of scrollbars with overflow:scroll, we need to send along the ScrollingNodeID
        and map that to the appropriate ScrollableArea.

        Will be tested by future overlay scrollbar tests.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::handleWheelEventPhase):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::handleWheelEventPhase): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::handleWheelEventPhase):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent):
        * platform/mac/ScrollAnimatorMac.mm:

2020-05-02  Devin Rousso  <drousso@apple.com>

        [CSS Easing 1] implement `jump-*` step positions
        https://bugs.webkit.org/show_bug.cgi?id=211271

        Reviewed by Dean Jackson.

        Add support for `jump-start`, `jump-end`, `jump-none`, and `jump-both` step positions inside
        the `steps()` CSS timing function <https://drafts.csswg.org/css-easing-1/#step-position>.

        Adjust existing serialization logic to match the spec <https://drafts.csswg.org/css-easing-1/#serialization>:
         - omit `end` (and `jump-end`)
         - the value `step-start` should result in `steps(1, start)` instead of `step-start`
         - the value `step-end` should result in `steps(1)` instead of `step-end`

        Tests: animations/computed-style.html
               fast/css/animation-steps-calculated-value.html
               transitions/transitions-parsing.html
               web-platform-tests/css/css-animations/parsing/animation-timing-function-computed.html
               web-platform-tests/css/css-animations/parsing/animation-timing-function-valid.html
               web-platform-tests/css/css-easing/step-timing-functions-output.html
               web-platform-tests/css/css-easing/step-timing-functions-syntax.html
               web-platform-tests/css/css-transitions/parsing/transition-timing-function-computed.html
               web-platform-tests/css/css-transitions/parsing/transition-timing-function-valid.html
               web-platform-tests/web-animations/timing-model/time-transformations/transformed-progress.html

        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSteps):
        (WebCore::consumeAnimationTimingFunction):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTimingFunctionValue):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):

        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSStepsTimingFunctionValue::create):
        (WebCore::CSSStepsTimingFunctionValue::stepPosition const): Added.
        (WebCore::CSSStepsTimingFunctionValue::CSSStepsTimingFunctionValue):
        (WebCore::CSSStepsTimingFunctionValue::stepAtStart const): Deleted.
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSStepsTimingFunctionValue::customCSSText const):
        (WebCore::CSSStepsTimingFunctionValue::equals const):

        * platform/animation/TimingFunction.h:
        (WebCore::StepsTimingFunction::create):
        (WebCore::StepsTimingFunction::StepsTimingFunction):
        (WebCore::StepsTimingFunction::stepPosition): Added.
        (WebCore::StepsTimingFunction::setStepPosition): Added.
        (WebCore::StepsTimingFunction::clone):
        (WebCore::StepsTimingFunction::stepAtStart): Deleted.
        (WebCore::StepsTimingFunction::setStepAtStart): Deleted.
        * platform/animation/TimingFunction.cpp:
        (WebCore::operator<<):
        (WebCore::TimingFunction::transformTime):
        (WebCore::TimingFunction::createFromCSSValue):
        (WebCore::TimingFunction::cssText const):

2020-05-01  Tim Horton  <timothy_horton@apple.com>

        Books sometimes ends up with blank pages, especially after adjusting font size
        https://bugs.webkit.org/show_bug.cgi?id=211265
        <rdar://problem/59898144>

        Reviewed by Darin Adler.

        * page/FrameView.cpp:
        (WebCore::FrameView::setViewExposedRect):
        Rename "hasRectChanged" because it only tests if the optional-state of the
        rect has changed, not the actual value.

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

        Text manipulation should observe the value attribute of some input elements
        https://bugs.webkit.org/show_bug.cgi?id=211307
        <rdar://problem/61568528>

        Reviewed by Darin Adler.

        Teach TextManipulationController to detect the `value` attribute in input elements of type "button" and
        "submit". To do this, we plumb the element through to `isAttributeForTextManipulation` and check `isTextButton()`
        if "value" attribute is being considered.

        Test: TextManipulation.StartTextManipulationExtractsValuesFromButtonInputs

        * editing/TextManipulationController.cpp:
        (WebCore::isAttributeForTextManipulation):
        (WebCore::TextManipulationController::observeParagraphs):

2020-05-01  Chris Dumez  <cdumez@apple.com>

        Regression(r259036) Unable to post comments on Jira
        https://bugs.webkit.org/show_bug.cgi?id=211122
        <rdar://problem/62561879>

        Unreviewed, revert r259036 as the new behavior does not match other browsers
        and broke some Jira instances.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::populateFrameLoadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::addHTTPOriginIfNeeded):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.cpp:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendPing):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateReferrerAndOriginHeaders):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::doesRequestNeedHTTPOriginHeader): Deleted.
        * platform/network/ResourceRequestBase.h:

2020-05-01  Jack Lee  <shihchieh_lee@apple.com>

        Unreviewed, amend change log entry for r260831.

        * ChangeLog:

2020-05-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed, another build fix after r260962.

        * page/Page.h:

2020-05-01  Daniel Bates  <dabates@apple.com>

        Avoid unnecessary copying in AnimationTimeline and other clean ups
        https://bugs.webkit.org/show_bug.cgi?id=211309

        Reviewed by Simon Fraser.

        Return animations by const lvalue ref to avoid copying the Vectors.
        Default the constructor and destructor implementations. Remove an
        unnessary argument name from animationsForElement() and re-arrange
        decls to make class definition more idiomatic.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::AnimationTimeline): Deleted.
        (WebCore::AnimationTimeline::~AnimationTimeline): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::relevantAnimations const):
        (WebCore::AnimationTimeline::allAnimations const):

2020-05-01  Daniel Bates  <dabates@apple.com>

        Change HitTestResult::NodeSet from set of RefPtrs to set of Refs
        https://bugs.webkit.org/show_bug.cgi?id=211306

        Reviewed by Simon Fraser.

        HitTestResult::listBasedTestResult() never returns a set with nullptrs in it.
        So, change the set declaration from ListHashSet<RefPtr<Node>> to ListHashSet<Ref<Node>>.
        This way people are not tempted to unnecessarily null check the nodes in the set.

        As I made this change to TreeScope::elementsFromPoint() I noticed that retargetToScope(),
        which is called by it, returned a Node&. So, I changed it to return a Ref<Node>. That
        required me to fix up caretRangeFromPoint(), which lead me to fix up nodeFromPoint() as well.

        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/EventPath.cpp:
        (WebCore::RelatedNodeRetargeter::checkConsistency):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::retargetToScope const):
        (WebCore::TreeScope::nodeFromPoint):
        (WebCore::TreeScope::elementFromPoint):
        (WebCore::TreeScope::elementsFromPoint):
        * dom/TreeScope.h:
        * page/Page.cpp:
        (WebCore::Page::editableElementsInRect const):
        * rendering/HitTestResult.cpp:
        (WebCore::appendToNodeSet):
        (WebCore::HitTestResult::HitTestResult):
        (WebCore::HitTestResult::operator=):
        (WebCore::HitTestResult::addNodeToListBasedTestResultCommon):
        (WebCore::HitTestResult::append):
        * rendering/HitTestResult.h:
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect const):

2020-05-01  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r260962.

        * page/Page.cpp:
        (WebCore::Page::setCORSDisablingPatterns):
        * page/Page.h:
        (WebCore::Page::setCORSDisablingPatterns): Deleted.

2020-05-01  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Refactor texImage2D and texSubImage2D taking ImageBitmap, ImageData, Image, ArrayBufferView
        https://bugs.webkit.org/show_bug.cgi?id=210766

        Reviewed by Dean Jackson.

        Refactor the texture upload paths taking DOM sources and
        ArrayBuffers so that texImage/texSubImage and 2D/3D textures are
        handled with the same entry point. Hook up WebGL 2.0 pixel unpack
        parameters for selecting sub-rectangles during texture uploads.
        Refactor context initialization to support WebGL 2.0-specific code
        paths.

        Remove duplicate code validating the type of the ArrayBufferView
        passed to readPixels that was added in the patch for Bug 209515,
        and validation code subsumed by ANGLE.

        With this patch, dozens more texture-related WebGL 2.0 conformance
        tests are passing completely, including all of those under the
        directories:

            webgl/2.0.0/conformance2/textures/
                canvas_sub_rectangle/
                image_data/

        The svg_image/ tests in this directory demonstrate browser
        inconsistencies in SVG handling, and are temporarily skipped.
        These will be investigated in Bug 211220.

        Other conformance tests progress or change results, which is
        expected until WebGL2RenderingContext is fully implemented.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::create):
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext):
        (WebCore::WebGL2RenderingContext::initializeNewContext):
        (WebCore::WebGL2RenderingContext::resetUnpackParameters):
        (WebCore::WebGL2RenderingContext::restoreUnpackParameters):
        (WebCore::WebGL2RenderingContext::initializeShaderExtensions):
        (WebCore::WebGL2RenderingContext::getTextureSourceSubRectangle):
        (WebCore::WebGL2RenderingContext::pixelStorei):
        (WebCore::WebGL2RenderingContext::texStorage2D):
        (WebCore::WebGL2RenderingContext::texImage2D):
        (WebCore::WebGL2RenderingContext::texImage3D):
        (WebCore::WebGL2RenderingContext::texSubImage2D):
        (WebCore::WebGL2RenderingContext::texSubImage3D):
        (WebCore::WebGL2RenderingContext::initializeTransformFeedbackBufferCache): Deleted.
        (WebCore::WebGL2RenderingContext::initializeSamplerCache): Deleted.
        (WebCore::WebGL2RenderingContext::sliceTypedArrayBufferView): Deleted.
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::ScopedUnpackParametersResetRestore::ScopedUnpackParametersResetRestore):
        (WebCore::ScopedUnpackParametersResetRestore::~ScopedUnpackParametersResetRestore):
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::resetUnpackParameters):
        (WebCore::WebGLRenderingContextBase::restoreUnpackParameters):
        (WebCore::WebGLRenderingContextBase::compressedTexImage2D):
        (WebCore::WebGLRenderingContextBase::compressedTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateSettableTexInternalFormat):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::generateMipmap):
        (WebCore::WebGLRenderingContextBase::getTexParameter):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::sentinelEmptyRect):
        (WebCore::WebGLRenderingContextBase::safeGetImageSize):
        (WebCore::WebGLRenderingContextBase::getImageDataSize):
        (WebCore::WebGLRenderingContextBase::getTexImageSourceSize):
        (WebCore::WebGLRenderingContextBase::texImageSourceHelper):
        (WebCore::WebGLRenderingContextBase::texImageArrayBufferViewHelper):
        (WebCore::WebGLRenderingContextBase::texImageImpl):
        (WebCore::WebGLRenderingContextBase::texImage2DBase):
        (WebCore::WebGLRenderingContextBase::texSubImage2DBase):
        (WebCore::WebGLRenderingContextBase::getTexImageFunctionName):
        (WebCore::WebGLRenderingContextBase::validateTexFunc):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateArrayBufferType):
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::validateTexFuncParameters):
        (WebCore::WebGLRenderingContextBase::addExtensionSupportedFormatsAndTypes):
        (WebCore::WebGLRenderingContextBase::addExtensionSupportedFormatsAndTypesWebGL2):
        (WebCore::WebGLRenderingContextBase::validateTexImageSourceFormatAndType):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        (WebCore::WebGLRenderingContextBase::drawImageIntoBuffer):
        (WebCore::WebGLRenderingContextBase::texParameter):
        (WebCore::WebGLRenderingContextBase::getUnpackPixelStoreParams const):
        (WebCore::WebGLRenderingContextBase::validateTextureBinding):
        (WebCore::WebGLRenderingContextBase::validateTexImageBinding):
        (WebCore::WebGLRenderingContextBase::validateTexture2DBinding):
        (WebCore::WebGLRenderingContextBase::validateSize):
        (WebCore::WebGLRenderingContextBase::validateImageBitmap):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::texImageSource2D): Deleted.
        (WebCore::WebGLRenderingContextBase::texImage2DImpl): Deleted.
        (WebCore::WebGLRenderingContextBase::texSubImage2DImpl): Deleted.
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::getTextureSourceSize):
        (WebCore::WebGLRenderingContextBase::validateTexImageSubRectangle):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::isValid const):
        * platform/graphics/IntRect.h:

2020-05-01  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in CompositeEditCommand::cloneParagraphUnderNewElement when indent 
        and align a paragraph.
        https://bugs.webkit.org/show_bug.cgi?id=211273
        <rdar://problem/61885958>

        Reviewed by Geoffrey Garen.

        A load event can fire when we clone and append a paragraph. Check if the elements
        are removed in the event and bail out.

        Test: fast/editing/indent-then-justifyFull-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):

2020-05-01  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in EditCommand::EditCommand via CompositeEditCommand::removeNode
        https://bugs.webkit.org/show_bug.cgi?id=207600
        <rdar://problem/56969450>

        Reviewed by Geoffrey Garen.

        Second part of the fix. Remove m_frame in FrameSelection so it will not be
        inadvertently used and cause this crash.

        No new tests, covered by existing test.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::rootViewRectForRange const):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::selectFrameElementInParentIfFullySelected):
        (WebCore::FrameSelection::setFocusedElementIfNeeded):
        (WebCore::FrameSelection::shouldDeleteSelection const):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection:: shouldChangeSelection):
        (WebCore::FrameSelection::shouldChangeSelection const):
        * editing/FrameSelection.h:
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):

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

        REGRESSION (r260739): Crash when pasting into Mail
        https://bugs.webkit.org/show_bug.cgi?id=211311

        Reviewed by Wenson Hsieh.

        Speculative fix. Would be much better to create a test case demonstrating it's correct.

        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedString): Use container node when TextIterator::node
        returns null.

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        [GTK] Add additional exports to support hidden visibility
        https://bugs.webkit.org/show_bug.cgi?id=211246

        Reviewed by Michael Catanzaro.

        * platform/ContentType.h:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/gtk/GtkUtilities.h:
        * platform/network/soup/CertificateInfo.h:
        * platform/network/soup/SoupNetworkSession.h:

2020-05-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Introduce MainThreadNeverDestroyed / MainThreadLazyNeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=211264

        Reviewed by Mark Lam.

        No behavior change. Adding assertions additionally.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        (WebCore::stringForPlaybackTargetAvailability):
        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::InitDataRegistry::cencName):
        (WebCore::InitDataRegistry::keyidsName):
        (WebCore::InitDataRegistry::webmName):
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::automaticKeyword):
        (WebCore::MediaControlsHost::forcedOnlyKeyword):
        (WebCore::alwaysOnKeyword):
        (WebCore::manualKeyword):
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::kind const):
        (WebCore::MediaStreamTrack::contentHint const):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::blobKeyword):
        (WebCore::arraybufferKeyword):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::liveRegionRelevant const):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty const):
        * dom/Document.cpp:
        (WebCore::Document::validateCustomElementName):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::isValidCSSContentType):
        * dom/MutationRecord.cpp:
        * dom/make_names.pl:
        (printNamesHeaderFile):
        (printNamesCppFile):
        * html/Autocapitalize.cpp:
        (WebCore::stringForAutocapitalizeType):
        * html/Autofill.cpp:
        (WebCore::isContactToken):
        (WebCore::AutofillData::createFromHTMLFormControlElement):
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::fallbackValue const):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::UploadButtonElement):
        * html/FormController.cpp:
        (WebCore::FormKeyGenerator::formKey):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::formControlType const):
        * html/HTMLDetailsElement.cpp:
        (WebCore::summarySlotName):
        * html/HTMLElement.cpp:
        (WebCore::toValidDirValue):
        (WebCore::trueName):
        (WebCore::falseName):
        (WebCore::plaintextOnlyName):
        (WebCore::HTMLElement::setAutocorrect):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::formControlType const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::autocomplete const):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::loadingForBindings const):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::formControlType const):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::formControlType const):
        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::formControlType const):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay const):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::formControlType const):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::scope const):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::formControlType const):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::directionString):
        (WebCore::HTMLTextFormControlElement::updateInnerTextElementEditability):
        * html/InputMode.cpp:
        (WebCore::InputModeNames::none):
        (WebCore::InputModeNames::text):
        (WebCore::InputModeNames::tel):
        (WebCore::InputModeNames::url):
        (WebCore::InputModeNames::email):
        (WebCore::InputModeNames::numeric):
        (WebCore::InputModeNames::decimal):
        (WebCore::InputModeNames::search):
        * html/InputTypeNames.cpp:
        (WebCore::InputTypeNames::button):
        (WebCore::InputTypeNames::checkbox):
        (WebCore::InputTypeNames::color):
        (WebCore::InputTypeNames::date):
        (WebCore::InputTypeNames::datetime):
        (WebCore::InputTypeNames::datetimelocal):
        (WebCore::InputTypeNames::email):
        (WebCore::InputTypeNames::file):
        (WebCore::InputTypeNames::hidden):
        (WebCore::InputTypeNames::image):
        (WebCore::InputTypeNames::month):
        (WebCore::InputTypeNames::number):
        (WebCore::InputTypeNames::password):
        (WebCore::InputTypeNames::radio):
        (WebCore::InputTypeNames::range):
        (WebCore::InputTypeNames::reset):
        (WebCore::InputTypeNames::search):
        (WebCore::InputTypeNames::submit):
        (WebCore::InputTypeNames::telephone):
        (WebCore::InputTypeNames::text):
        (WebCore::InputTypeNames::time):
        (WebCore::InputTypeNames::url):
        (WebCore::InputTypeNames::week):
        * html/MediaController.cpp:
        (WebCore::playbackStateWaiting):
        (WebCore::playbackStatePlaying):
        (WebCore::playbackStateEnded):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/SearchInputType.cpp:
        (WebCore::updateResultButtonPseudoType):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::createDataListDropdownIndicator):
        (WebCore::TextFieldInputType::createContainer):
        (WebCore::TextFieldInputType::createAutoFillButton):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::DetailsMarkerControl):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::create):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::create):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::resolveCustomStyle):
        (WebCore::SliderContainerElement::resolveCustomStyle):
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlPlaceholderElement::TextControlPlaceholderElement):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::tryCreate):
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElement::tryCreate):
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::alternativeKeyword):
        (WebCore::AudioTrack::descriptionKeyword):
        (WebCore::AudioTrack::mainKeyword):
        (WebCore::AudioTrack::mainDescKeyword):
        (WebCore::AudioTrack::translationKeyword):
        (WebCore::AudioTrack::commentaryKeyword):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::subtitlesKeyword):
        (WebCore::captionsKeyword):
        (WebCore::descriptionsKeyword):
        (WebCore::chaptersKeyword):
        (WebCore::metadataKeyword):
        (WebCore::forcedKeyword):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::cueShadowPseudoId):
        (WebCore::TextTrackCue::cueBoxShadowPseudoId):
        (WebCore::TextTrackCue::cueBackdropShadowPseudoId):
        (WebCore::TextTrackCue::rebuildDisplayTree):
        * html/track/VTTRegion.cpp:
        (WebCore::upKeyword):
        (WebCore::VTTRegion::textTrackCueContainerScrollingClass):
        (WebCore::VTTRegion::textTrackCueContainerShadowPseudoId):
        (WebCore::VTTRegion::textTrackRegionShadowPseudoId):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::alternativeKeyword):
        (WebCore::VideoTrack::captionsKeyword):
        (WebCore::VideoTrack::mainKeyword):
        (WebCore::VideoTrack::signKeyword):
        (WebCore::VideoTrack::subtitlesKeyword):
        (WebCore::VideoTrack::commentaryKeyword):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::initiatorName const):
        * page/EventHandler.cpp:
        (WebCore::focusDirectionForKey):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldBypassBackForwardCache const):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::eventNameAll):
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (WebCore::VideoFullscreenModelVideoElement::eventNameAll):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::alternateFamilyName):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::applicationOctetStream):
        (WebCore::textPlain):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::sinfName):
        (WebCore::CDMPrivateFairPlayStreaming::skdName):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::metadataType):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::similarFont):
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/graphics/cocoa/SystemFontDatabaseCoreText.cpp:
        (WebCore::SystemFontDatabaseCoreText::systemFontParameters):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::effectName):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::effectName):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::getCustomFallbackFont):
        * platform/graphics/texmap/TextureMapperShaderProgram.h:
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::FontCache::platformAlternateFamilyName):
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::extractHTTPStatusText):
        * rendering/ComplexLineLayout.cpp:
        (WebCore::ComplexLineLayout::checkLinesForTextOverflow):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hyphenString const):
        (WebCore::RenderStyle::textEmphasisMarkString const):
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustForSiteSpecificQuirks const):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::rotateMode const):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::setCalcMode):
        (WebCore::SVGAnimationElement::setAttributeType):
        (WebCore::SVGAnimationElement::isAdditive const):
        (WebCore::SVGAnimationElement::isAccumulated const):
        (WebCore::inheritsFromProperty):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::type const):
        (WebCore::SVGStyleElement::media const):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue):
        (WebCore::SVGSMILElement::restart const):
        (WebCore::SVGSMILElement::fill const):
        (WebCore::SVGSMILElement::repeatCount const):
        * svg/properties/SVGAnimationAdditiveValueFunctionImpl.cpp:
        (WebCore::SVGAnimationColorFunction::colorFromString):
        * svg/properties/SVGPropertyAnimator.h:
        (WebCore::SVGPropertyAnimator::adjustForInheritance const):

2020-05-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r260243): [ Mac WK1 ] fast/media/mq-inverted-colors-live-update-for-listener.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=211154
        <rdar://problem/62555128>

        Reviewed by Darin Adler.

        Make MediaQueryList an ActiveDOMObject and make sure its JS wrapper stays alive as long as
        it may fire change events and there is at least 1 change event listener.

        No new tests, already covered by existing tests.

        * css/MediaQueryList.cpp:
        (WebCore::MediaQueryList::MediaQueryList):
        (WebCore::MediaQueryList::create):
        (WebCore::MediaQueryList::~MediaQueryList):
        (WebCore::MediaQueryList::detachFromMatcher):
        (WebCore::MediaQueryList::evaluate):
        (WebCore::MediaQueryList::setMatches):
        (WebCore::MediaQueryList::matches):
        (WebCore::MediaQueryList::eventListenersDidChange):
        (WebCore::MediaQueryList::activeDOMObjectName const):
        (WebCore::MediaQueryList::virtualHasPendingActivity const):
        * css/MediaQueryList.h:
        * css/MediaQueryList.idl:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentDestroyed):

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        Use export macros on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=211293

        Reviewed by Michael Catanzaro.

        * platform/PlatformExportMacros.h:

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

        [MSE] Audio session category is sometimes not set correctly after changing video source
        https://bugs.webkit.org/show_bug.cgi?id=211252
        <rdar://problem/61894737>

        Reviewed by Jer Noble.

        Test: media/media-source/media-source-change-source.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerActiveSourceBuffersChanged): Call checkForAudioAndVideo.
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Ditto.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::checkForAudioAndVideo): New, update m_hasEverHadAudio and m_hasEverHadVideo
        and call m_mediaSession->canProduceAudioChanged.
        (WebCore::HTMLMediaElement::mediaType const): Put `hasVideo()` in a local variable since it
        is used more than once.
        * html/HTMLMediaElement.h:

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::updateSessionState): Iterate over the list of media
        sessions once, not five times.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: 
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Call m_player->characteristicChanged()
        rather than m_player->renderingModeChanged().

2020-05-01  Peng Liu  <peng.liu6@apple.com>

        A PiP window doesn’t actually dismiss after the browser navigates to a different page within the same domain
        https://bugs.webkit.org/show_bug.cgi?id=211257

        Reviewed by Jer Noble.

        When we suspend a video element (this will happen when the browser is navigating to another page
        within the same domain), we need to request the corresponding video to exit fullscreen/PiP.
        The operation should be done immediately because the video element won't response to events
        after it is suspended.

        In r259095, we hold the start of exiting video fullscreen/PiP in HTMLMediaElement::exitFullscreen()
        until the "webkitendfullscreen" event is dispatched/handled. This behavior does not work if
        the video element is going to be suspended because the exiting fullscreen operation will be held
        until the video element is resumed. Therefore, we need to handle that case separately by exiting
        video fullscreen/PiP immediately.

        API test: PictureInPicture.ExitPiPOnSuspendVideoElement

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::exitFullscreen):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):

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

        [LFC][TFC] Introduce struct RowHeight in TableFormattingContext::computeAndDistributeExtraVerticalSpace
        https://bugs.webkit.org/show_bug.cgi?id=211275

        Reviewed by Antti Koivisto.

        This is in preparation for available space distribution across row spans.

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

2020-05-01  Antti Koivisto  <antti@apple.com>

        Specific dom node order of Shadow DOM (re)projection causes crash
        https://bugs.webkit.org/show_bug.cgi?id=211159
        <rdar://problem/62626920>

        Reviewed by Zalan Bujtas.

        ComposedTreeIterator may traverse to nodes outside its root element if it is constructed
        with a starting node that has no next sibling inside a slot.

        This leads to miscomputing RenderTreePosition::nextSibling() and eventual nullptr crash in
        RenderTreeBuilder when adding a renderer (due to beforeChild renderer being outside the parent renderer).

        Test case by Elliott Marquez.

        Test: fast/shadow-dom/composed-tree-iterator-escape.html

        * dom/ComposedTreeIterator.cpp:
        (WebCore::ComposedTreeIterator::Context::Context):

        When findind the end iterator for a tree context we need to look for a sibling in ancestors if
        the current node has no siblings.

2020-05-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Interface prototype objects should define @@toStringTag
        https://bugs.webkit.org/show_bug.cgi?id=211020

        Reviewed by Darin Adler.

        WebIDL spec was recently updated [1] to define @@toStringTag on interface prototype objects.
        This change aligns WebIDL with ECMA-262 built-ins and Blink's behavior. Gecko have also
        expressed implementation commitment.

        This patch implements the spec change, making `X.prototype.toString()` return "[object X]"
        instead of "[object XPrototype]", where X is WebIDL interface. This behavior is proven to
        be web compatible (shipping in Chrome since Q2 2016) and matches class strings of iterator
        prototype objects [2] introduced in r253855.

        [1]: https://github.com/heycam/webidl/pull/357
        [2]: https://heycam.github.io/webidl/#es-iterator-prototype-object

        Tests: fast/dom/prototype-chain.html
               fast/dom/wrapper-classes.html
               fast/workers/DedicatedWorkerGlobalScope-prototype-chain.html
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/class-string-interface.any.js
               imported/w3c/web-platform-tests/WebIDL/ecmascript-binding/class-string-named-properties-object.window.js

        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::finishCreation):
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::JSDOMWindowProperties::finishCreation):
        * bindings/js/JSDOMWindowProperties.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        (GeneratePrototypeDeclaration):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/*: Updated.

2020-05-01  Saam Barati  <sbarati@apple.com>

        We can't cast toLength result to unsigned
        https://bugs.webkit.org/show_bug.cgi?id=211205
        <rdar://problem/62625562>

        Reviewed by Yusuke Suzuki.

        * bridge/NP_jsobject.cpp:

2020-05-01  Antoine Quint  <graouts@apple.com>

        REGRESSION: MotionMark 1.1 regressed due to r260016
        https://bugs.webkit.org/show_bug.cgi?id=211280
        <rdar://problem/61898830>

        Unreviewed.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):

2020-05-01  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Move video frame holder to its own file
        https://bugs.webkit.org/show_bug.cgi?id=211239

        Reviewed by Alex Christensen.

        This class implementation is big enough for a new compilation unit, IMHO.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GStreamerVideoFrameHolder.cpp: Added.
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::~GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::handoffVideoDmaBuf):
        (WebCore::GstVideoFrameHolder::waitForCPUSync):
        (WebCore::GstVideoFrameHolder::updateTexture):
        (WebCore::GstVideoFrameHolder::platformLayerBuffer):
        * platform/graphics/gstreamer/GStreamerVideoFrameHolder.h: Added.
        (WebCore::GstVideoFrameHolder::size const):
        (WebCore::GstVideoFrameHolder::hasAlphaChannel const):
        (WebCore::GstVideoFrameHolder::flags const):
        (WebCore::GstVideoFrameHolder::textureID const):
        (WebCore::GstVideoFrameHolder::hasMappedTextures const):
        (WebCore::GstVideoFrameHolder::videoFrame const):
        (WebCore::GstVideoFrameHolder::hasDMABuf const):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder): Deleted.
        (WebCore::GstVideoFrameHolder::~GstVideoFrameHolder): Deleted.
        (WebCore::GstVideoFrameHolder::handoffVideoDmaBuf): Deleted.
        (WebCore::GstVideoFrameHolder::waitForCPUSync): Deleted.
        (WebCore::GstVideoFrameHolder::size const): Deleted.
        (WebCore::GstVideoFrameHolder::hasAlphaChannel const): Deleted.
        (WebCore::GstVideoFrameHolder::flags const): Deleted.
        (WebCore::GstVideoFrameHolder::textureID const): Deleted.
        (WebCore::GstVideoFrameHolder::hasMappedTextures const): Deleted.
        (WebCore::GstVideoFrameHolder::videoFrame const): Deleted.
        (WebCore::GstVideoFrameHolder::updateTexture): Deleted.
        (WebCore::GstVideoFrameHolder::platformLayerBuffer): Deleted.
        (WebCore::GstVideoFrameHolder::hasDMABuf const): Deleted.

2020-05-01  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Disable arrow on context menu popover
        https://bugs.webkit.org/show_bug.cgi?id=211241

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * platform/gtk/GtkVersioning.h:
        (gdk_display_get_monitor_at_window): Add no-op stub for GTK3.

2020-04-30  Rob Buis  <rbuis@igalia.com>

        Inline reportBlockedPortFailed and reportAuthenticationChallengeBlocked
        https://bugs.webkit.org/show_bug.cgi?id=211250

        Reviewed by Alex Christensen.

        These two static methods have only one caller each, so we can just
        inline them at the call site since there is nothing tying them to FrameLoader.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reportBlockedPortFailed): Deleted.
        (WebCore::FrameLoader::reportAuthenticationChallengeBlocked): Deleted.
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didBlockAuthenticationChallenge):

2020-04-30  Ross Kirsling  <ross.kirsling@sony.com>

        TriState should be an enum class and use "Indeterminate" instead of "Mixed"
        https://bugs.webkit.org/show_bug.cgi?id=211268

        Reviewed by Mark Lam.

        * dom/Document.cpp:
        (WebCore::Document::queryCommandIndeterm):
        (WebCore::Document::queryCommandState):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::triStateOfStyle const):
        (WebCore::EditingStyle::hasStyle):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionUnorderedListState const):
        (WebCore::Editor::selectionOrderedListState const):
        * editing/EditorCommand.cpp:
        (WebCore::isStylePresent):
        (WebCore::stateStyle):
        (WebCore::stateTextWritingDirection):
        (WebCore::stateNone):
        (WebCore::stateStyleWithCSS):
        (WebCore::Editor::Command::state const):
        (WebCore::Editor::Command::value const):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):

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

        Clean up some EventHandler coordinate-related naming and fix ScrollableArea::lastKnownMousePosition() conversions
        https://bugs.webkit.org/show_bug.cgi?id=211259

        Reviewed by Zalan Bujtas.

        On EventHandler, rename m_lastKnownMousePosition, m_mouseDownPos and m_mouseDown for clarity.

        Rename ScrollableArea::lastKnownMousePosition() to be lastKnownMousePositionInView().
        Previously, lastKnownMousePosition() would fetch it from EventHandler, which simply stashed
        event.position() (which is in a coordinate system that differs between WK1 and Wk2) which
        was not relative to the EventHandler's frame. This cause mouseLocationInScrollerForScrollerImp:
        to give wrong answers.

        Instead, lastKnownMousePositionInView() now specifically returns coordinates relative to the Frame.
        This behavior change will be tested in future overlay scrollbar tests.

        Document::showPlaybackTargetPicker() was using FrameView::lastKnownMousePosition(), so to avoid
        changing its (probably broken) behavior, have it call frame()->eventHandler().lastKnownMousePosition().

        * dom/Document.cpp:
        (WebCore::Document::showPlaybackTargetPicker):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseDraggedEvent):
        (WebCore::EventHandler::updateDragSourceActionsAllowed const):
        (WebCore::EventHandler::dispatchDragStartEventOnSourceElement):
        (WebCore::EventHandler::handleDrag):
        (WebCore::EventHandler::mouseMovementExceedsThreshold const):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::lastKnownMousePositionInView const):
        (WebCore::FrameView::lastKnownMousePosition const): Deleted.
        * page/FrameView.h:
        * platform/PlatformMouseEvent.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::lastKnownMousePositionInView const):
        (WebCore::ScrollableArea::lastKnownMousePosition const): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollerImpPairDelegate mouseLocationInContentAreaForScrollerImpPair:]):
        (-[WebScrollerImpPairDelegate scrollerImpPair:convertContentPoint:toScrollerImp:]):
        (-[WebScrollerImpDelegate mouseLocationInScrollerForScrollerImp:]):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::lastKnownMousePositionInView const):
        (WebCore::RenderLayer::lastKnownMousePosition const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::lastKnownMousePositionInView const):
        (WebCore::RenderListBox::lastKnownMousePosition const): Deleted.
        * rendering/RenderListBox.h:

2020-04-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Some HTML element critical paths include AtomString materialization
        https://bugs.webkit.org/show_bug.cgi?id=211223

        Reviewed by Saam Barati.

        While measuring Speedometer2, I've noticed that every time we create some type of input element, we call AtomString multiple times while it is not necessary.
        It turned out that this is because some places are using `AtomString("...", AtomString::ConstructFromLiteral)` instead of
        `static NeverDestroyed<const AtomString> ...("...", AtomString::ConstructFromLiteral)`. Since HTML is in the main thread, we can just use `static NeverDestroyed<>`.
        This patch fixes `AtomString()` calls by changing them to `NeverDestroyed<const AtomString>` if it is under WebCore/html directory.
        And in this patch, we omit FTPDirectoryDocument, MediaDocument, and PluginDocument's fixes for now since their AtomString content has a bit different nature (some
        pseudo CSS value ("-webkit-xxx") v.s. some particular CSS property value ("100%").

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::createShadowSubtree):
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::UploadButtonElement):
        * html/HTMLElement.cpp:
        (WebCore::trueName):
        (WebCore::falseName):
        (WebCore::plaintextOnlyName):
        (WebCore::HTMLElement::setContentEditable):
        (WebCore::HTMLElement::setDraggable):
        (WebCore::HTMLElement::setSpellcheck):
        (WebCore::HTMLElement::setAutocorrect):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::updateInnerTextElementEditability):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createShadowSubtree):
        * html/SearchInputType.cpp:
        (WebCore::updateResultButtonPseudoType):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::createDataListDropdownIndicator):
        (WebCore::TextFieldInputType::createContainer):
        (WebCore::TextFieldInputType::createAutoFillButton):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::buildBubbleTree):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::DetailsMarkerControl):
        * html/shadow/MediaControlTextTrackContainerElement.cpp:
        (WebCore::MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement):
        * html/shadow/ProgressShadowElement.cpp:
        (WebCore::ProgressInnerElement::create):
        (WebCore::ProgressBarElement::create):
        (WebCore::ProgressValueElement::create):
        * html/shadow/ProgressShadowElement.h:
        (WebCore::ProgressInnerElement::create): Deleted.
        (WebCore::ProgressBarElement::create): Deleted.
        (WebCore::ProgressValueElement::create): Deleted.
        * html/shadow/SpinButtonElement.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlPlaceholderElement::TextControlPlaceholderElement):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        (WebCore::ImageControlsButtonElementMac::tryCreate):
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        (WebCore::ImageControlsRootElement::tryCreate):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::rebuildDisplayTree):

2020-04-30  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthn] Optimize LocalAuthenticator
        https://bugs.webkit.org/show_bug.cgi?id=183534
        <rdar://problem/43357408>

        Reviewed by Brent Fulgham.

        Covered by new API tests.

        * en.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::getAssertionTouchIDPromptTitle):
        (WebCore::genericTouchIDPromptTitle):
        * platform/LocalizedStrings.h:
        Improving the LocalAuthentication dialog titles for iOS.

2020-04-30  Kate Cheney  <katherine_cheney@apple.com>

        clearApplicationBundleIdentifierTestingOverride() should set the bundle identifier to a null string, not an empty string
        https://bugs.webkit.org/show_bug.cgi?id=211255
        <rdar://problem/62651110>

        Reviewed by John Wilander.

        No new tests, behavior confirmed by existing tests.

        Clearing the bundle identifier during tests should reset the override
        value to be a null string so that the following calls to applicationBundleIdentifier()
        use the [NSBundle mainBundle] bundleIdentifier] call.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::clearApplicationBundleIdentifierTestingOverride):

2020-04-30  Devin Rousso  <drousso@apple.com>

        WebKit.WebContent process crashes when web developer tools are opened in Safari
        https://bugs.webkit.org/show_bug.cgi?id=210794
        <rdar://problem/62214651>

        Reviewed by Brian Burg.

        Test: inspector/worker/dom-debugger-event-after-terminate-crash.html

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
        Don't `ASSERT(injectedScript.hasNoValue())` as it's possible for the event to be fired after
        `Worker.prototype.terminate`, in which case `InjectedScriptManager::injectedScriptFor` will
        now return an `InjectedScript` that would fail that `ASSERT`.

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

        Add SPI to change a WKWebView's CORS disabling pattern after initialization
        https://bugs.webkit.org/show_bug.cgi?id=211211
        <rdar://problem/61837474>

        Reviewed by Chris Dumez.

        * page/Page.h:
        (WebCore::Page::setCORSDisablingPatterns):

2020-04-30  Chris Dumez  <cdumez@apple.com>

        WebCore::systemHasBattery() is unnecessarily expensive on iOS
        https://bugs.webkit.org/show_bug.cgi?id=211240
        <rdar://problem/62619971>

        Reviewed by Geoffrey Garen.

        Update WebCore::systemHasBattery() to return true unconditionally on
        PLATFORM(IOS) and PLATFORM(WATCHOS) since iOS devices always have a
        battery. Also return false unconditionally for PLATFORM(APPLETV).

        * platform/cocoa/SystemBattery.mm:
        (WebCore::systemHasBattery):

2020-04-30  Andres Gonzalez  <andresg_22@apple.com>

        Fix for crash in AXLogger.
        https://bugs.webkit.org/show_bug.cgi?id=211236

        Reviewed by Chris Fleizach.

        Covered by existing tests.

        Notifications may have a null AXCoreObject target, so must check for
        nullity before streaming the object.

        * accessibility/AXLogger.cpp:
        (WebCore::AXLogger::log):

2020-04-30  Charlie Turner  <cturner@igalia.com>

        [clang 11] fix build errors due to -WWc++11-narrowing
        https://bugs.webkit.org/show_bug.cgi?id=211193

        Reviewed by Adrian Perez de Castro.

        Fixes the following errors,

        Source/WebCore/html/MediaElementSession.cpp:1059:9: error: type 'WebCore::RenderMedia *' cannot be narrowed to 'bool' in initializer list [-Wc++11-narrowing]
        m_element.renderer(),
        ^~~~~~~~~~~~~~~~~~~~

        Source/WebCore/style/StyleResolver.cpp:106:55: error: type 'const char [4]' cannot be narrowed to 'bool' in initializer list [-Wc++11-narrowing]
        m_mediaQueryEvaluator = MediaQueryEvaluator { "all" };
                                                      ^~~~~
        Source/WebCore/style/StyleResolver.cpp:106:55: note: insert an explicit cast to silence this issue
        m_mediaQueryEvaluator = MediaQueryEvaluator { "all" };
                                                      ^~~~~
                                                      static_cast<bool>( )

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::hasRenderer const):
        MediaElementSession was implicitly casting a pointer to a bool,
        which is not allowed with modern Clang checks. Add a helper method
        to encapsulate the now required static_cast<bool>.
        * html/MediaElementSession.cpp: Use the new helper method to see
        if the HTMLMediaElement has an associated renderer.
        (WebCore::MediaElementSession::updateMediaUsageIfChanged):
        * style/StyleResolver.cpp: This was calling MediaQueryEvaluator {
        "all" }; and seemingly expecting to cast a const char[] to a bool,
        or maybe String? It's confusing because of the MediaQueryEvaluator
        API. If it was implicitly converting to bool then that could be
        unintentional. Such casts are not allowed either now. The
        MediaQueryEvaluator's default constructor says it returns true for
        "all", which appears to be the original intent of this call, so I
        replaced it with that.
        (WebCore::Style::Resolver::Resolver):

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

        border-radius fails to clip iframe contents
        https://bugs.webkit.org/show_bug.cgi?id=211199
        <rdar://problem/61945671>

        Reviewed by Zalan Bujtas.

        iframes need to use the same composited clipping strategy that we use for other
        replaced elements with composited contents, like video and WebGL. To achieve this,
        change GraphicsLayer to allow child GraphicsLayers to be parented in the contents
        clipping layer, just like content layers are. (We don't want to do this unconditionally,
        because it will change behavior for video with controls.)

        Add GraphicsLayer::contentsRectClipsDescendants(), and used it to run code that
        creates the contents clipping (and optional shape) layers even when no contents
        layer is present. Fix up the sublayer list building to parent layers from
        children in the contents clipping layer.

        Tests: compositing/iframes/border-radius-composited-frame.html
               compositing/iframes/border-uneven-radius-composited-frame.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsRectClipsDescendants const):
        (WebCore::GraphicsLayer::setContentsRectClipsDescendants):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsRectClipsDescendants):
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::isCompositedSubframeRenderer):
        * rendering/RenderLayerCompositor.h:

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

        [LFC][TFC] Adjust the available vertical space with the row span for cell layout
        https://bugs.webkit.org/show_bug.cgi?id=211218

        Reviewed by Antti Koivisto.

        The vertical available space for a cell should include all row heights it spans.
        (can't include test, current table layout logic is incompatible with LFC -and FF/Chrome.)

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

2020-04-30  Philippe Normand  <pnormand@igalia.com>

        [SOUP] http/tests/media/video-accept-encoding.html fails
        https://bugs.webkit.org/show_bug.cgi?id=211228

        Reviewed by Carlos Garcia Campos.

        The resource requests received by the network process always had
        the accept-encoding setting enabled due to lack of IPC
        (de)serialization for this boolean.

        The patch also enables soup release logging, set WEBKIT_DEBUG=Network=debug.

        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::encodeWithPlatformData const):
        (WebCore::ResourceRequest::decodeWithPlatformData):
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::soupLogPrinter):
        (WebCore::SoupNetworkSession::setupLogger):

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

        [GTK4][X11] Add support for rendering web view contents
        https://bugs.webkit.org/show_bug.cgi?id=211189

        Reviewed by Adrian Perez de Castro.

        Add PlatformDisplayX11::visual() to get the X visual used for rendering.

        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::visual const):
        * platform/graphics/x11/PlatformDisplayX11.h:

2020-04-30  Andres Gonzalez  <andresg_22@apple.com>

        Add logging of AXIsolatedTree and AXNotifications.
        https://bugs.webkit.org/show_bug.cgi?id=211214

        Reviewed by Chris Fleizach.

        - Added operator<< implementations for AXIsolatedTree and AX notifications.
        - Added corresponding AXLogger::log overloads for the above types.
        - To set the root node and the focused node we are now always using
        setRootNodeID and setFocusedNodeID respectively. Therefore, before
        returning the root or the focused nodes, it is necessary to applyPendingChanges.

        * accessibility/AXLogger.cpp:
        (WebCore::AXLogger::add): Used for recursive logging of the hierarchy.
        (WebCore::AXLogger::log):
        (WebCore::operator<<):
        * accessibility/AXLogger.h:
        * accessibility/AXObjectCache.cpp:
        Added logging of the isolated tree when it's generated and before and after updates.
        (WebCore::AXObjectCache::isolatedTreeFocusedObject):
        (WebCore::AXObjectCache::generateIsolatedTree):
        (WebCore::AXObjectCache::updateIsolatedTree):
        * accessibility/AXObjectCache.h:
        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::focusedUIElement const):
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::createTreeForPageID):
        (WebCore::AXIsolatedTree::removeTreeForPageID):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::focusedNode):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::setRootNodeID):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        (WebCore::AXIsolatedTree::focusedUIElement): Renamed focusedNode for naming consistency.
        (WebCore::AXIsolatedTree::setRootNode): Deleted. Using setRootNodeID instead,
        (WebCore::AXIsolatedTree::setFocusedNode): Deleted. Use setFocusedNodeID instead.
        * accessibility/isolatedtree/AXIsolatedTree.h:
        (WebCore::AXIsolatedTree::treeID const):
        (WebCore::AXIsolatedTree::treeIdentifier const): renamed treeID for naming consistency.

2020-04-30  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GStreamer build warning fix after r260755.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcMakeRequest): There is no need to capture src in the
        closure, its protector is used instead.

2020-04-30  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/mediastream/get-user-media-device-id.html failing
        https://bugs.webkit.org/show_bug.cgi?id=190576

        Reviewed by Xabier Rodriguez-Calvar.

        The test was failing due to deviceId invalid constraint, which led
        me to rewrite the GStreamer Mock sources, removing various hacks
        and appsrc usage, which is not needed because we rely on
        audioSamplesAvailable and videoSamplesAvailable notifications.

        This patch also fixes the audio mock, which was generating silence
        until now.

        * platform/GStreamer.cmake:
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::WebKitMediaStreamTrackObserver::WebKitMediaStreamTrackObserver):
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: Removed.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp: Removed.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h: Removed.
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp: Added.
        (WebCore::MockRealtimeAudioSource::create):
        (WebCore::MockRealtimeAudioSourceGStreamer::createForMockAudioCapturer):
        (WebCore::MockRealtimeAudioSourceGStreamer::MockRealtimeAudioSourceGStreamer):
        (WebCore::MockRealtimeAudioSourceGStreamer::render):
        (WebCore::MockRealtimeAudioSourceGStreamer::addHum):
        (WebCore::MockRealtimeAudioSourceGStreamer::reconfigure):
        * platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h: Copied from Source/WebCore/platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h.
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp: Added.
        (WebCore::MockRealtimeVideoSource::create):
        (WebCore::MockRealtimeVideoSourceGStreamer::createForMockDisplayCapturer):
        (WebCore::MockRealtimeVideoSourceGStreamer::MockRealtimeVideoSourceGStreamer):
        (WebCore::MockRealtimeVideoSourceGStreamer::updateSampleBuffer):
        * platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h: Renamed from Source/WebCore/platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h.
        * platform/mock/MockRealtimeVideoSource.h:

2020-04-29  Simon Fraser  <simon.fraser@apple.com>

        Use initializers in PlatformMouseEvent and WebEvent
        https://bugs.webkit.org/show_bug.cgi?id=211217

        Reviewed by Tim Horton.

        Use initializers im PlatformMouseEvent.

        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2020-04-29  Jer Noble  <jer.noble@apple.com>

        Remove the debug ASSERT in ImageDecoderAVFObjC::storeSampleBuffer()
        https://bugs.webkit.org/show_bug.cgi?id=211191
        <rdar://problem/62542285>

        Reviewed by Said Abou-Hallawa.

        r259594 added an iterator check and a RELEASE_LOG_ERROR for that check, making this ASSERT superfluous.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):

2020-04-29  Simon Fraser  <simon.fraser@apple.com>

        Simplify contents clipping layer geometry
        https://bugs.webkit.org/show_bug.cgi?id=211162

        Reviewed by Zalan Bujtas.

        GraphicsLayerCA uses a contents clipping layer, with an optional shape layer, to support
        clipping replaced elements with composited contents, like video and WebGL canvas.

        A future patch will use this code path for composited subframes. To achieve this,
        we need to host the layers of child GraphicsLayers under m_contentsClippingLayer, but
        without the GraphicsLayer client having to do geometry math. We can do this by setting
        the bounds origin of m_contentsClippingLayer to adjust for its position relative
        to the GraphicsLayer origin.

        This patch does that, adjusting the position of the contents layer accordingly.
        The shape mask layer also needs adjusting; its position has to be at the layer's
        bounds origin, and the shape itself needs to have a zero origin.

        Tested by existing tests.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        (WebCore::GraphicsLayerCA::updateClippingStrategy):
        (WebCore::GraphicsLayerCA::updateContentsRects):

2020-04-29  Kenneth Russell  <kbr@chromium.org>

        REGRESSION (r256784?): Shadertoy demo no longer works in Safari
        https://bugs.webkit.org/show_bug.cgi?id=210994

        Reviewed by Dean Jackson.

        Certain Shadertoy examples stopped working with the ANGLE backend
        for WebGL because rendering to floating-point render targets was
        no longer being enabled implicitly along with the
        OES_texture_float extension.

        Add support for the WebGL 1.0 extensions
        EXT_color_buffer_half_float and WEBGL_color_buffer_float, and the
        WebGL 2.0 extension EXT_color_buffer_float. Enable these
        implicitly for WebGL 1.0 in the OES_texture_float and
        OES_texture_half_float extensions, restoring the previous
        functionality.

        Translate 32-bit floating point texture formats appropriately for
        the ANGLE backend. Fix some failures in previously-skipped
        conformance tests. The new code passes the more stringent
        top-of-tree WebGL 1.0.4 and 2.0.1 conformance tests related to
        floating-point texture renderability, which are not yet in the
        WebKit repository.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * html/canvas/EXTColorBufferFloat.cpp: Copied from Source/WebCore/html/canvas/OESTextureHalfFloat.cpp.
        (WebCore::EXTColorBufferFloat::EXTColorBufferFloat):
        (WebCore::EXTColorBufferFloat::getName const):
        (WebCore::EXTColorBufferFloat::supported):
        * html/canvas/EXTColorBufferFloat.h: Copied from Source/WebCore/html/canvas/OESTextureFloat.h.
        * html/canvas/EXTColorBufferFloat.idl: Added.
        * html/canvas/EXTColorBufferHalfFloat.cpp: Copied from Source/WebCore/html/canvas/OESTextureFloat.cpp.
        (WebCore::EXTColorBufferHalfFloat::EXTColorBufferHalfFloat):
        (WebCore::EXTColorBufferHalfFloat::getName const):
        (WebCore::EXTColorBufferHalfFloat::supported):
        * html/canvas/EXTColorBufferHalfFloat.h: Copied from Source/WebCore/html/canvas/OESTextureFloat.h.
        * html/canvas/EXTColorBufferHalfFloat.idl: Added.
        * html/canvas/OESTextureFloat.cpp:
        (WebCore::OESTextureFloat::OESTextureFloat):
        (WebCore::OESTextureFloat::supported):
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureHalfFloat.cpp:
        (WebCore::OESTextureHalfFloat::OESTextureHalfFloat):
        (WebCore::OESTextureHalfFloat::supported):
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLColorBufferFloat.cpp: Copied from Source/WebCore/html/canvas/OESTextureFloat.cpp.
        (WebCore::WebGLColorBufferFloat::WebGLColorBufferFloat):
        (WebCore::WebGLColorBufferFloat::getName const):
        (WebCore::WebGLColorBufferFloat::supported):
        * html/canvas/WebGLColorBufferFloat.h: Copied from Source/WebCore/html/canvas/OESTextureFloat.h.
        * html/canvas/WebGLColorBufferFloat.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::extensionIsEnabled):
        (WebCore::WebGLRenderingContextBase::copyTexImage2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::adjustWebGL1TextureInternalFormat):
        (WebCore::ExtensionsGLANGLE::texImage2DRobustANGLE):
        * platform/graphics/angle/ExtensionsGLANGLE.h:
        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage2DDirect):

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

        Header is blank on https://nader.org
        https://bugs.webkit.org/show_bug.cgi?id=205747
        <rdar://problem/58305910>

        Reviewed by Simon Fraser.

        Do not use stale containing block width value while computing preferred width.

        Test: fast/text/text-indent-inside-float.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):

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

        [LFC][TFC] Take row span into account when checking for missing cells
        https://bugs.webkit.org/show_bug.cgi?id=211184

        Reviewed by Antti Koivisto.

        The tree builder looks for missing cells in the table grid and fills in the gaps with empty cells.
        This patch takes row spanning into account and make sure we don't end up adding an extra, redundant cell.

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

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

        Update SWServer.cpp originURL after https://trac.webkit.org/changeset/260707
        https://bugs.webkit.org/show_bug.cgi?id=211169

        Reviewed by Alex Christensen.

        * workers/service/server/SWServer.cpp:
        (WebCore::originURL):
        No need to dereference port since URL::setPort takes an Optional.

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

        [LFC] FormattingContext::constraintsForInFlow/OutOfFlowContent should take const ContainerBox&
        https://bugs.webkit.org/show_bug.cgi?id=211161

        Reviewed by Antti Koivisto.

        Leaf boxes should not need to compute constraints (as by definition they don't have in/out-of-flow descendants).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::constraintsForOutOfFlowContent):
        (WebCore::Layout::FormattingContext::Geometry::constraintsForInFlowContent):
        * layout/FormattingContextQuirks.cpp:
        (WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        (WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
        * layout/blockformatting/BlockFormattingContextQuirks.cpp:
        (WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
        * layout/blockformatting/PrecomputedBlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeValues const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):

2020-04-29  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove no longer used variable and the build warning below.
        warning: unused variable ‘view’ [-Wunused-variable]

        No new tests, no new behaviour changes.

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

2020-04-29  Alicia Boya García  <aboya@igalia.com>

        PlatformMediaResourceLoader should be destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211155

        Reviewed by Xabier Rodriguez-Calvar.

        PlatformMediaResourceLoader is only safe to use from the main thread.
        A tricky detail is this includes its destruction. The same is true for
        PlatformMediaResource.

        Both classes are ThreadSafeRefCounted<> classes and therefore
        WTF::DestructionThread::Main can be used to ensure destruction is run
        in the correct thread with no need for additional client code.

        * platform/graphics/PlatformMediaResourceLoader.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (WebKitWebSrcPrivate::StreamingMembers::~StreamingMembers):

2020-04-29  Rob Buis  <rbuis@igalia.com>

        Make PolicyChecker an inner class of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=211138

        Reviewed by Alex Christensen.

        PolicyChecker HistoryController an inner class of FrameLoader, this allows us to move some methods
        only used by PolicyChecker out of the FrameLoader public API. Because it is not possible to forward declare
        an enum class in an inner class, move ShouldContinue out of the PolicyChecker class and rename it
        to ShouldContinuePolicyCheck.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        * loader/PolicyChecker.cpp:
        * loader/PolicyChecker.h:
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::responseReceived):
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::PlatformResourceMediaLoader::responseReceived):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::responseReceived):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:completionHandler:]):

2020-04-29  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK] Misplaced right click menu on web page due to deprecated gtk_menu_popup()
        https://bugs.webkit.org/show_bug.cgi?id=170553

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/GtkVersioning.h: Add replacements for GtkPopover functions which are no longet available in GTK4.
        (gtk_popover_menu_new): Added.
        (gtk_popover_bind_model): Added.
        (gtk_popover_set_relative_to): Added.

2020-04-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Switch to audiointerleave
        https://bugs.webkit.org/show_bug.cgi?id=211124

        Reviewed by Xabier Rodriguez-Calvar.

        The audiointerleave element is a drop-in replacement of
        interleave. It should behave a bit better in live.

        No new tests, existing webaudio tests cover this change.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcChangeState):

2020-04-23  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR][WPE] Implement XRTest::simulateDeviceConnection()
        https://bugs.webkit.org/show_bug.cgi?id=210912

        Reviewed by Dean Jackson.

        This API gives tests the ability to spin up a simulated XR device which
        is an XR device which from the point of view of the WebXR API behaves
        like a normal XR device. These simulated XR devices can be controlled by
        the associated FakeXRDevice object.

        No new tests as this is machinery required to execute tests when
        implementing the WebXR API.

        * Modules/webxr/WebXRSystem.cpp:
        (WebCore::WebXRSystem::WebXRSystem): Initialize the default inline device.
        (WebCore::WebXRSystem::registerSimulatedXRDeviceForTesting): Add a newly
        created simulated XR device to the list of available devices. Update
        also the active immersive device and current inline device.
        (WebCore::WebXRSystem::unregisterSimulatedXRDeviceForTesting): Remove
        all simulated devices from the list of immersive XR devices.
        * Modules/webxr/WebXRSystem.h: New DummyInlineDevice which represents
        the default inline device which must not provide pose information.
        * Modules/webxr/WebXRView.cpp:
        (WebCore::WebXRView::WebXRView): Removed some methods that should be
        really part of a fake XRView instance.
        (WebCore::WebXRView::setProjectionMatrix): Add implementation.
        (WebCore::WebXRView::eye const): Deleted.
        (WebCore::WebXRView::projectionMatrix const): Deleted.
        (WebCore::WebXRView::transform const): Deleted.
        * Modules/webxr/WebXRView.h:
        (WebCore::WebXRView::eye const): Implemented.
        (WebCore::WebXRView::projectionMatrix const): Ditto.
        (WebCore::WebXRView::transform const): Ditto.
        (WebCore::WebXRView::setEye): Ditto.
        (WebCore::WebXRView::setTransform): Ditto.
        * Modules/webxr/XRReferenceSpaceType.h: Moved the definitions to PlatformXR.
        * platform/xr/PlatformXR.cpp:
        (PlatformXR::Instance::nextDeviceId): New method which returns uniquely
        defined ids for XR devices.
        (PlatformXR::Device::Device):
        * platform/xr/PlatformXR.h:
        (PlatformXR::Device::id const): New method.
        (PlatformXR::Device::supports const): Ditto.
        (PlatformXR::Device::setSupportedModes): Ditto.
        (PlatformXR::Device::setEnabledFeatures): Ditto.
        (PlatformXR::Device::operator== const): Ditto.
        * testing/FakeXRViewInit.h: fieldOfView is optional.
        * testing/WebFakeXRDevice.cpp:
        (WebCore::FakeXRView::setFieldOfView): Implemented.
        (WebCore::WebFakeXRDevice::setViews): Ditto.
        (WebCore::WebFakeXRDevice::setViewerOrigin): Ditto.
        (WebCore::WebFakeXRDevice::clearViewerOrigin): Ditto.
        (WebCore::WebFakeXRDevice::setFloorOrigin): Ditoo.
        (WebCore::WebFakeXRDevice::clearFloorOrigin): Ditto.
        (WebCore::WebFakeXRDevice::parseRigidTransform): Added.
        (WebCore::WebFakeXRDevice::parseView): Ditto.
        * testing/WebFakeXRDevice.h: Defined FakeXRView class which wraps a
        XRView adding some associated data as the field of view and viewport.
        Also defined the SimulatedXRDevice which is an PlatformXR::Device with
        some additional data useful for testing purpouses.
        * testing/WebXRTest.cpp:
        (WebCore::WebXRTest::simulateDeviceConnection): Create a new
        FakeXRDevice with an associated simulated XR device with the data
        provided by a FakeXRDeviceInit.
        (WebCore::WebXRTest::disconnectAllDevices): Remove all simulated devices
        from the list of immersive devices.
        * testing/WebXRTest.h: Call simulateDeviceConnection with ScriptExecutionContext.
        * testing/WebXRTest.idl: Ditto.

2020-04-29  Saam Barati  <sbarati@apple.com>

        U_STRING_NOT_TERMINATED_WARNING ICU must be handled when using the output buffer as a C string
        https://bugs.webkit.org/show_bug.cgi?id=211142
        <rdar://problem/62530860>

        Reviewed by Darin Adler.

        * editing/TextIterator.cpp:
        (WebCore::normalizeCharacters):
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::decimalSymbol):
        (WebCore::LocaleICU::decimalTextAttribute):
        (WebCore::getDateFormatPattern):
        (WebCore::LocaleICU::createLabelVector):
        (WebCore::getFormatForSkeleton):
        * platform/text/LocaleToScriptMappingICU.cpp:
        (WebCore::localeToScriptCodeForFontSelection):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::decode):
        (WebCore::TextCodecICU::encode):

2020-04-29  Noam Rosenthal  <noam@webkit.org>

        Add StringView::isAllSpecialCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=211150

        Reviewed by Darin Adler.

        Uses new StringView::isAllSpecialCharacters() instead of creating a StringImpl.

        No new tests.

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextOrEmphasisMarks):

2020-04-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rendering update steps should use Seconds for the timestamps
        https://bugs.webkit.org/show_bug.cgi?id=210990

        Unreviewed.

        serviceRequestAnimationFrameCallbacks() should return rounded milliseconds.
        This rounding was removed in r260736. So put it back.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):

2020-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Add support for key events
        https://bugs.webkit.org/show_bug.cgi?id=211128

        Reviewed by Adrian Perez de Castro.

        * platform/gtk/GtkVersioning.h:
        (gdk_event_get_keyval):
        (gdk_event_get_keycode):

2020-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Text manipulation] Add a userInfo dictionary to _WKTextManipulationToken
        https://bugs.webkit.org/show_bug.cgi?id=211151
        <rdar://problem/62329534>

        Reviewed by Darin Adler.

        Add an extensible mechanism for the text manipulation controller to send additional
        metadata for each text manipulation token through to the WebKit client, for debugging
        purposes.

        Test: TextManipulation.StartTextManipulationExtractsUserInfo

        * editing/TextManipulationController.cpp:
        (WebCore::tokenInfo):
        (WebCore::TextManipulationController::observeParagraphs):
        * editing/TextManipulationController.h:

        Add TextManipulationTokenInfo, and add an optional TextManipulationTokenInfo member to
        TextManipulationToken. For now, just send over the document URL, element tag name, and
        the value of the role attribute.

        (WebCore::TextManipulationController::ManipulationTokenInfo::encode const):
        (WebCore::TextManipulationController::ManipulationTokenInfo::decode):
        (WebCore::TextManipulationController::ManipulationToken::encode const):
        (WebCore::TextManipulationController::ManipulationToken::decode):

2020-04-28  Simon Fraser  <simon.fraser@apple.com>

        Update the xcfilelists.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2020-04-28  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r260808): Backdrops on music.apple.com are offset
        https://bugs.webkit.org/show_bug.cgi?id=211153
        <rdar://problem/62543158>

        Reviewed by Zalan Bujtas.

        The border-radius code path failed to offset the rounded rect by contentOffsetInCompositingLayer().

        Test: compositing/filters/backdrop-filter-rect-border-radius.html

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

2020-04-28  Daniel Bates  <dabates@apple.com>

        Modernize EndPointsAdjustmentMode enumeration and fix misspelled enumerator
        https://bugs.webkit.org/show_bug.cgi?id=211141

        Reviewed by Eric Carlson.

        Fix the misspelled enumerator DoNotAdjsutEndpoints. While I am here, make
        EndPointsAdjustmentMode an enum class sized as a bool and simplify the naming
        of its enumerators now that they have to be qualified. I also re-ordered them
        so that DoNotAdjust is the first enumerator (it will have value 0). This doesn't
        really matter, but I like it because it makes it so that this enumeration behaves
        more like an equivalent boolean should casts be involved.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent):
        * editing/FrameSelection.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDrag):

2020-04-28  Daniel Bates  <dabates@apple.com>

        [WebKitLegacy] Implement -hidePlaceholder and -showPlaceholderIfNecessary in terms of setCanShowPlaceholder()
        https://bugs.webkit.org/show_bug.cgi?id=211139

        Reviewed by Simon Fraser.

        Remove hidePlaceholder() and showPlaceholderIfNecessary() as they are no longer needed.
        Callers should use setCanShowPlaceholder() instead.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::hidePlaceholder): Deleted.
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary): Deleted.
        * html/HTMLTextFormControlElement.h:

2020-04-28  ChangSeok Oh  <changseok@webkit.org>

        [GTK] Fix build failures for ANGLE_WEBGL after r259589
        https://bugs.webkit.org/show_bug.cgi?id=211116

        Reviewed by Alex Christensen.

        The compiler is unhappy with coverting GCGLint64 (long long int) to GLInt64 (long int).
        Passing GCGLuint62 as GLuint64 is a similar issue.

        No new tests since no new functionalities.

        * platform/graphics/angle/ExtensionsGLANGLE.cpp:
        (WebCore::ExtensionsGLANGLE::getInteger64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getInteger64i_vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getBufferParameteri64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjecti64vRobustANGLE):
        (WebCore::ExtensionsGLANGLE::getQueryObjectui64vRobustANGLE):
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.cpp:
        (Nicosia::GC3DLayer::swapBuffersIfNeeded): Unaccelerated -> RenderingMode::Unaccelerated

2020-04-28  Noam Rosenthal  <noam@webkit.org>

        Implement FCP (first contentful paint)
        https://bugs.webkit.org/show_bug.cgi?id=208499

        Reviewed by Simon Fraser.

        Added the necessary interface, extensions to the performance interface and observer, new runtime flag.
        Detecting contentfulness after layout and before actual paint, by running a "dummy" paint, similar to 
        invalidateControlTints() / invalidateImagesWithAsyncDecodes(). Save the result to the GraphicsContext and then to the document.
        This would run for every paint until we detect a contentful one.

        Note that it paints the entire frame contents, as FCP is not viewport-dependent.
        Also, paint timing is currently disabled for LFC (layout formatting context), and will be dealt with later.

        Tests: http/tests/performance/paint-timing/performance-paint-timing-fcp-after-visually-non-empty-for-num-chars.html
               http/tests/performance/paint-timing/performance-paint-timing-fcp-after-visually-non-empty-for-style.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-background-size.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-bg-image-set.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-bg-image-two-steps.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-canvas-context.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-gradient.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-invisible-3d-rotate-descendant.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-invisible-3d-rotate.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-invisible-scale-transition.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-invisible-scale.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-invisible-text.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-opacity-descendant.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-opacity.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-out-of-bounds-translate.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-out-of-bounds.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-pseudo-element-display.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-pseudo-element-image.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-pseudo-element-opacity.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-pseudo-element-text.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-pseudo-element-visibility.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-svg.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-text-input.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-typographic-pseudo.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-video-frame.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-video-poster.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-whitespace.html
               imported/w3c/web-platform-tests/paint-timing/fcp-only/fcp-with-rtl.html
               performance-api/paint-timing/paint-timing-apis.html
               performance-api/paint-timing/paint-timing-frames.html
               performance-api/paint-timing/paint-timing-with-worker.html
               performance-api/paint-timing/performance-observer-first-contentful-paint.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPerformanceEntryCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/WebCoreBuiltinNames.h:
                Add PerformancePaintTiming interface. https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming

        * dom/Document.cpp:
        * dom/Document.h:
        (WebCore::Document::supportsPaintTiming const):
                We only report paint timing for document that can access the top level security origin, to avoid leakage of information to sandboxed iframes.

        (WebCore::Document::enqueuePaintTimingEntryIfNeeded):
                Enqueue a paint timing entry, according to https://w3c.github.io/paint-timing/#sec-reporting-paint-timing

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
                Disable FCP fake-paint in LFC mode.

        * page/Page.cpp:
        (WebCore::Page::doAfterUpdateRendering):
        * page/Performance.cpp:
        (WebCore::Performance::getEntries const):
        (WebCore::Performance::getEntriesByType const):
        (WebCore::Performance::getEntriesByName const):
        (WebCore::Performance::reportFirstContentfulPaint):
        * page/Performance.h:
                Support first-contentful-paint reporting.

        * page/PerformanceEntry.cpp:
        (WebCore::PerformanceEntry::parseEntryTypeString):
        * page/PerformanceEntry.h:
        (WebCore::PerformanceEntry::isPaint const):
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::supportedEntryTypes):
        * page/PerformanceObserver.h:
        * page/PerformanceObserver.idl:
        * page/PerformancePaintTiming.h: Added.
        (isType):
        * page/PerformancePaintTiming.idl: Added.
                Add paint performance entry type.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPaintTimingEnabled):
        (WebCore::RuntimeEnabledFeatures::paintTimingEnabled const):
                New runtime flag for paint timing.

        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::detectingContentfulPaint const):
        (WebCore::GraphicsContext::setContentfulPaintDetected):
        (WebCore::GraphicsContext::contenfulPaintDetected const):
                Add a flag in GraphicsContext where different render operations can report if they're contentful.

        * rendering/ContentfulPaintChecker.cpp: Added.
        (WebCore::ContentfulPaintChecker::qualifiesForContentfulPaint):
        * rendering/ContentfulPaintChecker.h: Added.
                Run a "dummy" paint of the FrameView, to detect contentful elements. 

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextOrEmphasisMarks):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
                Report contentfulness when we reach anything that qualifies as contentful,
                based on https://w3c.github.io/paint-timing/#contentful.

2020-04-28  Simon Fraser  <simon.fraser@apple.com>

        MRMediaRemoteSetNowPlayingApplicationPlaybackStateForOrigin log with no error
        https://bugs.webkit.org/show_bug.cgi?id=211145

        Reviewed by Jer Noble.

        Don't log when MRMediaRemoteSetNowPlayingApplicationPlaybackStateForOrigin() returns 0.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::setNowPlayingInfo):

2020-04-28  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Align upon the name isCallable instead of isFunction
        https://bugs.webkit.org/show_bug.cgi?id=211140

        Reviewed by Darin Adler.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::getCustomElementCallback):
        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        * bindings/js/JSDOMConvertScheduledAction.h:
        (WebCore::Converter<IDLScheduledAction>::convert):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::queueMicrotask):
        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::queueMicrotask):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::pipeTo):
        (WebCore::ReadableStream::tee):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::callInWorld):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadDispatcher):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        (WebCore::Internals::cloneArrayBuffer):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):

2020-04-28  Simon Fraser  <simon.fraser@apple.com>

        Rewrite GraphicsLayerCA::updateSublayerList()
        https://bugs.webkit.org/show_bug.cgi?id=211137

        Reviewed by Zalan Bujtas.

        This function was hard to understand, with aliasing of a layer list to handle
        the various configurations. Future patches will add a bit more complexity here.

        Rewrite using lambdas, which makes it easier to follow.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateSublayerList):

2020-04-28  Christopher Reid  <chris.reid@sony.com>

        [Win] Bundle Inspector Resources in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=210942

        Reviewed by Fujii Hironori.

        * CMakeLists.txt:

2020-04-28  Rob Buis  <rbuis@igalia.com>

        Remove downloadAttribute from DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=210493

        Reviewed by Darin Adler.

        Remove downloadAttribute from DocumentLoader since this
        can be obtained from the NavigationAction.

        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::downloadAttribute const):
        (WebCore::DocumentLoader::setDownloadAttribute): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/FrameLoader.h:

2020-04-28  Jack Lee  <shihchieh_lee@apple.com>

        Nullptr crash in EditCommand::EditCommand via CompositeEditCommand::removeNode
        https://bugs.webkit.org/show_bug.cgi?id=207600
        <rdar://problem/56969450>

        Reviewed by Geoffrey Garen.

        Move FrameSelection and Editor objects from Frame to Document so when a document is detached
        in nested command executions, the next EditCommand would not fail in constructor.

        Test: editing/inserting/insert-list-then-edit-command-crash.html

        * dom/Document.cpp:
        (WebCore::m_selection):
        (WebCore::Document::willBeRemovedFromFrame):
        (WebCore::m_undoManager): Deleted.
        (WebCore::Document::prepareForDestruction): Deleted.
        * dom/Document.h:
        (WebCore::Document::editor):
        (WebCore::Document::editor const):
        (WebCore::Document::selection):
        (WebCore::Document::selection const):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::AlternativeTextController):
        (WebCore::AlternativeTextController::stopPendingCorrection):
        (WebCore::AlternativeTextController::isSpellingMarkerAllowed const):
        (WebCore::AlternativeTextController::applyAutocorrectionBeforeTypingIfAppropriate):
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection):
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::handleAlternativeTextUIResult):
        (WebCore::AlternativeTextController::rootViewRectForRange const):
        (WebCore::AlternativeTextController::respondToChangedSelection):
        (WebCore::AlternativeTextController::respondToAppliedEditing):
        (WebCore::AlternativeTextController::respondToUnappliedEditing):
        (WebCore::AlternativeTextController::editorClient):
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand):
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        (WebCore::AlternativeTextController::respondToMarkerAtEndOfWord):
        (WebCore::AlternativeTextController::alternativeTextClient):
        (WebCore::AlternativeTextController::applyAlternativeTextToRange):
        (WebCore::AlternativeTextController::insertDictatedText):
        (WebCore::AlternativeTextController::applyDictationAlternative):
        * editing/AlternativeTextController.h:
        (WebCore::AlternativeTextController::UNLESS_ENABLED):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::EditCommandComposition::reapply):
        (WebCore::CompositeEditCommand::willApplyCommand):
        (WebCore::CompositeEditCommand::didApplyCommand):
        (WebCore::CompositeEditCommand::targetRanges const):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        (WebCore::DeleteSelectionCommand::mergeParagraphs):
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditCommand.cpp:
        (WebCore::EditCommand::EditCommand):
        (WebCore::EditCommand::isEditingTextAreaOrTextInput const):
        (WebCore::EditCommand::postTextStateChangeNotification):
        (WebCore::EditCommand::frame): Deleted.
        (WebCore::EditCommand::frame const): Deleted.
        * editing/EditCommand.h:
        * editing/Editing.cpp:
        (WebCore::createDefaultParagraphElement):
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::StyleChange):
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::CreateAndApply):
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::~TemporarySelectionChange):
        (WebCore::TemporarySelectionChange::setSelection):
        (WebCore::Editor::selectionForCommand):
        (WebCore::Editor::behavior const):
        (WebCore::Editor::client const):
        (WebCore::Editor::canEdit const):
        (WebCore::Editor::canEditRichly const):
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canCopy const):
        (WebCore::Editor::canPaste const):
        (WebCore::Editor::canDelete const):
        (WebCore::Editor::shouldSmartDelete):
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::deleteSelectionWithSmartDelete):
        (WebCore::Editor::clearText):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::selectedRange):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::shouldInsertText const):
        (WebCore::Editor::hasBidiSelection const):
        (WebCore::Editor::selectionUnorderedListState const):
        (WebCore::Editor::selectionOrderedListState const):
        (WebCore::Editor::increaseSelectionListLevel):
        (WebCore::Editor::increaseSelectionListLevelOrdered):
        (WebCore::Editor::increaseSelectionListLevelUnordered):
        (WebCore::Editor::decreaseSelectionListLevel):
        (WebCore::Editor::findEventTargetFromSelection const):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::Editor::selectionStartHasStyle const):
        (WebCore::Editor::selectionHasStyle const):
        (WebCore::Editor::selectionStartCSSPropertyValue):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::Editor):
        (WebCore::Editor::clear):
        (WebCore::Editor::insertText):
        (WebCore::Editor::insertTextForConfirmedComposition):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::insertLineBreak):
        (WebCore::Editor::insertParagraphSeparator):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::paste):
        (WebCore::Editor::pasteAsQuotation):
        (WebCore::Editor::renderLayerDidScroll):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::baseWritingDirectionForSelectionStart const):
        (WebCore::Editor::selectComposition):
        (WebCore::SetCompositionScope::SetCompositionScope):
        (WebCore::SetCompositionScope::~SetCompositionScope):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::misspelledWordAtCaretOrRange const):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForMisspelledWord const):
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode const):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::rangeForPoint):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        (WebCore::Editor::setIgnoreSelectionChanges):
        (WebCore::Editor::getCompositionSelection const):
        (WebCore::Editor::transpose):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::selectedText const):
        (WebCore::Editor::selectedTextForDataTransfer const):
        (WebCore::Editor::insertTextPlaceholder):
        (WebCore::Editor::removeTextPlaceholder):
        (WebCore::Editor::shouldChangeSelection const):
        (WebCore::Editor::computeAndSetTypingStyle):
        (WebCore::Editor::findString):
        (WebCore::Editor::countMatchesForText):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::shouldDetectTelephoneNumbers const):
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        (WebCore::Editor::editorUIUpdateTimerFired):
        (WebCore::Editor::selectionStartHasMarkerFor const):
        (WebCore::Editor::stringForCandidateRequest const):
        (WebCore::Editor::contextRangeForCandidateRequest const):
        (WebCore::Editor::fontAttributesAtSelectionStart const):
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        (WebCore::Editor::handleAcceptedCandidate):
        (WebCore::Editor::unifiedTextCheckerEnabled const):
        (WebCore::Editor::toggleOverwriteModeEnabled):
        (WebCore::Editor::fontForSelection const):
        (WebCore::Editor::canCopyExcludingStandaloneImages const):
        (WebCore::Editor::document const): Deleted.
        * editing/Editor.h:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::IgnoreSelectionChangeForScope::IgnoreSelectionChangeForScope):
        (WebCore::Editor::document const):
        * editing/EditorCommand.cpp:
        (WebCore::executeSwapWithMark):
        (WebCore::Editor::command):
        (WebCore::Editor::Command::Command):
        (WebCore::Editor::Command::execute const):
        * editing/FrameSelection.cpp:
        (WebCore::shouldAlwaysUseDirectionalSelection):
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::rootEditableElementOrDocumentElement const):
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::setSelection):
        (WebCore::updateSelectionByUpdatingLayoutOrStyle):
        (WebCore::FrameSelection::setNeedsSelectionUpdate):
        (WebCore::FrameSelection::updateAndRevealSelection):
        (WebCore::FrameSelection::updateDataDetectorsForSelection):
        (WebCore::FrameSelection::positionForPlatform const):
        (WebCore::FrameSelection::nextWordPositionForPlatform):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modify):
        (WebCore::FrameSelection::willBeRemovedFromFrame):
        (WebCore::FrameSelection::absoluteCaretBounds):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::contains const):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::isFocusedAndActive const):
        (WebCore::shouldStopBlinkingDueToTypingCommand):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::setCaretVisibility):
        (WebCore::FrameSelection::setFocusedElementIfNeeded):
        (WebCore::FrameSelection::shouldDeleteSelection const):
        (WebCore::FrameSelection::selectionBounds const):
        (WebCore::FrameSelection::getClippedVisibleTextRectangles const):
        (WebCore::FrameSelection::currentForm const):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection const):
        (WebCore::FrameSelection::setShouldShowBlockCursor):
        (WebCore::FrameSelection::appearanceUpdateTimerFired):
        (WebCore::FrameSelection::updateAppearanceAfterLayoutOrStyleChange):
        (WebCore::FrameSelection::selectRangeOnElement):
        (WebCore::FrameSelection::setCaretBlinks):
        (WebCore::FrameSelection::prepareForDestruction): Deleted.
        * editing/FrameSelection.h:
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::doApply):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SetSelectionCommand.cpp:
        (WebCore::SetSelectionCommand::doApply):
        (WebCore::SetSelectionCommand::doUnapply):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::SpellChecker):
        (WebCore::SpellChecker::client const):
        (WebCore::SpellChecker::isAsynchronousEnabled const):
        (WebCore::SpellChecker::invokeRequest):
        (WebCore::SpellChecker::didCheck):
        (WebCore::SpellChecker::didCheckSucceed):
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::doApply):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteSelection):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::updateSelectionIfDifferentFromCurrentSelection):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::lastTypingCommandIfStillOpenForTyping):
        (WebCore::TypingCommand::closeTyping):
        (WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::willAddTypingToOpenCommand):
        (WebCore::TypingCommand::typingAddedToOpenCommand):
        (WebCore::TypingCommand::insertTextAndNotifyAccessibility):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertLineBreakAndNotifyAccessibility):
        (WebCore::TypingCommand::insertParagraphSeparatorAndNotifyAccessibility):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContentAndNotifyAccessibility):
        * editing/TypingCommand.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::selectionInHTMLFormat):
        (WebCore::selectionAsAttributedString):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::writeSelection):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::replaceSelectionWithAttributedString):
        (WebCore::Editor::webContentFromPasteboard):
        (WebCore::Editor::takeFindStringFromSelection):
        * editing/gtk/EditorGtk.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::webContentFromPasteboard):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::removeUnchangeableStyles):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::insertDictationPhrases):
        (WebCore::Editor::setDictationPhrasesAsChildOfElement):
        (WebCore::Editor::setTextAsChildOfElement):
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        * editing/libwpe/EditorLibWPE.cpp:
        (WebCore::Editor::writeSelectionToPasteboard):
        (WebCore::Editor::pasteWithPasteboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::readSelectionFromPasteboard):
        (WebCore::Editor::replaceNodeFromPasteboard):
        (WebCore::Editor::selectionWillChange):
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::webContentFromPasteboard):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::destroy):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::willTransitionToCommitted):
        (WebCore::FrameLoader::closeURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::clear):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::setView):
        (WebCore::Frame::setDocument):
        (WebCore::Frame::requestDOMPasteAccess):
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/Frame.h:
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):

2020-04-28  Antti Koivisto  <antti@apple.com>

        msn.com: Header flickers when scrolling articles
        https://bugs.webkit.org/show_bug.cgi?id=211126
        <rdar://problem/56439177>

        Reviewed by Simon Fraser.

        Test: compositing/fixed-with-clip-stability.html

        In case of fixed positioned elements the decision to create backing depends on clip rect.
        However RenderLayer::localClipRect() tests for backing in call to clippingRootForPainting(). This creates
        instability since clipping depends on backing decision, and backing decision depends on clipping.

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

        Specifically the result of clipExceedsBounds test here is affected by computed offsetFromRoot:
        "clipRect.contains(cssClipRect)" test fails for zero sized clips with different offsets.

        Compute clipExceedsBounds by looking at the clip sizes only and ignoring the position (which should match).

2020-04-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Introduce FormattingContext::ConstraintsForOutOfFlowContent
        https://bugs.webkit.org/show_bug.cgi?id=211125

        Reviewed by Antti Koivisto.

        Horizontal and vertical out-of-flow constraints are always computed and used in pairs.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::constraintsForOutOfFlowContent):
        (WebCore::Layout::FormattingContext::Geometry::horizontalConstraintsForOutOfFlow): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::verticalConstraintsForOutOfFlow): Deleted.
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):

2020-04-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Introduce FormattingContext::ConstraintsForInFlowContent
        https://bugs.webkit.org/show_bug.cgi?id=211113

        Reviewed by Antti Koivisto.

        This makes the layoutInFlowContent() related code look simpler.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layoutInFlowContent):
        (WebCore::Layout::InlineFormattingContext::lineLayout):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/integration/LayoutIntegrationLineLayout.cpp:
        (WebCore::LayoutIntegration::LineLayout::layout):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        * layout/tableformatting/TableFormattingContext.h:

2020-04-28  Philippe Normand  <pnormand@igalia.com>

        media/track/track-load-error-readyState.html passes only when accompanied by some other tests
        https://bugs.webkit.org/show_bug.cgi?id=210976

        Reviewed by Xabier Rodriguez-Calvar.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): Reset caption
        display mode, which might have been overriden by a previous test.

2020-04-28  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes late April 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=211099

        Unreviewed build fix.

        No new tests needed.

        * Modules/cache/DOMCacheStorage.cpp: Sprinkle DOMCacheEngine:: namespace prefixes as needed.
        (WebCore::DOMCacheStorage::findCacheOrCreate):
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::DOMCacheStorage::doOpen):
        (WebCore::DOMCacheStorage::doRemove):
        * bindings/js/JSExecStateInstrumentation.h: Ditto for JSC:: namespace prefixes.
        (WebCore::JSExecState::instrumentFunction):
        * dom/ScriptedAnimationController.h: Add missing ReducedResolutionSeconds.h header.
        * editing/TextCheckingHelper.h: Add missing forward declaration for Position.
        * html/URLSearchParams.h: Add missing ExceptionOr.h header.

2020-04-28  Charlie Turner  <cturner@igalia.com>

        [EME][CDMProxy] Default initialize m_numDecryptorsWaitingForKey member
        https://bugs.webkit.org/show_bug.cgi?id=210970

        Reviewed by Xabier Rodriguez-Calvar.

        This was causing non-deterministic reads of the
        m_numDecryptorsWaitingForKey member. Sometimes a waiting for key
        event would fail to fire and cause test failures. I thought
        std::atomic<int> would default initialize to zero, but after
        spec-diving I realise now I was wrong about that.

        Test: encrypted-media/clearkey-mp4-waiting-for-a-key.https.html

        * platform/encryptedmedia/CDMProxy.h:

2020-04-28  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection should not remove its created remote MediaStream objects until getting close
        https://bugs.webkit.org/show_bug.cgi?id=211070

        Reviewed by Alex Christensen.

        Remove no longer needed code.
        This aligns with the spec and Firefox implementation.
        Test: webrtc/direction-change.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::transceiverBackendFromSender):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2020-04-28  Youenn Fablet  <youenn@apple.com>

        Ensure remote track event gets unmuted after the track event is fired
        https://bugs.webkit.org/show_bug.cgi?id=211071

        Reviewed by Alex Christensen.

        This code was made obsolete by the setMuted(false) call done just after firing the track event.
        Given the setMuted(false) in addPendingTrackEvent was done asynchronously and was triggering firing the muted event asynchronously,
        this change should not be observable from JS.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addPendingTrackEvent):

2020-04-28  Rob Buis  <rbuis@igalia.com>

        Make HistoryController an inner class of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=211090

        Reviewed by Darin Adler.

        Make HistoryController an inner class of FrameLoader, this allows
        us to move some methods only used by HistoryController out of the
        FrameLoader public API.

        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        * loader/HistoryController.h:

2020-04-27  Simon Fraser  <simon.fraser@apple.com>

        Do correct clipping of composited replaced elements with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=211114

        Reviewed by Zalan Bujtas.

        For replaced elements with composited content (video, WebGL), RenderLayerBacking
        incorrectly used the rounded inner border rect to clip the contents. This doesn't match
        painted replaced elements, which clip to the inside of the padding box.

        Fix by implementing RenderReplaced::roundedContentBoxRect() and calling it from compositing
        code. Also add a helper to get the rounded border box rect, and call it in various places.

        Test: compositing/clipping/border-radius-on-webgl.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::roundedBorderBoxRect const):
        * rendering/RenderBox.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateContentsRects):
        (WebCore::RenderLayerBacking::resetContentsRect):
        (WebCore::RenderLayerBacking::updateChildClippingStrategy):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
        (WebCore::RenderLayerBacking::updateImageContents):
        (WebCore::backgroundRectForBox):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::roundedContentBoxRect const):
        * rendering/RenderReplaced.h:

2020-04-27  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Timestamps should be the same for all rendering update steps
        https://bugs.webkit.org/show_bug.cgi?id=207153

        Reviewed by Simon Fraser.

        The HTML 5 event loop sepcs states that timestamps should be the same for 
        all rendering update steps.

        Specs link (step 9):
            https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-processing-model

        This patch also fixes some issues in IntersectionObserver.

        Test: intersection-observer/intersection-observer-callback-timestamp.html

        * dom/Document.cpp:
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::notifyIntersectionObserversTimerFired): Deleted.
        * dom/Document.h:
        -- Handle the case when two floats are areEssentiallyEqual().
        -- Execute the IntersectionObserver immediately and do not wait until the 
           next CFRunLoop event since this does not implement the specs.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::freezeNowTimestamp):
        (WebCore::DOMWindow::unfreezeNowTimestamp):
        (WebCore::DOMWindow::frozenNowTimestamp const):
        * page/DOMWindow.h:
        Provide a frozen now() timestamp in seconds to be used internally only.

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::nowTimestamp const):
        Use the frozenNowTimestamp().

        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        Freeze the timestamps while serving the rendering update steps.

2020-04-27  Dean Jackson  <dino@apple.com>

        getShaderPrecisionFormat returns the wrong values
        https://bugs.webkit.org/show_bug.cgi?id=211013
        <rdar://problem/62378056>

        Reviewed by Darin Adler.

        Gregg pointed out that our code hardcodes values for
        getShaderPrecisionFormat. The fix is simply to call into
        the underlying GL function.

        Covered by the existing test: webgl/1.0.3/conformance/misc/shader-precision-format.html

        However, that just tests minimum values. Devices have different
        actual results.

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp:
        (WebCore::GraphicsContextGLOpenGL::getShaderPrecisionFormat):

2020-04-27  Simon Fraser  <simon.fraser@apple.com>

        Rename scrollableAreaForScrollLayerID to scrollableAreaForScrollingNodeID
        https://bugs.webkit.org/show_bug.cgi?id=211091

        Reviewed by Myles C. Maxfield.

        The argument to scrollableAreaForScrollLayerID() is a ScrollingNodeID, not a layerID.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollableAreaForScrollingNodeID const):
        (WebCore::FrameView::scrollableAreaForScrollLayerID const): Deleted.
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::setActiveScrollSnapIndices):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scrollableAreaForScrollingNodeID const):
        (WebCore::RenderLayerCompositor::scrollableAreaForScrollLayerID const): Deleted.
        * rendering/RenderLayerCompositor.h:

2020-04-27  Ryan Haddad  <ryanhaddad@apple.com>

        [Cocoa] stop using out arguments for document attributes when converting to attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=211048

        Unreviewed partial revert of r260739 to remove unexpected logging that broke Catalina-Release-WK2-Perf tests.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::policyProperties):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::siteForCookies):

2020-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation should not aggregate text from different navigation anchor elements
        https://bugs.webkit.org/show_bug.cgi?id=211081
        <rdar://problem/59553658>

        Reviewed by Megan Gardner.

        Tweak the item boundary heuristic in `TextManipulationController::observeParagraphs` to separate text in
        links and list items under navigation elements (either nav elements, or elements with the "navigation"
        accessibility role) into separate paragraphs.

        Also, extend the item boundary rule for button elements to apply to elements with the "button"
        accessibility role as well.

        Test:   TextManipulation.StartTextManipulationTreatsInlineBlockLinksAndButtonsAsParagraphs
                TextManipulation.StartTextManipulationTreatsLinksInNavigationElementsAsParagraphs

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

2020-04-27  Antoine Quint  <graouts@apple.com>

        Clean up some useless includes of CSSAnimationController.h
        https://bugs.webkit.org/show_bug.cgi?id=211066

        Reviewed by Antti Koivisto.

        These files don't actually use any of the CSSAnimationController APIs.

        * page/ios/FrameIOS.mm:
        * rendering/RenderObject.cpp:

2020-04-27  Antoine Quint  <graouts@apple.com>

        Rename CSSAnimationController accessors from animation() to legacyAnimation()
        https://bugs.webkit.org/show_bug.cgi?id=211082

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computeRenderStyleForProperty):
        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::implicitClose):
        (WebCore::Document::resume):
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::destroy):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        (WebCore::Frame::resumeActiveDOMObjectsAndAnimations):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::FrameViewLayoutContext::layout):
        * page/Page.cpp:
        (WebCore::Page::handleLowModePowerChange):
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::updateThrottlingState):
        (WebCore::CSSAnimationControllerPrivate::suspendAnimations):
        (WebCore::CSSAnimationControllerPrivate::resumeAnimations):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::notifyAnimationStarted):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation const):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::legacyAnimation const):
        (WebCore::RenderObject::animation const): Deleted.
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfActiveAnimations const):
        (WebCore::Internals::animationsAreSuspended const):
        (WebCore::Internals::animationsInterval const):
        (WebCore::Internals::suspendAnimations const):
        (WebCore::Internals::resumeAnimations const):
        (WebCore::Internals::pauseAnimationAtTimeOnElement):
        (WebCore::Internals::pauseAnimationAtTimeOnPseudoElement):
        (WebCore::Internals::pauseTransitionAtTimeOnElement):
        (WebCore::Internals::pauseTransitionAtTimeOnPseudoElement):

2020-04-27  Per Arne Vollan  <pvollan@apple.com>

        [Cocoa] After r258891, r255119 can be reverted
        https://bugs.webkit.org/show_bug.cgi?id=211083
        <rdar://problem/60714318>

        Unreviewed revert of r255119.

        Copying a MIME type map from the UI process to the WebContent process on startup is not needed anymore,
        since r258891 will map the Launch Services database in the WebContent process.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::commonMimeTypesMap):
        (WebCore::typesForCommonExtension):
        (WebCore::overriddenMimeTypesMap): Deleted.
        * platform/MIMETypeRegistry.h:
        * testing/Internals.cpp:
        (WebCore::Internals::mediaMIMETypeForExtension): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2020-04-27  Darin Adler  <darin@apple.com>

        Improve performance of commonInclusiveAncestor for deeply nested nodes
        https://bugs.webkit.org/show_bug.cgi?id=211078

        Reviewed by Antti Koivisto.

        * dom/Node.cpp:
        (WebCore::depth): Added.
        (WebCore::commonInclusiveAncestor): Replaced implementation that walks the
        parent chain of the second node repeatedly with one that walks the parent
        chain of each node twice.

2020-04-27  Daniel Bates  <dabates@apple.com>

        Caret may be placed in the wrong spot for text input context that is a form control
        https://bugs.webkit.org/show_bug.cgi?id=210939
        <rdar://problem/61943089>

        Reviewed by Darin Adler.

        Add a helper function that returns the closest editable position inside an element
        for a given point (if any).

        * editing/Editing.cpp:
        (WebCore::closestEditablePositionInElementForAbsolutePoint): Added.
        * editing/Editing.h:

2020-04-27  Alicia Boya García  <aboya@igalia.com>

        [GStreamer] Rework WebKitWebSrc threading
        https://bugs.webkit.org/show_bug.cgi?id=210284

        Reviewed by Xabier Rodriguez-Calvar.

        WebKitWebSrc as it is in master has a number of race conditions
        leading to occasional starvation (due to cancelling the wrong request)
        or data corruption (due to pushing data from a cancelled request).

        The threading situation wasn't easy to follow, as it wasn't clear
        access to what members should be protected by what mutex, in what
        circumstances. Also, some parts of the design were also introducing
        addicional complexity, such as the first request being sent from the
        main thread whereas the rest were being sent from the streaming thread
        or basesrc async start.

        In response, this patch reworks all the locking in WebKitWebSrc to use
        WTF::DataMutex. This ensures all accesses to its (now explicit)
        protected members are locked. The two mutexes and condition variables
        have been simplified into one, as there was no obvious need or benefit
        for two of each in this case.

        Requests have been numbered, which allows to safely and atomically
        ignore results from cancelled requests, avoiding data corruption
        races, and makes following them in debug logs much easier.

        The conditions for making and cancelling requests have been simplified
        to a simpler and safer model: There is at most only one active request
        at anytime, flushes cancel the request, and the first create() call
        always makes the new request (both at startup and after a flush).
        Debug asserts and notes about the flow of operations during basesrc
        seeks have been provided.

        As this effort needed a review of the entire WebKitWebSrc, cleanups,
        corrections and documentation comments have been provided where
        appropriate.

        This patch introduces no visible behavior changes, just stability
        improvements.

        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (WebKitWebSrcPrivate::~WebKitWebSrcPrivate):
        (webkit_web_src_class_init):
        (webkitWebSrcReset):
        (webKitWebSrcConstructed):
        (webKitWebSrcSetProperty):
        (webKitWebSrcGetProperty):
        (webKitWebSrcSetContext):
        (webKitWebSrcSendEvent):
        (restartLoaderIfNeeded):
        (stopLoaderIfNeeded):
        (webKitWebSrcCreate):
        (webKitWebSrcStart):
        (webKitWebSrcMakeRequest):
        (webKitWebSrcStop):
        (webKitWebSrcGetSize):
        (webKitWebSrcIsSeekable):
        (webKitWebSrcDoSeek):
        (webKitWebSrcQuery):
        (webKitWebSrcUnLock):
        (webKitWebSrcUnLockStop):
        (webKitWebSrcSetUri):
        (webKitWebSrcSetMediaPlayer):
        (webKitSrcPassedCORSAccessCheck):
        (CachedResourceStreamingClient::CachedResourceStreamingClient):
        (CachedResourceStreamingClient::checkUpdateBlocksize):
        (CachedResourceStreamingClient::responseReceived):
        (CachedResourceStreamingClient::dataReceived):
        (CachedResourceStreamingClient::accessControlCheckFailed):
        (CachedResourceStreamingClient::loadFailed):
        (CachedResourceStreamingClient::loadFinished):
        (webKitSrcWouldTaintOrigin):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2020-04-26  Darin Adler  <darin@apple.com>

        Replace more uses of live ranges with SimpleRange
        https://bugs.webkit.org/show_bug.cgi?id=211058

        Reviewed by Antti Koivisto.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const): Use SimpleRange.

        * dom/BoundaryPoint.h: Moved makeBoundaryPointAfterNodeContents here so it
        can be used more places.

        * dom/Node.cpp:
        (WebCore::commonInclusiveAncestor): Moved the commonAncestorContainer function
        here from Range, decided to use the "inclusive ancestor" naming from the
        DOM specification, and used RefPtr for the result since it's part of our modern
        safer design to always use smart pointers for return values.
        * dom/Node.h: Added commonInclusiveAncestor.

        * dom/Position.cpp:
        (WebCore::commonShadowIncludingAncestor): Call commonInclusiveAncestor.

        * dom/Range.cpp:
        (WebCore::Range::commonAncestorContainer): Deleted.
        (WebCore::Range::isPointInRange): Call commonInclusiveAncestor.
        (WebCore::Range::comparePoint const): Ditto.
        (WebCore::Range::compareBoundaryPoints): Ditto.
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines const): Ditto.
        * dom/Range.h:
        (WebCore::Range::commonAncestorContainer const): Call commonInclusiveAncestor.

        * dom/SimpleRange.cpp:
        (WebCore::makeBoundaryPointAfterNodeContents): Moved to BoundaryPoint.h.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::respondToUnappliedSpellCorrection): Use
        SimpleRange instead of live range.
        (WebCore::AlternativeTextController::respondToUnappliedEditing): Ditto.
        (WebCore::AlternativeTextController::markPrecedingWhitespaceForDeletedAutocorrectionAfterCommand): Ditto.
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult): Ditto.

        * editing/ChangeListTypeCommand.cpp:
        (WebCore::listConversionTypeForSelection): use commonInclusiveAncestor.

        * editing/Editing.cpp:
        (WebCore::isNodeVisiblyContainedWithin): Take a SimpleRange argument.
        * editing/Editing.h: Updated for the above.

        * editing/Editor.cpp:
        (WebCore::Editor::addRangeToKillRing): Take a SimpleRange argument.
        (WebCore::Editor::shouldDetectTelephoneNumbers const): Made this const and
        tweaked coding style a bit.
        (WebCore::scanForTelephoneNumbers): Moved this, made it a non-member function,
        renamed from scanRangeForTelephoneNumbers, use SimpleRange.
        (WebCore::extendSelection): Added. Factored out some logic from the function below.
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Use SimpleRange. Removed
        some unnecessary code that subtracts 1 and then adds 1 again.
        * editing/Editor.h: Updated for the above.

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::replace): Use commonInclusiveAncestor.

        * editing/VisibleSelection.cpp:
        (WebCore::makeSearchRange): Return a SimpleRange.
        (WebCore::VisibleSelection::appendTrailingWhitespace): Use SimpleRange.

        * editing/WebContentReader.h: Use SimpleRange instead of a live range.

        * editing/cocoa/DataDetection.h: Use a struct, DetectedItem, for the return value
        from the detection functions. Also changed DataDetectorTypes to an enum class so
        it can be forward-declared instead of having to include this header.
        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItem): Renamed from detectItemAtPositionWithRange. Return the
        DetectedItem struct, with a SimpleRange rather than an out argument live range.
        (WebCore::DataDetection::detectItemAroundHitTestResult): Ditto.
        (WebCore::contains): Added a helper function for testing bits in the
        DataDetectorType enum. Later we can make this better using OptionSet.
        (WebCore::constructURLStringForResult): Refactored a bit, updated for the new
        DataDetectorTypes enum class, and to use CFEqual instead of CFStringCompare.
        (WebCore::DataDetection::detectContentInRange): Ditto.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::webContentFromPasteboard): Use SimpleRange.
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readPlainText): Updated since context is SimpleRange.
        * editing/gtk/EditorGtk.cpp:
        (WebCore::createFragmentFromPasteboardData): Use SimpleRange.
        (WebCore::Editor::webContentFromPasteboard): Use SimpleRange.
        * editing/win/EditorWin.cpp:
        (WebCore::Editor::webContentFromPasteboard): Use SimpleRange.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::replaceNodeFromPasteboard): Use SimpleRange.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Use SimpleRange.
        * page/EventHandler.cpp:
        (WebCore::targetNodeForClickEvent): Use commonInclusiveAncestor. Also updated
        to return a RefPtr.
        (WebCore::EventHandler::handleMouseReleaseEvent): Updated for the above.

        * page/Settings.yaml: Changed the default for DataDetectorTypes to be the empty
        string rather than a named constant.
        * page/SettingsBase.h: Forward-declare DataDetectorTypes instead of including
        the DataDetection.h header.

        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange): Take a SimpleRange.
        (WebCore::TextIndicator::createWithSelectionInFrame): Ditto.
        (WebCore::hasNonInlineOrReplacedElements): Ditto.
        (WebCore::selectionRects): Ditto. Also renamed from getSelectionRectsForRange.
        (WebCore::styleContainsComplexBackground): Tweaked implementation.
        (WebCore::estimatedTextColorsForRange): Take a SimpleRange.
        (WebCore::absoluteBoundingRectForRange): Ditto.
        (WebCore::estimatedBackgroundColorForRange): Ditto.
        (WebCore::containsOnlyWhiteSpaceText): Ditto.
        (WebCore::initializeIndicator): Ditto.
        * page/TextIndicator.h: Updated for the above.

        * page/mac/ServicesOverlayController.h: Use SimpleRange instead of a live
        range for highlights.
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::createForSelection): Take SimpleRange.
        (WebCore::ServicesOverlayController::Highlight::createForTelephoneNumber): Ditto.
        (WebCore::ServicesOverlayController::Highlight::Highlight): Ditto.
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights): Ditto.
        (WebCore::ServicesOverlayController::buildSelectionHighlight): Ditto.
        (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame): Ditto.
        (WebCore::ServicesOverlayController::highlightsAreEquivalent): Ditto.
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight): Ditto.
        (WebCore::ServicesOverlayController::handleClick): Ditto.

        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForLink): Use SimpleRange.
        (WebCore::createDragImageForSelection): Tweaked a bit.

2020-04-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Make it possible to build with GTK4 without errors
        https://bugs.webkit.org/show_bug.cgi?id=210967

        Reviewed by Adrian Perez de Castro.

        * platform/PlatformPasteboard.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h:
        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        (WebCore::getDefaultCairoFontOptions):
        * platform/gtk/CursorGtk.cpp:
        (WebCore::createCustomCursor):
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dissolveDragImageToFraction):
        * platform/gtk/GRefPtrGtk.cpp:
        * platform/gtk/GRefPtrGtk.h:
        * platform/gtk/GUniquePtrGtk.h:
        * platform/gtk/GtkVersioning.h:
        (gdk_event_copy):
        (gtk_widget_size_allocate):
        (gtk_widget_queue_resize_no_redraw):
        (gdk_event_get_state):
        (gdk_event_get_coords):
        (gdk_event_get_root_coords):
        (gdk_event_is_scroll_stop_event):
        (gdk_event_get_scroll_direction):
        (gdk_event_get_scroll_deltas):
        (gdk_event_get_button):
        * platform/gtk/PasteboardHelper.cpp:
        * platform/gtk/PasteboardHelper.h:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::modifiersContainCapsLock):
        * platform/gtk/PlatformPasteboardGtk.cpp:
        (WebCore::PlatformPasteboard::PlatformPasteboard):
        (WebCore::PlatformPasteboard::writeToClipboard):
        (WebCore::PlatformPasteboard::readFromClipboard):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getCurrentScreenMonitor):

2020-04-27  Rob Buis  <rbuis@igalia.com>

        Make loadURLIntoChildFrame private and non-exported
        https://bugs.webkit.org/show_bug.cgi?id=211051

        Reviewed by Darin Adler.

        Make loadURLIntoChildFrame private and non-exported to reduce the amount of public API functions
        that start loads. In order to do this loadURLIntoChildFrame is being called from SubframeLoader
        and SubframeLoader is made an inner class of FrameLoader. Because this simplifies createFrame (and
        makes createFrame behave strictly like its name) url and referrer do not have to be passed.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::createFrame):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::SubframeLoader::SubframeLoader):
        (WebCore::FrameLoader::SubframeLoader::clear):
        (WebCore::FrameLoader::SubframeLoader::requestFrame):
        (WebCore::FrameLoader::SubframeLoader::resourceWillUsePlugin):
        (WebCore::FrameLoader::SubframeLoader::pluginIsLoadable):
        (WebCore::FrameLoader::SubframeLoader::requestPlugin):
        (WebCore::FrameLoader::SubframeLoader::requestObject):
        (WebCore::FrameLoader::SubframeLoader::createJavaAppletWidget):
        (WebCore::FrameLoader::SubframeLoader::loadOrRedirectSubframe):
        (WebCore::FrameLoader::SubframeLoader::loadSubframe):
        (WebCore::FrameLoader::SubframeLoader::shouldUsePlugin):
        (WebCore::FrameLoader::SubframeLoader::loadPlugin):
        (WebCore::FrameLoader::SubframeLoader::completeURL const):
        (WebCore::FrameLoader::SubframeLoader::shouldConvertInvalidURLsToBlank const):
        (WebCore::SubframeLoader::SubframeLoader): Deleted.
        (WebCore::SubframeLoader::clear): Deleted.
        (WebCore::SubframeLoader::requestFrame): Deleted.
        (WebCore::SubframeLoader::resourceWillUsePlugin): Deleted.
        (WebCore::SubframeLoader::pluginIsLoadable): Deleted.
        (WebCore::SubframeLoader::requestPlugin): Deleted.
        (WebCore::SubframeLoader::requestObject): Deleted.
        (WebCore::SubframeLoader::createJavaAppletWidget): Deleted.
        (WebCore::SubframeLoader::loadOrRedirectSubframe): Deleted.
        (WebCore::SubframeLoader::loadSubframe): Deleted.
        (WebCore::SubframeLoader::shouldUsePlugin): Deleted.
        (WebCore::SubframeLoader::loadPlugin): Deleted.
        (WebCore::SubframeLoader::completeURL const): Deleted.
        (WebCore::SubframeLoader::shouldConvertInvalidURLsToBlank const): Deleted.
        * loader/SubframeLoader.h:
        (WebCore::SubframeLoader::containsPlugins const): Deleted.

2020-04-27  Alberto Garcia  <berto@igalia.com>

        [GTK] [2.28.0] The Yelp build crashes if DISPLAY is not set
        https://bugs.webkit.org/show_bug.cgi?id=209431

        Reviewed by Carlos Garcia Campos.

        Don't create a PlatformDisplayLibWPE as a fallback when using
        Wayland or X11.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):

2020-04-27  Claudio Saavedra  <csaavedra@igalia.com>

        Unreviewed compile-warning fix.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):

2020-04-27  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, GTK LTS build fix after r260744
        https://bugs.webkit.org/show_bug.cgi?id=211069

        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::getConstructData):

2020-04-27  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] GdkRGBA has float members instead of double

        Unreviewed warning fix.

        * platform/graphics/gtk/ColorGtk.cpp:
        (WebCore::Color::operator GdkRGBA const):

2020-04-27  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] CallData/ConstructData should include CallType/ConstructType
        https://bugs.webkit.org/show_bug.cgi?id=211059

        Reviewed by Darin Adler.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::installReplacement):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        (WebCore::JSCustomElementInterface::upgradeElement):
        (WebCore::JSCustomElementInterface::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBuiltinConstructor.h:
        (WebCore::JSDOMBuiltinConstructor<JSClass>::getConstructData):
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments):
        * bindings/js/JSDOMConstructor.h:
        (WebCore::JSDOMConstructor<JSClass>::getConstructData):
        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::JSDOMConstructorBase::getCallData):
        * bindings/js/JSDOMConstructorBase.h:
        * bindings/js/JSDOMConstructorNotConstructable.h:
        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorForEach):
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::clearBackingMap):
        (WebCore::setToBackingMap):
        (WebCore::forwardFunctionCallToBackingMap):
        (WebCore::forwardForEachCallToBackingMap):
        * bindings/js/JSDOMNamedConstructor.h:
        (WebCore::JSDOMNamedConstructor<JSClass>::getConstructData):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenPromiseIsSettled):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::createRejectedPromiseWithTypeError):
        * bindings/js/JSDOMSetLike.cpp:
        (WebCore::clearBackingSet):
        (WebCore::addToBackingSet):
        (WebCore::forwardFunctionCallToBackingSet):
        (WebCore::forwardForEachCallToBackingSet):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSExecState.cpp:
        (WebCore::functionCallHandlerFromAnyThread):
        * bindings/js/JSExecState.h:
        (WebCore::JSExecState::call):
        (WebCore::JSExecState::profiledCall):
        * bindings/js/JSExecStateInstrumentation.h:
        (WebCore::JSExecState::instrumentFunction):
        (WebCore::JSExecState::instrumentFunctionInternal): Deleted.
        (WebCore::JSExecState::instrumentFunctionCall): Deleted.
        (WebCore::JSExecState::instrumentFunctionConstruct): Deleted.
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::getUserMedia):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        (WebCore::pluginElementCustomGetCallData):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStreamInternal::callFunction):
        (WebCore::ReadableStream::lock):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::readableStreamCallFunction):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::callInWorld):
        (WebCore::ScriptController::executeAsynchronousUserAgentScriptInWorld):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GeneratePluginCall):
        (GenerateLegacyCallerDefinitions):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::getCallData):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::getCallData):
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bridge/NP_jsobject.cpp:
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcFallbackObjectImp::getCallData):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::getCallData):
        (JSC::Bindings::RuntimeObject::getConstructData):
        * bridge/runtime_object.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        * testing/Internals.cpp:
        (WebCore::Internals::cloneArrayBuffer):

2020-04-27  Diego Pino Garcia  <dpino@igalia.com>

        Unreviewed, reverting r260672.

        [GTK] WebInspector tests are timing out after r260672

        Reverted changeset:

        "[Win] Bundle Inspector Resources in Release builds"
        https://bugs.webkit.org/show_bug.cgi?id=210942
        https://trac.webkit.org/changeset/260672

2020-04-27  Kenneth Russell  <kbr@chromium.org>

        Build failure in WebGL2RenderingContext after r260588
        https://bugs.webkit.org/show_bug.cgi?id=211057

        Reviewed by Darin Adler.

        Fix non-ANGLE build failure in WebGL2RenderingContext after
        r260588.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::texStorage2D):

2020-04-26  Darin Adler  <darin@apple.com>

        [Cocoa] stop using out arguments for document attributes when converting to attributed strings
        https://bugs.webkit.org/show_bug.cgi?id=211048

        Reviewed by Sam Weinig.

        * DerivedSources-input.xcfilelist: Building modified this file automatically. Uploading
        the new version.

        * WebCore.xcodeproj/project.pbxproj: Added AttributedString.h.
        * editing/cocoa/AttributedString.h: Added. Moved this from WebKit, but removed a lot of
        inessentials.
        * editing/cocoa/DictionaryLookup.mm: Removed unneeded include.
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::selectionAsAttributedString): Updated for change to the return value of the
        attributedString function, and use init instead of initWithString:@"".

        * editing/cocoa/HTMLConverter.h: Changed to an Objective-C-only header, omitting things
        like #pramga once. Return the AttributedString struct from the functions instead of
        using an out argument for document attributes.
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::convert): Return an AttributedString and drop the out argument.
        (WebCore::attributedString): Ditto.
        (WebCore::editingAttributedString): Ditto. Also refactor a little bit.

        * editing/ios/EditorIOS.mm: Removed unneeded include.
        * editing/mac/DictionaryLookupLegacy.mm: Removed unneeded include.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::dataSelectionForPasteboard): Updated since attributedString
        now returns a structure.

        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::policyProperties): Use init instead of initWithString:@"".
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::siteForCookies): Use init instead of initWithString:@"".

2020-04-26  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Enable TestWTF and TestWebCore
        https://bugs.webkit.org/show_bug.cgi?id=208849

        Reviewed by Don Olmstead.

        * PlatformPlayStation.cmake:
        Add WebCore_CopySharedLibs to install dependencies.

2020-04-26  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rendering update steps should use Seconds for the timestamps
        https://bugs.webkit.org/show_bug.cgi?id=210990

        Reviewed by Daniel Bates.

        Make DOMWindow::nowTimestamp() return ReducedResolutionSeconds and change
        the callers accordingly. ReducedResolutionSeconds is a new type but it's
        just an alias of the type Seconds. It indicates that the returned value
        is a web-safe seconds.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::suspendAnimations):
        (WebCore::DocumentTimeline::liveCurrentTime const):
        (WebCore::DocumentTimeline::cacheCurrentTime):
        (WebCore::DocumentTimeline::documentWillUpdateAnimationsAndSendEvents):
        * animation/DocumentTimeline.h:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        * animation/DocumentTimelinesController.h:
        * dom/Document.cpp:
        (WebCore::Document::serviceRequestAnimationFrameCallbacks):
        (WebCore::Document::updateIntersectionObservations):
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/ScriptedAnimationController.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::getVideoPlaybackQuality):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::nowTimestamp const):
        * page/DOMWindow.h:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::nowTimestamp const):
        (WebCore::IntersectionObserver::createTimestamp const): Deleted.
        * page/IntersectionObserver.h:
        * page/Page.cpp:
        (WebCore::Page::updateRendering):
        * page/Performance.cpp:
        (WebCore::Performance::now const):
        (WebCore::Performance::nowInReducedResolutionSeconds const):
        * page/Performance.h:
        * page/ReducedResolutionSeconds.h: Added.

2020-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        InternalFunction::createSubclassStructure should use newTarget's globalObject
        https://bugs.webkit.org/show_bug.cgi?id=202599

        Reviewed by Yusuke Suzuki.

        Accounts for InternalFunction::createSubclassStructure() signature change and
        utilizes getFunctionRealm() helper to handle cross-realm JSBoundFunction and
        ProxyObject instances as NewTarget value.

        Tests: web-platform-tests/WebIDL/ecmascript-binding/constructors.html
               web-platform-tests/custom-elements/htmlconstructor/newtarget.html

        * bindings/js/JSDOMWrapperCache.h:
        (WebCore::setSubclassStructureIfNeeded):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):

2020-04-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Use `static Lock` instead of `static NeverDestroyed<Lock>`
        https://bugs.webkit.org/show_bug.cgi?id=211036

        Reviewed by Darin Adler.

        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::sharedLock):

2020-04-26  Peng Liu  <peng.liu6@apple.com>

        Remove unused class PlaybackSessionInterface
        https://bugs.webkit.org/show_bug.cgi?id=211031

        Reviewed by Daniel Bates.

        No new tests, no functional changes.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/PlaybackSessionInterface.h: Removed.
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/mac/PlaybackSessionInterfaceMac.h:

2020-04-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Compute and distribute extra vertical space for rows
        https://bugs.webkit.org/show_bug.cgi?id=211046

        Reviewed by Antti Koivisto.

        When the table computed height is bigger than the sum of the row heigts, we need to distribute the extra vertical
        space among the non-fixed height rows. The distribution is based on the preferred height of those non-fixed rows.

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

2020-04-11  Darin Adler  <darin@apple.com>

        Stop using live ranges in functions that return range of the selection
        https://bugs.webkit.org/show_bug.cgi?id=210396

        Reviewed by Sam Weinig.

        - Added makeRangeSelectingNode, to create a range that selects a node
          and all its descendants.
        - Improved intersectingNodes so it can now easily be used in a while loop
          style as well as the range-for loop style. Also made it more robust
          against tree changes while iterating; it will now always stop at the
          end of the document.
        - Changed functions that work with selection to get a SimpleRange, and
          then either do all the work without a live range, or call createLiveRange
          right where it's needed, making it clearer when we can delete that
          call later as we cut down live ranges even more.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectionRange const): Return a SimpleRange
        instead of a live range.
        (WebCore::AccessibilityObject::findTextRanges const): Use createLiveRange
        on the result of selectionRange since this still mostly uses live ranges.
        * accessibility/AccessibilityObject.h: Updated for the above.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::documentBasedSelectedTextRange const):
        Updated to create a live range only in the one place we need to call a
        Range class member function.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper textMarkerRangeForSelection]):
        Use createLiveRange here.

        * dom/SimpleRange.cpp:
        (WebCore::makeRangeSelectingNode): Added. For use when we need to make
        a range that selects a node, not just the node's contents.
        (WebCore::firstIntersectingNode): Renamed from IntersectingNodeRange::first
        since this is now used in the iterator class, not the range class. Also
        letting it be a non-member function so we can tweak it without touching
        the haeder file.
        (WebCore::nodePastLastIntersectingNode): Ditto.
        (WebCore::IntersectingNodeIterator::IntersectingNodeIterator): Changed
        this constructor to take a SimpleRange. To add the advanceSkippingChildren
        feature, had to build the termination condition into the iterator rather
        than basing it on the value of the sentinel.
        (WebCore::IntersectingNodeIterator::advance): Added. Contains the logic
        from the ++ operator, so it can be called in a more straightforward way
        when this is being used with a while loop rather than a range-for loop.
        (WebCore::IntersectingNodeIterator::advanceSkippingChildren): Added.
        * dom/SimpleRange.h: Updated for the changes to IntersectingNodeIterator
        and IntersectingNodeRange.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired): Use createLiveRange.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::targetRanges const): Use WTFMove in
        a place where the old code was copying instead.

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss):
        Use intersectingNodes to make the function's logic easier to understand.

        * editing/Editing.cpp:
        (WebCore::visibleImageElementsInRangeWithNonLoadedImages): Changed
        the argument type to SimpleRange.
        * editing/Editing.h: Updated for the change above.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart): Use createLiveRange.

        * editing/Editor.cpp:
        (WebCore::Editor::selectedRange): Use createLiveRange.
        (WebCore::Editor::applyStyleToSelection): Ditto.
        (WebCore::Editor::applyParagraphStyleToSelection): Ditto.
        (WebCore::Editor::insertTextWithoutSendingTextEvent): Ditto.
        (WebCore::Editor::insertLineBreak): Ditto.
        (WebCore::Editor::insertParagraphSeparator): Ditto.
        (WebCore::Editor::ignoreSpelling): Remove use of live range.
        (WebCore::Editor::learnSpelling): Ditto.
        (WebCore::Editor::misspelledWordAtCaretOrRange const): Ditto.
        (WebCore::Editor::isSelectionUngrammatical): Ditto.
        (WebCore::Editor::guessesForMisspelledOrUngrammatical): Ditto.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Use createLiveRange.
        (WebCore::Editor::markMisspellingsOrBadGrammar): Ditto.
        (WebCore::Editor::markMisspellingsAndBadGrammar): Ditto.
        (WebCore::Editor::rangeForPoint): Ditto.
        (WebCore::Editor::insertTextPlaceholder): Ditto.
        (WebCore::Editor::shouldChangeSelection const): Ditto.
        (WebCore::Editor::findString): Ditto.
        (WebCore::Editor::rangeOfString): Ditto.
        (WebCore::Editor::scanSelectionForTelephoneNumbers): Ditto.
        (WebCore::Editor::editorUIUpdateTimerFired): Remove use of live range.
        (WebCore::candidateRangeForSelection): Deleted.
        (WebCore::Editor::stringForCandidateRequest const): Use createLiveRange
        and merged in the logic from candidateRangeForSelection.
        (WebCore::Editor::fontForSelection const): Remove use of live range.

        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity): Use createLiveRange.
        (WebCore::executeDeleteToMark): Ditto.
        (WebCore::executeSelectToMark): Ditto.
        (WebCore::valueFormatBlock): Ditto.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::respondToNodeModification): Use createLiveRange.
        (WebCore::FrameSelection::shouldDeleteSelection const): Ditto.
        (WebCore::FrameSelection::getClippedVisibleTextRectangles const): Do the work
        without a live range.
        (WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection): Ditto.
        (WebCore::FrameSelection::elementRangeContainingCaretSelection const): Changed
        to return a SimpleRange rather than a live range. Also removed redundant checks
        and renamed locals to streamline the function.
        (WebCore::FrameSelection::wordRangeContainingCaretSelection): Return a
        SimpleRange instead of a live range.
        (WebCore::FrameSelection::rangeByMovingCurrentSelection const): Ditto.
        (WebCore::FrameSelection::rangeByExtendingCurrentSelection const): Ditto.
        (WebCore::FrameSelection::rangeByAlteringCurrentSelection const): Ditto.
        * editing/FrameSelection.h: Removed the toNormalizedRange function, since the
        VisibleSelection class has a comment claiming most callers should not call it.
        Updated forthe other changes above.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Use createLiveRange.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Ditto.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::TextCheckingHelper): Remove use of live range,
        changing the type of m_range to SimpleRange.
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar): Reduce use
        of live range.
        (WebCore::TextCheckingHelper::findFirstGrammarDetail const): Use createLiveRange.
        (WebCore::TextCheckingHelper::findFirstBadGrammar const): Ditto.
        (WebCore::TextCheckingHelper::isUngrammatical const): Remove use of live range.
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange const):
        Use createLiveRange.
        (WebCore::TextCheckingHelper::unifiedTextCheckerEnabled const): Updated for
        different interface to get the document for a SimpleRange.
        * editing/TextCheckingHelper.h: Change constructor to take a SimpleRange.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Use createLiveRange.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::firstRange const): Return a SimpleRange.
        (WebCore::VisibleSelection::toNormalizedRange const): Ditto.
        * editing/VisibleSelection.h: Updated for the above.

        * editing/cocoa/DictionaryLookup.mm: Removed an uneeded check of the
        selection range against null. Code already guards against null endpoints.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::selectionAsAttributedString): Added. Uses the attributedString
        function with it's new argument and return value types. There's no longer
        a special function for the selection in the HTMLConverter header, so we
        put it here instead.
        (WebCore::Editor::writeSelectionToPasteboard): Updated to use the function
        above and to deal with RetainPtr.
        (WebCore::Editor::writeSelection): Ditto.

        * editing/cocoa/HTMLConverter.h: Removed attributedStringFromSelection and
        attributedStringBetweenStartAndEnd. Renamed attributedStringFromRange to
        just attributedString and renamed editingAttributedStringFromRange to
        just editingAttributedString. Also renamed IncludeImagesInAttributedString
        to just IncludeImages.
        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::HTMLConverter): Use a SimpleRange rther than two Position
        arguments to the constructor.
        (HTMLConverter::convert): Use RetainPtr for the return value and the
        optional out argument.
        (WebCore::attributedStringFromSelection): Deleted.
        (WebCore::attributedStringBetweenStartAndEnd): Deleted.
        (WebCore::attributedString): Renamed the version that takes a range and
        made it take a SimpleRange, not a live range.
        (WebCore::editingAttributedString): Ditto.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::dataSelectionForPasteboard): Updated for changes to
        attributedString.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent const):
        Changed to not use live ranges any more.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        Use createLiveRange.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::getRangeAt): Use createLiveRange.
        (WebCore::DOMSelection::addRange): Use Ditto.
        (WebCore::DOMSelection::deleteFromDocument): Ditto.

        * page/DragController.cpp:
        (WebCore::setSelectionToDragCaret): Removed in/out argument that was
        used to update a range that was never looked at afterward.
        (WebCore::DragController::concludeEditDrag): Use createLiveRange.
        (WebCore::DragController::draggableElement const): Ditto.
        (WebCore::DragController::startDrag): Ditto.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Use createLiveRange.
        (WebCore::EventHandler::sendContextMenuEventForKey): Ditto.
        (WebCore::EventHandler::didStartDrag): Remove use of live range.

        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges): Use createLiveRange.
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange): Ditto.
        (WebCore::TextIndicator::createWithSelectionInFrame): Ditto.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        Use createLiveRange.
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight):
        Use createLiveRange.

        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::selectedText const): Remove use of
        live range.

2020-04-26  Darin Adler  <darin@apple.com>

        Remove unnecessary inlining and templates for URL decomposition DOM functions
        https://bugs.webkit.org/show_bug.cgi?id=211025

        Reviewed by Alex Christensen.

        * Headers.cmake: Renamed URLUtils.h to URLDecomposition.h.
        * Modules/cache/DOMCacheStorage.cpp: Updated include and using namespace.
        * Sources.txt: Added URLDecomposition.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added URLDecomposition.cpp and
        renamed URLUtils.h to URLDecomposition.h.

        * html/DOMURL.h: Removed the WEBCORE_EXPORT on this class. Added final.
        Derive from URLDecomposition instead of URLUtils. Changed return type of
        href to const&. Moved toJSON here from URLUtils. Added overrides of the
        fullURL and setFullURL functions for URLDecomposition.

        * html/DOMURL.idl: Removed ImplementationLacksVTable.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement): Moved initialization of
        boolean data members to the class definition.

        * html/HTMLAnchorElement.h: Derive from URLDecomposition instead of
        URLUtils. Added overrides of the fullURL and setFullURL functions for
        URLDecomposition. Initialize data members here in the class definition.

        * html/HTMLMediaElement.cpp: Removed unnecessary include of DOMURL.h.

        * html/URLDecomposition.cpp: Added. Contains most of the code from
        the URLUtils class template, which no longer needs to be in a header.

        * html/URLDecomposition.h: Renamed URLUtils.h to this. It's now an
        abstract base class rather than a class template using the curiously
        recurring template pattern.

        * html/URLSearchParams.h: Forward-declare DOMURL rather than including
        the DOMURL.h header.

        * html/URLUtils.h: Removed. Renamed to URLDecompostion.h.

        * page/DOMWindow.cpp: Removed unneeded include of DOMURL.h.
        * testing/Internals.cpp: Added include of DOMURL.h.

2020-04-26  Cathie Chen  <cathiechen@igalia.com>

        fast/scrolling/scroll-behavior-invalidate-if-disabled.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=210917

        Reviewed by Darin Adler.

        The flaky failure is caused by reusing the CSSPropertyInfo value cached propertyInfoCache
        after experimental flags changed. Add propertyInfoFromJavaScriptCSSPropertyName 
        to perform disabled checking after parsing. If the property is disabled, it will return
        an invalid CSSPropertyInfo instead.

        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getCSSPropertyIDFromJavaScriptPropertyName):
        (WebCore::CSSStyleDeclaration::namedItem):
        (WebCore::CSSStyleDeclaration::setNamedItem):

2020-04-25  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] isCallable is redundant with isFunction
        https://bugs.webkit.org/show_bug.cgi?id=211037

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSDOMConvertScheduledAction.h:
        (WebCore::Converter<IDLScheduledAction>::convert):
        * worklets/PaintWorkletGlobalScope.cpp:
        (WebCore::PaintWorkletGlobalScope::registerPaint):
        Don't use getCallData if you don't need CallData. 

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Build fix.
        https://bugs.webkit.org/show_bug.cgi?id=210521

        * Modules/applepay/ApplePaySetupFeature.mm:

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Move ApplePay code from WebKitAdditions to WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=210521

        I accidentally committed an older version of the patch.
        This is the diff between the two to fix the internal build.

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Move ApplePay code from WebKitAdditions to WebCore and WebKit
        https://bugs.webkit.org/show_bug.cgi?id=210521

        Reviewed by Andy Estes.

        Only 4 minor modifications were necessary, as follows:

        1. PaymentSetupFeatures's RetainPtr<NSArray<PKPaymentSetupFeature *>> was changed to RetainPtr<NSArray> to work with C++.
        2. WebPaymentCoordinatorProxyAdditions messages were moved to WebPaymentCoordinatorProxy, removing the need for
           the extra message receiver, the Optional<WebPaymentCoordinatorProxyAdditions>, and the finishConstruction.
        3. WebMediaSessionManager.cpp's macros that collided with other macros were renamed.  This was necessary because of different source unification.
        4. PaymentSetupFeatures.h was renamed to ApplePayPaymentSetupFeatures.h to be able to build with PaymentSetupFeatures.h in the SDK.

        The rest is just copy and paste.

        There isn't a good way to land this without breaking the build without removing the files from WebKitAdditions at the same time,
        so I'll do the two at the same time late at night to not cause disruption.

        * DerivedSources.make:
        * Modules/applepay/ApplePayInstallmentConfiguration.h: Added.
        * Modules/applepay/ApplePayInstallmentConfiguration.idl: Added.
        * Modules/applepay/ApplePayPayment.h:
        * Modules/applepay/ApplePayPayment.idl:
        * Modules/applepay/ApplePayPaymentMethod.h:
        * Modules/applepay/ApplePayPaymentMethod.idl:
        * Modules/applepay/ApplePayPaymentMethodUpdate.h:
        * Modules/applepay/ApplePayPaymentMethodUpdate.idl:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::finishConverting):
        (WebCore::requiresSupportedNetworks):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::finishConverting):
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        (WebCore::ApplePaySessionPaymentRequest::installmentConfiguration const):
        (WebCore::ApplePaySessionPaymentRequest::setInstallmentConfiguration):
        * Modules/applepay/ApplePaySetup.cpp: Added.
        (WebCore::shouldDiscloseFeatures):
        (WebCore::ApplePaySetup::getSetupFeatures):
        (WebCore::ApplePaySetup::begin):
        (WebCore::ApplePaySetup::ApplePaySetup):
        (WebCore::ApplePaySetup::stop):
        (WebCore::ApplePaySetup::suspend):
        * Modules/applepay/ApplePaySetup.h: Added.
        (WebCore::ApplePaySetup::create):
        * Modules/applepay/ApplePaySetup.idl: Added.
        * Modules/applepay/ApplePaySetupFeature.h: Added.
        (WebCore::ApplePaySetupFeature::create):
        (WebCore::ApplePaySetupFeature::platformFeature const):
        * Modules/applepay/ApplePaySetupFeature.idl: Added.
        * Modules/applepay/ApplePaySetupFeature.mm: Added.
        (WebCore::ApplePaySetupFeature::type const):
        (WebCore::ApplePaySetupFeature::state const):
        (WebCore::ApplePaySetupFeature::supportsInstallments const):
        (WebCore::ApplePaySetupFeature::ApplePaySetupFeature):
        * Modules/applepay/ApplePaySetupFeatureType.h: Added.
        * Modules/applepay/ApplePaySetupFeatureType.idl: Added.
        * Modules/applepay/PaymentCoordinatorClient.h:
        (WebCore::PaymentCoordinatorClient::getSetupFeatures):
        (WebCore::PaymentCoordinatorClient::beginApplePaySetup):
        (WebCore::PaymentCoordinatorClient::endApplePaySetup):
        * Modules/applepay/PaymentInstallmentConfiguration.h: Added.
        * Modules/applepay/PaymentInstallmentConfiguration.mm: Added.
        (WebCore::toDecimalNumber):
        (WebCore::platformFeatureType):
        (WebCore::createPlatformConfiguration):
        (WebCore::PaymentInstallmentConfiguration::PaymentInstallmentConfiguration):
        (WebCore::PaymentInstallmentConfiguration::platformConfiguration const):
        * Modules/applepay/PaymentMethodUpdate.h:
        * Modules/applepay/cocoa/PaymentCocoa.mm:
        (WebCore::finishConverting):
        * Modules/applepay/cocoa/PaymentMethodCocoa.mm:
        (WebCore::finishConverting):
        * Modules/applepay/cocoa/PaymentMethodUpdateCocoa.mm:
        (WebCore::PaymentMethodUpdate::setInstallmentGroupIdentifier):
        * Modules/applepay/cocoa/PaymentSessionErrorCocoa.mm:
        (WebCore::additionalError):
        * Modules/applepay/paymentrequest/ApplePayRequest.idl:
        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerEnabled):
        (WebCore::WebMediaSessionManager::setMockMediaPlaybackTargetPickerState):
        (WebCore::WebMediaSessionManager::mockMediaPlaybackTargetPickerDismissPopup):
        (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient):
        (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients):
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        (WebCore::WebMediaSessionManager::clientStateDidChange):
        (WebCore::WebMediaSessionManager::setPlaybackTarget):
        (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange):
        (WebCore::WebMediaSessionManager::playbackTargetPickerWasDismissed):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetClients):
        (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring):
        (WebCore::WebMediaSessionManager::configureWatchdogTimer):
        (WebCore::WebMediaSessionManager::watchdogTimerFired):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/WebCoreAdditions.mm:

2020-04-25  Simon Fraser  <simon.fraser@apple.com>

        Commit the scrolling tree from the main thread
        https://bugs.webkit.org/show_bug.cgi?id=211026
        <rdar://problem/62374855>

        Reviewed by Darin Adler.

        ScrollingCoordinatorMac::commitTreeStateIfNeeded() passed the new state tree to
        the scrolling thread which then did the commit (which updates the scrolling tree
        from the state tree). However, applyLayerPositions() immediately waited for that
        commit to complete, blocking the main thread anyway.

        We might as well just commit the scrolling tree on the main thread. ScrollingTree::commitTreeState()
        locks m_treeMutex, so this is still safe. Lock contention with the scrolling or event dispatcher
        threads should be rare; those threads are both mostly responsive.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollingTreeAsText const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::waitForScrollingTreeCommit): Deleted.
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::commitTreeState): Deleted.
        (WebCore::ThreadedScrollingTree::incrementPendingCommitCount): Deleted.
        (WebCore::ThreadedScrollingTree::decrementPendingCommitCount): Deleted.
        (WebCore::ThreadedScrollingTree::waitForPendingCommits): Deleted.
        (WebCore::ThreadedScrollingTree::waitForScrollingTreeCommit): Deleted.
        (WebCore::ThreadedScrollingTree::applyLayerPositions): Deleted.
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        * page/scrolling/nicosia/ScrollingCoordinatorNicosia.cpp:
        (WebCore::ScrollingCoordinatorNicosia::commitTreeState):

2020-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        Use static initialized Lock instead of LazyNeverDestroyed<Lock>
        https://bugs.webkit.org/show_bug.cgi?id=211010

        Reviewed by Mark Lam.

        WTF::Lock can be static-initialized, so no need to use LazyNeverDestroyed<Lock>.

        * Modules/webgpu/WebGPUDevice.cpp:
        (WebCore::WebGPUDevice::instancesMutex):
        * Modules/webgpu/WebGPUPipeline.cpp:
        (WebCore::WebGPUPipeline::instancesMutex):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::instancesMutex):
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::instancesMutex):

2020-04-25  Darin Adler  <darin@apple.com>

        [Cocoa] Deal with another round of Xcode upgrade checks
        https://bugs.webkit.org/show_bug.cgi?id=211027

        Reviewed by Alexey Proskuryakov.

        * WebCore.xcodeproj/project.pbxproj: Bump the upgrade check version.

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Prepare to remove automatic URL->String conversion operators
        https://bugs.webkit.org/show_bug.cgi?id=211007

        Reviewed by Darin Adler.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::requestFromInfo):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::urlString const):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::fetch):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::create):
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::stringValueForMSAA const):
        * bindings/IDLTypes.h:
        (WebCore::IDLString::isNullValue):
        * bindings/js/CachedScriptSourceProvider.h:
        (WebCore::CachedScriptSourceProvider::CachedScriptSourceProvider):
        * bindings/js/JSDOMConvertStrings.h:
        (WebCore::JSConverter<IDLDOMString>::convert):
        (WebCore::Converter<IDLUSVString>::convert):
        (WebCore::JSConverter<IDLUSVString>::convert):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::callInWorld):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateCursorElement):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::customCSSText const):
        (WebCore::CSSImageValue::createDeprecatedCSSOMWrapper const):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeFontFaceSrcURI):
        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/ExtensionStyleSheets.cpp:
        (WebCore::createExtensionsStyleSheet):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        (WebCore::ScriptElement::executeClassicScript):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readWebArchive):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::formAction const):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::canLoadURL const):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::shouldLoadLink):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::canLoadURL const):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterToken):
        * inspector/InspectorAuditResourcesObject.cpp:
        (WebCore::InspectorAuditResourcesObject::getResources):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildArrayForGroupings):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::responseReceived):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildObjectForCachedResource):
        (WebCore::InspectorNetworkAgent::willSendRequest):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::connectToWorkerInspectorProxy):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::didFailLoading):
        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::getInitializationInfo):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresources const):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::clientRedirectDestinationForHistory const):
        (WebCore::DocumentLoader::serverRedirectDestinationForHistory const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::createWindow):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::currentItemShouldBeReplaced const):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded):
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::checkFormForMixedContent const):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::shouldScheduleNavigation const):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::addResource):
        (WebCore::ApplicationCache::resourceForRequest):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):
        (WebCore::ApplicationCacheGroup::didFinishLoadingEntry):
        (WebCore::ApplicationCacheGroup::didFailLoadingEntry):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::shouldLoadResourceFromApplicationCache):
        (WebCore::ApplicationCacheHost::getApplicationCacheFallbackResource):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup):
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::findInMemoryCacheGroup const):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::cacheGroupDestroyed):
        (WebCore::ApplicationCacheStorage::cacheGroupMadeObsolete):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::deleteCacheForOrigin):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        (WebCore::ArchiveResourceCollection::addResource):
        (WebCore::ArchiveResourceCollection::archiveResourceForURL):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::didAddClient):
        (WebCore::CachedCSSStyleSheet::checkNotify):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::cachedResource const):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy const):
        (WebCore::CachedResourceLoader::notifyFinished):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::didAddClient):
        (WebCore::CachedXSLStyleSheet::checkNotify):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::checkOrEnableIfNeeded const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::setLocation):
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        * page/Location.cpp:
        (WebCore::Location::reload):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::retrieveResourcesForProperties):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::shouldIgnoreHost):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner):
        (WebCore::SecurityPolicy::isBaseURLSchemeAllowed):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::assetURL const):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::writeBlobToFilePath):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::platformLazyInit):
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI const):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::scope const):
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::hash const):
        (WebCore::ServiceWorkerRegistrationKey::isMatching const):
        * workers/service/context/ServiceWorkerDebuggable.cpp:
        (WebCore::ServiceWorkerDebuggable::ServiceWorkerDebuggable):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2020-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add vertical-align: baseline support
        https://bugs.webkit.org/show_bug.cgi?id=211024

        Reviewed by Antti Koivisto.

        Adjust the padding with the baseline offset when the cell is baseline aligned (as opposed to the initial value of 'middle').

        Test: fast/layoutformattingcontext/table-basic-row-vertical-align-baseline.html

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Cell::setBaselineOffset):
        (WebCore::Layout::TableGrid::Cell::baselineOffset const):

2020-04-25  Darin Adler  <darin@apple.com>

        Move URL to use StringView when returning substrings of the URL
        https://bugs.webkit.org/show_bug.cgi?id=210431

        Reviewed by Anders Carlsson.

        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::matchURLs): Removed unneeded calls to hasQuery.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith): Use hasCredentials.
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::redirect): Use hasCredentials.
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::isValidURLBasedPaymentMethodIdentifier): Use hasCredentials.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::createYouTubeURL): Take StringView.
        (WebCore::queryKeysAndValues): Take StringView.
        (WebCore::processAndCreateYouTubeURL): Use auto since URL pieces are
        now returned as StringView.
        (WebCore::YouTubePluginReplacement::youTubeURLFromAbsoluteURL):
        Use StringView and makeString rather than StringBuilder.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::resourceName): Use queryWithLeadingQuestionMark.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::internalLinkElement const):
        Use StringView.

        * dom/Document.cpp:
        (WebCore::Document::setURL): Use setHostAndPort.

        * dom/Element.cpp:
        (WebCore::Element::findAnchorElementForLink): Update since
        fragmentIdentifier returns StringView.

        * dom/TreeScope.cpp: Added a comment.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments): Update since
        lastPathComponent returns a StringView. Also got rid of some strange
        use of AtomString that was not necessary and used WTFMove more.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Update since
        lastPathComponent returns a StringView.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::attachmentTitleForDisplay const):
        Use makeString instead of StringBuilder, and StringView instead of
        String for name and extension values.

        * html/HTMLPlugInElement.cpp:
        (WebCore::pluginReplacementForType): Update since lastPathComponent
        returns a StringView.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments): Update since
        fragmentIdentifier returns a StringView.

        * html/URLUtils.h: Changed many functions to take a StringView, changed
        various other functions to call toString, since the underlying URL
        function now returns a StringView. Updated names since "pass" is now
        "password".
        (WebCore::countASCIIDigits): Added. Replaces unusual function
        named parsePortFromStringPosition because we can use StringView now
        and so don't need such an unusual function.

        * loader/AdClickAttribution.cpp:
        (WebCore::AdClickAttribution::parseConversionRequest): Use hasCredentials.
        Also removed unnecessary use of ASCIILiteral that hurts performance
        a tiny bit.
        (WebCore::AdClickAttribution::urlForTesting const): Use makeString
        instead of StringBuilder.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::validateCrossOriginRedirectionURL): Use hasCredentials.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest): Use hasCredentials.

        * loader/FormSubmission.cpp:
        (WebCore::appendMailtoPostFormDataToURL): Update since query returns
        StringView.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument): Use equalRespectingNullity on
        fragment identifiers to preserve behavior, since at this time
        StringView == StringView does not respect nullity, but String == String does.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::createFileURL): Use fileURLWithFileSystemPath.

        * loader/appcache/ManifestParser.cpp:
        (WebCore::manifestPath): Return a StringView.
        (WebCore::parseManifest): Use StringView.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::calculateItemInCollection const): Update since
        fragmentIdentifer returns a StringView.
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::splitFragmentIdentifierFromRequestURL): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFragment): Ditto.
        (WebCore::FrameView::scrollToFragmentInternal): Updated log message.

        * page/History.cpp:
        (WebCore::History::stateObjectAdded): Updated for URL::password name change
        and to use the new stringWithoutQueryOrFragmentIdentifier rather than the
        old equalIgnoringQueryAndFragment.

        * page/Location.cpp:
        (WebCore::Location::href const): Use removeCredentials.
        (WebCore::Location::port const): Streamlined.
        (WebCore::Location::pathname const): Use an ASCIILiteral.
        (WebCore::Location::search const): Use queryWithLeadingQuestionMark.
        (WebCore::Location::hash const): Use fragmentIdentifierWithLeadingNumberSign.
        (WebCore::Location::setPort): Use parseUInt16.

        * page/UserContentURLPattern.cpp: Coding style tweaks.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::appendFileExtensionIfNecessary):
        Use contains instead of reverseFind to check for a period in the filename.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Updated since lastPathComponent is a StringView.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::convertToInternalProtocol): Updated to use makeString since
        setProtocol takes a StringView.

        * platform/network/ResourceHandleInternal.h: Renamed m_pass to m_password
        and call password instead of pass.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::removeCredentials): Use removeCredentials.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection): Updated for m_password
        name change.
        (WebCore::ResourceHandle::willSendRequest): Updated for m_password and
        password name changes.
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication): Ditto.

        * platform/network/curl/CurlProxySettings.cpp:
        (WebCore::CurlProxySettings::setUserPass): Updated for setPassword name change.
        (WebCore::createProxyUrl): Use hasCredentials, updated for password name change.
        * platform/network/curl/CurlProxySettings.h:
        (WebCore::CurlProxySettings::password const): Updated for password name change.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Updated for
        m_password name change.
        (WebCore::ResourceHandle::getCredential): Ditto.
        (WebCore::ResourceHandle::willSendRequest): Updated for m_password and
        password name changes.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection): Updated for m_password
        and setPassword name changes.
        (WebCore::ResourceHandle::willSendRequest): Ditto.
        (WebCore::ResourceHandle::tryHandlePasswordBasedAuthentication): Ditto.

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::createSoupURI const): Updated for password name change.
        * platform/network/soup/URLSoup.cpp:
        (WebCore::soupURIToURL): Updated for setPassword name change.

        * platform/win/PasteboardWin.cpp:
        (WebCore::writeURL): Updated since lastPathComponent returns a StringView.
        (WebCore::filesystemPathFromUrlOrTitle): Ditto.
        (WebCore::Pasteboard::write): Ditto.

        * style/StyleBuilderState.cpp:
        (WebCore::Style::BuilderState::createFilterOperations): Updated since
        fragmentIdentifier returns a StringView.

        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::port const): Streamlined.
        (WebCore::WorkerLocation::pathname const): Use an ASCIILiteral.
        (WebCore::WorkerLocation::search const): Use queryWithLeadingQuestionMark.
        (WebCore::WorkerLocation::hash const): Use fragmentIdentifierWithLeadingNumberSign.

        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::ServiceWorkerRegistrationKey):
        Updated for hasFragmentIdentifier name change.

        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::topOriginURL): Simplified code to set port.
        * workers/service/server/SWServer.cpp:
        (WebCore::originURL): Ditto.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open): Updated for setPassword name change.

2020-04-25  Chris Fleizach  <cfleizach@apple.com>

        AX: Improve tracking of Element* pointers in AXObjectCache with WeakHashSet
        https://bugs.webkit.org/show_bug.cgi?id=210879

        Reviewed by Daniel Bates.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:

2020-04-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] KeyframeEffect should ensure its target remains alive
        https://bugs.webkit.org/show_bug.cgi?id=211019

        Reviewed by Daniel Bates.

        Test: webanimations/keyframe-effect-target-kept-alive.html

        Make KeyframeEffect::m_target a RefPtr so that assigning an element to effect.target guarantees that element
        is kept alive even if there are no other references to that element.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::KeyframeEffect):
        (WebCore::KeyframeEffect::setTarget):
        * animation/KeyframeEffect.h:

2020-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Cleanup TableFormattingContext::layoutInFlowContent
        https://bugs.webkit.org/show_bug.cgi?id=211023

        Reviewed by Sam Weinig.

        Move some code to dedicated functions.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForCells):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        (WebCore::Layout::TableFormattingContext::initializeDisplayBoxToBlank const): Deleted.
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForRows): Deleted.
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::cellHeigh const):
        (WebCore::Layout::TableFormattingContext::Geometry::computedColumnWidth const):
        (WebCore::Layout::TableFormattingContext::Geometry::tableCellHeightAndMargin const): Deleted.

2020-04-25  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r260247.
        warning: unused parameter ‘foo’ [-Wunused-parameter]

        No new tests, no new behaviors.

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

2020-04-24  Chris Dumez  <cdumez@apple.com>

        [iOS] Unable to sign up on twitter.com
        https://bugs.webkit.org/show_bug.cgi?id=211003
        <rdar://problem/58804852>

        Reviewed by Darin Adler.

        This is similar to the bug we had on nytimes.com and that was fixed in
        r258767. However, instead of a 'resize' event, it is a 'change' event
        on a MediaQueryList that is getting twitter.com in a bad state.

        The issue is that when we home out of Safari, SpringBoard takes does
        a snapshot sequence at various sizes / orientations and this causes
        many JS events to get fired (e.g. 'resize', 'orientationchange',
        'change', ...), which can get some sites in a bad state. To address
        the issue, we now prevent firing of ALL JS events during the
        SpringBoard snapshot, instead of merely preventing the 'resize' ones.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.h:
        (WebCore::Page::shouldFireEvents const):
        (WebCore::Page::setShouldFireEvents):
        (WebCore::Page::shouldFireResizeEvents const): Deleted.
        (WebCore::Page::setShouldFireResizeEvents): Deleted.

2020-04-24  Saam Barati  <sbarati@apple.com>

        Return BigInt32 whenever we can
        https://bugs.webkit.org/show_bug.cgi?id=210922

        Reviewed by Yusuke Suzuki.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readBigInt):

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] allThreads registration is racy with allThreads unregistration
        https://bugs.webkit.org/show_bug.cgi?id=210995
        <rdar://problem/61609690>

        Reviewed by Keith Miller.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformCollectCPUData):

2020-04-24  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make some more adjustments to TextManipulationController's paragraph boundary heuristic
        https://bugs.webkit.org/show_bug.cgi?id=210993
        <rdar://problem/61571299>

        Reviewed by Tim Horton.

        Adjust the heuristic added in r260583 to account for a few more common scenarios where we currently consider
        text as a part of the same paragraph. This can lead to many issues during text manipulation where text is moved
        between these elements, when it should not be.

        The new scenarios include block and inline-block links, as well as button elements.

        Test: TextManipulation.StartTextManipulationTreatsInlineBlockLinksAndButtonsAsParagraphs

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

        Additionally rename "paragraph boundary element" to "item boundary element", to avoid colliding with the
        existing notion of paragraph boundaries in editing code.

2020-04-24  Christopher Reid  <chris.reid@sony.com>

        [Win] Bundle Inspector Resources in Release builds
        https://bugs.webkit.org/show_bug.cgi?id=210942

        Reviewed by Fujii Hironori.

        * CMakeLists.txt:

2020-04-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure calling Web Animations APIs override future CSS Animations style properties
        https://bugs.webkit.org/show_bug.cgi?id=210988

        Reviewed by Dean Jackson.

        The CSS Animations Level 2 spec specifies how the Web Animations APIs and the CSS Animations style
        properties should interact in https://drafts.csswg.org/css-animations-2/#animations. This patch
        implements the specified behavior and this is reflected by progress on the relevant WPT tests.

        The gist of this change is that once a Web Animations API is called on an animation created using
        CSS Animations, any changes made to related CSS Animations style properties on the target element
        will be ignored so that the overrides applied via the Web Animations API remain in effect.

        For instance, calling pause() or play() in a way that changes the playback state of the CSS Animation
        will mean that future changes to the CSS animation-play-state property are ignored.

        To do this we make more IDL properties and methods use dedicated methods to distinguish between the
        bindings entry-point and internal usage of the same methods to integrate the behavior only when the
        API itself is being used.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::getBindingsTiming const): Ensure we flush styles when animation.effect.getTiming()
        is called.
        (WebCore::AnimationEffect::getBindingsComputedTiming const): Ensure we flush styles when
        animation.effect.getComputedTiming() is called.
        (WebCore::AnimationEffect::bindingsUpdateTiming): Notify the associated CSSAnimation object, if any, when
        animation.effect.updateTiming() is called such that the CSSAnimation may apply the relevant overrides.
        * animation/AnimationEffect.h:
        * animation/AnimationEffect.idl:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation): Only apply new values of CSS Animations style
        properties if there are no overrides for them resulting from calling related Web Animations APIs.
        (WebCore::CSSAnimation::bindingsPlay): Mark animation-play-state as overridden if play() is called.
        (WebCore::CSSAnimation::bindingsPause): Mark animation-play-state as overridden if pause() is called.
        (WebCore::CSSAnimation::setBindingsEffect): Mark all animation style properties, except for animation-name
        and animation-play-state as overridden if animation.effect is set.
        (WebCore::CSSAnimation::setBindingsStartTime): Mark animation-play-state as overridden if animation.startTime
        is set.
        (WebCore::CSSAnimation::bindingsReverse): Mark animation-play-state as overridden if reverse() is called.
        (WebCore::CSSAnimation::effectTimingWasUpdatedUsingBindings): Mark each CSS property associated with a key
        found on the timing object passed to animation.effect.updateTiming() as overridden.
        (WebCore::CSSAnimation::effectKeyframesWereSetUsingBindings): Mark animation-timing-function as overridden
        if animation.effect.setKeyframes() is called.
        * animation/CSSAnimation.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::bindingsStartTime const):
        (WebCore::DeclarativeAnimation::setBindingsStartTime):
        (WebCore::DeclarativeAnimation::startTime const): Deleted.
        (WebCore::DeclarativeAnimation::setStartTime): Deleted.
        * animation/DeclarativeAnimation.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getBindingsKeyframes): Ensure we flush styles when animation.effect.getKeyframes()
        is called.
        (WebCore::KeyframeEffect::getKeyframes): Only use the CSS-originated animation path if we don't have JS-originated
        keyframes.
        (WebCore::KeyframeEffect::setBindingsKeyframes): Notify the associated CSSAnimation object, if any, when
        animation.effect.setKeyframes() is called such that the CSSAnimation may apply the relevant overrides.
        (WebCore::KeyframeEffect::processKeyframes): Correctly return early if part of the processing yields an exception.
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setBindingsEffect):
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::bindingsReverse):
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::bindingsEffect const):
        (WebCore::WebAnimation::bindingsStartTime const):
        * animation/WebAnimation.idl:

2020-04-24  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: m_wrapper under HTMLMediaElement::setIsPlayingToWirelessTarget
        https://bugs.webkit.org/show_bug.cgi?id=210983
        <rdar://problem/61611994>

        Reviewed by Eric Carlson.

        The issue was that we were trying to fire a JS event as a result of ActiveDOMObject::stop()
        getting called, which is not allowed. To address the issue, we avoid firing the event if
        the context is already stopped.

        No new tests, already covered by:
        media/modern-media-controls/placard-support/placard-support-airplay-fullscreen.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setIsPlayingToWirelessTarget):

2020-04-24  Tim Horton  <timothy_horton@apple.com>

        iPad: "Pocket City" interaction does not work with trackpad
        https://bugs.webkit.org/show_bug.cgi?id=210985
        <rdar://problem/62273077>

        Reviewed by Wenson Hsieh.

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

2020-04-24  Tomoki Imai  <Tomoki.Imai@sony.com>

        [OpenSSL] Implement WebCrypto APIs for HMAC
        https://bugs.webkit.org/show_bug.cgi?id=210902

        Reviewed by Don Olmstead.

        Support WebCrypto HMAC sign/verify with OpenSSL.
        The design and some functions are inherited from the other ports.

        * crypto/openssl/CryptoAlgorithmHMACOpenSSL.cpp:
        (WebCore::HMACAlgorithm): Added. Helper function to map CryptoAlgorithmIdentifier to OpenSSL EVP_MD type.
        (WebCore::calculateSignature): Added. Helper function to calculate the signature for sign/verify.
        (WebCore::CryptoAlgorithmHMAC::platformSign): Implemented, mostly same as the other ports.
        (WebCore::CryptoAlgorithmHMAC::platformVerify): Implemented, mostly same as the other ports.
        * crypto/openssl/CryptoAlgorithmRegistryOpenSSL.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Added CryptoAlgorithmHMAC support.
        * crypto/openssl/OpenSSLCryptoUniquePtr.h: Added specialized unique_ptrs for EVP_MD_CTX and EVP_PKEY.
        (WebCore::OpenSSLCryptoPtrDeleter<EVP_MD_CTX>::operator() const):
        (WebCore::OpenSSLCryptoPtrDeleter<EVP_PKEY>::operator() const):

2020-04-24  Brian Burg  <bburg@apple.com>

        Web Automation: timeout underneath Automation.evaluateJavaScriptFunction in Selenium test frame_switching_tests.py::testShouldNotBeAbleToDoAnythingTheFrameIsDeletedFromUnderUs[Safari]
        https://bugs.webkit.org/show_bug.cgi?id=210162
        <rdar://problem/60561009>

        Reviewed by Devin Rousso.

        * page/DOMWindow.h: Expose DOMWindow::{register, unregister}Observer.

2020-04-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take first in-flow table-row baseline into account when computing cell baseline
        https://bugs.webkit.org/show_bug.cgi?id=210972

        Reviewed by Antti Koivisto.

        Check if the cell has a nested table and use its first row as the baseline for the cell (unless there's an IFC before).

        Test: fast/layoutformattingcontext/table-basic-row-baseline-with-nested-table.html

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::usedBaselineForCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Row::setBaselineOffset):
        (WebCore::Layout::TableGrid::Row::baselineOffset const):

2020-04-24  Antti Koivisto  <antti@apple.com>

        Nullptr crash in objc_msgSend under WebCore::genericFamily
        https://bugs.webkit.org/show_bug.cgi?id=210911
        <rdar://problem/61510208>

        Reviewed by Geoffrey Garen.

        Speculative fix.

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

        Test that CTFontDescriptorCopyAttribute is really returning CFStringRef.
        Also explicitly return String from lambda to clarify lifetimes.

2020-04-24  Simon Fraser  <simon.fraser@apple.com>

        Move some post-renderingUpdate code into WebCore
        https://bugs.webkit.org/show_bug.cgi?id=210952

        Reviewed by Antti Koivisto.

        Factor some code called by the various DrawingArea subclasses into Page::finalizeRenderingUpdate(),
        with some flags to control behavior that differs between drawing areas.

        ScrollingCoordinator::commitTreeStateIfNeeded() is a no-op for RemoteScrollingCoordinator so
        it's fine to always call it.

        * page/Page.cpp:
        (WebCore::Page::passiveTouchEventListenerRectsForTesting):
        (WebCore::Page::finalizeRenderingUpdate):
        * page/Page.h:

2020-04-24  Adrian Perez de Castro  <aperez@igalia.com>

        Add missing HTMLNames:: namespace prefix to usage of liTag object

        Unreviewed build fix.

        No new tests needed.

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

2020-04-23  Rob Buis  <rbuis@igalia.com>

        Make CachedResourceLoader more conforming to Fetch specification
        https://bugs.webkit.org/show_bug.cgi?id=210925

        Reviewed by Alex Christensen.

        Make CachedResourceLoader more conforming to Fetch specification
        by fixing links, re-ordering steps to match main fetch [1] and do
        early exit code paths earlier.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage): adjust to parameter change.
        (WebCore::CachedResourceLoader::canRequest): replace CachedResourceRequest param with ResourceLoaderOptions.
        (WebCore::CachedResourceLoader::prepareFetch): fix comment.
        (WebCore::CachedResourceLoader::requestResource): re-order.
        * loader/cache/CachedResourceLoader.h:

2020-04-23  Simon Fraser  <simon.fraser@apple.com>

        Move the storage of DisplayID from Chrome to Page
        https://bugs.webkit.org/show_bug.cgi?id=210943

        Reviewed by Tim Horton.

        The less Chrome knows about Frames and Documents the better. At some point Page is going
        to talk to ScrollingCoordinator in this callback too.

        * page/Chrome.cpp:
        (WebCore::Chrome::displayID const):
        (WebCore::Chrome::windowScreenDidChange):
        * page/Chrome.h:
        * page/Page.cpp:
        (WebCore::Page::windowScreenDidChange):
        * page/Page.h:
        (WebCore::Page::displayID const):

2020-04-23  Simon Fraser  <simon.fraser@apple.com>

        EventHandler::selectCursor() has broken resize over coordinate conversion code
        https://bugs.webkit.org/show_bug.cgi?id=210778

        Reviewed by Zalan Bujtas.

        EventHandler::selectCursor() appeared to make a local hit-test point from window
        to content coordinates, which made no sense, but this happened to work because 
        RenderLayer::hitTestLayer() set the HitTestResult localPoint to a global point
        if you hit the resizer.

        Clean up this mess by having all resizer-related geometry queries be in local coordinates.

        As a bonus, actually set the cursor to a resize cursor when over the resizer.

        Test: fast/events/cursors/mouse-cursor-over-resizer.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::handleMousePressEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::offsetFromResizeCorner const):
        (WebCore::RenderLayer::isPointInResizeControl const):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestResizerInFragments const):
        * rendering/RenderLayer.h:

2020-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation does not account for text in fully clipped containers
        https://bugs.webkit.org/show_bug.cgi?id=210940
        <rdar://problem/61137648>

        Reviewed by Tim Horton.

        Allow text manipulation to find both text in `visibility: hidden;` containers, as well as text in fully clipped
        overflow containers. In both cases, renderers exist for these nodes, but TextIterator ignores them by default.
        If these containers become visible in the future, we don't want to skip out on performing text manipulation on
        them.

        An alternative would be to detect when any element that has not undergone text manipulation has become visible
        (i.e. no longer clipped by an ancestor), but this is likely more complicated (and possibly less performant) than
        just eagerly extracting text from hidden containers, once they gain renderers.

        TextManipulation.StartTextManipulationIncludesFullyClippedText

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::ParagraphContentIterator):
        (WebCore::TextManipulationController::didCreateRendererForElement):
        (WebCore::TextManipulationController::scheduleObservationUpdate):
        (WebCore::TextManipulationController::scheduleObservartionUpdate): Deleted.

        While I'm here, also rename scheduleObservartionUpdate to scheduleObservationUpdate.

        * editing/TextManipulationController.h:

2020-04-23  Alex Christensen  <achristensen@webkit.org>

        Allow credentials for same-origin css mask images
        https://bugs.webkit.org/show_bug.cgi?id=210895
        <rdar://problem/60093888>

        Reviewed by Brent Fulgham.

        Test: http/tests/security/css-mask-image-credentials.html

        r230006 went a step too far in restricting what is allowed with css mask images.
        Basic authentication credentials should be allowed with such requests as they are in Chrome and Firefox.
        This can be seen by doing run-webkit-httpd then opening http://127.0.0.1:8000/security/css-mask-image-credentials.html
        In Chrome and Firefox you'll see it forward to a page that has a blue square.
        In Safari before this change you'll see a yellow square and a basic authentication prompt.
        In Safari after this change you'll see the same blue square you see in Chrome and Firefox.

        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingImage):

2020-04-23  Alex Christensen  <achristensen@webkit.org>

        Jesus Calling app needs more WebSQL
        https://bugs.webkit.org/show_bug.cgi?id=210889
        <rdar://problem/61795507>

        Reviewed by Chris Dumez.

        Manually verified this fixes the issue in the radar.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowInstanceFunctionOpenDatabaseBody):

2020-04-23  Rob Buis  <rbuis@igalia.com>

        Move applyUserAgentIfNeeded calls to a more central place
        https://bugs.webkit.org/show_bug.cgi?id=209587

        Reviewed by Darin Adler.

        Make main resource loads stop calling applyUserAgentIfNeeded
        and instead do it in the CachedResourceLoader.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createRequest):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateReferrerAndOriginHeaders):
        (WebCore::CachedResourceRequest::updateUserAgentHeader):
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders): Deleted.
        * loader/cache/CachedResourceRequest.h:

2020-04-23  Kenneth Russell  <kbr@chromium.org>

        [WebGL2] Update texture packing code for software uploads from DOM
        https://bugs.webkit.org/show_bug.cgi?id=209515

        Reviewed by Dean Jackson.

        Update the bottommost DOM-to-texture packing code in
        GraphicsContextGLOpenGL and FormatConverter to full WebGL 2.0
        capability. Reorganize some code to make side-by-side comparisons
        easier with other WebGL 2.0 implementations.

        Added NEEDS_PORT comments to areas in the calling code which need
        particular attention in subsequent patches. Roughly two more
        patches will be needed on top of this one in order to fully pass
        the associated conformance tests.

        Fix a bug in the non-ANGLE ENABLE(WEBGL2) code path which
        accidentally disabled WebGL entirely in this configuration.

        Covered by the WebGL 2.0 conformance tests.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::readPixels):
        (WebCore::WebGLRenderingContextBase::texImageSource2D):
        (WebCore::WebGLRenderingContextBase::texImage2DImpl):
        (WebCore::WebGLRenderingContextBase::texImage2D):
        (WebCore::WebGLRenderingContextBase::texSubImage2DImpl):
        (WebCore::WebGLRenderingContextBase::texSubImage2D):
        (WebCore::WebGLRenderingContextBase::validateTexFuncData):
        (WebCore::WebGLRenderingContextBase::getPackPixelStoreParams const):
        (WebCore::WebGLRenderingContextBase::getUnpackPixelStoreParams const):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/FormatConverter.cpp:
        (WebCore::convertFloatToHalfFloat):
        (WebCore::float>):
        (WebCore::uint8_t>):
        (WebCore::uint16_t>):
        (WebCore::int8_t>):
        (WebCore::int16_t>):
        (WebCore::uint32_t>):
        (WebCore::int32_t>):
        (WebCore::FormatConverter::convert):
        * platform/graphics/FormatConverter.h:
        (WebCore::FormatConverter::FormatConverter):
        * platform/graphics/GraphicsContextGL.h:
        (WebCore::GraphicsContextGL::hasAlpha):
        (WebCore::GraphicsContextGL::hasColor):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.cpp:
        (WebCore::GraphicsContextGLOpenGL::texImage2DResourceSafe):
        (WebCore::GraphicsContextGLOpenGL::computeFormatAndTypeParameters):
        (WebCore::GraphicsContextGLOpenGL::computeImageSizeInBytes):
        (WebCore::GraphicsContextGLOpenGL::PixelStoreParams::PixelStoreParams):
        (WebCore::GraphicsContextGLOpenGL::packImageData):
        (WebCore::GraphicsContextGLOpenGL::extractImageData):
        (WebCore::GraphicsContextGLOpenGL::extractTextureData):
        (WebCore::TexelBytesForFormat):
        (WebCore::GraphicsContextGLOpenGL::packPixels):
        * platform/graphics/opengl/GraphicsContextGLOpenGL.h:

2020-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a heuristic for text manipulation to treat some list items as paragraph boundaries
        https://bugs.webkit.org/show_bug.cgi?id=210915
        <rdar://problem/61907080>

        Reviewed by Megan Gardner.

        Adds a mechanism to allow text manipulation to emit an item containing the current list of text manipulation
        tokens early, in the case where the paragraph content iterator crosses the boundary of an element that encloses
        a paragraph. Currently, the only enclosing paragraph element will be list items that have `display: block;`,
        which we can take as a hint that the text in these list items should be vended as separate items, rather than as
        tokens in a single item.

        This may be extended in the future to other situations by adjusting logic in `isEnclosingParagraphElement`.

        Test: TextManipulation.StartTextManipulationBreaksParagraphInBetweenListItems

        * editing/TextManipulationController.cpp:
        (WebCore::TextManipulationController::observeParagraphs):

2020-04-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for basic baseline align inside a table row
        https://bugs.webkit.org/show_bug.cgi?id=210918

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-basic-row-baseline-align.html

        The minimum height of a row is defined as the height of an hypothetical linebox containing
        the cells originating in the row. In this hypothetical linebox, we use baseline alignment to
        align the cells vertically.
        Use these vertically aligned cells to compute the final row height.  

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::verticalMarginBorderAndPadding const):
        (WebCore::Display::Box::setVerticalPadding):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        * layout/tableformatting/TableFormattingContext.h:

2020-04-23  Sihui Liu  <sihui_liu@apple.com>

        TextManipulationController should set range of paragraph using token's positions
        https://bugs.webkit.org/show_bug.cgi?id=210866
        <rdar://problem/60646283>

        Reviewed by Wenson Hsieh.

        Set the range of paragraph using positions of first token and last token in the paragraph because:
        1. Accurate range makes token matching in TextManipulationController::replace() easier, as TextIterator could 
        visit different positions with different ranges or different conditions. For example, in our previous 
        implementation, start of a paragraph can be set as the first visible position of document, while position of 
        first token is after that. Then in replace(), TextManipulationController may extract a word before the position 
        of first token and return error. See added test TextManipulation.CompleteTextManipulationCorrectParagraphRange.
        2. TextManipulationController can handle fewer content and this is less error-prone. For example, svg elements 
        before/after the paragraph text will not be identified as tokens [] in a paragraph now. See updated API tests 
        for example.

        New test: TextManipulation.CompleteTextManipulationCorrectParagraphRange

        * editing/TextManipulationController.cpp:
        (WebCore::ParagraphContentIterator::moveCurrentNodeForward): m_currentNodeForFindingInvisibleContent should not 
        be advanced if it is already at the end.
        (WebCore::containsOnlyHTMLSpaces):
        (WebCore::TextManipulationController::observeParagraphs):Set the paragraph start as the position of the first 
        token and end as the position of last token. If the paragraph is split with <br>, the end will be extended to 
        position of <br> so that we can add this node back later; otherwise, <br> can be removed after original 
        text of paragraph is removed in TextManipulationController::replace(). Also, stop identifying spaces as tokens 
        because non-text Node can emit spaces.
        (WebCore::TextManipulationController::replace): Only identify tokens from content with meaningful text.

2020-04-23  Chris Dumez  <cdumez@apple.com>

        [ Mac wk2 ] imported/w3c/web-platform-tests/notifications/event-onclose.html is flaky failing.
        https://bugs.webkit.org/show_bug.cgi?id=209483
        <rdar://problem/60830377>

        Reviewed by Geoff Garen.

        Align garbage collection of Notification JS wrapper with the specification:
        - https://notifications.spec.whatwg.org/#garbage-collection [1]

        In particular, the following changes were made:
        1. Instead of using the legacy setPendingActivity() / unsetPendingActivity(), override
           ActiveDOMObject::virtualHasPendingActivity() to implement the behavior documented
           in the specification.
        2. Keep the wrapper alive as long as the notification is showing and as long as there
           are relevant event listeners, as per [1]. Previously, we failed to check for event
           listeners, which was suboptimal.
        3. Update the constructor to queue a task on the event loop in order to show the
           notification asynchronously, instead of relying on a SuspendableTimer for this
           purpose. Previously, the JS wrapper could get collected between construction and
           the notification getting shown, which was leading to the test flakiness.

        No new tests, unskipped existing test.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::finalize):
        (WebCore::Notification::dispatchShowEvent):
        (WebCore::Notification::dispatchClickEvent):
        (WebCore::Notification::dispatchCloseEvent):
        (WebCore::Notification::dispatchErrorEvent):
        (WebCore::Notification::eventListenersDidChange):
        (WebCore::Notification::virtualHasPendingActivity const):
        * Modules/notifications/Notification.h:

2020-04-23  Andres Gonzalez  <andresg_22@apple.com>

        Correction for patch 397001.
        https://bugs.webkit.org/show_bug.cgi?id=210914

        Reviewed by Chris Fleizach.

        - No need to check for isEmpty when retrieving the primary screen size,
        as pointed out by Darin Adler in bug 210760, patch 397001.
        - Added some helpful AXLOGing.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper primaryScreenHeight]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2020-04-23  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::WebCoreTestSupport target
        https://bugs.webkit.org/show_bug.cgi?id=210867

        Unreviewed build fix.

        Make the dependencies explicit.

        * CMakeLists.txt:

2020-04-22  Simon Fraser  <simon.fraser@apple.com>

        In the scrolling tree, separate wheel event handling from layer updating
        https://bugs.webkit.org/show_bug.cgi?id=210899

        Reviewed by Antti Koivisto.

        Working towards webkit.org/b/210884, it needs to be possible to have the scrolling
        tree handle a wheelEvent and update its internal state about scroll positions, but not
        immediately map those scroll positions onto CALayers.

        To achieve this, have ScrollingTreeScrollingNode::currentScrollPositionChanged()
        not call applyLayerPositions(), or notifyRelatedNodesAfterScrollPositionChange() which
        just applies layer positions on related nodes.

        Instead, at the end of wheel event handling, do a full scrolling tree traversal and update
        all the layer positions there.

        Delegated scrolling (iOS) still needs notifyRelatedNodesAfterScrollPositionChange() so it
        can't be removed.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::applyLayerPositions):
        (WebCore::ScrollingTree::applyLayerPositionsInternal):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::currentScrollPositionChanged):

2020-04-23  Charlie Turner  <cturner@igalia.com>

        [EME][CDMProxy] Sort key status array lexicographically by key IDs
        https://bugs.webkit.org/show_bug.cgi?id=210659

        Reviewed by Xabier Rodriguez-Calvar.

        This is required by section 6.1 of
        https://www.w3.org/TR/encrypted-media/.

        Test: encrypted-media/clearkey-keystatuses.https.html

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::KeyStore::add): We could use a set here and keep it
        sorted by design, but this is more complexity than needed. The
        store has for practical purposes an upper limit of 2
        items. Sorting such a vector lowers to either a noop or a swap. So
        the simple approach here wins over using some kind of self-sorting
        set structure. I also considered only sorting on-demand, since it
        only has to appear sorted from the perspective of JS, we could
        sort the array in convertToJSKeyStatusVector. However, that is
        semantically a const method, so sorting here felt too surprising.
        * platform/encryptedmedia/CDMProxy.h:
        (WebCore::Key::operator<): Add a lexicographic comparator to
        Key.

2020-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] excessive wakeups/polling due to gdk_frame_clock_begin_updating
        https://bugs.webkit.org/show_bug.cgi?id=210561

        Reviewed by Žan Doberšek.

        The problem is that we are destroying the display refresh monitor from the frame clock update callback, and GTK
        schedules another update from the callback itself in some cases, which ends up happening forever. We were
        assuming that destroying the window of immediately destroy the frame clock as well, but the paint source idle
        keeps a reference of the frame clock. At the end of the source idle callback the source is scheduled again,
        taking a new reference. We need to call gdk_frame_clock_end_updating() to ensure the idle is not scheduled
        again.

        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp:
        (WebCore::DisplayRefreshMonitorGtk::~DisplayRefreshMonitorGtk): Disconnect the update signal and call
        gdk_frame_clock_end_updating().
        (WebCore::DisplayRefreshMonitorGtk::requestRefreshCallback): Toplevel window should always have a frame clock,
        so remove the early return and add an assert instead.

2020-04-23  Youenn Fablet  <youenn@apple.com>

        getDisplayMedia is not respecting aspect ratio with max constraints
        https://bugs.webkit.org/show_bug.cgi?id=210858

        Reviewed by Eric Carlson.

        Add computation of exact frame size to respect aspect ratio in DisplayCaptureSourceCocoa::updateFrameSize.
        Refactor code to have one source class DisplayCaptureSourceCocoa and specific capturer for screen and window.
        This simplifies code and allows reusing DisplayCaptureSourceCocoa with a mock capturer.
        Update mock code to use DisplayCaptureSourceCocoa.

        Tests: fast/mediastream/getDisplayMedia-max-constraints.html
               fast/mediastream/getDisplayMedia-max-constraints1.html
               fast/mediastream/getDisplayMedia-max-constraints2.html
               fast/mediastream/getDisplayMedia-max-constraints3.html

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices):
        (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices):
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID):
        (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::create):
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::capabilities):
        (WebCore::DisplayCaptureSourceCocoa::settings):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        (WebCore::DisplayCaptureSourceCocoa::stopProducingData):
        (WebCore::DisplayCaptureSourceCocoa::updateFrameSize):
        (WebCore::DisplayCaptureSourceCocoa::emitFrame):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::setLogger):
        (WebCore::DisplayCaptureSourceCocoa::Capturer::logChannel const):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::createForMockDisplayCapturer):
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        * platform/mediastream/mac/ScreenDisplayCapturerMac.h: Added.
        * platform/mediastream/mac/ScreenDisplayCapturerMac.mm: Added.
        (WebCore::ScreenDisplayCapturerMac::create):
        (WebCore::ScreenDisplayCapturerMac::ScreenDisplayCapturerMac):
        (WebCore::ScreenDisplayCapturerMac::~ScreenDisplayCapturerMac):
        (WebCore::ScreenDisplayCapturerMac::createDisplayStream):
        (WebCore::ScreenDisplayCapturerMac::start):
        (WebCore::ScreenDisplayCapturerMac::stop):
        (WebCore::ScreenDisplayCapturerMac::generateFrame):
        (WebCore::ScreenDisplayCapturerMac::startDisplayStream):
        (WebCore::ScreenDisplayCapturerMac::commitConfiguration):
        (WebCore::ScreenDisplayCapturerMac::displayWasReconfigured):
        (WebCore::ScreenDisplayCapturerMac::displayReconfigurationCallBack):
        (WebCore::ScreenDisplayCapturerMac::newFrame):
        (WebCore::ScreenDisplayCapturerMac::screenCaptureDeviceWithPersistentID):
        (WebCore::ScreenDisplayCapturerMac::screenCaptureDevices):
        * platform/mediastream/mac/WindowDisplayCapturerMac.h: Added.
        * platform/mediastream/mac/WindowDisplayCapturerMac.mm: ddedAdded.
        (WebCore::WindowDisplayCapturerMac::create):
        (WebCore::WindowDisplayCapturerMac::WindowDisplayCapturerMac):
        (WebCore::WindowDisplayCapturerMac::windowImage):
        (WebCore::WindowDisplayCapturerMac::generateFrame):
        (WebCore::WindowDisplayCapturerMac::windowCaptureDeviceWithPersistentID):
        (WebCore::WindowDisplayCapturerMac::windowCaptureDevices):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockDisplayCapturer::MockDisplayCapturer):
        (WebCore::MockDisplayCapturer::start):
        (WebCore::MockDisplayCapturer::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:
        (isType):

2020-04-22  Simon Fraser  <simon.fraser@apple.com>

        Make it possible to eagerly apply scrolling tree state from the main thread
        https://bugs.webkit.org/show_bug.cgi?id=210883

        Reviewed by Tim Horton.

        Work towards fixing webkit.org/b/210884: at the beginning of Page::updateRendering(),
        we are going to need to pull the current state of the scrolling tree back to the
        main thread, so that JS-exposed scroll offsets match scrolling tree state.

        To this end, expose a scrolling tree traversal function from ScrollingTree, which
        takes the lock and then calls a visitor function for each node. For scrolling nodes,
        the visitor gets the scroll position and optional layout viewport origin. These
        match the data passed back currently via AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll().

        The new code is not called yet.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::synchronizeStateFromScrollingTree):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::synchronizeStateFromScrollingTree):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::traverseScrollingTree):
        (WebCore::ScrollingTree::traverseScrollingTreeRecursive):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::currentScrollPositionChanged): applyLayerPositions() calls these two
        functions, so just call it instead.

2020-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260535.
        https://bugs.webkit.org/show_bug.cgi?id=210897

        Causes crashes in WK1 (Requested by smfr on #webkit).

        Reverted changeset:

        "[ Mac wk2 ] imported/w3c/web-platform-tests/notifications
        /event-onclose.html is flaky failing."
        https://bugs.webkit.org/show_bug.cgi?id=209483
        https://trac.webkit.org/changeset/260535

2020-04-22  Darin Adler  <darin@apple.com>

        [Cocoa] Build with UChar as char16_t even in builds that use Apple's internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=210845

        Reviewed by Anders Carlsson.

        * Configurations/WebCore.xcconfig: Move ICU-configuring macros to Platform.h.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect): Get rid of an obsolete cast to unsigned to work
        around uint16_t not being treated as a number by makeString.

        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle const):
        Remove deprecated U_EA_COUNT.

2020-04-22  Andres Gonzalez  <andresg_22@apple.com>

        Add logging to core accessibility.
        https://bugs.webkit.org/show_bug.cgi?id=210564
        <rdar://problem/61863477>

        Reviewed by Simon Fraser and Chris Fleizach.

        - Use LOG and LOG_WITH_STREAM macros instead of WTF::Logger directly.
        - Added logging of AXCoreObjects.

        * accessibility/AXLogger.cpp:
        (WebCore::AXLogger::AXLogger):
        (WebCore::AXLogger::~AXLogger):
        (WebCore::AXLogger::log):
        (WebCore::operator<<):
        * accessibility/AXLogger.h:
        * accessibility/AccessibilityObjectInterface.h:

2020-04-22  Daniel Bates  <dabates@apple.com>

        Support toggling debug overlay for touch action region and editable element region independent from non-fast scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=210774

        Reviewed by Dean Jackson.

        Break out the touch action region and editable element region debug overlays into their own
        flags that can be passed to Settings::setVisibleDebugOverlayRegions() to toggle these overlays,
        respectively. Currently both of these overlays piggyback on whether the engine will paint the
        non-fast scrollable region.

        * page/SettingsBase.h: Add two more enumerators.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::invalidateEventRegion const): Update the code to be more precise now that
        we can target the update paint overlay hack to when we are painting touch-action or editable
        element regions.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintDebugOverlays): Condition the painting of touch action region
        on one enumerator and the painting of editable element region on another.
        (WebCore::RenderLayerBacking::paintContents): Update the code to be more precise.

2020-04-22  Chris Dumez  <cdumez@apple.com>

        [ Mac wk2 ] imported/w3c/web-platform-tests/notifications/event-onclose.html is flaky failing.
        https://bugs.webkit.org/show_bug.cgi?id=209483
        <rdar://problem/60830377>

        Reviewed by Geoffrey Garen.

        Align garbage collection of Notification JS wrapper with the specification:
        - https://notifications.spec.whatwg.org/#garbage-collection [1]

        In particular, the following changes were made:
        1. Instead of using the legacy setPendingActivity() / unsetPendingActivity(), override
           ActiveDOMObject::virtualHasPendingActivity() to implement the behavior documented
           in the specification.
        2. Keep the wrapper alive as long as the notification is showing and as long as there
           are relevant event listeners, as per [1]. Previously, we failed to check for event
           listeners, which was suboptimal.
        3. Update the constructor to queue a task on the event loop in order to show the
           notification asynchronously, instead of relying on a SuspendableTimer for this
           purpose. Previously, the JS wrapper could get collected between construction and
           the notification getting shown, which was leading to the test flakiness.

        No new tests, unskipped existing test.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::finalize):
        (WebCore::Notification::dispatchShowEvent):
        (WebCore::Notification::dispatchClickEvent):
        (WebCore::Notification::dispatchCloseEvent):
        (WebCore::Notification::dispatchErrorEvent):
        (WebCore::Notification::eventListenersDidChange):
        (WebCore::Notification::virtualHasPendingActivity const):
        * Modules/notifications/Notification.h:

2020-04-22  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::WebCoreTestSupport target
        https://bugs.webkit.org/show_bug.cgi?id=210867

        Reviewed by Michael Catanzaro.

        Add the WebKit::WebCoreTestSupport target. Modify WebCoreTestSupport to only
        have a dependency on WebCore if WebCore is built as a shared library.

        * CMakeLists.txt:

2020-04-22  Eric Carlson  <eric.carlson@apple.com>

        fast/events/event-handler-detached-document-dispatchEvent.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=210859
        <rdar://problem/62072269>

        Reviewed by Jer Noble.

        A media session may not have a Page when it is created, so register with the MediaUsageManager
        in inActiveDocumentChanged if necessary.

        No new tests, fixes an existing test.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::~MediaElementSession):
        (WebCore::MediaElementSession::addedMediaUsageManagerSessionIfNecessary):
        (WebCore::MediaElementSession::inActiveDocumentChanged):
        (WebCore::MediaElementSession::updateMediaUsageIfChanged):
        * html/MediaElementSession.h:

2020-04-22  Antti Koivisto  <antti@apple.com>

        REGRESSION (r249160): Deleting newline after pasting text ending in a newline results in a discontinuity
        https://bugs.webkit.org/show_bug.cgi?id=210677
        <rdar://problem/61954169>

        Reviewed by Zalan Bujtas.

        Test: fast/text/delete-line-break-in-pre.html

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::dirtyRange):

        r249160 changed InlineTextBox end offset to be consistently first-past-end.
        The code here that updates lineBreakPos needs to take this into account too.

2020-04-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Coordinate "update animations and send events" procedure across multiple timelines
        https://bugs.webkit.org/show_bug.cgi?id=202109
        <rdar://problem/59470821>

        Reviewed by Dean Jackson.

        So far, although we did manage multiple animation timelines per document, we mostly operated
        under the assumption that there really was a single timeline. In this patch we make the
        "update animations and send events" procedure, which is central to the lifecycle of animations,
        work with multiple timelines such that a single microtask checkpoint is performed even with multiple
        timelines, whereas we would perform one per timeline before. To do this, we move much of the logic
        DocumentTimeline::updateAnimationsAndSendEvents() to DocumentTimelinesController where each step is
        run across each timeline, rather than running all steps for each timeline one after the other,
        respecting the single microtask checkpoint in the middle of the process.

        To minimize code churn at this stage, we still keep a fair bit of logic in DocumentTimeline and,
        while we remove updateAnimationsAndSendEvents(), internalUpdateAnimationsAndSendEvents() and
        updateCurrentTime(), we expose three methods that allow to run the pre-flight sequence in
        documentWillUpdateAnimationsAndSendEvents(), collect pending events in
        prepareForPendingAnimationEventsDispatch() and run the post-flight sequence
        in documentDidUpdateAnimationsAndSendEvents().

        None of the logic changes, this is just moving code around. In the future, more patches will move
        code from DocumentTimeline up to DocumentTimelinesController such that events are enqueued there,
        and animation scheduling as well. But this already lets us pass a new test that used to flakily
        reject promises in the WPT test web-animations/timing-model/timelines/update-and-send-events.html.

        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::relevantAnimations const):
        (WebCore::AnimationTimeline::allAnimations const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::documentWillUpdateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::documentDidUpdateAnimationsAndSendEvents):
        (WebCore::DocumentTimeline::prepareForPendingAnimationEventsDispatch):
        (WebCore::DocumentTimeline::updateCurrentTime): Deleted.
        (WebCore::DocumentTimeline::updateAnimationsAndSendEvents): Deleted.
        (WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents): Deleted.
        * animation/DocumentTimeline.h:
        * animation/DocumentTimelinesController.cpp:
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        * animation/DocumentTimelinesController.h:
        * animation/WebAnimationTypes.h:
        * dom/Document.cpp:
        (WebCore::Document::ensureTimelinesController):

2020-04-22  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Add a quirk to keep gizmodo videos visible when playing in fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=210857
        <rdar://problem/58875327>

        Reviewed by Jer Noble.

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

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Drive-by fix: always
        set the layer name to make debugging in release builds easier.

        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm:
        (WebCore::VideoLayerManagerObjC::setVideoLayer): Ditto.

        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustForSiteSpecificQuirks const): Change `display:none` into
        `display:block` on div with class "instream-native-video--mobile" when child video
        element with id "vjs_video_3_html5_api" is in fullscreen.

2020-04-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, commit updated xcfilelist files.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2020-04-22  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r259116.

        Broke login flow on some apple-internal sites
        (rdar://problem/61905262)

        Reverted changeset:

        "Move applyUserAgentIfNeeded calls to a more central place"
        https://bugs.webkit.org/show_bug.cgi?id=209587
        https://trac.webkit.org/changeset/259116

2020-04-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Introduce TableFormattingContext::computeAndDistributeExtraVerticalSpace
        https://bugs.webkit.org/show_bug.cgi?id=210830

        Reviewed by Antti Koivisto.

        Add a dedicated function to compute preferred heights for the table rows.
        This is in preparation for the 2 pass layout required to finalize row height. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedPadding const):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraVerticalSpace):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::positionTableCells): Deleted.
        * layout/tableformatting/TableFormattingContext.h:

2020-04-22  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Several fixes to GdkEvent APIs for GTK4
        https://bugs.webkit.org/show_bug.cgi?id=210856

        Reviewed by Carlos Garcia Campos.

        No tests needed.

        Several fixes to GdkEvent API changes for GTK4. This is far from
        complete but it allows the GTK4 build to move forward. When
        possible, add GTK3-API replacements to GtkVersioning.h to avoid
        #ifdef blocks, where the API changes are too complex, just #ifdef.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::wallTimeForEvent):
        * platform/gtk/GtkVersioning.h:
        (gdk_event_get_state):
        (gdk_event_get_coords):
        (gdk_event_get_root_coords):
        (gdk_event_is_scroll_stop_event):
        (gdk_event_get_scroll_direction):
        (gdk_event_get_scroll_deltas):
        (gdk_event_get_button):
        (gdk_keymap_get_for_display): Deleted as it was wrong and
        it's not needed.
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        (WebCore::PlatformKeyboardEvent::getCurrentModifierState):
        (WebCore::PlatformKeyboardEvent::modifiersContainCapsLock):
        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2020-04-22  Youenn Fablet  <youenn@apple.com>

        Simplify SWServerWorker::whenActivated logic
        https://bugs.webkit.org/show_bug.cgi?id=210795

        Reviewed by Alex Christensen.

        Improve logging and ensure whenActivated can be called whatever the worker state is.
        No change of behavior.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::didFinishInstall):
        (WebCore::SWServer::fireInstallEvent):
        (WebCore::SWServer::fireActivateEvent):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::whenActivated):

2020-04-22  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] Youtube 'live stream'/H264 URLs fail to play, VP8/9 URLs play OK
        https://bugs.webkit.org/show_bug.cgi?id=209119

        Reviewed by Xabier Rodriguez-Calvar.

        The fix consists of removing the initial avoiding of seeking and just
        issuing the proper segment instead of seeking (seeks in GStreamer can't
        be done before prerolling anyway). Appsrc doesn't make easy to emit our
        own custom segment, so what I did was to use a segment fixer probe to
        modify the original [0, infinity] segment issued by appsrc and use
        a [startTime, stopTime] with proper values depending on the seek target
        and rate.

        Covered by existing tests.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::checkShouldDelaySeek): Don't hold seeks on startup, when changing from READY to PAUSED.
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek): Refactored seek delay condition. Also, don't do a regular
        gst_element_seek() for initial seeks, just proceed with a special case in that situation.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (initialSeekSegmentFixerProbe): Probe that fixes the segment.
        (webKitMediaSrcPrepareInitialSeek): Behave much like a regular seek, but also compute the right GstSegment, install
        the segment fixer probe and setReadyForMoreSamples() on the SourceBufferPrivates.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:

2020-04-21  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Test IDLs and stubs
        https://bugs.webkit.org/show_bug.cgi?id=209859

        Reviewed by Dean Jackson and Youenn Fablet.

        WebXR testing is hard as it might involve interaction with actual
        devices. That's why the WebXR testing
        API (https://immersive-web.github.io/webxr-test-api/) was
        proposed. In fact, all the current WebXR tests from
        web-platform-tests are using that testing API. This new testing
        API supplements navigator.xr and is accessed through
        navigator.xr.test.

        In order not to expose the API to the web we're adding the XRTest
        interface to Internals instead. The mapping from internals.xrTest to
        navigator.xr.test happens in the WPT code.

        We're adding the required IDLs and very basic (mostly empty)
        implementations for testing methods. We're adding testing
        infrastructure, adding tests make no sense for this change.

        * CMakeLists.txt: Added new files.
        * DerivedSources.make: Ditto.
        * Modules/webxr/NavigatorWebXR.h: Export API to be used in testing code.
        * Modules/webxr/WebXRSystem.h: Export ::from and ::xr methods.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/WebCoreBuiltinNames.h: Added some new macros.
        * testing/FakeXRBoundsPoint.h: Added.
        * testing/FakeXRBoundsPoint.idl: Added.
        * testing/FakeXRButtonStateInit.h: Added.
        * testing/FakeXRButtonStateInit.idl: Added.
        * testing/FakeXRInputSourceInit.h: Added.
        * testing/FakeXRInputSourceInit.idl: Added.
        * testing/FakeXRRigidTransformInit.h: Added.
        * testing/FakeXRRigidTransformInit.idl: Added.
        * testing/FakeXRViewInit.h: Added.
        * testing/FakeXRViewInit.idl: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::xrTest): Added WebXRTest to Internals.
        * testing/Internals.h: Added xrTest() accessor.
        * testing/Internals.idl: Added xrTest attribute.
        * testing/WebFakeXRDevice.cpp: Added.
        (WebCore::WebFakeXRDevice::setViews):
        (WebCore::WebFakeXRDevice::disconnect):
        (WebCore::WebFakeXRDevice::setViewerOrigin):
        (WebCore::WebFakeXRDevice::clearViewerOrigin):
        (WebCore::WebFakeXRDevice::simulateVisibilityChange):
        (WebCore::WebFakeXRDevice::setBoundsGeometry):
        (WebCore::WebFakeXRDevice::setFloorOrigin):
        (WebCore::WebFakeXRDevice::clearFloorOrigin):
        (WebCore::WebFakeXRDevice::simulateResetPose):
        (WebCore::WebFakeXRDevice::simulateInputSourceConnection):
        * testing/WebFakeXRDevice.h: Added.
        * testing/WebFakeXRDevice.idl: Added.
        * testing/WebFakeXRInputController.cpp: Added.
        (WebCore::WebFakeXRInputController::setHandedness):
        (WebCore::WebFakeXRInputController::setTargetRayMode):
        (WebCore::WebFakeXRInputController::setProfiles):
        (WebCore::WebFakeXRInputController::setGripOrigin):
        (WebCore::WebFakeXRInputController::clearGripOrigin):
        (WebCore::WebFakeXRInputController::setPointerOrigin):
        (WebCore::WebFakeXRInputController::disconnect):
        (WebCore::WebFakeXRInputController::reconnect):
        (WebCore::WebFakeXRInputController::startSelection):
        (WebCore::WebFakeXRInputController::endSelection):
        (WebCore::WebFakeXRInputController::simulateSelect):
        (WebCore::WebFakeXRInputController::setSupportedButtons):
        (WebCore::WebFakeXRInputController::updateButtonState):
        * testing/WebFakeXRInputController.h: Added.
        * testing/WebFakeXRInputController.idl: Added.
        * testing/WebXRTest.cpp: Added.
        (WebCore::WebXRTest::simulateDeviceConnection const):
        (WebCore::WebXRTest::simulateUserActivation):
        (WebCore::WebXRTest::disconnectAllDevices):
        * testing/WebXRTest.h: Added.
        (WebCore::WebXRTest::create):
        * testing/WebXRTest.idl: Added.
        * testing/XRSimulateUserActivationFunction.h: Added.
        * testing/XRSimulateUserActivationFunction.idl: Ditto.

2020-04-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a supporting object for Document to manage timelines
        https://bugs.webkit.org/show_bug.cgi?id=210817

        Reviewed by Dean Jackson.

        Add a new DocumentTimelinesController object owned by Document to manage DocumentTimelines created for it. This simple piece of refactoring is the first
        step towards a coordinated "update animations and send events" procedure where all timelines are updated at once with a single microtask checkpoint instead
        of each timeline running one.

        No change in behavior, so no new tests.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::~DocumentTimeline):
        (WebCore::DocumentTimeline::controller const):
        (WebCore::DocumentTimeline::detachFromDocument):
        * animation/DocumentTimeline.h:
        * animation/DocumentTimelinesController.cpp: Added.
        (WebCore::DocumentTimelinesController::DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::~DocumentTimelinesController):
        (WebCore::DocumentTimelinesController::addTimeline):
        (WebCore::DocumentTimelinesController::removeTimeline):
        (WebCore::DocumentTimelinesController::detachFromDocument):
        (WebCore::DocumentTimelinesController::updateAnimationsAndSendEvents):
        * animation/DocumentTimelinesController.h: Added.
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::ensureTimelinesController):
        (WebCore::Document::updateAnimationsAndSendEvents): Deleted.
        (WebCore::Document::addTimeline): Deleted.
        (WebCore::Document::removeTimeline): Deleted.
        * dom/Document.h:
        (WebCore::Document::timelinesController const):
        * page/Page.cpp:
        (WebCore::Page::updateRendering):

2020-04-21  Cathie Chen  <cathiechen@igalia.com>

        REGRESSION (r254790): No longer get smooth scrolling on music.apple.com
        https://bugs.webkit.org/show_bug.cgi?id=210634

        Reviewed by Darin Adler.

        The page uses the access of "scrollBehavior" in CSSStyleDeclaration as the support of scroll-behavior.
        If supported, it will use scroll-behavior. Otherwise, it will perform a JS smooth scroll.
        Currently, "scrollBehavior" is still available when CSSOMViewSmoothScrolling is off, only the value
        "smooth" is invalidated.
        In order to fix this, CSSStyleDeclaration will take account of CSSOMViewSmoothScrolling in Settings.
        This patch also tries to provide an interface which let flags in Settings can enable/disable a property.
        However, it is not complete, for there are some scenarios that Settings isn't accessible. By adding
        "settings-flag" to CSSProperties.json, it would be effective to control the property access in CSSStyleDeclaration.

        Tests: fast/scrolling/scroll-behavior-invalidate-if-disabled.html
               fast/scrolling/scroll-behavior-validate-if-enabled.html

        * css/CSSProperties.json:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::getCSSPropertyIDFromJavaScriptPropertyName):
        (WebCore::CSSStyleDeclaration::namedItem):
        (WebCore::CSSStyleDeclaration::setNamedItem):
        (WebCore::CSSStyleDeclaration::supportedPropertyNames const):
        * css/makeprop.pl:
        (addProperty):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::cssPropertyID):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::collectProperties const):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Canonicalize JSBigInt generated by structured-cloning by calling rightTrim
        https://bugs.webkit.org/show_bug.cgi?id=210816

        Reviewed by Keith Miller and Darin Adler.

        Let's assume that the serialized data is slightly different. JSBigInt's internal representation has various invariants. For example, if JSBigInt is zero, it should have zero length,
        and its sign should be false. But there are various ways of representing zero JSBigInt in serialization format. For example, we can set sign = true, length = 0. Current code strongly
        assumes that dumped data meets this JSBigInt's internal invariant. This is not good: for example, if we add a new invariant into JSBigInt, already serialized data would not meet this
        invariant.
        In this patch, we call `JSBigInt::rightTrim(VM&)` when finishing JSBigInt deserialization. This means that we canonicalize JSBigInt when finishing creation, and this makes this serialization
        format free from JSBigInt's internal invariants. This makes JSBigInt serialization/deserialization robust. And we also add lengthInUint64 == 0 path not to call rightTrim when it is zero.
        This makes deserialization robust for zero-length & signed corrupted JSBigInt zero.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpBigInt32Data):
        (WebCore::CloneDeserializer::readBigInt):

2020-04-21  Peng Liu  <peng.liu6@apple.com>

        platform/mac/media/audio-session-category-audio-autoplay.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=210826

        Reviewed by Jer Noble.

        For WebKitLegacy, AudioSession::setCategory() needs to set the category when
        m_routingArbitrationClient is nullptr. This patch also fixes an error regarding
        setupArbitrationOngoing.

        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSession::setCategory):

2020-04-21  Peng Liu  <peng.liu6@apple.com>

        Fix MACCATALYST build failures
        https://bugs.webkit.org/show_bug.cgi?id=210815

        Reviewed by Tim Horton.

        No new tests, no functional change.

        * Configurations/FeatureDefines.xcconfig:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:

2020-04-19  Darin Adler  <darin@apple.com>

        [Cocoa] Use createNSArray in many more places that build NSArray objects from C++ collections
        https://bugs.webkit.org/show_bug.cgi?id=210702

        Reviewed by Alex Christensen.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityFlowToElements]): Use createNSArray.
        (-[WebAccessibilityObjectWrapper textRectsFromMarkers:withText:]): Ditto.
        (-[WebAccessibilityObjectWrapper rectsForSelectionRects:]): Deleted. Merged into
        the method above.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.h: Take const references
        instead of references when passing Path and FloatRect.
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray): Use createNSArray. Also use arrays on the stack
        to create NSDictionary rather than using NSMutableDictionary.
        (addChildToArray): Deleted.
        (convertToNSArray): Uses createNSArray. Rolled addChildToArray in.
        (-[WebAccessibilityObjectWrapperBase convertPathToScreenSpace:]): Take const
        reference instead of reference.
        (-[WebAccessibilityObjectWrapperBase convertRectToSpace:space:]): Ditto.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        Use createNSArray.
        * editing/cocoa/FontAttributesCocoa.mm:
        (WebCore::FontAttributes::createDictionary const): Ditto.
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot const): Ditto.
        * platform/cocoa/SearchPopupMenuCocoa.mm:
        (WebCore::saveRecentSearches): Ditto.
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::createNSDataArray const): Ditto.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceSessionFairPlayStreamingAVFObjC::updateLicense): Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::update): Ditto.
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::update): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::PlatformCAAnimationCocoa::setValues): Ditto.
        (WebCore::PlatformCAAnimationCocoa::setKeyTimes): Ditto.
        (WebCore::PlatformCAAnimationCocoa::setTimingFunctions): Ditto.

        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (WebCore::PlatformCAFilters::setFiltersOnLayer): Moved almost the whole
        function into a call to createNSArray. Removed the default case from
        the switch so we get a warning if we miss any filter operation types.

        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (WebCore::PlatformCALayerCocoa::setSublayers): Use createNSArray.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write): Ditto.
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::mediaSelectionOptions): Ditto.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::write): Ditto.
        * platform/mac/WebPlaybackControlsManager.mm:
        (mediaSelectionOptions): Ditto.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookies): Ditto.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Ditto.

        * platform/network/cocoa/WebCoreNSURLSession.h:
        Use the Objective-C type WebCoreNSURLSessionDataTask in the _dataTasks
        set rather than using CFTypeRef.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession dealloc]): Remove now-unneeded typecast.
        (-[WebCoreNSURLSession taskCompleted:]): Ditto.
        (-[WebCoreNSURLSession finishTasksAndInvalidate]): Use a more idiomatic
        form of capturing strongSelf in a lambda.
        (-[WebCoreNSURLSession invalidateAndCancel]): Updated the type on a
        local variable and removed now-unneeded typecast.
        (-[WebCoreNSURLSession getTasksWithCompletionHandler:]): Use RetainPtr
        to cut down on autorelease. Use createNSArray, taking advantage of the
        fact that it works on HashSet. Removed now-unneeded typecast.
        (-[WebCoreNSURLSession getAllTasksWithCompletionHandler:]): Ditto.
        (-[WebCoreNSURLSession dataTaskWithRequest:]): Remove now-unneeded typecast.
        (-[WebCoreNSURLSession dataTaskWithURL:]): Ditto.

2020-04-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        The visibilitychange event should bubble
        https://bugs.webkit.org/show_bug.cgi?id=210829

        Reviewed by Darin Adler.

        This change makes `visibilitychange` event bubble as per spec [1], aligning WebKit
        with Blink and Gecko. Also fixes broken spec link to `visibilityState` attribute.

        [1] https://w3c.github.io/page-visibility/#dfn-now-visible-algorithm (step 2)

        Test: fast/events/page-visibility-transition-test.html

        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::visibilityState const):

2020-04-21  Simon Fraser  <simon.fraser@apple.com>

        Composited layers are misplaced inside RTL overflow scroller with visible scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=210820

        Reviewed by Zalan Bujtas.

        RenderLayerBacking::computeParentGraphicsLayerRect() used renderBox.paddingBoxRectIncludingScrollbar()
        to position layers inside composited overflow scroll, but this is wrong if the RTL left-side
        scrollbar takes space.

        Fix by making some static functions that we can call from the various places that ask
        about box geometry, and using them.

        Test: compositing/scrolling/async-overflow-scrolling/position-inside-rtl-overflow.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowClipRect const):
        (WebCore::RenderBox::clipRect const):
        (WebCore::RenderBox::overflowClipRect): Deleted.
        (WebCore::RenderBox::clipRect): Deleted.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::overflowClipRectForChildLayers const):
        (WebCore::RenderBox::overflowClipRectForChildLayers): Deleted.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::scrollContainerLayerBox):
        (WebCore::clippingLayerBox):
        (WebCore::overflowControlsHostLayerBox):
        (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::clipBox): Deleted.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::overflowClipRect const):
        (WebCore::RenderTable::overflowClipRect): Deleted.
        * rendering/RenderTable.h:

2020-04-21  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] Overflow that's hidden on one axis is scrollable on that axis
        https://bugs.webkit.org/show_bug.cgi?id=210771
        <rdar://problem/62080331>

        Reviewed by Tim Horton.

        eventCanScrollContents() should check the presence of enabled scrollbars, like 
        ScrollAnimator::handleWheelEvent() does.

        Test: fast/scrolling/mac/async-scroll-overflow-hidden-on-one-axis.html

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::eventCanScrollContents const):

2020-04-21  Daniel Bates  <dabates@apple.com>

        [iOS] -_didFinishTextInteractionInTextInputContext should only zoom to reveal focused element if it changed
        https://bugs.webkit.org/show_bug.cgi?id=210697
        <rdar://problem/60997530>

        Reviewed by Wenson Hsieh.

        For now, add a comment about the return value of setFocusedElement: it returns
        whether focus was blocked. If focused wasn't blocked then it will return true
        even if the element wasn't actually focused. For example, it will return true
        for non-focusable elements: <input disabled>.

        I was tempted to fix setFocusedElement() to return true when it actually focused
        the element or if the element was already focused, but I decided to defer this
        until I audit the callers and run some tests.

        * dom/Document.h:

2020-04-21  Andres Gonzalez  <andresg_22@apple.com>

        Fix for remoteParentObject and platformWidget not being stored properly in the AXIsolatedObject attributes variant.
        https://bugs.webkit.org/show_bug.cgi?id=210809

        Reviewed by Chris Fleizach.

        Adding these properties to the AXIsolatedObject attributes variant as
        WeakPtr<void*> fails. So they are now cached as member variables.

        * accessibility/isolatedtree/AXIsolatedObject.cpp:
        (WebCore::AXIsolatedObject::initializeAttributeData):
        (WebCore::AXIsolatedObject::platformWidget const):
        * accessibility/isolatedtree/AXIsolatedObject.h:
        (WebCore::AXIsolatedObject::propertyValue const): Deleted.
        * accessibility/isolatedtree/mac/AXIsolatedObjectMac.mm:
        (WebCore::AXIsolatedObject::initializePlatformProperties):
        (WebCore::AXIsolatedObject::remoteParentObject const):

2020-04-20  Simon Fraser  <simon.fraser@apple.com>

        Horizontal overflow overlay scrollbar is misplaced in RTL
        https://bugs.webkit.org/show_bug.cgi?id=210673
        <rdar://problem/61950751>

        Reviewed by Antti Koivisto.
        
        Code for positioning RenderLayer overflow controls (scrollbars and scroll corner)
        was scattered across lots of different functions, making it hard to follow,
        and prone to bugs.

        Fix by making one source of truth, overflowControlsRects(), which computes
        rects for the two scrollbars, the "scroll corner" (the square in the corner which
        shows, only for non-overlay scrollbars, when both scrollbars or the resize control
        is visible), and the resize control which shows when style specifies the "resize" property.
        
        Call this function in all the places that need to know about overflow control
        geometry. RenderLayer::hitTestResizerInFragments() is a little tricky because it wants
        the resize control relative to the fragment rect; achieve this by computing the position
        of the resizer rect relative to the border box, then shifting it into position relative
        to the fragment bounds (which include border).

        Test: compositing/overflow/rtl-scrollbar-layer-positioning.html

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollCornerRect const):
        (WebCore::RenderLayer::overflowControlsRects const):
        (WebCore::RenderLayer::scrollbarOffset const):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::overflowControlsIntersectRect const):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::isPointInResizeControl const):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestResizerInFragments const):
        (WebCore::cornerStart): Deleted.
        (WebCore::cornerRect): Deleted.
        (WebCore::resizerCornerRect): Deleted.
        (WebCore::RenderLayer::scrollCornerAndResizerRect const): Deleted.
        (WebCore::RenderLayer::rectForHorizontalScrollbar const): Deleted.
        (WebCore::RenderLayer::rectForVerticalScrollbar const): Deleted.
        (WebCore::RenderLayer::verticalScrollbarStart const): Deleted.
        (WebCore::RenderLayer::horizontalScrollbarStart const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer const):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        (WebCore::RenderLayerBacking::paintContents):

2020-04-21  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed, reverting r260432.

        Broke WPE build

        Reverted changeset:

        "[WebXR] Test IDLs and stubs"
        https://bugs.webkit.org/show_bug.cgi?id=209859
        https://trac.webkit.org/changeset/260432

2020-04-21  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r256808): “A problem repeatedly occurred” when attempting to load https://bungalow.com/listings/bay-area
        https://bugs.webkit.org/show_bug.cgi?id=210801
        <rdar://problem/61658940>

        Reviewed by Antti Koivisto.

        Even though the page uses the 'async' attribute on the mapbox-gl.js script, deferring the execution of this
        script gets the page into a bad state, causing it to use a lot of CPU & memory until the process crashes.
        Since we don't have any other evidence of breakage from r256808 yet and since r256808 was a massive PLT
        progression, I am opting to add a quirk to disable the async script optimization on bungalow.com for now.

        * dom/Document.cpp:
        (WebCore::Document::shouldDeferAsynchronousScriptsUntilParsingFinishes const):
        * page/Quirks.cpp:
        (WebCore::Quirks::shouldBypassAsyncScriptDeferring const):
        * page/Quirks.h:
        * platform/RegistrableDomain.h:
        (WebCore::RegistrableDomain::operator== const):

2020-04-16  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Test IDLs and stubs
        https://bugs.webkit.org/show_bug.cgi?id=209859

        Reviewed by Dean Jackson and Youenn Fablet.

        WebXR testing is hard as it might involve interaction with actual
        devices. That's why the WebXR testing
        API (https://immersive-web.github.io/webxr-test-api/) was
        proposed. In fact, all the current WebXR tests from
        web-platform-tests are using that testing API. This new testing
        API supplements navigator.xr and is accessed through
        navigator.xr.test.

        In order not to expose the API to the web we're adding the XRTest
        interface to Internals instead. The mapping from internals.xrTest to
        navigator.xr.test happens in the WPT code.

        We're adding the required IDLs and very basic (mostly empty)
        implementations for testing methods. We're adding testing
        infrastructure, adding tests make no sense for this change.

        * CMakeLists.txt: Added new files.
        * DerivedSources.make: Ditto.
        * Modules/webxr/NavigatorWebXR.h: Export API to be used in testing code.
        * Modules/webxr/WebXRSystem.h: Export ::from and ::xr methods.
        * Sources.txt: Added new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/WebCoreBuiltinNames.h: Added some new macros.
        * testing/FakeXRBoundsPoint.h: Added.
        * testing/FakeXRBoundsPoint.idl: Added.
        * testing/FakeXRButtonStateInit.h: Added.
        * testing/FakeXRButtonStateInit.idl: Added.
        * testing/FakeXRInputSourceInit.h: Added.
        * testing/FakeXRInputSourceInit.idl: Added.
        * testing/FakeXRRigidTransformInit.h: Added.
        * testing/FakeXRRigidTransformInit.idl: Added.
        * testing/FakeXRViewInit.h: Added.
        * testing/FakeXRViewInit.idl: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::xrTest): Added WebXRTest to Internals.
        * testing/Internals.h: Added xrTest() accessor.
        * testing/Internals.idl: Added xrTest attribute.
        * testing/WebFakeXRDevice.cpp: Added.
        (WebCore::WebFakeXRDevice::setViews):
        (WebCore::WebFakeXRDevice::disconnect):
        (WebCore::WebFakeXRDevice::setViewerOrigin):
        (WebCore::WebFakeXRDevice::clearViewerOrigin):
        (WebCore::WebFakeXRDevice::simulateVisibilityChange):
        (WebCore::WebFakeXRDevice::setBoundsGeometry):
        (WebCore::WebFakeXRDevice::setFloorOrigin):
        (WebCore::WebFakeXRDevice::clearFloorOrigin):
        (WebCore::WebFakeXRDevice::simulateResetPose):
        (WebCore::WebFakeXRDevice::simulateInputSourceConnection):
        * testing/WebFakeXRDevice.h: Added.
        * testing/WebFakeXRDevice.idl: Added.
        * testing/WebFakeXRInputController.cpp: Added.
        (WebCore::WebFakeXRInputController::setHandedness):
        (WebCore::WebFakeXRInputController::setTargetRayMode):
        (WebCore::WebFakeXRInputController::setProfiles):
        (WebCore::WebFakeXRInputController::setGripOrigin):
        (WebCore::WebFakeXRInputController::clearGripOrigin):
        (WebCore::WebFakeXRInputController::setPointerOrigin):
        (WebCore::WebFakeXRInputController::disconnect):
        (WebCore::WebFakeXRInputController::reconnect):
        (WebCore::WebFakeXRInputController::startSelection):
        (WebCore::WebFakeXRInputController::endSelection):
        (WebCore::WebFakeXRInputController::simulateSelect):
        (WebCore::WebFakeXRInputController::setSupportedButtons):
        (WebCore::WebFakeXRInputController::updateButtonState):
        * testing/WebFakeXRInputController.h: Added.
        * testing/WebFakeXRInputController.idl: Added.
        * testing/WebXRTest.cpp: Added.
        (WebCore::WebXRTest::simulateDeviceConnection const):
        (WebCore::WebXRTest::simulateUserActivation):
        (WebCore::WebXRTest::disconnectAllDevices):
        * testing/WebXRTest.h: Added.
        (WebCore::WebXRTest::create):
        * testing/WebXRTest.idl: Added.
        * testing/XRSimulateUserActivationFunction.h: Added.
        * testing/XRSimulateUserActivationFunction.idl: Ditto.

2020-04-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Adapt to GtkIconTheme API changes
        https://bugs.webkit.org/show_bug.cgi?id=210745

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        GtkIconTheme changes in GTK and since we're no longer following
        the theme we can drop the missing image from the icon theme, so remove
        now unnecessary code.

        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::Image::loadPlatformResource): Directly load image from compiled
        GResource.
        (WebCore::loadResourceSharedBuffer): Deleted.
        (WebCore::loadMissingImageIconFromTheme): Deleted.

2020-04-21  Rob Buis  <rbuis@igalia.com>

        Exit early in FrameLoader::loadURL when redirecting to another frame
        https://bugs.webkit.org/show_bug.cgi?id=210751

        Reviewed by Geoffrey Garen.

        Exit early in FrameLoader::loadURL when redirecting to another frame, previously we were preparing
        request needlessly, doing it twice in case of frame redirecting. Also move some variables to
        where they are actually used.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/FrameLoader.h:

2020-04-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove PlatformMouseEventGtk
        https://bugs.webkit.org/show_bug.cgi?id=210743

        Reviewed by Adrian Perez de Castro.

        It's unused, we no longer create PlatformMouseEvent from a GdkEvent since WebKit2.

        * SourcesGTK.txt:
        * platform/PlatformMouseEvent.h:
        * platform/gtk/PlatformMouseEventGtk.cpp: Removed.

2020-04-21  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK4] Fix platform GDK includes
        https://bugs.webkit.org/show_bug.cgi?id=210746

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/PlatformDisplay.cpp: Wayland, X11, etc.
        platform includes changed path, so update accordingly.

2020-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes late February 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=210767

        Unreviewed build fix.

        No new tests needed.

        * css/MediaQueryListEvent.cpp: Add missing wtf/IsoMallocInlines.h header.
        * css/MediaQueryMatcher.cpp: Add missing MediaQueryListEvent.h header.
        * platform/graphics/FloatQuad.cpp: Add missing wtf/text/TextStream.h header.

2020-04-20  Ross Kirsling  <ross.kirsling@sony.com>

        Classes marked final should not use protected access specifier
        https://bugs.webkit.org/show_bug.cgi?id=210775

        Reviewed by Daniel Bates.

        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.h:
        * Modules/applepay/ApplePayValidateMerchantEvent.h:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.h:
        * Modules/webaudio/BiquadDSPKernel.h:
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * Modules/webxr/WebXRSession.h:
        * Modules/webxr/WebXRSystem.h:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibleSetValueEvent.h:
        * animation/CSSAnimation.h:
        * bindings/js/ReadableStream.h:
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_array.h:
        * css/CSSImageSetValue.h:
        * html/HTMLKeygenElement.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLQuery.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLSampler.h:
        * html/canvas/WebGLSync.h:
        * html/canvas/WebGLTransformFeedback.h:
        * html/canvas/WebGLUniformLocation.h:
        * html/shadow/TextControlInnerElements.h:
        * inspector/InspectorStyleSheet.h:
        * inspector/WebInjectedScriptManager.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/PageConsoleClient.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/nicosia/ScrollingTreeOverflowScrollProxyNode.h:
        * platform/audio/AudioBus.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/NamedImageGeneratedImage.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.h:
        * platform/graphics/ca/win/PlatformCAAnimationWin.h:
        * platform/graphics/cg/ImageDecoderCG.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:
        * platform/graphics/iso/ISOVTTCue.h:
        * platform/graphics/win/ImageDecoderDirect2D.h:
        * platform/mediastream/mac/AVCaptureDeviceManager.h:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderRuby.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * svg/SVGTextPathElement.h:
        * workers/WorkerConsoleClient.h:
        * worklets/Worklet.h:

2020-04-20  Peng Liu  <peng.liu6@apple.com>

        Fix build failures when video fullscreen and picture-in-picture is disabled
        https://bugs.webkit.org/show_bug.cgi?id=210777

        Reviewed by Eric Carlson.

        Wrap video fullscreen and picture-in-picture related code with "#if ENABLE(VIDEO_PRESENTATION_MODE)".

        * Configurations/FeatureDefines.xcconfig:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoLayerGravity):
        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h:
        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm:
        (WebCore::VideoLayerManagerObjC::setVideoLayer):
        (WebCore::VideoLayerManagerObjC::requiresTextTrackRepresentation const):
        (WebCore::VideoLayerManagerObjC::syncTextTrackBounds):
        (WebCore::VideoLayerManagerObjC::setTextTrackRepresentation):

2020-04-20  Nikos Mouchtaris  <nmouchtaris@apple.com>

        WK2 Quicklook for attachments
        https://bugs.webkit.org/show_bug.cgi?id=208891

        Reviewed by Darin Adler.

        Added to HTMLAttachmentElement to have member image representing
        QuickLook thumbnail. Added code to render this image on both iOS and Mac.

        No new tests. Test will be added after additions to test infrastructure.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateThumbnailRepresentation):
        Allow setting of thumbnail member.
        * html/HTMLAttachmentElement.h:
        * rendering/RenderThemeIOS.mm:
        Added rendering of image member of attachment element.
        (WebCore::RenderAttachmentInfo::RenderAttachmentInfo):
        (WebCore::paintAttachmentIcon):
        (WebCore::RenderThemeIOS::paintAttachment):
        * rendering/RenderThemeMac.mm:
        (WebCore::paintAttachmentIcon):

2020-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Add more structure-cloning tests for BigInt
        https://bugs.webkit.org/show_bug.cgi?id=210765

        Reviewed by Mark Lam.

        This patch adds safe-guard for future JSC primitive extension for structure-cloning.
        We throw DataCloneError if we see unknown primitive value, which can happen if JSC
        extends primitive value.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImmediate):
        (WebCore::CloneSerializer::dumpIfTerminal):

2020-04-20  Simon Fraser  <simon.fraser@apple.com>

        Scrolling with background-attachment: fixed needs to trigger repaints
        https://bugs.webkit.org/show_bug.cgi?id=193893
        <rdar://problem/47587017>

        Reviewed by Dean Jackson.

        When scrolling an overflow scroll which has "background-atttachment:fixed" in the content,
        the node will have non-empty synchronous scrolling reasons. In this case we need to
        send the scroll to the main thread, and trigger a repaint on scroll.

        If handling the wheel event on the scrolling thread determines that the scroll must be sent
        to the main thread, EventDispatcher::wheelEvent() does so in the callback function.

        To trigger the repaint, RenderLayer::scrollTo() asks the composited layers backing whether
        the node has synchronous scrolling reasons; this is implemented by asking the scrolling
        coordinator.

        Test: scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-overflow-repaint.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::hasSynchronousScrollingReasons const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::hasSynchronousScrollingReasons const):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::ScrollingStateScrollingNode::hasSynchronousScrollingReasons const):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::currentScrollPositionChanged):
        * page/scrolling/mac/ScrollingTreeOverflowScrollingNodeMac.mm:
        (WebCore::ScrollingTreeOverflowScrollingNodeMac::handleWheelEvent): Return SendToMainThread if this node
        needs to do synchronous scrolling.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::needsRepaintOnCompositedScroll const):
        (WebCore::RenderLayerBacking::setRequiresOwnBackingStore):
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        * rendering/RenderLayerBacking.h:

2020-04-20  Fujii Hironori  <Hironori.Fujii@sony.com>

        MSVC: LayoutUnits.h(248): warning C4245: 'argument': conversion from 'const int' to 'size_t', signed/unsigned mismatch
        https://bugs.webkit.org/show_bug.cgi?id=210592

        Reviewed by Zalan Bujtas.

        * layout/LayoutUnits.h:
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::emptyValue):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::isDeletedValue):
        Use std::numeric_limits<size_t>::max() for empty and deleted
        values instead of WebCore::intMinForLayoutUnit.

2020-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Text manipulation sometimes fails to replace text in title elements
        https://bugs.webkit.org/show_bug.cgi?id=210750
        <rdar://problem/61066103>

        Reviewed by Tim Horton and Darin Adler.

        Internal clients using WebKit text manipulation APIs currently fail to replace text in title and option elements
        in the case where text manipulation has been completed with more than one token. These are elements for which we
        want to replace the entire text as a single token, even if the text manipulation client ends up breaking the
        token into multiple chunks.

        To handle this case, pull the `title || option` check out into a helper function, and consult it when completing
        text manipulation in the case where the manipulation data lacks either start or end positions. If
        `canPerformTextManipulationByReplacingEntireTextContent` is true and there are multiple replacement tokens,
        allow ourselves to process the replacement by combining the replacement tokens into a space-separated string.

        Test: TextManipulation.CompleteTextManipulationShouldReplaceTextContentWithMultipleTokens

        * editing/TextManipulationController.cpp:
        (WebCore::canPerformTextManipulationByReplacingEntireTextContent):
        (WebCore::TextManipulationController::observeParagraphs):
        (WebCore::TextManipulationController::replace):

2020-04-20  Andres Gonzalez  <andresg_22@apple.com>

        The rect for the primary screen should be retrieved on the main thread.
        https://bugs.webkit.org/show_bug.cgi?id=210760

        Reviewed by Chris Fleizach.

        - Call to screenRectForPrimaryScreen is dispatched to main thread.
        - This value is cached since it is very unlikely to change in normal
        usage and this would avoid hitting the main thread repeatedly.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper primaryScreenHeight]):

2020-04-15  Sergio Villar Senin  <svillar@igalia.com>

        [WebXR] Update WebXRSession and WebXRSystem interfaces
        https://bugs.webkit.org/show_bug.cgi?id=210553

        Reviewed by Žan Doberšek.

        Update WebXRSession and WebXRSystem to the latest changes in the specs.

        * Modules/webxr/WebXRSession.idl: Added 3 new events.
        * Modules/webxr/WebXRSystem.idl: Interface name is XR not XRSystem.
        * bindings/js/WebCoreBuiltinNames.h: Renamed macro.
        * dom/EventNames.h: Added 3 new events.

2020-04-20  Chris Dumez  <cdumez@apple.com>

        Sending beacons when Fetch KeepAlive feature is disabled crashes the WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=210753
        <rdar://problem/61896221>

        Reviewed by Geoffrey Garen.

        Test: http/wpt/beacon/beacon-legacy-code-path.html

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setFetchAPIKeepAliveEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        Add internal settings to disable Fetch Keep Alive for layout testing.

2020-04-20  Youenn Fablet  <youenn@apple.com>

        MediaPlayerPrivateMediaStreamAVFObjC should start play a newly added audio track if it is playing
        https://bugs.webkit.org/show_bug.cgi?id=210740

        Reviewed by Eric Carlson.

        Before the patch, MediaPlayerPrivateMediaStreamAVFObjC was not calling play on the audio renderer when the audio renderer
        was added after the MediaPlayerPrivateMediaStreamAVFObjC was asked to play.
        This patch makes it so that, on configuration of an audio track, it will be asked to play if its MediaPlayerPrivateMediaStreamAVFObjC is playing.
        Add internals API to be able to write a test.

        Test: fast/mediastream/play-newly-added-audio-track.html

        * html/track/AudioTrack.h:
        * html/track/AudioTrack.idl:
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::isBackedByMediaStreamTrack const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):
        * platform/mediastream/AudioTrackPrivateMediaStream.cpp:
        (WebCore::AudioTrackPrivateMediaStream::play):
        * platform/mediastream/AudioTrackPrivateMediaStream.h:
        (isType):
        * testing/Internals.cpp:
        (WebCore::Internals::isMockRealtimeMediaSourceCenterEnabled):
        (WebCore::Internals::shouldAudioTrackPlay):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-04-20  Youenn Fablet  <youenn@apple.com>

        Use a WeakHashSet to store MediaStreamPrivate observers
        https://bugs.webkit.org/show_bug.cgi?id=210494

        Reviewed by Eric Carlson.

        Remove observers from the MediaStream and migrate existing client (MediaRecorder) to MediaStreamPrivate::Observer.
        Make use of WeakHashSet in MediaStreamPrivate to improve robustness of the code.
        Any time the MediaStreamPrivate tracks are modified, observers will be notified.
        MediaStream needs now to decide when to send an event when its MediaStreamPrivate notifies of new/deleted tracks,
        Modernize a bit the code to use more references.
        Covered by existing tests.

        * Modules/mediarecorder/MediaRecorder.cpp:
        (WebCore::MediaRecorder::MediaRecorder):
        (WebCore::MediaRecorder::~MediaRecorder):
        (WebCore::MediaRecorder::handleTrackChange):
        * Modules/mediarecorder/MediaRecorder.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::createTrackPrivateVector):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::didAddTrack):
        (WebCore::MediaStream::didRemoveTrack):
        (WebCore::MediaStream::addTrackFromPlatform):
        (WebCore::MediaStream::internalAddTrack):
        (WebCore::MediaStream::internalTakeTrack):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteTrack):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::addObserver):
        (WebCore::MediaStreamPrivate::removeObserver):
        (WebCore::MediaStreamPrivate::forEachObserver):
        (WebCore::MediaStreamPrivate::computeActiveState):
        (WebCore::MediaStreamPrivate::updateActiveState):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        (WebCore::MediaStreamPrivate::trackEnded):
        * platform/mediastream/MediaStreamPrivate.h:
        * testing/Internals.cpp:
        (WebCore::Internals::removeMediaStreamTrack):

2020-04-19  Simon Fraser  <simon.fraser@apple.com>

        Content disappears on CSS parallax example
        https://bugs.webkit.org/show_bug.cgi?id=210732
        <rdar://problem/61997636>

        Reviewed by Darin Adler.

        If scrolling affects the computation of coverage rect of a TiledBacking, we plumb
        that expanded coverage back into TransformState which is maintained during GraphicsLayer flushing,
        and it's used to compute coverage rect for descendants.

        It's passed into TransformState::setLastPlanarSecondaryQuad(), which has to map it back into
        the coordinate system of the last flattening ancestor. However, TransformState::mapQuad()
        had a missing return and the quad mapping was wrong. The new code is now the same as
        TransformState::mappedPoint() (you can see where the copy/paste error came from).

        Test: compositing/tiling/coverage-adjustment-secondary-quad-mapping.html

        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::mapQuad const):
        (WebCore::TransformState::flattenWithTransform):

2020-04-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for border-collapse: collapse.
        https://bugs.webkit.org/show_bug.cgi?id=210747

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-flex-width-border-collapse.html

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

2020-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Oversized caret and selection rects in text fields on ganji.com and netflix.com/login
        https://bugs.webkit.org/show_bug.cgi?id=210622
        <rdar://problem/45945636>

        Reviewed by Darin Adler.

        Currently, selection and caret rects in text fields on some web pages can be excessively tall. This patch makes
        a small adjustment to allow the top of the caret or selection rect to snap to the top of the inline box instead
        of being at the end of the previous line, in the case where there is no previous inline box.

        In the case where we compute the caret rect for an empty renderer (i.e. no children), we make an additional
        tweak so that the caret rect's height is based on the computed font height instead of line height, and then we
        ensure that the caret is (logically) vertically centered.

        See below for more details.

        Test: editing/selection/selection-and-caret-do-not-extend-to-line-height.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):

        Specify ForHitTesting::Yes when asking for selectionTop().

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):

        Use FontMetric's height when computing the height of the caret rect, and then center it vertically in the
        renderer.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):

        Specify ForHitTesting::Yes when asking for selectionTop(). See below for more information.

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::positionForPoint const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop const):

        When computing selectionTop(), we currently fall back to using the top of the containing RenderBlockFlow
        (`blockFlow().borderAndPaddingBefore()`) in the case where there is no previous root box. However, this can lead
        to selection and caret rects being taller than expected; instead, we can use the max of the `selectionTop`
        (that is, the top of the line box, adjusted for annotations) and the top of the RenderBlockFlow. This has the
        effect of allowing the caret and selection to visually snap to the top of a run of text, provided there is not
        already a line of text that precedes it. Taking the maximum of the two values ensures that we don't
        unintentionally make the selection or caret rects even larger, if the line top is above the top of the block.

        Note that we also avoid shrinking the selection and caret rects when hit-testing renderers for positions and
        ranges. This allows users to still click and drag to select text in the extra line-height area above a piece of
        text, even if the selection is only painted over the text (and not in the region containing the line-height).
        This behavior was established in the fix for webkit.org/b/14911, and is covered by the layout test
        `editing/selection/inline-closest-leaf-child.html`.

        * rendering/RootInlineBox.h:

2020-04-20  Darin Adler  <darin@apple.com>

        Use #import instead of #include in Objective-C and don't use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=210724

        Reviewed by David Kilzer.

        * page/cocoa/SettingsBaseCocoa.mm:
        (WebCore::sansSerifTraditionalHanFontFamily): Deleted.
        (WebCore::sansSerifSimplifiedHanFontFamily): Deleted.
        (WebCore::SettingsBase::initializeDefaultFontFamilies): Just use font name
        strings directly since there are no conditionals any more.

        * Modules/applepay/PaymentRequestValidator.mm:
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * bridge/objc/WebScriptObjectPrivate.h:
        * bridge/objc/objc_class.mm:
        * bridge/testbindings.mm:
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        * editing/cocoa/WebArchiveResourceFromNSAttributedString.h:
        * editing/cocoa/WebArchiveResourceWebResourceHandler.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        * history/mac/HistoryItemMac.mm:
        * loader/cocoa/DiskCacheMonitorCocoa.mm:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        * loader/mac/ResourceLoaderMac.mm:
        * page/cocoa/MemoryReleaseCocoa.mm:
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        * page/ios/WebEventRegion.h:
        * page/mac/ChromeMac.mm:
        * page/mac/EventHandlerMac.mm:
        * page/mac/WheelEventDeltaFilterMac.mm:
        * page/scrolling/cocoa/ScrollingStateNode.mm:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        * platform/audio/mac/AudioSampleDataSource.mm:
        * platform/cocoa/DataDetectorsCoreSoftLink.mm:
        * platform/cocoa/PasteboardCocoa.mm:
        * platform/cocoa/ScrollSnapAnimatorState.mm:
        * platform/cocoa/SystemVersion.mm:
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.mm:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/graphics/ca/cocoa/WebSystemBackdropLayer.h:
        * platform/graphics/ca/cocoa/WebTiledBackingLayer.h:
        * platform/graphics/ca/cocoa/WebVideoContainerLayer.h:
        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        * platform/graphics/cocoa/IOSurfacePoolCocoa.mm:
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        * platform/graphics/cocoa/WebGPULayer.h:
        * platform/graphics/cocoa/WebGPULayer.mm:
        * platform/graphics/cv/ImageRotationSessionVT.mm:
        * platform/graphics/cv/ImageTransferSessionVT.mm:
        * platform/graphics/cv/TextureCacheCV.mm:
        * platform/graphics/gpu/cocoa/GPUBufferMetal.mm:
        * platform/graphics/gpu/cocoa/GPUComputePassEncoderMetal.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileGrid.mm:
        * platform/ios/LegacyTileGridTile.mm:
        * platform/ios/LegacyTileLayer.h:
        * platform/ios/LegacyTileLayer.mm:
        * platform/ios/LegacyTileLayerPool.mm:
        * platform/ios/LocalCurrentTraitCollection.mm:
        * platform/ios/LocalizedDeviceModel.mm:
        * platform/ios/ScrollbarThemeIOS.mm:
        * platform/ios/WebCoreMotionManager.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        * platform/mac/LoggingMac.mm:
        * platform/mac/PlatformEventFactoryMac.mm:
        * platform/mac/RemoteCommandListenerMac.mm:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/SerializedPlatformDataCueMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreObjCExtras.mm:
        * platform/mediarecorder/cocoa/MediaRecorderPrivateWriterCocoa.mm:
        * platform/mediasession/mac/MediaSessionInterruptionProviderMac.mm:
        * platform/mediastream/ios/AVAudioSessionCaptureDevice.mm:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.mm:
        * platform/mediastream/mac/RealtimeVideoUtilities.mm:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        * platform/network/cocoa/CertificateInfoCocoa.mm:
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/mac/BlobDataFileReferenceMac.mm:
        * platform/network/mac/CredentialStorageMac.mm:
        * platform/network/mac/SynchronousLoaderClient.mm:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/text/cocoa/LocaleCocoa.mm:
        * testing/ServiceWorkerInternals.mm:
        * testing/cocoa/WebViewVisualIdentificationOverlay.h:
        More #import, less #pragma once.

2020-04-20  Youenn Fablet  <youenn@apple.com>

        Safari doesn't apply frameRate limit when request stream from Camera
        https://bugs.webkit.org/show_bug.cgi?id=210186
        <rdar://problem/61452794>

        Reviewed by Eric Carlson.

        Add support to RealtimeVideoSource to decimate the video samples based on the observed frame rate of its capture source.
        This allows supporting two tracks using the same capture device, one track being low frame rate and the other one high frame rate.

        Clean-up refactoring to make RealtimeVideoSource directly inherit from RealtimeVideoCaptureSource.
        Migrate size and format of frame adaptation from RealtimeVideoCaptureSource to RealtimeVideoSource.
        Fix mock capture source to update its frame rate when asked by applyConstraints.

        Tests: fast/mediastream/mediastreamtrack-video-frameRate-clone-decreasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-clone-increasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-decreasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-increasing.html

        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers):
        (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate):
        * platform/mediastream/RealtimeVideoCaptureSource.h:
        (WebCore::RealtimeVideoCaptureSource::observedFrameRate const):
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::RealtimeVideoSource):
        (WebCore::m_source):
        (WebCore::RealtimeVideoSource::adaptVideoSample):
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::setFrameRateWithPreset):
        * testing/Internals.cpp:
        (WebCore::Internals::observeMediaStreamTrack):

2020-04-20  Antoine Quint  <graouts@apple.com>

        WebAnimations API doesn't properly apply keyframe easings to transforms
        https://bugs.webkit.org/show_bug.cgi?id=210526
        <rdar://problem/61800424>

        Reviewed by Antti Koivisto.

        GraphicsLayerCA has code that determines whether an animation can be accelerated looking at the timing function of its keyframes and excluding
        animations that use a steps timing function as one of its values. However, we we would fail to set the timing function on the KeyframeValue for
        each keyframe in the KeyframeList we create for a JS-originated animation. We now do this correctly.

        Test: webanimations/transform-animation-with-steps-timing-function-not-accelerated.html

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::updateBlendingKeyframes):

2020-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        StructuredClone algorithm should be aware of BigInt
        https://bugs.webkit.org/show_bug.cgi?id=210728

        Reviewed by Mark Lam.

        This patch adds structured-cloning for BigInt and BigIntObject.
        The logic is adding BigIntTag & BigIntObjectTag. And then we put content of BigInt with length.
        And deserialization reads them to reconstruct BigInt or BigIntObject.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpImmediate):
        (WebCore::CloneSerializer::dumpBigIntData):
        (WebCore::CloneSerializer::dumpBigInt32Data):
        (WebCore::CloneSerializer::dumpHeapBigIntData):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readBigInt):
        (WebCore::CloneDeserializer::readTerminal):

2020-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Enable resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=210184

        Reviewed by Žan Doberšek.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::setCookiesFromDOM const): Return early if cookies are blocked and update the
        persistent cookies expiration if needed.
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames): Implement this when receiving
        IncludeHttpOnlyCookies parameter.
        (WebCore::NetworkStorageSession::hasCookies const): Implement this.
        (WebCore::NetworkStorageSession::getRawCookies const): Honor shouldAskITP parameter.
        (WebCore::cookiesForSession): Ditto.
        (WebCore::NetworkStorageSession::cookiesForDOM const): Ditto.
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const): Ditto.

2020-04-19  Simon Fraser  <simon.fraser@apple.com>

        Use Optional<FloatQuad> in TransformState
        https://bugs.webkit.org/show_bug.cgi?id=144226

        Reviewed by Sam Weinig.

        Use Optional<> instead of pointers in TransformState, make it loggable, make FloatQuad loggable.

        * platform/graphics/FloatQuad.cpp:
        (WebCore::operator<<):
        * platform/graphics/FloatQuad.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::computeVisibleAndCoverageRect const):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/transforms/TransformState.cpp:
        (WebCore::TransformState::operator=):
        (WebCore::TransformState::mappedSecondaryQuad const):
        (WebCore::TransformState::setLastPlanarSecondaryQuad):
        (WebCore::TransformState::flattenWithTransform):
        (WebCore::operator<<):
        * platform/graphics/transforms/TransformState.h:
        (WebCore::TransformState::setSecondaryQuad):
        (WebCore::TransformState::lastPlanarSecondaryQuad const):
        (WebCore::TransformState::isMappingSecondaryQuad const):
        (WebCore::TransformState::accumulatedTransform const):

2020-04-19  Rob Buis  <rbuis@igalia.com>

        Remove unneeded code from FrameLoader::loadURL
        https://bugs.webkit.org/show_bug.cgi?id=210696

        Reviewed by Darin Adler.

        Remove unneeded code from FrameLoader::loadURL, since the only way the load type can be Reload
        is if loadFrameRequest set it, and the only way loadFrameRequest can set it is if cachePolicy
        is ReloadIgnoringCacheData, so no need to set it again in FrameLoader::loadURL.

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

2020-04-19  Brady Eidson  <beidson@apple.com>

        Add WKScriptMessageHandler API that asynchronously responds with a promise.
        rdar://problem/57243492 and https://bugs.webkit.org/show_bug.cgi?id=206398

        Reviewed by Andy Estes.

        Covered by new API tests.

        Updated for moving an #include into implementation files:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        * bindings/js/JSDOMPromiseDeferred.h:    
        * html/HTMLMediaElement.cpp:
        * page/DOMWindow.cpp:
        * workers/service/ServiceWorkerGlobalScope.cpp:
        
        * page/UserMessageHandler.cpp:
        (WebCore::UserMessageHandler::postMessage): Return a promise to be fulfilled by the API client.
        * page/UserMessageHandler.h:
        * page/UserMessageHandler.idl:
        * page/UserMessageHandlerDescriptor.h:

2020-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add column spanning support for flexible table width
        https://bugs.webkit.org/show_bug.cgi?id=210713

        Reviewed by Antti Koivisto.

        Test: fast/layoutformattingcontext/table-flex-width-colspans.html

        This patch slightly changes the extra space distribution logic by using either the minimum or
        the maximum width as the base initial width for the columns.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::computeColumnWidths):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace): Deleted.
        * layout/tableformatting/TableFormattingContext.h:

2020-04-19  Emilio Cobos Álvarez  <emilio@crisal.io>

        Don't use the inherited custom properties to store environment variables.
        https://bugs.webkit.org/show_bug.cgi?id=210707

        Reviewed by Antti Koivisto.

        It leaks this implementation detail when enumerating the computed style.

        Tests: imported/w3c/web-platform-tests/css/css-cascade/all-prop-initial-xml.xhtml
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-logical-enumeration.html

        * css/CSSVariableReferenceValue.cpp:
        (WebCore::resolveVariableReference):
        (WebCore::resolveTokenRange):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2020-04-19  Antti Koivisto  <antti@apple.com>

        [CSS selectors] :is() / :where() should not allow pseudo-elements at parse-time
        https://bugs.webkit.org/show_bug.cgi?id=210701

        Reviewed by Anders Carlsson.

        https://drafts.csswg.org/selectors/#matches:

        "Pseudo-elements cannot be represented by the matches-any pseudo-class; they are not valid within :is()."

        Test: fast/selectors/pseudo-element-in-is-where.html

        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

2020-04-19  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Take border spacing into account when distributing column spanners width.
        https://bugs.webkit.org/show_bug.cgi?id=210712

        Reviewed by Antti Koivisto.

        While distributing the column spanner extra space among individual columns,
        the spacing between these columns (set by border-spacing) should be taken into
        account and subtract it from the width to distribute.

        <table style="border-spacing: 50px"><tr><td colspan=2>long long text</td></tr><tr><td>lo</td><td>xt</td><tr></table>
        [long long text]
        [lo]        [xt]
        The individual columns don't require any extra space from the spanner.
 
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator+=):
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator-=):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::horizontalSpacing const):
        (WebCore::Layout::TableGrid::totalHorizontalSpacing const): Deleted.

2020-04-19  Emilio Cobos Álvarez  <emilio@crisal.io>

        Fix the logic to decide whether a property is enumerated in a computed style declaration.
        https://bugs.webkit.org/show_bug.cgi?id=210695

        Reviewed by Antti Koivisto.

        Fix the logic to decide whether a property is enumerated in a computed
        style declaration.

        Logical properties don't need stylebuilder code, but still should be
        generated. Using the specification->category for this seems a bit
        hacky, but unclear if it's worse than adding a new flag.

        Tests: fast/css/getComputedStyle/computed-style-enumeration.html
               imported/w3c/web-platform-tests/css/cssom/getComputedStyle-logical-enumeration.html

        * css/makeprop.pl:
        (skippedFromComputedStyle):
        (isLogical):
        (sortWithPrefixedPropertiesLast):

2020-04-18  Antti Koivisto  <antti@apple.com>

        [CSS selectors] Support :where() pseudo class
        https://bugs.webkit.org/show_bug.cgi?id=210690

        Reviewed by Sam Weinig.

        "The Specificity-adjustment pseudo-class, :where(), is a functional pseudo-class with the same
        syntax and functionality as :is(). Unlike :is(), neither the :where pseudo-class, nor any of
        its arguments contribute to the specificity of the selector—its specificity is always zero.

        This is useful for introducing filters in a selector while keeping the associated style
        declarations easy to override."

        https://drafts.csswg.org/selectors-4/#zero-matches

        In terms of implementation this is just another alias for :is() with different (always 0) specificity.

        Test: fast/selectors/where-specificity.html

        * css/CSSSelector.cpp:
        (WebCore::simpleSelectorSpecificityInternal):

        Here is where it differs from PseudoClassIs.

        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::isOnlyPseudoClassFunction):
        (WebCore::CSSSelectorParser::consumePseudo):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):

2020-04-18  Rob Buis  <rbuis@igalia.com>

        Reduce parameter list of the FrameLoadRequest constructor
        https://bugs.webkit.org/show_bug.cgi?id=210668

        Reviewed by Darin Adler.

        Reduce parameter list of the FrameLoadRequest constructor by
        instead using various setters. By choosing the most common
        defaults the actual number of setters to call are minimized.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::navigate):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleProvisionalLoadFailureFromContentFilter):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::disableShouldReplaceDocumentIfJavaScriptURL):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):

2020-04-18  David Kilzer  <ddkilzer@apple.com>

        Attempt #3 to fix tvOS build

        Unreviewed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):
        - Use !PLATFORM(APPLETV) to comment out functions declared within
          ENABLE(VIDEO_PRESENTATION_MODE) from r260307 and r260308.

2020-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Move DataRef.h from WebCore to WTF to utilize it in JSC
        https://bugs.webkit.org/show_bug.cgi?id=210689

        Reviewed by Anders Carlsson.

        No behavior change, just moving header from WebCore to WTF.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/style/NinePieceImage.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.h:

2020-04-18  David Kilzer  <ddkilzer@apple.com>

        Attempt #2 to fix tvOS build

        Unreviewed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        - Add #if ENABLE(VIDEO_PRESENTATION_MODE)/#endif to protect
          methods defined in MediaPlayerPrivate.h.
        - The previous commit was (r260307) also to fix tvOS, not watchOS.

2020-04-18  David Kilzer  <ddkilzer@apple.com>

        Attempt to fix watchOS build

        Unreviewed.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        - Add #if ENABLE(VIDEO_PRESENTATION_MODE)/#endif to protect
          methods defined in MediaPlayerPrivate.h.

2020-04-17  Simon Fraser  <simon.fraser@apple.com>

        Group overflow controls layers into a single container layer
        https://bugs.webkit.org/show_bug.cgi?id=210675

        Reviewed by Zalan Bujtas.

        Overflow control layers are going to change z-order in a future change. To make this
        easier, group the overflow controls layer into their own container layer.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateDebugIndicators):
        (WebCore::RenderLayerBacking::updateGeometry): Size the overflow controls layer using paddingBoxRectIncludingScrollbar().
        (WebCore::RenderLayerBacking::updateInternalHierarchy): New parenting.
        (WebCore::RenderLayerBacking::updateOverflowControlsLayers): Some refactoring with a nice lambda.
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers): Lovely lambda here. Nice.
        * rendering/RenderLayerBacking.h:

2020-04-17  Kate Cheney  <katherine_cheney@apple.com>

        Enable service workers for app-bound domains
        https://bugs.webkit.org/show_bug.cgi?id=210451
        <rdar://problem/61479474>

        Reviewed by Brent Fulgham.

        SWServer now retrieves the app-bound domains from the UI Process and
        only continues with the load if the proper entitlement is present
        or the load is coming from an app-bound domain.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::validateRegistrationDomain):
        (WebCore::SWServer::scheduleJob):
        * workers/service/server/SWServer.h:

2020-04-17  Dean Jackson  <dino@apple.com>

        [WebGL] Confirm there are no errors when setting up framebuffers
        https://bugs.webkit.org/show_bug.cgi?id=210632
        <rdar://problem/61916680>

        Reviewed by Simon Fraser.

        We're seeing crashes on macOS inside GraphicsContextGL::reshape().
        Specifically when we submit work at the end of the function via
        glFlush.

        At the moment the cause is a mystery, because we should bail out
        before then if the multisample renderbuffer was not complete. In
        the hope that it helps somewhat, add a call to glGetError to double
        check that there isn't anything horribly wrong before we talk to
        the GPU.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::WebGL2RenderingContext): If the underlying
        GCGL context was marked as "LOST" during initialization, skip the rest of our
        initialization.
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        * html/canvas/WebGLRenderingContextBase.cpp: Ditto.
        (WebCore::WebGLRenderingContextBase::WebGLRenderingContextBase):

        * platform/graphics/angle/GraphicsContextGLANGLE.cpp: Check for a GL error during
        setup and, if there is one, skip directly into a LOST state.
        (WebCore::GraphicsContextGLOpenGL::reshape):
        * platform/graphics/opengl/GraphicsContextGLOpenGLCommon.cpp:
        (WebCore::GraphicsContextGLOpenGL::reshape):

2020-04-17  Peng Liu  <peng.liu6@apple.com>

        Cleanup the macros for video fullscreen and picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=210638

        Reviewed by Eric Carlson.

        A follow-up patch to fix build failures of r260259.

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:

2020-04-17  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r234105): [iOS] WKColorButton leaks a UIColor
        <https://webkit.org/b/210658>
        <rdar://problem/61938137>

        Reviewed by Darin Adler.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::isKeyboardFocusable const):
        * page/Chrome.cpp:
        (WebCore::Chrome::createColorChooser):
        - Drive-by fix of unreachable code on PLATFORM(IOS_FAMILY).

2020-04-17  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add WebKit::WebCore target
        https://bugs.webkit.org/show_bug.cgi?id=210445

        Reviewed by Michael Catanzaro.

        Add a WebKit::WebCore target. Remove the WebCoreHeaderInterface target since
        the WebKit::WebCore target is functionaly the same.

        * CMakeLists.txt:

2020-04-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r260245.

        The tests added with this change are frequently failing on
        macOS bots.

        Reverted changeset:

        "Safari doesn't apply frameRate limit when request stream from
        Camera"
        https://bugs.webkit.org/show_bug.cgi?id=210186
        https://trac.webkit.org/changeset/260245

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix.

        * platform/cocoa/AGXCompilerService.cpp:

2020-04-17  Antoine Quint  <graouts@apple.com>

        Stop including style rules related to media controls in the UA style sheet when Modern Media Controls are enabled
        https://bugs.webkit.org/show_bug.cgi?id=210606

        Reviewed by Antti Koivisto and Daniel Bates.

        There is no need to insert style rules related to media controls in the UA stylesheet when Modern Media Controls are enabled.
        There is one rule from mediaControlsApple.css for the default sizing of <audio> that makes sense broadly for content on the Web
        so we move that to html.css. We also set the background-color property for media documents in html.css.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio): Deleted.
        (body:-webkit-full-page-media): Deleted.
        * Modules/mediacontrols/mediaControlsiOS.css:
        (body:-webkit-full-page-media): Deleted.
        * Modules/modern-media-controls/controls/media-document.css:
        (:host(.media-document)):
        * css/html.css:
        (body:-webkit-full-page-media):
        (audio):
        * css/mediaControls.css:
        (body:-webkit-full-page-media): Deleted.
        * style/UserAgentStyle.cpp:
        (WebCore::Style::UserAgentStyle::ensureDefaultStyleSheetsForElement):

2020-04-17  Peng Liu  <peng.liu6@apple.com>

        Cleanup the macros for video fullscreen and picture-in-picture
        https://bugs.webkit.org/show_bug.cgi?id=210638

        Reviewed by Eric Carlson.

        Replace some "#if PLATFORM(IOS_FAMILY) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))"
        and all "#if (PLATFORM(IOS_FAMILY) && HAVE(AVKIT)) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE))"
        with "#if ENABLE(VIDEO_PRESENTATION_MODE)".

        No new tests, no functional change.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::setVideoFullscreenStandby):
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        * platform/PictureInPictureSupport.h:
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        * platform/cocoa/VideoFullscreenModel.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (WebCore::supportsPictureInPicture):

2020-04-17  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Resolve the minimum width for overlapping spanner columns
        https://bugs.webkit.org/show_bug.cgi?id=210654

        Reviewed by Antti Koivisto.

        The extra horizontal space distribution is based on the columns' minimum widths.
        In case of column spanners, first we need to distribute the spanner's minimum
        width across the columns using the non-spanning minimum widths as the distribution ratio.
        When there's no non-spanning minimum width for a column (all rows have column spanners for tbis particular column)
        the minimum width gets distributed equally across the spanned columns. This distribution starts with the shortest columns spans
        so that we can use these resolved column widths to compute the wider ones. 

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

2020-04-17  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Update for GdkKeymap API changes
        https://bugs.webkit.org/show_bug.cgi?id=210642

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        gdk_keymap_get_default() is deprecated in GTK+ 3.22, so use
        gdk_keymap_get_for_display() instead. Since in GTK4 this method is
        removed to gdk_display_get_keymap(), add a helper to
        GtkVersioning.h to avoid cluttering with ifdefs all over the
        place.

        * platform/gtk/GtkVersioning.h:
        (gdk_keymap_get_for_display):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::currentCapsLockState):
        (WebCore::PlatformKeyboardEvent::modifiersContainCapsLock):

2020-04-17  Oriol Brufau  <obrufau@igalia.com>

        Revert "[css-grid] Exclude implicit grid tracks from the resolved value"
        https://bugs.webkit.org/show_bug.cgi?id=210617

        Reviewed by Manuel Rego Casasnovas.

        Revert r254561 since it appears to be breaking site authoring tools
        which were relying on the previous behaviour.

        Tests: fast/css-grid-layout/grid-auto-columns-rows-get-set.html
               fast/css-grid-layout/grid-columns-rows-get-set.html
               fast/css-grid-layout/grid-template-shorthand-get-set.html
               fast/css-grid-layout/mark-as-infinitely-growable.html
               fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html
               fast/css-grid-layout/negative-growth-share-as-infinity-crash.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-inline-support-flexible-lengths-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-inline-support-grid-template-columns-rows-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-inline-support-named-grid-lines-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-inline-support-repeat-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-inline-template-columns-rows-resolved-values-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-support-flexible-lengths-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-support-grid-template-columns-rows-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-support-named-grid-lines-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-support-repeat-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-template-columns-rows-resolved-values-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-layout-properties.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-columns-computed-withcontent.html
               imported/w3c/web-platform-tests/css/css-grid/parsing/grid-template-rows-computed-withcontent.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackList):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::trackSizesForComputedStyle const):

2020-04-17  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Deny iokit open access to graphics related classes
        https://bugs.webkit.org/show_bug.cgi?id=210616

        Reviewed by Darin Adler.

        Deny iokit open access to graphics related classes in the WebContent process on iOS, but issue
        extensions for these for some devices which still need access to them.

        API test: WebKit.IOKitOpenSandboxAccessForDeviceWithAGXCompilerService

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/AGXCompilerService.cpp: Added.
        (WebCore::setDeviceHasAGXCompilerServiceForTesting):
        (WebCore::deviceHasAGXCompilerService):
        * platform/cocoa/AGXCompilerService.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::hasSandboxIOKitOpenAccessToClass):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/Internals.mm:
        (WebCore::Internals::hasSandboxIOKitOpenAccessToClass):

2020-04-17  Youenn Fablet  <youenn@apple.com>

        Safari doesn't apply frameRate limit when request stream from Camera
        https://bugs.webkit.org/show_bug.cgi?id=210186
        <rdar://problem/61452794>

        Reviewed by Eric Carlson.

        Add support to RealtimeVideoSource to decimate the video samples based on the observed frame rate of its capture source.
        This allows supporting two tracks using the same capture device, one track being low frame rate and the other one high frame rate.

        Clean-up refactoring to make RealtimeVideoSource directly inherit from RealtimeVideoCaptureSource.
        Migrate size and format of frame adaptation from RealtimeVideoCaptureSource to RealtimeVideoSource.
        Fix mock capture source to update its frame rate when asked by applyConstraints.

        Tests: fast/mediastream/mediastreamtrack-video-frameRate-clone-decreasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-clone-increasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-decreasing.html
               fast/mediastream/mediastreamtrack-video-frameRate-increasing.html

        * platform/mediastream/RealtimeVideoCaptureSource.cpp:
        (WebCore::RealtimeVideoCaptureSource::dispatchMediaSampleToObservers):
        (WebCore::RealtimeVideoCaptureSource::clientUpdatedSizeAndFrameRate):
        * platform/mediastream/RealtimeVideoCaptureSource.h:
        (WebCore::RealtimeVideoCaptureSource::observedFrameRate const):
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::RealtimeVideoSource):
        (WebCore::m_source):
        (WebCore::RealtimeVideoSource::adaptVideoSample):
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::setFrameRateWithPreset):
        * testing/Internals.cpp:
        (WebCore::Internals::observeMediaStreamTrack):

2020-04-17  Alexey Shvayka  <shvaikalesh@gmail.com>

        MediaQueryList should extend EventTarget
        https://bugs.webkit.org/show_bug.cgi?id=203288

        Reviewed by Darin Adler.

        Initially, CSSOM View Module specification [1] had a custom callback mechanism with addListener() and removeListener(),
        and the callback was invoked with the associated MediaQueryList as argument.

        Now the normal event mechanism [2] is used instead. For backwards compatibility, addListener() and removeListener()
        methods are basically aliases for addEventListener() and removeEventListener(), respectively, and the "change" event
        masquerades as a MediaQueryList.

        This patch implements new event mechanism, aligning WebKit with Blink and SpiderMonkey, and also fixes
        a few minor spec incompatibilities: mandatory listener argument, "handleEvent" support, and listeners call order.

        [1]: https://www.w3.org/TR/2011/WD-cssom-view-20110804/#mediaquerylist
        [2]: https://www.w3.org/TR/cssom-view-1/#mediaquerylist

        Tests: fast/media/media-query-list-07.html
               web-platform-tests/css/cssom-view/MediaQueryList-addListener-handleEvent.html
               web-platform-tests/css/cssom-view/MediaQueryList-addListener-removeListener.html
               web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget.html
               web-platform-tests/css/cssom-view/MediaQueryList-extends-EventTarget-interop.html
               web-platform-tests/css/cssom-view/MediaQueryListEvent.html
               web-platform-tests/css/cssom-view/idlharness.html
               web-platform-tests/css/cssom-view/matchMedia.html

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/scripts/test/JS/*: Updated.
        * css/MediaQueryList.cpp:
        (WebCore::MediaQueryList::MediaQueryList):
        (WebCore::MediaQueryList::create):
        (WebCore::MediaQueryList::~MediaQueryList):
        (WebCore::MediaQueryList::addListener):
        (WebCore::MediaQueryList::removeListener):
        * css/MediaQueryList.h:
        * css/MediaQueryList.idl:
        * css/MediaQueryListEvent.cpp: Added.
        (WebCore::MediaQueryListEvent::MediaQueryListEvent):
        * css/MediaQueryListEvent.h: Added.
        * css/MediaQueryListEvent.idl: Added.
        * css/MediaQueryListListener.h: Removed.
        * css/MediaQueryListListener.idl: Removed.
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentDestroyed):
        (WebCore::MediaQueryMatcher::addMediaQueryList):
        (WebCore::MediaQueryMatcher::removeMediaQueryList):
        (WebCore::MediaQueryMatcher::matchMedia):
        (WebCore::MediaQueryMatcher::evaluateAll):
        (WebCore::MediaQueryMatcher::addListener): Deleted.
        (WebCore::MediaQueryMatcher::removeListener): Deleted.
        * css/MediaQueryMatcher.h:
        * dom/EventNames.in:
        * dom/EventTarget.h:
        (WebCore::EventTarget::removeEventListener):
        * dom/EventTargetFactory.in:

2020-04-17  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed build fix after r260123

        No new tests needed.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createCustomCursor): Pass missing pixel buffer data pointer to gdk_memory_texture_new().

2020-04-17  Youenn Fablet  <youenn@apple.com>

        Make use of WeakHashSet for MediaStreamTrackPrivate and RealtimeMediaSource observers
        https://bugs.webkit.org/show_bug.cgi?id=210492

        Reviewed by Geoffrey Garen.

        We are making use of WeakHashSet to improve the robustness of the code.
        For that purpose we use the new WeakHashSet::forEach method.
        No change of behavior.

        * Modules/mediarecorder/MediaRecorder.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::forEachObserver const):
        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::forEachObserver):
        (WebCore::MediaStreamTrackPrivate::addObserver):
        (WebCore::MediaStreamTrackPrivate::removeObserver):
        (WebCore::MediaStreamTrackPrivate::forEachObserver const): Deleted.
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::hasObserver const): Deleted.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::addAudioSampleObserver):
        (WebCore::RealtimeMediaSource::removeAudioSampleObserver):
        (WebCore::RealtimeMediaSource::addObserver):
        (WebCore::RealtimeMediaSource::removeObserver):
        (WebCore::RealtimeMediaSource::forEachObserver):
        (WebCore::RealtimeMediaSource::notifyMutedObservers):
        (WebCore::RealtimeMediaSource::requestToEnd):
        (WebCore::RealtimeMediaSource::forEachObserver const): Deleted.
        (WebCore::RealtimeMediaSource::notifyMutedObservers const): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:

2020-04-17  Rob Buis  <rbuis@igalia.com>

        Move allowPlugins to FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=205876

        Reviewed by Darin Adler.

        Move allowPlugins to FrameLoader to reduce
        pointer dereferences and lessen dependency
        on SubframeLoader. Also rename to
        arePluginsEnabled since the method is asking
        the Setting with the same name.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::rendererIsEverNeeded):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::arePluginsEnabled):
        * loader/FrameLoader.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::allowPlugins): Deleted.
        * loader/SubframeLoader.h:
        * plugins/DOMMimeType.cpp:
        (WebCore::DOMMimeType::enabledPlugin const):

2020-04-17  Tomoki Imai  <Tomoki.Imai@sony.com>

        Fix an integer overflow in WebCrypto AES-CTR Mac implementation, which may detect a false loop
        https://bugs.webkit.org/show_bug.cgi?id=210540

        (1 << counterLength) causes an integer overflow, and the undefined behavior.
        The longest valid counterLength on 64 bit machine is 63,
        and the literal 1 is considered as 32-bit signed integer.
        Left shifting 1 beyond or to sign-bit is undefined behavior in C++ spec.
        - https://en.cppreference.com/w/cpp/language/integer_literal
        - https://en.cppreference.com/w/cpp/language/operator_arithmetic#Bitwise_shift_operators

        This issue is originally found in https://bugs.webkit.org/show_bug.cgi?id=208186#c2

        Reviewed by Jiewen Tan.

        Test: crypto/subtle/aes-ctr-import-key-encrypt.html

        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::transformAES_CTR):

2020-04-16  Simon Fraser  <simon.fraser@apple.com>

        Scrolling-tree hit-testing is off by top content inset
        https://bugs.webkit.org/show_bug.cgi?id=210629
        <rdar://problem/61848883>

        Reviewed by Tim Horton.

        r259936 added a point conversion from the superlayer of the root content layer,
        to fix RTL, but this also pulled in top content inset, which we don't want.

        Instead, do the RTL fix by factoring in scroll origin.

        Test: fast/scrolling/mac/async-scroll-overflow-top-inset.html

        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::scrollingNodeForPoint):

2020-04-16  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix for non unified builds.

        * html/OffscreenCanvas.cpp: Added missing include.
        * html/canvas/CanvasRenderingContext2DBase.cpp: Ditto.
        * layout/tableformatting/TableFormattingContextGeometry.cpp: Ditto.
        * workers/WorkerAnimationController.cpp:
        (WebCore::WorkerAnimationController::requestAnimationFrame): Added namespace.
        * workers/WorkerAnimationController.h: Added missing include.

2020-04-16  Simon Fraser  <simon.fraser@apple.com>

        A slow-starting swipe always latches on the root node
        https://bugs.webkit.org/show_bug.cgi?id=210618

        Reviewed by Tim Horton.

        If the first event in a wheel event gesture had zero delta, scrolling thread logic would
        always latch on the root node and the rest of the gesture would scroll the document.

        Fix by not latching for events with zero delta.

        Test: scrollingcoordinator/mac/latching/zero-delta-began-should-not-latch.html

        * page/scrolling/ScrollingTreeLatchingController.cpp:
        (WebCore::ScrollingTreeLatchingController::nodeDidHandleEvent):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::canScrollWithWheelEvent const):
        (WebCore::ScrollingTreeScrollingNode::eventCanScrollContents const):
        (WebCore::ScrollingTreeScrollingNode::scrollLimitReached const): Deleted.
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::shouldConsiderLatching const): FIXME comment. Ideally this would
        check delta() that that's too scarey at the moment.

2020-04-16  Jer Noble  <jer.noble@apple.com>

        Unreviewed build-fix after r260182; guard call to fullscreenManager() for ports which do not
        ENABLE(FULLSCREEN_API).

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::updateMediaUsageIfChanged):

2020-04-16  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Deprecation-guards fixes
        https://bugs.webkit.org/show_bug.cgi?id=210600

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::RenderThemeGadget::backgroundColor const): Add missing
        deprecation guards for deprecated GtkStyleContext API.
        * platform/gtk/ThemeGtk.cpp:
        (WebCore::ThemeGtk::ensurePlatformColors const): Switch to WK
        deprecation guards from glib ones.

2020-04-16  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: candidate.isCandidate() in WebCore::canonicalizeCandidate
        https://bugs.webkit.org/show_bug.cgi?id=130844
        <rdar://59535009>

        Reviewed by Geoffrey Garen.

        Call Position::isCandidate() in PositionIterator::isCandidate so behavior of
        candidate search become identical in both classes.

        Test: editing/inserting/insert-in-br.html

        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const):

2020-04-16  Rob Buis  <rbuis@igalia.com>

        Remove outdated comment from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=210607

        Reviewed by Darin Adler.

        Remove comment from FrameLoader that is not valid/important anymore because
        addExtraFieldsToRequest does not set the Origin header since r259036.

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

2020-04-16  Chris Fleizach  <cfleizach@apple.com>

        AX: Need method for setting selected range from NSRange
        https://bugs.webkit.org/show_bug.cgi?id=210593

        Reviewed by Darin Adler.

        Allow setSelection to work outside of text controls.

        Test: accessibility/ios-simulator/non-textcontrol-set-selection.html

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

2020-04-16  Jer Noble  <jer.noble@apple.com>

        [macOS] Update ScreenTime as playback state changes
        https://bugs.webkit.org/show_bug.cgi?id=210518
        <rdar://problem/61181092>

        Reviewed by Eric Carlson.

        Follow up to r260182; Pass a WeakPtr into our task queue in sessionWillEndPlayback rather than a bare pointer.

        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::sessionWillEndPlayback):

2020-04-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Captured ThreadedScrollingTree should check its m_scrollingCoordinator before calling its methods
        https://bugs.webkit.org/show_bug.cgi?id=210570

        Reviewed by Simon Fraser.

        m_scrollingCoordinator may be nullified before asynchronously calling its
        method scheduleUpdateScrollPositionAfterAsyncScroll(). Check if it is
        not null before calling this method.

        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):

2020-04-16  Zalan Bujtas  <zalan@apple.com>

        Crash in IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded when min-size can not be resolved
        https://bugs.webkit.org/show_bug.cgi?id=210584
        <rdar://problem/56685237>

        Reviewed by Manuel Rego Casasnovas.

        Use the initial value of 0 when the min-height can't be resolved.

        Test: fast/css-grid-layout/crash-when-min-height-cant-be-resolved.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::IndefiniteSizeStrategy::recomputeUsedFlexFractionIfNeeded const):

2020-04-16  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes mid April 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=210599

        Unreviewed build fix.

        No new tests needed.

        * bindings/js/JSNavigatorCustom.cpp: Add missing JavaScriptCore/JSCJSValue.h header.
        (WebCore::JSNavigator::getUserMedia): Prefix with the JSC:: namespace where needed.
        * dom/ShadowRoot.cpp: Add missing WebAnimation.h header.
        * dom/SimpleRange.cpp: Add missing NodeTraversal.h header.
        * editing/RemoveNodePreservingChildrenCommand.cpp: Add missing Editing.h header.
        * page/MemoryRelease.cpp: Add missing JavaScriptCore/VM.h header.
        * page/PageConfiguration.cpp: Add missing UserContentURLPattern.h header.
        * page/scrolling/ScrollingTree.h: Add missing EventTrackingRegions.h header.
        * page/scrolling/ScrollingTreeLatchingController.cpp: Add missing Logging.h header.
        * page/scrolling/ScrollingTreeLatchingController.h: Add missing ScrollTypes.h header,
        and forward declaration for WebCore::PlatformWheelEvent.
        * workers/service/server/SWServerJobQueue.cpp: Add missing Logging.h header.

2020-04-16  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scrolling] Slow-repaint overflow scroll have force their enclosing scrollers to be slow too
        https://bugs.webkit.org/show_bug.cgi?id=210591

        Reviewed by Antti Koivisto.

        If an overflow:scroll has background-attachment:fixed in the contents, then both it and all its containing-block
        scrolling ancestors have to be slow-scrolling too, because scrolling any of them affects the local geometry
        of the fixed backgrounds which paint on scroll.

        Implement this by having the scrolling tree do a post-commit pass over the nodes with sync scrolling reasons
        (which we collect during the commit phase). For each slow-scrolling node, walk its ancestor chain (via
        proxy nodes when necessary) and mark the scrolling node ancestors with the "DescendantScrollersHaveSynchronousScrolling"
        reason.

        For testing, expose internals.scrollingTreeAsText(), which needs a bit of synchronization via
        waitForScrollingTreeCommit() since the commit happens on the scrolling thread.

        Tests: scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-nested-non-cb-overflow.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-nested-overflow.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-nested-overflow2.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText const):
        (WebCore::AsyncScrollingCoordinator::scrollingTreeAsText const):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scrollingStateTreeAsText const):
        (WebCore::ScrollingCoordinator::scrollingTreeAsText const):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinatorTypes.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNodeRecursive):
        (WebCore::ScrollingTree::propagateSynchronousScrollingReasons):
        (WebCore::ScrollingTree::updateTreeFromStateNode): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::waitForScrollingTreeCommit):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::commitStateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::waitForScrollingTreeCommit):
        * page/scrolling/ThreadedScrollingTree.h:
        * testing/Internals.cpp:
        (WebCore::Internals::scrollingTreeAsText const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-04-16  Claudio Saavedra  <csaavedra@igalia.com>

        Clean a couple of unused-parameters warnings
        https://bugs.webkit.org/show_bug.cgi?id=210596

        Unreviewed.

        No new tests needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::wouldTaintOrigin const): Remove
        a spurious UNUSED_PARAM() for an actually used parameter.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateSecurityDiscCharacters):

2020-04-16  Eric Carlson  <eric.carlson@apple.com>

        [macOS] Update ScreenTime as playback state changes
        https://bugs.webkit.org/show_bug.cgi?id=210518
        <rdar://problem/61181092>

        Reviewed by Jer Noble.

        Test: media/media-usage-state.html
        
        Pass media element state to the UI process whenever it changes.

        * Headers.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::mediaSessionUniqueIdentifier const):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::~MediaElementSession):
        (WebCore::MediaElementSession::updateMediaUsageIfChanged):
        * html/MediaElementSession.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::addMediaUsageManagerSession):
        (WebCore::ChromeClient::updateMediaUsageManagerSessionState):
        (WebCore::ChromeClient::removeMediaUsageManagerSession):
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::updateMediaUsageIfChanged):
        (WebCore::PlatformMediaSession::mediaSessionIdentifier const):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::scheduleUpdateSessionStatus):
        (WebCore::PlatformMediaSessionManager::sessionDidEndRemoteScrubbing):
        (WebCore::PlatformMediaSessionManager::scheduleUpdateNowPlayingInfo): Deleted.
        * platform/audio/cocoa/MediaSessionManagerCocoa.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.mm:
        (WebCore::MediaSessionManagerCocoa::scheduleUpdateSessionStatus):
        (WebCore::MediaSessionManagerCocoa::sessionWillBeginPlayback):
        (WebCore::MediaSessionManagerCocoa::sessionDidEndRemoteScrubbing):
        (WebCore::MediaSessionManagerCocoa::removeSession):
        (WebCore::MediaSessionManagerCocoa::sessionWillEndPlayback):
        (WebCore::MediaSessionManagerCocoa::clientCharacteristicsChanged):
        (WebCore::MediaSessionManagerCocoa::sessionCanProduceAudioChanged):
        (WebCore::MediaSessionManagerCocoa::scheduleUpdateNowPlayingInfo): Deleted.
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (WebCore::MediaSessionManageriOS::sessionWillBeginPlayback):
        * platform/graphics/MediaUsageInfo.h: Added.
        (WebCore::MediaUsageInfo::operator== const):
        (WebCore::MediaUsageInfo::operator!= const):
        (WebCore::MediaUsageInfo::encode const):
        (WebCore::MediaUsageInfo::decode):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaElementRestrictions):
        (WebCore::Internals::mediaUsageState const):
        * testing/Internals.h:
        * testing/Internals.idl:

2020-04-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement JSMapIterator/JSSetIterator with JSInternalFieldObjectImpl
        https://bugs.webkit.org/show_bug.cgi?id=210023

        Reviewed by Keith Miller.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):

2020-04-16  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix GStreamer build warnings.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::cdmInstanceDetached):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::handleErrorConditionFromStreamingThread):

2020-04-16  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] MiniBrowser opens new windows too small causing failures on some WPT tests
        https://bugs.webkit.org/show_bug.cgi?id=210206

        Reviewed by Carlos Garcia Campos.

        Some WPT tests (when executed with the WPT runner via WebDriver)
        open new browser windows via JavaScript invoking Window.open()
        and then run the test on this new window.
        The size of the new window is not specified, and we were failing
        to provide a default window size, so it was using the minimum of
        100x100 which its just too small for some test that later call
        document.elementFromPoint() on some coordinates
        that are outside of that size.

        To fix that provide the size of the default GTK window to WebCore
        if the application sets one via gtk_window_set_default_size().
        And if not, then use the size of the previous window.

        Also change the way we position the new window to work better when
        the system uses more than one monitor. Previously to get the default
        coordinates of the new window we were using gdk_display_get_monitor()
        with just the first monitor available.
        This causes issues in the calculation of the available space when
        using several monitors. Instead get the monitor in use by looking
        at the current GDK root window.

        Tests: TestWebKitAPI/WebKit2Gtk/TestUIClient:/webkit/WebKitWebView/open-window-default-size
        and TestWebKitAPI/WebKit2Gtk/TestUIClient:/webkit/WebKitWebView/open-window-no-default-size

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getCurrentScreenMonitor):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2020-04-16  Tomoki Imai  <Tomoki.Imai@sony.com>

        TextureMapper renders video element with "object-fit: cover" incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=210544

        Reviewed by Žan Doberšek.

        Propagate GraphicsLayer::contentsClippingRect information to TextureMapperLayer
        to properly clip the outside of DOM element when the element has "object-fit: cover".

        Unfortunately, the test is disabled on WebKitGTK due to bug 177536, bug 163528.
        Test: compositing/video/video-object-fit.html

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::flushState):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf): Clip using propagated contentsClippingRect when rendering m_contentsLayer.
        (WebCore::TextureMapperLayer::setContentsClippingRect):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsClippingRect):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2020-04-15  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Password obscuring dots drawn with the system font are too small
        https://bugs.webkit.org/show_bug.cgi?id=209692
        <rdar://problem/60788385>

        Reviewed by Darin Adler.

        The system font's U+2022 BULLET glyph got smaller. Instead, we should match
        the native platform's behavior of using U+F79A. However, U+F79A is a PUA
        character, meaning different fonts will draw it in arbitrary different ways.
        Therefore, we should only use this character if we're drawing it with the
        system font. Otherwise, we can take the old codepath and use U+2022 BULLET.

        Tests: fast/text/text-security-disc-bullet-pua.html
               platform/mac/fast/text/text-security-disc-bullet-pua-mac.html
               platform/ios/fast/text/text-security-disc-bullet-pua-ios-new.html
               platform/ios/fast/text/text-security-disc-bullet-pua-ios-old.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::text const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        * rendering/SimpleLineLayoutCoverage.cpp:
        (WebCore::SimpleLineLayout::printReason):
        * rendering/SimpleLineLayoutCoverage.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::computeTextSecurityDiscShouldUsePUACodePoint const):
        * rendering/style/RenderStyle.h:

2020-04-15  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r260102): ASSERTION FAILED: m_arbitrators.contains(proxy) in WebKit::SharedArbitrator::endRoutingArbitrationForArbitrator
        https://bugs.webkit.org/show_bug.cgi?id=210589
        <rdar://problem/61844208>

        Reviewed by Eric Carlson.

        Track whether the session successfully entered routing arbitration and only call
        leaveRoutingAbritration() if entering was sucessful.

        * platform/audio/mac/AudioSessionMac.mm:
        (WebCore::AudioSession::setCategory):

2020-04-15  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] background-attachment:fixed needs to disable async overflow scrolling
        https://bugs.webkit.org/show_bug.cgi?id=210581

        Reviewed by Zalan Bujtas.

        Start setting synchronousScrollingReasons on overflow scrolling nodes if the scrolling would move content
        that has background-attachment:fixed (we can't use async scrolling there, because such content needs painting
        on each scroll).

        When style changes, we call FrameView::{add|remove}SlowRepaintObject(). That sets the "needsScrollingTreeUpdate"
        compositing bit on the enclosing RenderLayer (note, any RenderLayer, not necessarily a scrolling one).
        Setting that bit will ensure that RenderLayerCompositor does an "update backing and hierarchy" traversal,
        and during this traversal, if we see a layer with the bit set, scrollingTreeState.needSynchronousScrollingReasonsUpdate
        becomes true. At the end of the traversal this is used as a signal to call updateSynchronousScrollingNodes().

        updateSynchronousScrollingNodes() needs to clear synchronousScrollingReasons on nodes that no longer need
        to slow-scroll, and set it on those that do. To achieve this we use the set of slow-repaint renders from
        FrameView, and the set of layers with scrolling nodes from RenderLayerCompositor, starting with the set of
        all nodes, and pruning those known to be slow. synchronousScrollingReasons are cleared on the remainder.

        Tests: scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-overflow-dynamic.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-in-overflow.html
               scrollingcoordinator/mac/fixed-backgrounds/fixed-background-on-overflow.html

        * page/FrameView.cpp:
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        * page/FrameView.h:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
        (WebCore::RenderLayerCompositor::updateSynchronousScrollingNodes):
        * rendering/RenderLayerCompositor.h:

2020-04-15  Andres Gonzalez  <andresg_22@apple.com>

        Add logging to core accessibility.
        https://bugs.webkit.org/show_bug.cgi?id=210564

        Reviewed by Chris Fleizach.

        Added AXLogger class and AXTRACE macro. Used them in AXIsolatedTree.

        * Headers.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXLogger.cpp: Added.
        (WebCore::AXLogger::AXLogger):
        (WebCore::AXLogger::~AXLogger):
        * accessibility/AXLogger.h: Added.
        * accessibility/isolatedtree/AXIsolatedTree.cpp:
        (WebCore::AXIsolatedTree::AXIsolatedTree):
        (WebCore::AXIsolatedTree::~AXIsolatedTree):
        (WebCore::AXIsolatedTree::create):
        (WebCore::AXIsolatedTree::nodeInTreeForID):
        (WebCore::AXIsolatedTree::treeForID):
        (WebCore::AXIsolatedTree::createTreeForPageID):
        (WebCore::AXIsolatedTree::removeTreeForPageID):
        (WebCore::AXIsolatedTree::treeForPageID):
        (WebCore::AXIsolatedTree::nodeForID const):
        (WebCore::AXIsolatedTree::objectsForIDs const):
        (WebCore::AXIsolatedTree::generateSubtree):
        (WebCore::AXIsolatedTree::createSubtree):
        (WebCore::AXIsolatedTree::updateNode):
        (WebCore::AXIsolatedTree::updateSubtree):
        (WebCore::AXIsolatedTree::updateChildren):
        (WebCore::AXIsolatedTree::focusedUIElement):
        (WebCore::AXIsolatedTree::rootNode):
        (WebCore::AXIsolatedTree::setRootNode):
        (WebCore::AXIsolatedTree::setFocusedNode):
        (WebCore::AXIsolatedTree::setFocusedNodeID):
        (WebCore::AXIsolatedTree::removeNode):
        (WebCore::AXIsolatedTree::removeSubtree):
        (WebCore::AXIsolatedTree::appendNodeChanges):
        (WebCore::AXIsolatedTree::applyPendingChanges):
        * platform/Logging.h:

2020-04-15  Simon Fraser  <simon.fraser@apple.com>

        Lay the groundwork for SynchronousScrollingReason on overflow nodes
        https://bugs.webkit.org/show_bug.cgi?id=210565

        Reviewed by Tim Horton.

        Make setSynchronousScrollingReasons() public on ScrollingCoordinator because we're going
        to be calling it for overflow scrolling nodes.
        
        Call ScrollingCoordinator::slowRepaintObjectsDidChange() not just when we go between 
        none some some slow-repaint objects, but whenever the set changes. slowRepaintObjectsDidChange()
        is lightweight.

        Minor cleanup in FrameView to avoid testing Page* nullness every time.

        * page/FrameView.cpp:
        (WebCore::FrameView::prepareForDetach):
        (WebCore::FrameView::isScrollSnapInProgress const):
        (WebCore::FrameView::usesAsyncScrolling const):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::addViewportConstrainedObject):
        (WebCore::FrameView::removeViewportConstrainedObject):
        (WebCore::FrameView::scrollingCoordinator const):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling const):
        (WebCore::FrameView::isRubberBandInProgress const):
        (WebCore::FrameView::requestScrollPositionUpdate):
        (WebCore::FrameView::layoutOrVisualViewportChanged):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::scrollableAreaSetChanged):
        (WebCore::FrameView::wheelEvent):
        (WebCore::FrameView::setScrollPinningBehavior):
        * page/FrameView.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::slowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsForFrameView const):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously const):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText const):
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange): Deleted.
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons const): Deleted.
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2020-04-15  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: !selectionToDelete.isNone() in TypingCommand::forwardDeleteKeyPressed
        when deleting a UserSelect::None element.
        https://bugs.webkit.org/show_bug.cgi?id=210530
        <rdar://problem/58591480>

        Reviewed by Geoffrey Garen.

        Quit forwardDeleteKeyPressed() if FrameSelection::modify() returns empty selection.

        Test: editing/deleting/forward-delete-UserSelect-None-element.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2020-04-15  Peng Liu  <peng.liu6@apple.com>

        Video elements don't return to the correct position when exiting fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=210529

        Reviewed by Jer Noble.

        Add WEBCORE_EXPORT to the function setNeedsDOMWindowResizeEvent().

        * dom/Document.h:

2020-04-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Some pages indefinitely zoom in and out due to idempotent text autosizing
        https://bugs.webkit.org/show_bug.cgi?id=210551
        <rdar://problem/56820674>

        Reviewed by Tim Horton.

        Rename m_initialScale and initialScale() on Page to m_initialScaleIgnoringContentSize and
        initialScaleIgnoringContentSize(), respectively. See WebKit/ChangeLog for more details.

        Test: fast/text-autosizing/ios/idempotentmode/idempotent-autosizing-reaches-stable-state.html

        * page/Page.cpp:
        (WebCore::Page::setInitialScaleIgnoringContentSize):
        (WebCore::Page::setInitialScale): Deleted.
        * page/Page.h:
        (WebCore::Page::initialScaleIgnoringContentSize const):
        (WebCore::Page::initialScale const): Deleted.
        * style/StyleAdjuster.cpp:
        (WebCore::Style::Adjuster::adjustmentForTextAutosizing):

2020-04-15  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r258977): Crash under Document::visibilityStateChanged
        https://bugs.webkit.org/show_bug.cgi?id=210555

        Reviewed by Youenn Fablet.

        Re-introduce null check of page in Document::visibilityStateChanged() which got inadvertently
        dropped in r258977.

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

2020-04-15  Zalan Bujtas  <zalan@apple.com>

        REGRESSION( r260114): [ Mac and iOS ] imported/w3c/web-platform-tests/web-animations/timing-model/timelines/document-timelines.html is failing.
        https://bugs.webkit.org/show_bug.cgi?id=210549
        <rdar://problem/61828495>

        Unreviewed.

        Partial revert of r260114. See webkit.org/b/210559 for details.

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):

2020-04-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add support for `pseudoElement` on `KeyframeEffect` and `KeyframeEffectOptions`
        https://bugs.webkit.org/show_bug.cgi?id=207290
        <rdar://problem/59199003>

        Reviewed by Antti Koivisto.

        We add the required IDL bindings such that JS-originated Web Animations can target pseudo-elements, either via the KeyframeEffect.pseudoElement
        property, or via the KeyframeEffectOptions.pseudoElement property, which is set on the object passed to the KeyframeEffect constrcutor and
        Element.animate().

        This means that a PseudoElement can be targeted by an animation even if it's not been created through style resolution by virtue of a ::before
        or ::after selector and a "content" style rule. This means that when either the "target" or "pseudoElement" property of KeyframeEffect is set,
        we ensure a PseudoElement is created and set on the host element if required. And additionally, we ensure that during style resolution, animations
        are applied to such pseudo-elements with a new PseudoElement::isTargetedByKeyframeEffectRequiringPseudoElement() method that indicates that a
        JS-originated KeyframeEffect targets this pseudo-element.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create): Handle the new KeyframeEffectOptions.pseudoElement property in the KeyframeEffect constructor.
        (WebCore::KeyframeEffect::targetsPseudoElement const): Indicates whether this effect targets a pseudo-element and not a regular
        element or a null target.
        (WebCore::KeyframeEffect::targetElementOrPseudoElement const): Use the new targetsPseudoElement() method to determine whether a
        pseudo-element is targeted. We also remove an assertion that only made sense when m_pseudoId could only be set via a CSS-originated
        animation and another one when the only possible m_pseudoId values were PseudoId::Before and PseudoId::After.
        (WebCore::KeyframeEffect::setTarget): Call the new didChangeTargetElementOrPseudoElement() method if the provided value differs
        from the stored value for m_target.
        (WebCore::KeyframeEffect::pseudoElement const): Return the matching normalized string with a `::` prefix for m_pseudoId if the target
        is a pseudo-element. Note that PseudoElement::pseudoElementNameForEvents() will only return a string for "::before" and "::after" since
        we only know how to animate these pseudo-elements.
        (WebCore::KeyframeEffect::setPseudoElement): Determine a matching PseudoId, if any, for the provided string, and call the new
        didChangeTargetElementOrPseudoElement() method if the provided value differs from the stored value for m_pseudoId.
        (WebCore::KeyframeEffect::didChangeTargetElementOrPseudoElement): New method called when either m_target or m_pseudoId is changed
        such that we can ensure the required PseudoElement is created if the animation targets a pseudo-element. Then we run the same logic
        that we used to in KeyframeEffect::setTarget().
        (WebCore::KeyframeEffect::requiresPseudoElement const): Indicates whether a PseudoElement must remain created for this KeyframeEffect,
        which is only necessary for JS-originated effects targeting a pseudo-element.
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectOptions.h:
        * animation/KeyframeEffectOptions.idl:
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::requiresPseudoElement const): Indicates whether one or more JS-originated keyframe effects in the stack target
        the PseudoElement owning this stack.
        * animation/KeyframeEffectStack.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::commitStyles): Use KeyframeEffect::targetsPseudoElement() to determine whether the animation's effect's target is a
        pseudo-element, in which case we need to throw a NoModificationAllowedError exception.
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::rendererIsNeeded): Return true also when one or more JS-originated keyframe effects in the stack target this pseudo-element.
        (WebCore::PseudoElement::isTargetedByKeyframeEffectRequiringPseudoElement): Return true when one or more JS-originated keyframe effects in the stack
        target this pseudo-element.
        * dom/PseudoElement.h:
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers): Remove the assertion that the "content" property was set since it's valid for this function to now be called
        due to JS-originated keyframe effects targeting the given pseudo-element. Instead we add an assertion that there are such keyframe effects in
        case no "content" property was set.
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement): Only remove pseudo-elements if there are no JS-originated keyframe effects
        targeting the specified pseudo-element.
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle): Allow animated style resolution for pseudo-elements targeted by JS-originated keyframe effects.

2020-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK4] Fix use of gtk init functions
        https://bugs.webkit.org/show_bug.cgi?id=210550

        Reviewed by Adrian Perez de Castro.

        Add gtk_init and gtk_init_check receiving parameters to GtkVersioning.

        * PlatformGTK.cmake:
        * platform/graphics/PlatformDisplay.cpp:
        * platform/gtk/GtkVersioning.h:
        (gtk_init):
        (gtk_init_check):

2020-04-15  Yusuke Suzuki  <ysuzuki@apple.com>

        import.meta.url: baseURL for a module script should be response URL, not request URL
        https://bugs.webkit.org/show_bug.cgi?id=205294

        Reviewed by Youenn Fablet.

        The module should expose response URL as `import.meta.url` instead of request URL.
        If redirection happens, this URL should be redirected one.

        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::resolve):
        (WebCore::ScriptModuleLoader::responseURLFromRequestURL):
        (WebCore::ScriptModuleLoader::createImportMetaProperties):
        (WebCore::ScriptModuleLoader::notifyFinished):
        * bindings/js/ScriptModuleLoader.h:

2020-04-15  Jer Noble  <jer.noble@apple.com>

        isNullFunctionPointer() can fail for symbols not explicitly marked as weakly linked.
        https://bugs.webkit.org/show_bug.cgi?id=210532

        Reviewed by Tim Horton.

        Symbols whose declarations are explicitly marked as weakly imported are guaranteed to be
        NULL when the library containing those symbols is not available at runtime, or when the
        symbol itself isn't present in the version of the library which is available at runtime. For
        symbols which are not explicitly marked as weakly imported (because, e.g., the framework
        itself is weakly imported), this technique can fail. Rather than test the nullity of a
        random static C++ class method with isNullFunctionPointer(), explicitly mark as weak_import
        a utility method added by the WebKit project, which conveniently is already used from within
        LibWebRTCProviderCocoa, and test the nullity of that method instead.

        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2020-04-15  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Make PlatformScreen::screenDPI() GTK4-ready
        https://bugs.webkit.org/show_bug.cgi?id=210543

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        This method is using deprecated and removed APIs
        from GDK. Guard the removed API usage so that it's only
        used in GTK3 and update to use the replacement APIs otherwise.

        Also, make it to also use the gtk-xft-dpi GtkSettings property.
        This method is mostly used in response to a change in this
        property, so ignoring its value doesn't seem a good idea.

        The following priority is used:

        1. (GTK3 only) query gdk_screen_get_resolution().
        2. Use the GtkSettings::gtk-xft-dpi property.
        3. Calculate the actual DPI from the monitor 0's properties.
        4. If none of these succeed, use the default DPI, 96.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDPI):

2020-04-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove IconGtk
        https://bugs.webkit.org/show_bug.cgi?id=210546

        Reviewed by Adrian Perez de Castro.

        It's currently unused in GTK port since we never show an icon for file uploads.

        * SourcesGTK.txt:
        * platform/graphics/Icon.cpp:
        * platform/graphics/Icon.h:
        * platform/graphics/gtk/IconGtk.cpp: Removed.

2020-04-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Provide an alternative to gtk_widget_{get,is}_toplevel()
        https://bugs.webkit.org/show_bug.cgi?id=210463

        Reviewed by Carlos Garcia Campos.

        Adapt utility functions to GTK4, and provide replacement implementations for the
        gtk_widget_get_tolevel() and gtk_widget_is_toplevel() functions for GTK4 builds.

        No new tests needed.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::gtkWindowGetOrigin): Added.
        (WebCore::convertWidgetPointToScreenPoint): Move code used to find the window position
        into a separate function, and use it to avoid the USE(GTK4) conditional here.
        (WebCore::widgetIsOnscreenToplevelWindow): Adapt to make it work with GTK4.
        * platform/gtk/GtkVersioning.h: Added.
        (gtk_widget_is_toplevel): Alternative implementation for GTK4.
        (gtk_widget_get_toplevel): Ditto.
        (gtk_window_get_position): Ditto.

2020-04-15  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Adapt to cursor API changes
        https://bugs.webkit.org/show_bug.cgi?id=210453

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::fallbackCursor): Utility function which returns the "default" cursor for GTK4.
        (WebCore::createNamedCursor): Adapt to the changes in the gdk_cursor_new_from_name().
        (WebCore::createCustomCursor): Create a GdkTexture directly when the given Cairo surface is
        in one of the pixel formats supported by gdk_memory_texture_new(), otherwise convert first;
        then create a GdkCursor from the GdkTexture.

2020-04-14  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] Backgrounds missing on gmail sometimes
        https://bugs.webkit.org/show_bug.cgi?id=210506
        <rdar://problem/60523869>

        Reviewed by Zalan Bujtas.

        When painting the scrolled contents layers of accelerated overflow:scroll, RenderBlock::paint()
        needs to not short-circuit when the dirty rect is outside a clipping rect, because accelerated
        overflow involves overdraw for tiles outside the visible area.

        There were two code paths that made this mostly work: overflowRectForPaintRejection() tested for
        usesCompositedScrolling(), and the #if PLATFORM(IOS_FAMILY) made it work on iOS.

        For content involving flexbox, overflowRectForPaintRejection() gave the wrong answer because 
        flex layout would sometimes clear m_overflow, even on an overflow:scroll element.
        
        So remove overflowRectForPaintRejection(), and instead revert to the simple visualOverflowRect(),
        but first check a bit that's passed down from compositing code that indicates that
        we're painting the contents of composited scroll

        Test: compositing/scrolling/async-overflow-scrolling/mac/overflow-in-flex-empty-tiles.html

        * rendering/PaintPhase.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overflowRectForPaintRejection const): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):

2020-04-14  Zalan Bujtas  <zalan@apple.com>

        Content expanding is broken on icourse163.org
        https://bugs.webkit.org/show_bug.cgi?id=210510
        <rdar://problem/45951820>

        Reviewed by Simon Fraser.

        www.icourse163.org's animation code expects a decimal point in the rAF timestamp (millisecond resolution).

        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks):
        * page/Quirks.cpp:
        (WebCore::Quirks::needsMillisecondResolutionForHighResTimeStamp const):
        * page/Quirks.h:

2020-04-14  Peng Liu  <peng.liu6@apple.com>

        Adopt interface AVAudioRoutingArbiter for Mac
        https://bugs.webkit.org/show_bug.cgi?id=210167

        Reviewed by Eric Carlson.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::categoryName): Deleted.
        * platform/audio/mac/AudioSessionMac.mm: Renamed from Source/WebCore/platform/audio/mac/AudioSessionMac.cpp.
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::categoryOverride const):
        (WebCore::AudioSession::setCategoryOverride):

        Fix unified build failures.
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.h:

2020-04-14  Youenn Fablet  <youenn@apple.com>

        ReadableStreamDefaultController::enqueue should check for worker terminated exception
        https://bugs.webkit.org/show_bug.cgi?id=210485

        Reviewed by Mark Lam.

        Make sure to not assert in case of enqueue exception if we are in a terminating worker.
        This is covered by WPT fetch/api/basic/stream-response.any.worker.html and fetch/api/basic/stream-safe-creation.any.worker.html.

        * bindings/js/ReadableStreamDefaultController.h:
        (WebCore::ReadableStreamDefaultController::enqueue):

2020-04-14  Youenn Fablet  <youenn@apple.com>

        Protect MediaStreamTrackPrivate and RealtimeMediaSource when iterating its observers
        https://bugs.webkit.org/show_bug.cgi?id=210488

        Reviewed by Eric Carlson.

        Making sure explicitly that the track private and source remain alive while looping from its observers.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::forEachObserver const):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::forEachObserver const):

2020-04-14  James Craig  <jcraig@apple.com>

        AX: Smart Invert doesn't handle the picture elements on foxnews.com
        <https://webkit.org/b/210472>

        Reviewed by Chris Fleizach.

        Tests: accessibilty/smart-invert.html
               accessibilty/smart-invert-reference.html

        Filled out more variants in the test cases, and removed the unnecessary :not() selector.

        * css/html.css:  
        (@media (inverted-colors) img, picture, video):
        (@media (inverted-colors) img:not(picture>img), picture, video): Deleted.

2020-04-14  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPadOS] Wikipedia articles lay out incorrectly in 1/3 multitasking window
        https://bugs.webkit.org/show_bug.cgi?id=210501
        <rdar://problem/54856323>

        Reviewed by Tim Horton.

        In a 1/3 multitasking window, Safari currently uses the `-[WKWebView _allowsViewportShrinkToFit]` SPI to force
        pages to shrink down by fitting the content width to the view width. This legacy method of shrinking to fit
        involves laying the page out at the normal view width (320px in 1/3 multitasking), and then scaling the page
        down such that any amount of horizontal overflow fits within the view.

        In iOS 13, a new style of shrinking to fit was introduced in support of two new features: page zoom controls
        (accessible via the page formatting menu), and on-by-default page scaling when loading desktop sites on certain
        models of iPad where the page width is less than cutoffs of 1112px (in landscape) and 1024px (in portrait). This
        new method of shrinking to fit involves laying out at a larger width (computed from a combination of the minimum
        effective device width and layout size scale factor), and scaling to fit the effective layout size scale factor
        instead of the entire contents of the page. This means that while we may still get horizontal scrolling after
        shrinking to fit, the overall layout of the page is preserved.

        Currently, in 1/3 multitasking, Safari still relies on the former to scale pages down to fit, which means that
        Wikipedia articles (among other websites) do not lay out sensibly. Moreover, even if Safari adopted the second
        mechanism for shrinking to fit, layout issues would still exist (albeit to a lesser degree), since we'd still
        attempt to shrink the content width down to fit due to the fact that the desktop version of Wikipedia doesn't
        have a meta viewport. While we wouldn't get a broken layout, we'd still have a blank column running down the
        right side of the page, which is less than ideal.

        It's clear that in this case, attempting to shrink page content down to fit the view is suboptimal (at best, it
        leads to a large portion of the page being blank; at worst, it completely breaks page layout). To address this
        bug for now, add a parallel minimumEffectiveDeviceWidth value that takes effect when ignoring scaling
        constraints (i.e. when we're in a multitasking window), and scale the page down to fit this value instead of
        fitting the full content width when computing initial scale in `ViewportConfiguration::initialScaleFromSize`.
        Maintaining this value separately from m_minimumEffectiveDeviceWidth makes it much easier to ensure that the
        effects of this change are only ever active when the quirk is applied, and also when the view is embedded in a
        multitasking window.

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

        Introduce a quirk to fix layout issues in multitasking mode on the desktop version of Wikipedia.

        * page/Quirks.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::initialScaleFromSize const):
        (WebCore::ViewportConfiguration::setMinimumEffectiveDeviceWidth):
        (WebCore::ViewportConfiguration::setMinimumEffectiveDeviceWidthWhenIgnoringScalingConstraints):
        * page/ViewportConfiguration.h:

        Add a minimum effective device width value that only takes effect when ignoring scaling constraints, and update
        `shouldIgnoreMinimumEffectiveDeviceWidth()` and `minimumEffectiveDeviceWidth()` to not always return `true` and
        `0` (respectively) when ignoring scaling constraints, if m_minimumEffectiveDeviceWidthWhenIgnoringScalingConstraints
        is set.

        (WebCore::ViewportConfiguration::minimumEffectiveDeviceWidth const):
        (WebCore::ViewportConfiguration::shouldIgnoreMinimumEffectiveDeviceWidth const):
        (WebCore::ViewportConfiguration::shouldShrinkToFitMinimumEffectiveDeviceWidthWhenIgnoringScalingConstraints const):

2020-04-14  Antoine Quint  <graouts@apple.com>

        Factor PseudoElement creation calls into a single Element::ensurePseudoElement(pseudoId) method
        https://bugs.webkit.org/show_bug.cgi?id=210495

        Reviewed by Antti Koivisto.

        To support webkit.org/b/207290 we need a way to ensure a PseudoElement is available for ::before and ::after
        pseudo-elements on a given Element. We now use a Element::ensurePseudoElement(pseudoId) method to do this and
        replace existing places where we would do something similar.

        * dom/Element.cpp:
        (WebCore::Element::ensurePseudoElement):
        * dom/Element.h:
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::resolvePseudoStyle):

2020-04-14  Simon Fraser  <simon.fraser@apple.com>

        Scroll snap in subframes is often broken
        https://bugs.webkit.org/show_bug.cgi?id=210503

        Reviewed by Darin Adler.

        RenderBox::findEnclosingScrollableContainer() incorrectly consulted the scrollability
        of the main frame, causing snapping in subframes to be broken any time the main frame
        was not scrollable.

        Test: tiled-drawing/scrolling/scroll-snap/scroll-snap-async-iframe.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::findEnclosingScrollableContainer const):

2020-04-14  Andres Gonzalez  <andresg_22@apple.com>

        Make WTR::AccessibilityUIElements calls to accessibilitySetValue  run on AX secondary thread. web content
        https://bugs.webkit.org/show_bug.cgi?id=210500

        Reviewed by Chris Fleizach.

        Removed _accessibilitySetTestValue since it is no longer used, use
        _accessibilitySetValue instead.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetTestValue:forAttribute:]): Deleted.

2020-04-14  David Kilzer  <ddkilzer@apple.com>

        Add WARN_UNUSED_RETURN to decode methods in Source/WebCore
        <https://webkit.org/b/210416>
        <rdar://problem/61693462>

        Reviewed by Alex Christensen.

        * Modules/geolocation/GeolocationPositionData.h:
        * Modules/indexeddb/IDBGetAllResult.h:
        * Modules/indexeddb/IDBGetResult.h:
        * Modules/indexeddb/IDBKeyData.h:
        * Modules/indexeddb/IDBKeyRangeData.h:
        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::decodeKey):
        * Modules/indexeddb/shared/IDBCursorInfo.h:
        * Modules/indexeddb/shared/IDBCursorRecord.h:
        * Modules/indexeddb/shared/IDBDatabaseInfo.h:
        * Modules/indexeddb/shared/IDBError.h:
        * Modules/indexeddb/shared/IDBGetAllRecordsData.h:
        * Modules/indexeddb/shared/IDBGetRecordData.h:
        * Modules/indexeddb/shared/IDBIndexInfo.h:
        * Modules/indexeddb/shared/IDBIterateCursorData.h:
        * Modules/indexeddb/shared/IDBObjectStoreInfo.h:
        * Modules/indexeddb/shared/IDBRequestData.h:
        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
        * Modules/indexeddb/shared/IDBTransactionInfo.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::decodeTimeComparator):
        * dom/EventInit.h:
        * dom/ExceptionData.h:
        * dom/SecurityPolicyViolationEvent.h:
        * editing/FontAttributeChanges.h:
        * editing/FontShadow.h:
        * loader/CanvasActivityRecord.h:
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::decodePersistent):
        * platform/ContentFilterUnblockHandler.h:
        * platform/DragItem.h:
        * platform/KeyedCoding.h:
        * platform/LinkIcon.h:
        * platform/ThreadSafeDataBuffer.h:
        * platform/audio/mac/CAAudioStreamDescription.h:
        * platform/cf/KeyedDecoderCF.h:
        * platform/generic/KeyedDecoderGeneric.h:
        * platform/glib/KeyedDecoderGlib.h:
        * platform/graphics/Region.h:
        * platform/graphics/RemoteVideoSample.h:
        (WebCore::RemoteVideoSample::decode):
        * platform/mediastream/MediaConstraints.h:
        (WebCore::MediaConstraint::decode):
        (WebCore::NumericConstraint::decode):
        (WebCore::StringConstraint::decode):
        * platform/mediastream/RealtimeMediaSourceCapabilities.h:
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        * platform/mediastream/RealtimeMediaSourceSupportedConstraints.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/NetworkLoadMetrics.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::decode):
        * platform/network/SameSiteInfo.h:
        * platform/network/SocketStreamError.h:
        * platform/network/curl/ResourceRequest.h:
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceResponse.h:
        * rendering/EventRegion.h:
        * workers/service/ServiceWorkerFetchResult.h:
        - Add WARN_UNUSED_RETURN to all decode functions.

2020-04-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Store an Element / PseudoId pair to define the KeyframeEffect target
        https://bugs.webkit.org/show_bug.cgi?id=210491

        Reviewed by Antti Koivisto.

        In preparation for webkit.org/b/207290 where we will expose the `pseudoElement` JS API on KeyframeEffect we now
        use an Element / PseudoId (m_target / m_pseudoId) pair to specify an effect's target. In the cases where it matters,
        such as accessing the various animation collections exposed through Element and the KeyframeEffectStack, we now use
        the new KeyframeEffect::targetElementOrPseudoElement() method to access the Element or PseudoElement targeted with
        the Element / PseudoId pair.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimation):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::transitionDidComplete):
        (WebCore::DocumentTimeline::animationAcceleratedRunningStateDidChange):
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        (WebCore::KeyframeEffect::copyPropertiesFromSource):
        (WebCore::KeyframeEffect::getKeyframes):
        (WebCore::KeyframeEffect::forceLayoutIfNeeded):
        (WebCore::KeyframeEffect::computeCSSAnimationBlendingKeyframes):
        (WebCore::KeyframeEffect::computeCSSTransitionBlendingKeyframes):
        (WebCore::KeyframeEffect::animationTimelineDidChange):
        (WebCore::KeyframeEffect::updateEffectStackMembership):
        (WebCore::KeyframeEffect::targetElementOrPseudoElement const):
        (WebCore::KeyframeEffect::setTarget):
        (WebCore::KeyframeEffect::apply):
        (WebCore::KeyframeEffect::invalidate):
        (WebCore::KeyframeEffect::getAnimatedStyle):
        (WebCore::KeyframeEffect::applyPendingAcceleratedActions):
        (WebCore::KeyframeEffect::document const):
        (WebCore::KeyframeEffect::renderer const):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffectStack.cpp:
        (WebCore::KeyframeEffectStack::addEffect):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffectInternal):
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::persist):
        * dom/Document.cpp:
        (WebCore::Document::matchingAnimations):
        * inspector/agents/InspectorAnimationAgent.cpp:
        (WebCore::buildObjectForKeyframes):
        (WebCore::InspectorAnimationAgent::requestEffectTarget):

2020-04-14  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow scroll] Custom scrollbars on gmail don't show
        https://bugs.webkit.org/show_bug.cgi?id=210438
        <rdar://problem/61722541>

        Reviewed by Tim Horton.

        Custom scrollbars painted into the backing store of the scrolling element, but that
        might have become an empty "simple container layer" causing the scroll bars to not
        be painted anywhere.

        Fix by making compositing layers for custom scrollbars. This is better than giving
        backing store to the scroller's element, because that might be huge.

        Test: scrollbars/async-overflow-custom-scrollbar.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::requiresLayerForScrollbar const):
        (WebCore::RenderLayerBacking::requiresHorizontalScrollbarLayer const):
        (WebCore::RenderLayerBacking::requiresVerticalScrollbarLayer const):
        (WebCore::RenderLayerBacking::requiresScrollCornerLayer const):
        * rendering/RenderLayerBacking.h:

2020-04-14  Claudio Saavedra  <csaavedra@igalia.com>

        [GTK] Adapt to GdkVisual deprecation and removal
        https://bugs.webkit.org/show_bug.cgi?id=210489

        Reviewed by Adrian Perez de Castro.

        No new tests needed.

        Update the GdkVisual used to get the screen depth per component in
        GTK3 and use default values for GTK4, as visuals as an abstraction
        are gone from GTK4. The use in WK is very limited so there's no
        much gain from peeking into backend-specific values.

        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth): Guard GdkVisual call and leave
        default value for GTK4.
        (WebCore::screenDepthPerComponent): Update API and ditto.

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Scrollbar handle has no minimum size
        https://bugs.webkit.org/show_bug.cgi?id=209962

        Reviewed by Adrian Perez de Castro.

        Set a minimum thumb length.

        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        (WebCore::ScrollbarThemeAdwaita::minimumThumbLength):

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] New scrollbar click behavior
        https://bugs.webkit.org/show_bug.cgi?id=210002

        Reviewed by Adrian Perez de Castro.

        Use the same bahavior for mouse events when not rendering native scrollbars.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::handleMousePressEvent):

2020-04-14  Antti Koivisto  <antti@apple.com>

        [CSS Selectors] Selectors Level 4 specificity calculation for pseudo classes
        https://bugs.webkit.org/show_bug.cgi?id=210419

        Reviewed by Simon Fraser.

        CSS selector specification drafts at some point had a concept of "dynamic specificity" where
        the specificity of a selector depended on the element it matched. It was only ever used with
        :matches and :nth-child pseudo classes and has subsequently been removed. Selector specificity
        can now always be computed statically.

        There is a ton of code to support this obsolete feature. Remove it.

        https://drafts.csswg.org/selectors-4/#specificity-rules

            "The specificity of an :is(), :not(), or :has() pseudo-class is replaced by the specificity
            of the most specific complex selector in its selector list argument.

            Analogously, the specificity of an :nth-child() or :nth-last-child() selector is the specificity
            of the pseudo class itself (counting as one pseudo-class selector) plus the specificity of the
            most specific complex selector in its selector list argument (if any)."

        * css/html.css:

        Reorganize a :matches rule into a selector list to keep the exact specificites.
        It matters here to select between listbox and menulist correctly based on the 'size' and 'multiple' attributes.

        * css/CSSSelector.cpp:
        (WebCore::selectorSpecificity):
        (WebCore::maxSpecificity):
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::CSSSelector::simpleSelectorSpecificity const):

        Also handle nth here.

        (WebCore::CSSSelector::specificity const):
        (WebCore::simpleSelectorFunctionalPseudoClassStaticSpecificity): Deleted.
        (WebCore::functionalPseudoClassStaticSpecificity): Deleted.
        (WebCore::staticSpecificityInternal): Deleted.
        (WebCore::CSSSelector::staticSpecificity const): Deleted.

        Rename to just computeSpecificity(), there is no other kind than static.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match const):
        (WebCore::SelectorChecker::matchHostPseudoClass const):
        (WebCore::SelectorChecker::matchRecursively const):
        (WebCore::SelectorChecker::checkOne const):
        (WebCore::SelectorChecker::matchSelectorList const):

        SelectorChecker doesn't need to deal with specificity anymore.

        * css/SelectorChecker.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addNthChildType):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):

        Neither does SelectorCompiler.

        * cssjit/SelectorCompiler.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches const):
        (WebCore::SelectorDataList::selectorClosest const):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::hasDynamicSpecificity): Deleted.
        * inspector/InspectorStyleSheet.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::ruleMatches):

        Switch to get the specificity from the selector instead of computing it during selector checking.

        * style/ElementRuleCollector.h:

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Fix race condition in FileMonitor implementation
        https://bugs.webkit.org/show_bug.cgi?id=210483

        Reviewed by Adrian Perez de Castro.

        This is causing flaky timeouts when running resource load statistics layout tests. The problem is that we assume
        FileMonitor has the last reference of the platform monitor and it's deleted on g_object_unref(), but GLib keeps
        another reference that is released later on a different thread if the monitor is still active. We just need to
        ensure we cancel the monitor before calling g_object_unref().

        * platform/FileMonitor.h:
        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::~FileMonitor):
        (WebCore::FileMonitor::didChange):
        (WebCore::FileMonitor::cancel):

2020-04-14  Charlie Turner  <cturner@igalia.com>

        [EME][CDMProxy] Fix waitingForKey logic
        https://bugs.webkit.org/show_bug.cgi?id=210437

        Reviewed by Xabier Rodriguez-Calvar.

        startedWaitingForKey() was incorrectly flagged. It needs to signal on
        the 0->1 transition, here it was only signalling on N->N+1 where N>0.

        Also break ASSERTs into separate statements, it makes it easier in a
        crash dump to see which conjuct fired.

        Test: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-waiting-for-a-key.https.html

        * platform/encryptedmedia/CDMProxy.cpp:
        (WebCore::CDMInstanceProxy::startedWaitingForKey):
        (WebCore::CDMInstanceProxy::stoppedWaitingForKey):

2020-04-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bring back support for rendering scrollbars using the system appearance
        https://bugs.webkit.org/show_bug.cgi?id=209805

        Reviewed by Michael Catanzaro.

        Bring back ScrollbarThemeGtk, RenderThemeGadget and RenderThemeWidget (renamed as RenderThemeScrollbar),
        including only the code needed to render the scrollbars. ScrollbarThemeGtk inherits from ScrollbarThemeAdwaita
        that is used when system appearance is disabled.

        * PlatformGTK.cmake:
        * SourcesGTK.txt:
        * platform/adwaita/ScrollbarThemeAdwaita.cpp:
        * platform/adwaita/ScrollbarThemeAdwaita.h:
        * platform/gtk/RenderThemeGadget.cpp: Added.
        (WebCore::RenderThemeGadget::create):
        (WebCore::createStyleContext):
        (WebCore::appendElementToPath):
        (WebCore::RenderThemeGadget::RenderThemeGadget):
        (WebCore::RenderThemeGadget::marginBox const):
        (WebCore::RenderThemeGadget::borderBox const):
        (WebCore::RenderThemeGadget::paddingBox const):
        (WebCore::RenderThemeGadget::contentsBox const):
        (WebCore::RenderThemeGadget::color const):
        (WebCore::RenderThemeGadget::backgroundColor const):
        (WebCore::RenderThemeGadget::opacity const):
        (WebCore::RenderThemeGadget::state const):
        (WebCore::RenderThemeGadget::setState):
        (WebCore::RenderThemeGadget::minimumSize const):
        (WebCore::RenderThemeGadget::preferredSize const):
        (WebCore::RenderThemeGadget::render):
        (WebCore::RenderThemeBoxGadget::RenderThemeBoxGadget):
        (WebCore::RenderThemeBoxGadget::preferredSize const):
        (WebCore::RenderThemeScrollbarGadget::RenderThemeScrollbarGadget):
        (WebCore::RenderThemeScrollbarGadget::renderStepper):
        * platform/gtk/RenderThemeGadget.h: Added.
        (WebCore::RenderThemeGadget::context const):
        * platform/gtk/RenderThemeScrollbar.cpp: Added.
        (WebCore::widgetMap):
        (WebCore::RenderThemeScrollbar::getOrCreate):
        (WebCore::RenderThemeScrollbar::clearCache):
        (WebCore::RenderThemeScrollbar::RenderThemeScrollbar):
        (WebCore::RenderThemeScrollbar::stepper):
        * platform/gtk/RenderThemeScrollbar.h: Added.
        (WebCore::RenderThemeScrollbar::scrollbar const):
        (WebCore::RenderThemeScrollbar::contents const):
        (WebCore::RenderThemeScrollbar::slider const):
        (WebCore::RenderThemeScrollbar::trough const):
        * platform/gtk/ScrollbarThemeGtk.cpp: Added.
        (WebCore::ScrollbarTheme::nativeTheme):
        (WebCore::themeChangedCallback):
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk):
        (WebCore::ScrollbarThemeGtk::setUseSystemAppearance):
        (WebCore::ScrollbarThemeGtk::themeChanged):
        (WebCore::ScrollbarThemeGtk::updateThemeProperties):
        (WebCore::ScrollbarThemeGtk::hasButtons):
        (WebCore::scrollbarPartStateFlags):
        (WebCore::widgetTypeForScrollbar):
        (WebCore::contentsRectangle):
        (WebCore::ScrollbarThemeGtk::trackRect):
        (WebCore::ScrollbarThemeGtk::backButtonRect):
        (WebCore::ScrollbarThemeGtk::forwardButtonRect):
        (WebCore::ScrollbarThemeGtk::paint):
        (WebCore::ScrollbarThemeGtk::handleMousePressEvent):
        (WebCore::ScrollbarThemeGtk::scrollbarThickness):
        (WebCore::ScrollbarThemeGtk::minimumThumbLength):
        * platform/gtk/ScrollbarThemeGtk.h: Added.

2020-04-14  Youenn Fablet  <youenn@apple.com>

        Add a timer to AVVideoCaptureSource to verify reception of frames
        https://bugs.webkit.org/show_bug.cgi?id=210335

        Reviewed by Eric Carlson.

        Count the number of frames being captured.
        Add a timer repeating every 3 seconds.
        Timer starts/stops based on whether the session is running/is interrupted.
        If the number of frames did not increase, fail the source.
        Manually tested.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::captureFailed):
        Explicitly call stop() instead of just setting m_isProducingData.
        This ensures we release all resources and that we may not restart capturing after captureFailed().
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::verifyIsCapturing):
        (WebCore::AVVideoCaptureSource::updateVerifyCapturingTimer):
        (WebCore::AVVideoCaptureSource::captureOutputDidOutputSampleBufferFromConnection):
        (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange):

2020-04-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260024.
        https://bugs.webkit.org/show_bug.cgi?id=210480

        Regressed performance due to loss of specificity caching
        (Requested by anttik on #webkit).

        Reverted changeset:

        "[CSS Selectors] Selectors Level 4 specificity calculation for
        pseudo classes"
        https://bugs.webkit.org/show_bug.cgi?id=210419
        https://trac.webkit.org/changeset/260024

2020-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260052.
        https://bugs.webkit.org/show_bug.cgi?id=210479

        Breaks iOS tests, needs more work (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Add ENABLE_CUSTOM_SCROLLBARS and define it for macOS and for
        non-Cocoa platforms"
        https://bugs.webkit.org/show_bug.cgi?id=210460
        https://trac.webkit.org/changeset/260052

2020-04-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Use ThemeAdwaita instead of ThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=210334

        Reviewed by Carlos Garcia Campos.

        No new tests needed.

        * platform/adwaita/ThemeAdwaita.cpp: Build the Theme::singleton() factory also with USE(GTK4).
        * platform/gtk/ThemeGtk.cpp: Conditionally build if !USE(GTK4).
        (WebCore::ThemeGtk::ensurePlatformColors const): Add deprecation ignore guards.
        * platform/gtk/ThemeGtk.h: Conditionally build if !USE(GTK4).

2020-04-13  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow] Get scroll-snap working with async overflow scrolling on macOS
        https://bugs.webkit.org/show_bug.cgi?id=210471
        <rdar://problem/61643199>

        Reviewed by Wenson Hsieh.

        Obey the FIXME and move scroll-snap related code to the delegate so that it works for
        both frame and overflow nodes.

        Tests: tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-async-overflow-stateless.html
               tiled-drawing/scrolling/scroll-snap/scroll-snap-mandatory-async-overflow.html

        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        (WebCore::ScrollingTreeFrameScrollingNodeMac::commitStateBeforeChildren):
        (WebCore::convertToLayoutUnits): Deleted.
        * page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
        (WebCore::convertToLayoutUnits):
        (WebCore::ScrollingTreeScrollingNodeDelegateMac::updateFromStateNode):

2020-04-13  Zalan Bujtas  <zalan@apple.com>

        Do not cache definite height against perpendicular flex items.
        https://bugs.webkit.org/show_bug.cgi?id=207603
        <rdar://problem/59135373>

        Reviewed by Simon Fraser.

        RenderFlexibleBox::m_hasDefiniteHeight should not be set when the child we check against is a perpendicular item
        because a perpendicular box's height is resolved against the containing block's width.

        Test: fast/flexbox/unresolved-height-percentage-crash.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild):

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Replace use of Checked<size_t, RecordOverflow> with CheckedSize
        <https://webkit.org/b/210461>

        Reviewed by Mark Lam.

        * platform/audio/ios/AudioFileReaderIOS.cpp:
        (WebCore::createAudioBufferList):
        * platform/graphics/ImageBufferBackend.cpp:
        (WebCore::ImageBufferBackend::calculateBackendSize):
        * platform/graphics/win/Direct2DUtilities.cpp:
        (WebCore::Direct2D::createDirect2DImageSurfaceWithData):
        * platform/graphics/win/ImageBufferDirect2DBackend.cpp:
        (WebCore::ImageBufferDirect2DBackend::copyNativeImage const):

2020-04-13  Simon Fraser  <simon.fraser@apple.com>

        Add ENABLE_CUSTOM_SCROLLBARS and define it for macOS and for non-Cocoa platforms
        https://bugs.webkit.org/show_bug.cgi?id=210460

        Reviewed by Tim Horton.

        Wrap all custom scrollbar and custom scroll corner code in ENABLE(CUSTOM_SCROLLBARS).

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::updateScrollCorner):
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::createScrollbar):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containingBlock const):
        * rendering/RenderObject.h:
        * rendering/RenderScrollbar.cpp:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.cpp:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.cpp:
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::createScrollbar):
        * rendering/RenderTextControlSingleLine.cpp:
        * style/StyleResolver.cpp:

2020-04-13  Kenneth Russell  <kbr@chromium.org>

        Clean up more resources during WebGLLayer teardown
        https://bugs.webkit.org/show_bug.cgi?id=210222

        Reviewed by Dean Jackson.

        Release OpenGL resources just before destruction of the underlying
        OpenGL context.

        * platform/graphics/cocoa/GraphicsContextGLOpenGLCocoa.mm:
        (WebCore::GraphicsContextGLOpenGL::~GraphicsContextGLOpenGL):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer releaseGLResources]):
        (-[WebGLLayer dealloc]): Deleted.

2020-04-13  Noam Rosenthal  <noam@webkit.org>

        Background images should figure into visually non empty heuristic
        https://bugs.webkit.org/show_bug.cgi?id=208501

        Reviewed by Simon Fraser.

        This makes the visually non-empty heuristic treat background images the same
        as it treats regular images. This is in line with first contentful paint spec in paint timing:
        https://w3c.github.io/paint-timing/.

        Note that the pixel count is computed based on the image size rather than the box size, as the box size might not be known at this time.
        This is equivalent to the pixel reporting done for RenderImage.
        
        Border-images and masks are excluded, as per the spec.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):
                Call incrementVisuallyNonEmptyPixelCountIfNeeded for background images

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::RenderElement):
        * rendering/RenderBox.cpp:
        (WebCore::RenderElement::incrementVisuallyNonEmptyPixelCountIfNeeded):
        * rendering/RenderBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::incrementVisuallyNonEmptyPixelCountIfNeeded): Deleted.
        * rendering/RenderImage.h:
                Moved incrementVisuallyNonEmptyPixelCountIfNeeded from RenderImage to RenderElement

2020-04-13  Yusuke Suzuki  <ysuzuki@apple.com>

        module's default cross-origin value should be "anonymous"
        https://bugs.webkit.org/show_bug.cgi?id=210326

        Reviewed by Sam Weinig.

        Tests: http/tests/security/cookie-module-import-propagate.html
               http/tests/security/cookie-module-import.html
               http/tests/security/cookie-module-propagate.html
               http/tests/security/cookie-module.html

        The original spec was using "omit" crossorigin for modules when crossorigin is not set / empty.
        However, the spec is changed to sending requests with "same-origin" credentials ("anonymous" crossorigin mode)
        by default. We should follow it.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        * dom/ScriptElementCachedScriptFetcher.cpp:
        (WebCore::ScriptElementCachedScriptFetcher::requestModuleScript const):
        * dom/ScriptElementCachedScriptFetcher.h:
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script): While this is not directly related to this patch, added new tests found that we are returning
        null StringView if the resource is zero byte. This totally works, but JSC::Parser has assertion that this is non-null
        StringView. For zero byte CachedScript resource, we should return non-null empty StringView instead.

2020-04-13  Dean Jackson  <dino@apple.com>

        Add Apple's Reality files to AR System Preview
        https://bugs.webkit.org/show_bug.cgi?id=210449
        <rdar://problem/61732793>

        Reviewed by Sam Weinig.

        Add support for Apples .reality AR files - both the vendor MIME
        Type and our UTI. These have been supported by WebKitAdditions for
        a while. Move them into Open Source.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::systemPreviewMIMETypes):
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::UTIFromUnknownMIMEType):

2020-04-13  Per Arne Vollan  <pvollan@apple.com>

        [iOS] Remove unused UTType swizzler code
        https://bugs.webkit.org/show_bug.cgi?id=210435

        Unreviewed rollout of r258120.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/UTTypeRecordSwizzler.h: Removed.
        * platform/cocoa/UTTypeRecordSwizzler.mm: Removed.

2020-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260003.
        https://bugs.webkit.org/show_bug.cgi?id=210441

         Avoid using basic-authentication for tests (Requested by
        yusukesuzuki on #webkit).

        Reverted changeset:

        "module's default cross-origin value should be "anonymous""
        https://bugs.webkit.org/show_bug.cgi?id=210326
        https://trac.webkit.org/changeset/260003

2020-04-13  Antti Koivisto  <antti@apple.com>

        [CSS Selectors] Selectors Level 4 specificity calculation for pseudo classes
        https://bugs.webkit.org/show_bug.cgi?id=210419

        Reviewed by Simon Fraser.

        CSS selector specification drafts at some point had a concept of "dynamic specificity" where
        the specificity of a selector depended on the element it matched. It was only ever used with
        :matches and :nth-child pseudo classes and has subsequently been removed. Selector specificity
        can now always be computed statically.

        There is a ton of code to support this obsolete feature. Remove it.

        https://drafts.csswg.org/selectors-4/#specificity-rules

            "The specificity of an :is(), :not(), or :has() pseudo-class is replaced by the specificity
            of the most specific complex selector in its selector list argument.

            Analogously, the specificity of an :nth-child() or :nth-last-child() selector is the specificity
            of the pseudo class itself (counting as one pseudo-class selector) plus the specificity of the
            most specific complex selector in its selector list argument (if any)."

        * css/html.css:

        Reorganize a :matches rule into a selector list to keep the exact specificites.
        It matters here to select between listbox and menulist correctly based on the 'size' and 'multiple' attributes.

        * css/CSSSelector.cpp:
        (WebCore::selectorSpecificity):
        (WebCore::maxSpecificity):
        (WebCore::simpleSelectorSpecificityInternal):
        (WebCore::CSSSelector::simpleSelectorSpecificity const):

        Also handle nth here.

        (WebCore::CSSSelector::specificity const):
        (WebCore::simpleSelectorFunctionalPseudoClassStaticSpecificity): Deleted.
        (WebCore::functionalPseudoClassStaticSpecificity): Deleted.
        (WebCore::staticSpecificityInternal): Deleted.
        (WebCore::CSSSelector::staticSpecificity const): Deleted.

        Rename to just computeSpecificity(), there is no other kind than static.

        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match const):
        (WebCore::SelectorChecker::matchHostPseudoClass const):
        (WebCore::SelectorChecker::matchRecursively const):
        (WebCore::SelectorChecker::checkOne const):
        (WebCore::SelectorChecker::matchSelectorList const):

        SelectorChecker doesn't need to deal with specificity anymore.

        * css/SelectorChecker.h:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addNthChildType):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):

        Neither does SelectorCompiler.

        * cssjit/SelectorCompiler.h:
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches const):
        (WebCore::SelectorDataList::selectorClosest const):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildObjectForSelectorHelper):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelector):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::hasDynamicSpecificity): Deleted.
        * inspector/InspectorStyleSheet.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::highlightSelector):
        * style/ElementRuleCollector.cpp:
        (WebCore::Style::ElementRuleCollector::ruleMatches):
        (WebCore::Style::ElementRuleCollector::collectMatchingRulesForList):

        Switch to get the specificity from the selector instead of computing it during selector checking.

        * style/ElementRuleCollector.h:
        * style/RuleData.cpp:
        (WebCore::Style::computeMatchesBasedOnRuleHash):
        (WebCore::Style::RuleData::RuleData):
        (WebCore::Style::computeMatchBasedOnRuleHash): Deleted.
        * style/RuleData.h:
        (WebCore::Style::RuleData::matchesBasedOnRuleHash const):
        (WebCore::Style::RuleData::matchBasedOnRuleHash const): Deleted.

        This can be a bit instead of an enum since there is no need to communicate specificity.

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        KeyedDecoder functions in ResourceLoadStatistics.{cpp,h} should return bool and use WARN_UNUSED_RETURN
        <https://webkit.org/b/210414>
        <rdar://problem/61693118>

        Reviewed by Alex Christensen.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::decodeHashCountedSet):
        (WebCore::decodeHashSet):
        (WebCore::decodeOptionSet):
        (WebCore::decodeFontHashSet):
        (WebCore::decodeCanvasActivityRecord):
        (WebCore::ResourceLoadStatistics::decode):
        * loader/ResourceLoadStatistics.h:
        - Change decode functions to return `bool`.
        - Add WARN_UNUSED_RETURN to all decode functions.
        - Check the return value of all decode functions.

2020-04-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When drawing an image srcRect and imageRect have to be in the orientation of destRect
        https://bugs.webkit.org/show_bug.cgi?id=210364

        Reviewed by Darin Adler.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::drawImage):
        Use the renderer to get the orientation of the image if it is available.
        Otherwise fall back to computedStyle().

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::draw):
        For async image decoding, we will use the none oriented size as the
        sizeForDrawing. imageRect must be in the same orientation as destRect.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        srcRect must be in the same orientation as destRect.

2020-04-13  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove redundant move in return statement.

        Return statement already returns rvalue,
        so we don't need move here.

        This patch removes the build warning below since r259922.
        warning: redundant move in return statement [-Wredundant-move]

        No new tests, no new behaviours.

        * page/csp/ContentSecurityPolicyResponseHeaders.h:
        (WebCore::ContentSecurityPolicyResponseHeaders::decode):
        * platform/network/cf/CertificateInfoCFNet.cpp:
        (WTF::Persistence::decodeSecTrustRef):

2020-04-13  Youenn Fablet  <youenn@apple.com>

        Fix mute/unmute of CoreAudioCapture sources after revision 257914
        https://bugs.webkit.org/show_bug.cgi?id=210381

        Reviewed by Eric Carlson.

        Revert part of revision 257914 since we still need the active source registration/unregistration when capturing in web process.
        Make sure mock factory delegates all active source handling to CoreAudioCaptureSourceFactory,
        now that the mock factory is using CoreAudioCaptureSources with a mock share dunit.

        Tests: platform/ios/mediastream/audio-muted-in-background-tab-gpu-process.html
               platform/ios/mediastream/getUserMedia-single-capture-gpu-process.html

        * platform/mediastream/RealtimeMediaSourceFactory.h:
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:

2020-04-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix various build warnings
        https://bugs.webkit.org/show_bug.cgi?id=210429

        Reviewed by Mark Lam.

        Fix -Wunused-parameter warning.

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texImage2DBase):

2020-04-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Pre-fill columnIntrinsicWidths vector
        https://bugs.webkit.org/show_bug.cgi?id=210415

        Reviewed by Antti Koivisto.

        Vector<ColumnMinimumWidth> has a fixed number of entries (number of columns in the table).
        (This patch also flips the shouldFlex flag to isFixedWidth. It reads better in the context of minimum _widths_).

        Test: fast/layoutformattingcontext/table-with-column-spanner-first-row.html

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

2020-04-13  Adrian Perez de Castro  <aperez@igalia.com>

        [GTK4] Fix usage of GDK event functions in PlatformWheelEventGtk
        https://bugs.webkit.org/show_bug.cgi?id=210160

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * platform/gtk/PlatformWheelEventGtk.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Conditionally
        use the new GDK event functions when building with GTK4.

2020-04-13  Yusuke Suzuki  <ysuzuki@apple.com>

        module's default cross-origin value should be "anonymous"
        https://bugs.webkit.org/show_bug.cgi?id=210326

        Reviewed by Sam Weinig.

        The original spec was using "omit" crossorigin for modules when crossorigin is not set / empty.
        However, the spec is changed to sending requests with "same-origin" credentials ("anonymous" crossorigin mode)
        by default. We should follow it.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        * dom/ScriptElementCachedScriptFetcher.cpp:
        (WebCore::ScriptElementCachedScriptFetcher::requestModuleScript const):
        * dom/ScriptElementCachedScriptFetcher.h:
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::script): While this is not directly related to this patch, added new tests found that we are returning
        null StringView if the resource is zero byte. This totally works, but JSC::Parser has assertion that this is non-null
        StringView. For zero byte CachedScript resource, we should return non-null empty StringView instead.

2020-04-13  Charlie Turner  <cturner@igalia.com>

        [EME][GStreamer] remove m_cdmInstance ASSERT in cdmInstanceDetached
        https://bugs.webkit.org/show_bug.cgi?id=210331

        Reviewed by Xabier Rodriguez-Calvar.

        In tests that reset the src very quickly, the MediaKeys can be
        installed and then the src is reset before an attachment message
        is sent. Hence, detachment can result in no CDM currently
        existing.

        Covered by imported/w3c/web-platform-tests/encrypted-media.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::cdmInstanceDetached): Only
        assert if the CDM instance has been set before detachment.
        (WebCore::MediaPlayerPrivateGStreamer::attemptToDecryptWithInstance):
        Do not need the .get(), the operator== overload in RefPtr does
        this for us, and it makes the code more consistent.

2020-04-13  Rob Buis  <rbuis@igalia.com>

        Remove return parameter from FrameLoader::closeURL
        https://bugs.webkit.org/show_bug.cgi?id=210404

        Reviewed by Manuel Rego Casasnovas.

        Remove return parameter from FrameLoader::closeURL since it always
        returns true and is never tested.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeURL):
        * loader/FrameLoader.h:

2020-04-13  Rob Buis  <rbuis@igalia.com>

        Remove addExtraFieldsToSubresourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=210407

        Reviewed by Darin Adler.

        Remove addExtraFieldsToSubresourceRequest since it can be replaced by
        calling addExtraFieldsToRequest. The loadType parameter is not taken
        into account by defaultRequestCachingPolicy so FrameLoadType::Standard
        rather than m_loadType is passed.

        This patch also replaces the isMainResource boolean parameter with an enum.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::loadResourceSynchronously):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::addExtraFieldsToSubresourceRequest): Deleted.
        * loader/FrameLoader.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):

2020-04-12  Darin Adler  <darin@apple.com>

        Fix a few mispellings of descendant and propagation
        https://bugs.webkit.org/show_bug.cgi?id=210409

        Reviewed by Mark Lam.

        * dom/Element.cpp:
        (WebCore::Element::dispatchWheelEvent): "propagation"
        * dom/TreeScopeOrderedMap.cpp:
        (WebCore::TreeScopeOrderedMap::getAllElementsById const):
        "descendants". Also refactored this function a bit.
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager const):
        "descendants"
        * rendering/RenderFrameSet.cpp:
        (WebCore::resetFrameRendererAndDescendants): "descendants"
        (WebCore::RenderFrameSet::positionFrames): "descendants"
        (WebCore::RenderFrameSet::positionFramesWithFlattening): "descendants"

2020-04-12  Darin Adler  <darin@apple.com>

        Refactor and tighten up the CSSVariableReferenceValue class
        https://bugs.webkit.org/show_bug.cgi?id=210406

        Reviewed by Anders Carlsson.

        * css/CSSCustomPropertyValue.h: Remove uneeded forward declaration of
        CSSVariableReferenceValue, since it's not used here. Added inclde of
        CSSVariableData.h since the use of Variant in this class does require
        that header, which we were getting indirectly before from
        CSSVariableReferenceValue.h in some translation units.

        * css/CSSVariableReferenceValue.cpp:
        (WebCore::CSSVariableReferenceValue::CSSVariableReferenceValue): Moved here
        from the header.
        (WebCore::CSSVariableReferenceValue::create): Ditto.
        (WebCore::CSSVariableReferenceValue::equals const): Ditto.
        (WebCore::CSSVariableReferenceValue::customCSSText const): Use non-null to
        indicate this is not serialized.
        * css/CSSVariableReferenceValue.h: Reduced includes, inlining, marked
        constructor explicit, removed unneeded m_serialized boolean.

        * rendering/style/StyleCustomPropertyData.h: Remove unneeded include
        of CSSVariableReferenceValue.h, not used here.

2020-04-12  Darin Adler  <darin@apple.com>

        Fix some strange uses of start/endOfDocument
        https://bugs.webkit.org/show_bug.cgi?id=210408

        Reviewed by Wenson Hsieh.

        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        Call startOfDocument and endOfDocument without unnecessarily turning a Position
        into a VisiblePostion, since those functions just require any node from the document.

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for column spanners
        https://bugs.webkit.org/show_bug.cgi?id=210403

        Reviewed by Antti Koivisto.

        Table width constraint computation with spanner support is as follows:

        1. Collect each cells' width constraints.
        2. Collect fixed column widths set by <colgroup>'s and <col>s.
        3. Find the min/max width for each columns using the cell constraints and the <col> fixed widths but ignore column spans.
        4. Distribute column spanning cells min/max widths.
        5. Add them all up and return the computed min/max widths.

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator-=):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Columns::hasFixedColumnsOnly const):
        * layout/tableformatting/TableGrid.h:

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Column, Row and Cell boxes are always ContainerBoxes
        https://bugs.webkit.org/show_bug.cgi?id=210402

        Reviewed by Antti Koivisto.

        These boxes are always ContainerBox types.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::Column):
        (WebCore::Layout::TableGrid::Columns::addColumn):
        (WebCore::Layout::TableGrid::Rows::addRow):
        (WebCore::Layout::TableGrid::Row::Row):
        (WebCore::Layout::TableGrid::Cell::Cell):
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::insertCell):
        (WebCore::Layout::TableGrid::removeCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Column::box const):
        (WebCore::Layout::TableGrid::Row::box const):
        (WebCore::Layout::TableGrid::Cell::box const):

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add support for fixed width columns
        https://bugs.webkit.org/show_bug.cgi?id=210401

        Reviewed by Antti Koivisto.

        This is in preparation for adding support for spanner cells.
        Fixed width columns (<col> and <td>) don't participate in the spanner width distribution.

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::IntrinsicWidthConstraints::operator-=):
        * layout/Verification.cpp:
        (WebCore::Layout::areEssentiallyEqual):
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree):
        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computedIntrinsicWidthConstraints):
        (WebCore::Layout::TableFormattingContext::computedPreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns): Deleted.
        (WebCore::Layout::TableFormattingContext::useAsContentLogicalWidth): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableFormattingContextGeometry.cpp:
        (WebCore::Layout::TableFormattingContext::Geometry::intrinsicWidthConstraintsForCell):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::isFixedWidth const):
        (WebCore::Layout::TableGrid::Cell::isFixedWidth const):
        (WebCore::Layout::TableGrid::Slot::Slot):
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::Column::setWidthConstraints): Deleted.
        (WebCore::Layout::TableGrid::Column::widthConstraints const): Deleted.
        (WebCore::Layout::TableGrid::Column::hasFixedWidth const): Deleted.
        (WebCore::Layout::TableGrid::widthConstraints): Deleted.
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::setWidthConstraints):
        (WebCore::Layout::TableGrid::widthConstraints):
        (WebCore::Layout::TableGrid::Column::setHasFixedWidthCell):
        (WebCore::Layout::TableGrid::Column::hasFixedWidthCell const):
        (WebCore::Layout::TableGrid::Slot::cell const):
        (WebCore::Layout::TableGrid::Slot::cell):
        (WebCore::Layout::TableGrid::Slot::widthConstraints const):
        (WebCore::Layout::TableGrid::Slot::setWidthConstraints):
        (WebCore::Layout::TableGrid::Slot::hasColumnSpan const):
        (WebCore::Layout::TableGrid::Slot::hasRowSpan const):
        (WebCore::Layout::TableGrid::Slot::isColumnSpanned const):
        (WebCore::Layout::TableGrid::Slot::isRowSpanned const):
        (WebCore::Layout::TableGrid::hasComputedWidthConstraints const): Deleted.

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Introduce dedicated SlotPosition/CellSpan structs
        https://bugs.webkit.org/show_bug.cgi?id=210399

        Reviewed by Antti Koivisto.

        SlotPosition.column/row and CellSpan.column/row read better.

        * layout/LayoutUnits.h:
        (WebCore::Layout::SlotPosition::SlotPosition):
        (WebCore::Layout::operator==):
        (WTF::SlotPositionHash::hash):
        (WTF::SlotPositionHash::equal):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::emptyValue):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::constructDeletedValue):
        (WTF::HashTraits<WebCore::Layout::SlotPosition>::isDeletedValue):
        * 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/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Cell::Cell):
        (WebCore::Layout::TableGrid::appendCell):
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::Cell::startColumn const):
        (WebCore::Layout::TableGrid::Cell::endColumn const):
        (WebCore::Layout::TableGrid::Cell::startRow const):
        (WebCore::Layout::TableGrid::Cell::endRow const):
        (WebCore::Layout::TableGrid::Cell::columnSpan const):
        (WebCore::Layout::TableGrid::Cell::rowSpan const):
        (WebCore::Layout::TableGrid::Cell::span const):
        (WebCore::Layout::TableGrid::Cell::size const): Deleted.

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Add table support to BlockFormattingContext::Geometry::inFlowWidthAndMargin
        https://bugs.webkit.org/show_bug.cgi?id=210400

        Reviewed by Antti Koivisto.

        Use a slightly modified shrink-to-fit logic to compute the table width.

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

2020-04-12  Zalan Bujtas  <zalan@apple.com>

        [LFC][TFC] Cleanup class/struct/variable names in TableGrid/TableFormattingContext
        https://bugs.webkit.org/show_bug.cgi?id=210397

        Reviewed by Antti Koivisto.

        This is in preparation for the column spanner work.

        * layout/tableformatting/TableFormattingContext.cpp:
        (WebCore::Layout::TableFormattingContext::layoutInFlowContent):
        (WebCore::Layout::TableFormattingContext::layoutCell):
        (WebCore::Layout::TableFormattingContext::positionTableCells):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForRows):
        (WebCore::Layout::TableFormattingContext::setComputedGeometryForSections):
        (WebCore::Layout::TableFormattingContext::ensureTableGrid):
        (WebCore::Layout::TableFormattingContext::computePreferredWidthForColumns):
        (WebCore::Layout::TableFormattingContext::computeAndDistributeExtraHorizontalSpace):
        (WebCore::Layout::TableFormattingContext::useAsContentLogicalWidth):
        (WebCore::Layout::TableFormattingContext::layoutTableCellBox): Deleted.
        * layout/tableformatting/TableFormattingContext.h:
        * layout/tableformatting/TableGrid.cpp:
        (WebCore::Layout::TableGrid::Column::Column):
        (WebCore::Layout::TableGrid::Column::hasFixedWidth const):
        (WebCore::Layout::TableGrid::Columns::addColumn):
        (WebCore::Layout::TableGrid::Columns::addAnonymousColumn):
        (WebCore::Layout::TableGrid::Rows::addRow):
        (WebCore::Layout::TableGrid::Row::Row):
        (WebCore::Layout::TableGrid::Cell::Cell):
        (WebCore::Layout::TableGrid::Slot::Slot):
        (WebCore::Layout::TableGrid::slot):
        (WebCore::Layout::TableGrid::appendCell):
        (WebCore::Layout::TableGrid::insertCell):
        (WebCore::Layout::TableGrid::removeCell):
        (WebCore::Layout::TableGrid::widthConstraints):
        (WebCore::Layout::TableGrid::ColumnsContext::addColumn): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::CellInfo): Deleted.
        (WebCore::Layout::TableGrid::SlotInfo::SlotInfo): Deleted.
        * layout/tableformatting/TableGrid.h:
        (WebCore::Layout::TableGrid::totalHorizontalSpacing const):
        (WebCore::Layout::TableGrid::hasComputedWidthConstraints const):
        (WebCore::Layout::TableGrid::Column::box const):
        (WebCore::Layout::TableGrid::Columns::list):
        (WebCore::Layout::TableGrid::Columns::list const):
        (WebCore::Layout::TableGrid::Columns::size const):
        (WebCore::Layout::TableGrid::Columns::logicalWidth const):
        (WebCore::Layout::TableGrid::Row::logicalBottom const):
        (WebCore::Layout::TableGrid::Row::box const):
        (WebCore::Layout::TableGrid::Rows::list):
        (WebCore::Layout::TableGrid::Rows::rowList const):
        (WebCore::Layout::TableGrid::Rows::size const):
        (WebCore::Layout::TableGrid::Cell::startColumn const):
        (WebCore::Layout::TableGrid::Cell::endColumn const):
        (WebCore::Layout::TableGrid::Cell::startRow const):
        (WebCore::Layout::TableGrid::Cell::endRow const):
        (WebCore::Layout::TableGrid::Cell::columnSpan const):
        (WebCore::Layout::TableGrid::Cell::rowSpan const):
        (WebCore::Layout::TableGrid::Cell::position const):
        (WebCore::Layout::TableGrid::Cell::size const):
        (WebCore::Layout::TableGrid::Cell::box const):
        (WebCore::Layout::TableGrid::columns const):
        (WebCore::Layout::TableGrid::columns):
        (WebCore::Layout::TableGrid::rows const):
        (WebCore::Layout::TableGrid::rows):
        (WebCore::Layout::TableGrid::cells):
        (WebCore::Layout::TableGrid::CellInfo::startColumn const): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::endColumn const): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::startRow const): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::endRow const): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::columnSpan const): Deleted.
        (WebCore::Layout::TableGrid::CellInfo::rowSpan const): Deleted.
        (WebCore::Layout::TableGrid::Column::columnBox const): Deleted.
        (WebCore::Layout::TableGrid::ColumnsContext::columns): Deleted.
        (WebCore::Layout::TableGrid::ColumnsContext::columns const): Deleted.
        (WebCore::Layout::TableGrid::ColumnsContext::logicalWidth const): Deleted.
        (WebCore::Layout::TableGrid::columnsContext const): Deleted.
        (WebCore::Layout::TableGrid::columnsContext): Deleted.

2020-04-11  Jack Lee  <shihchieh_lee@apple.com>

        Infinite loop in InsertListCommand::doApply()
        https://bugs.webkit.org/show_bug.cgi?id=210354
        <rdar://problem/61427778>

        Reviewed by Darin Adler.

        Function startOfNextParagraph may return an empty position. Added null check to exit the while loop
        and stop looking for next paragraph.

        Test: editing/inserting/insert-list-end-of-table.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):

2020-04-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK1] Touch Bar flashes when typing in Vietnamese in Mail
        https://bugs.webkit.org/show_bug.cgi?id=210394
        <rdar://problem/60099560>

        Reviewed by Tim Horton.

        See WebKitLegacy/mac/ChangeLog for more details.

        Currently, many users of TemporarySelectionChange use it to temporarily avoid propagating selection changes to
        the client layer during temporary selection changes. This involves creating a TemporarySelectionChange without
        a new selection, but with the `IgnoreSelectionChanges` option specified, which makes us call `Editor::
        setIgnoreSelectionChanges` to suppress selection change notifications.

        Do a bit of cleanup in this area by introducing IgnoreSelectionChangeForScope, which wraps a
        TemporarySelectionChange and makes it easier for a handful of call sites that currently use
        TemporarySelectionChange to hide selection changes from the client layer to get their desired behavior.

        Test: CandidateTests.DoNotHideCandidatesDuringTextReplacement

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::IgnoreSelectionChangeForScope::IgnoreSelectionChangeForScope):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::insertDroppedImagePlaceholdersAtCaret):

        Replace these:

                `TemporarySelectionChange ignoreSelectionChanges { frame, WTF::nullopt, TemporarySelectionOption::IgnoreSelectionChanges };`

        ...with these instead:

                `IgnoreSelectionChangeForScope ignoreSelectionChanges { *frame };`

2020-04-11  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow] Can't scroll overflow:scroll in sideways-scrollable RTL document
        https://bugs.webkit.org/show_bug.cgi?id=210389

        Reviewed by Tim Horton.

        ScrollingTree::handleWheelEvent() converts the event coordinates from view to "content"
        coordinates, but we then jump into hit-testing on CALayers. In a sideways-scrollable
        RTL document, the root content layer has a negative X offset which corresponds to
        scrollOrigin; we need to map the point into the coordinate space of this layer
        before entering layer-based hit-testing.

        Tests: fast/scrolling/mac/async-scroll-overflow-rtl-zoomed.html
               fast/scrolling/mac/async-scroll-overflow-rtl.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):
        * page/scrolling/mac/ScrollingTreeMac.mm:
        (ScrollingTreeMac::scrollingNodeForPoint):

2020-04-10  Darin Adler  <darin@apple.com>

        Move more from live range to SimpleRange: callers of absoluteTextRects
        https://bugs.webkit.org/show_bug.cgi?id=210369

        Reviewed by Anders Carlsson.

        * dom/Node.cpp:
        (WebCore::Node::textRects const): Deleted.
        * dom/Node.h: Updated for the above.

        * dom/Range.cpp:
        (WebCore::Range::absoluteBoundingBox const): Updated since absoluteTextRects
        no longer has a RangeInFixedPosition* argument.
        (WebCore::Range::absoluteTextRects const): Removed the unused RangeInFixedPosition*
        argument.
        * dom/Range.h: Got rid of unused RangeInFixedPosition type and also removed
        RangeInFixedPosition* argument from the absoluteTextRects function. Later will
        remove absoluteTextRects entirely.

        * editing/Editor.cpp:
        (WebCore::Editor::firstRectForRange const): Use RenderObject::absoluteTextQuads
        and unitedBoundingBoxes rather than using RenderObject::absoluteBoundingBoxRectForRange.

        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::detectContentInRange): Use SimpleRange rather than
        live ranges.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::setContainerAndOffsetForRange): Moved from int to unsigned.
        (WebCore::HTMLTextFormControlElement::selection const): Return Optional<SimpleRange>
        rather than a live range.
        * html/HTMLTextFormControlElement.h: Updated for the change above.

        * page/TextIndicator.cpp:
        (WebCore::initializeIndicator): Updated since absoluteTextRects no longer takes
        a RangeInFixedPosition* argument.

        * rendering/HighlightData.h: Removed stray obsolete declaration.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::absoluteBoundingBoxRectForRange): Deleted. Callers can
        use absoluteTextQuads directly. We need to cut down on the number of separate
        functions that are not really separate concepts, and this was used in only one place.
        (WebCore::RenderObject::absoluteTextRects): Added. Replaces Range::absoluteTextRects
        for all callers outside the live range class and will eventually replace it entirely.
        * rendering/RenderObject.h: Updated for the above.

2020-04-11  Devin Rousso  <drousso@apple.com>

        REGRESSION (Safari 13.1?): Web Inspector: Debugger hang at breakpoint when using Keyboard Maestro
        https://bugs.webkit.org/show_bug.cgi?id=210177
        <rdar://problem/61485723>

        Reviewed by Joseph Pecoraro.

        Partial revert of r251036 <https://webkit.org/b/202716> to go back to using AppKit APIs
        instead of `CFRunLoopRunInMode`. Only seems to affect WebKitLegacy.

        * inspector/PageScriptDebugServer.h:
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::runEventLoopWhilePausedInternal):
        (WebCore::PageScriptDebugServer::platformShouldContinueRunningEventLoopWhilePaused):
        * inspector/mac/PageScriptDebugServerMac.mm: Added.
        (WebCore::PageScriptDebugServer::platformShouldContinueRunningEventLoopWhilePaused):

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2020-04-08  Darin Adler  <darin@apple.com>

        Use Node::length to replace Node::maxCharacterOffset and lastOffsetInNode; switch more offsets from int to unsigned
        https://bugs.webkit.org/show_bug.cgi?id=210246

        Reviewed by Antti Koivisto.

        - The recently-added Node::length, which matches the DOM specification terminology
          for node offsets as used in ranges, is the same as the existing maxCharacterOffset
          and lastOffsetInNode functions. Deleted all uses of those and replaced them
          with calls to Node::length. One of the benefits of this is that Node::length is
          implemented more efficiently and is not a virtual function. Another is consistently
          matching the DOM specification terminology.
        - Many offsets, including the ones in live ranges, are currently implemented as signed
          in WebKit, but are specified as unsigned in the DOM and HTML specifications. This
          has very little observable effect from JavaScript that can affect website compatibility,
          but it's still helpful to be consistent both with the specification and internally.
          Accordingly, changed some of these to unsigned; more to come later.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::previousBoundary): Use length instead of
        maxCharacterOffset.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::maxCharacterOffset const): Deleted.
        * dom/CharacterData.h: Deleted maxCharacterOffset override.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::shiftMarkers): Use length instead of
        maxCharacterOffset.

        * dom/Node.cpp:
        (WebCore::Node::maxCharacterOffset const): Deleted.
        * dom/Node.h: Deleted maxCharacterOffset.

        * dom/Position.cpp:
        (WebCore::Position::computeOffsetInContainerNode const): Use length instead
        of lastOffsetInNode.

        * dom/Position.h:
        (WebCore::lastOffsetInNode): Deleted.
        (WebCore::lastPositionInNode): Use length instead of lastOffsetInNode.
        (WebCore::minOffsetForNode): Use length instead of maxCharacterOffset.
        (WebCore::offsetIsBeforeLastNodeOffset): Ditto.

        * dom/RangeBoundaryPoint.h:
        (WebCore::RangeBoundaryPoint::setToEndOfNode): Use length instead of
        maxCharacterOffset.

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::isNewLineAtPosition): Use length instead of maxCharacterOffset.
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        Ditto.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle): Use length instead of
        maxCharacterOffset.

        * editing/Editing.cpp:
        (WebCore::lastOffsetForEditing): Use length instead of mmaxCharacterOffset
        and countChildNodes. Also improved the comment here.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::styleAtSelectionStart): Use length instead of
        maxCharacterOffset.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Use length instead
        of lastOffsetInNode.

        * editing/TextIterator.cpp:
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        USe length instead of lastOffsetInNode.

        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary): Use length instead of maxCharacterOffset.

2020-04-10  Alex Christensen  <achristensen@webkit.org>

        PersistentCoders should use modern decoding syntax
        https://bugs.webkit.org/show_bug.cgi?id=207497

        Reviewed by Darin Adler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::showCertificate):
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::decodePersistent):
        * page/csp/ContentSecurityPolicyResponseHeaders.h:
        (WebCore::ContentSecurityPolicyResponseHeaders::encode const):
        (WebCore::ContentSecurityPolicyResponseHeaders::decode):
        * platform/PasteboardCustomData.cpp:
        (WebCore::PasteboardCustomData::fromSharedBuffer):
        * platform/network/ResourceLoadPriority.h:
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::encodeBase const):
        (WebCore::ResourceRequestBase::decodeBase):
        * platform/network/cf/CertificateInfo.h:
        (WTF::Persistence::decodeCFData):
        (WTF::Persistence::decodeSecTrustRef):
        (WTF::Persistence::decodeCertificateChain):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::encode):
        (WTF::Persistence::Coder<WebCore::CertificateInfo>::decode):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):

2020-04-10  Simon Fraser  <simon.fraser@apple.com>

        [macOS] Fix scrollbar display for async-scrolling overflow
        https://bugs.webkit.org/show_bug.cgi?id=194101

        Reviewed by Tim Horton.

        We need to call positionOverflowControlsLayers() from RenderLayerBacking::updateGeometry(),
        otherwise, on first load, scrollbar layers have no size because we try to position them
        before we've created them.

        Test: fast/scrolling/mac/overflow-scrollbars-should-be-visible.html

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

2020-04-10  Simon Fraser  <simon.fraser@apple.com>

        [Async overflow] Can't scroll vertically while over a horizontal scroller in this content
        https://bugs.webkit.org/show_bug.cgi?id=210356
        <rdar://problem/60523731>

        Reviewed by Tim Horton.

        https://dozermapper.github.io/gitbook/documentation/customconverter.html has style
        that triggers mismatched containing block and z-order layer trees, triggering the creation
        of an "overflow scroll proxy node" in the scrolling tree.

        If we encounter such a node in our ancestor tree walk while deciding which node to send
        a wheel event too, we need to jump to the node that the proxy node is representing.

        Test: fast/scrolling/mac/nested-overflow-proxy-node.html

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::handleWheelEvent):

2020-04-10  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r259764.

        Causes layout test crashes under GuardMalloc

        Reverted changeset:

        "Release WebGLLayer earlier in ~GraphicsContextGLOpenGL"
        https://bugs.webkit.org/show_bug.cgi?id=210213
        https://trac.webkit.org/changeset/259764

2020-04-10  Peng Liu  <peng.liu6@apple.com>

        REGRESSION: (r259850)[ Mac wk1 Debug ] media/track/track-user-stylesheet.html is flaky failing.
        https://bugs.webkit.org/show_bug.cgi?id=210350

        Reviewed by Daniel Bates.

        Revert the change in r259850.

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::setCaptionsStyleSheetOverride):

2020-04-10  Pinki Gyanchandani  <pgyanchandani@apple.com>

        Null ptr Deref in RadioButtonGroups::updateCheckedState
        https://bugs.webkit.org/show_bug.cgi?id=210353

        Reviewed by Chris Dumez.

        This crash happened when the default checked setter was called for an input element and RadioButtonGroup was NULL.
        Added condition to dereference the group only if it is non-null.

        Test: fast/forms/input-element-default-checked-setter-crash.html

        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroups::updateCheckedState):

2020-04-10  Jack Lee  <shihchieh_lee@apple.com>

        ASSERTION FAILED: selection.isRange() in InsertListCommand::doApply
        https://bugs.webkit.org/show_bug.cgi?id=210170
        <rdar://problem/61410397>

        Reviewed by Wenson Hsieh.

        If selectionForParagraphIteration returns a non-range selection, there is no need for finding
        multiple paragraphs. And since non-range selection is handled, the assertion can be removed.

        Test: editing/inserting/insert-list-in-table-assert.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):

2020-04-10  Antti Koivisto  <antti@apple.com>

        [CSS Shadow Parts] Bad style sharing between sibling elements with different part attributes
        https://bugs.webkit.org/show_bug.cgi?id=210249
        <rdar://problem/61547528>

        Reviewed by Daniel Bates.

        Style sharing optimization was unconditionally allowed for elements that were styled with part pseudo element.
        This could lead to miscomputed style.

        Test case by Justin Fagnani.

        Test: fast/css/shadow-parts/shadow-part-style-sharing.html

        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::canShareStyleWithElement):

        Only allow style sharing if parts match.

== Rolled over to ChangeLog-2020-04-10 ==
