2018-09-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] use-after-free in MockVideoCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=189462

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp:
        (WebCore::WrappedMockRealtimeVideoSource::updateSampleBuffer):
        Copy the BGRA data before passing ownership to GStreamer. Also
        include a few code style cosmetic changes.

2018-09-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Polish AuthenticatorManager and rename it to AuthenticatorCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=189277
        <rdar://problem/44115936>

        Reviewed by Chris Dumez.

        This patch aims to polish AuthenticatorManager such that:
        1) It is no longer a singleton. Instead, it will live with Page. It was a singleton simply because static
        PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable() have to access it. However, this request
        can be fulfilled by adding an attribute [CallWith=Document] to the IDL defination. Therefore, there is no
        such need. Also, the singleton is illy implemented as it owns a single IPC proxy to UI Process which means
        different web pages will talk to the same web page proxy. Anyway, making it live with Page should fix everything.
        2) Since we are now planning to support external authenticators, the manager of all authenticators will then
        have to live in UI Process which makes this AuthenticatorManager obsolete. Instead, rename it to AuthenticatorCoordinator.
        3) Rename CredentialsMessenger to AuthenticatorCoordinatorClient to tight it to WebAuthN. Also, simplify the
        message reply model as PublicKeyCredentialCreationOptions/PublicKeyCredentialRequestOptions =>
        ExceptionData/PublicKeyCredentialData for makeCredential/getAssertion operations.
        4) Restrict one request per time, i.e. makeCredential/getAssertion for a single page.
        5) Unifying makeCredentialReply/getAssertionReply/exceptionReply into requestReply for IPC. Correspondingly,
        unify callback and exceptionCallback into callback as well for LocalAuthenticator.
        6) Enhance PublicKeyCredentialCreationOptions encoding/decoding with encoder.encodeFixedLengthData/decoder.decodeFixedLengthData.

        Covered by existing tests.

        * DerivedSources.make:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        * Modules/credentialmanagement/CredentialsContainer.h:
        * Modules/credentialmanagement/CredentialsMessenger.cpp: Removed.
        * Modules/credentialmanagement/CredentialsMessenger.h: Removed.
        * Modules/webauthn/AuthenticatorAssertionResponse.cpp: Removed.
        * Modules/webauthn/AuthenticatorAssertionResponse.h:
        (WebCore::AuthenticatorAssertionResponse::create):
        (WebCore::AuthenticatorAssertionResponse::authenticatorData const):
        (WebCore::AuthenticatorAssertionResponse::signature const):
        (WebCore::AuthenticatorAssertionResponse::userHandle const):
        (WebCore::AuthenticatorAssertionResponse::AuthenticatorAssertionResponse):
        * Modules/webauthn/AuthenticatorAttestationResponse.cpp: Removed.
        * Modules/webauthn/AuthenticatorAttestationResponse.h:
        (WebCore::AuthenticatorAttestationResponse::create):
        (WebCore::AuthenticatorAttestationResponse::attestationObject const):
        (WebCore::AuthenticatorAttestationResponse::AuthenticatorAttestationResponse):
        * Modules/webauthn/AuthenticatorCoordinator.cpp: Renamed from Source/WebCore/Modules/webauthn/AuthenticatorManager.cpp.
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJson):
        (WebCore::AuthenticatorCoordinatorInternal::produceClientDataJsonHash):
        (WebCore::AuthenticatorCoordinatorInternal::initTimeoutTimer):
        (WebCore::AuthenticatorCoordinatorInternal::didTimeoutTimerFire):
        (WebCore::AuthenticatorCoordinator::AuthenticatorCoordinator):
        (WebCore::AuthenticatorCoordinator::setClient):
        (WebCore::AuthenticatorCoordinator::create const):
        (WebCore::AuthenticatorCoordinator::discoverFromExternalSource const):
        (WebCore::AuthenticatorCoordinator::isUserVerifyingPlatformAuthenticatorAvailable const):
        * Modules/webauthn/AuthenticatorCoordinator.h: Renamed from Source/WebCore/Modules/webauthn/AuthenticatorManager.h.
        * Modules/webauthn/AuthenticatorCoordinatorClient.cpp: Added.
        (WebCore::AuthenticatorCoordinatorClient::~AuthenticatorCoordinatorClient):
        (WebCore::AuthenticatorCoordinatorClient::requestReply):
        (WebCore::AuthenticatorCoordinatorClient::isUserVerifyingPlatformAuthenticatorAvailableReply):
        (WebCore::AuthenticatorCoordinatorClient::setRequestCompletionHandler):
        (WebCore::AuthenticatorCoordinatorClient::addQueryCompletionHandler):
        * Modules/webauthn/AuthenticatorCoordinatorClient.h: Copied from Source/WebKit/UIProcess/CredentialManagement/WebCredentialsMessengerProxy.h.
        * Modules/webauthn/AuthenticatorResponse.cpp: Removed.
        * Modules/webauthn/AuthenticatorResponse.h:
        (WebCore::AuthenticatorResponse::AuthenticatorResponse):
        (WebCore::AuthenticatorResponse::clientDataJSON const):
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::create):
        (WebCore::PublicKeyCredential::tryCreate):
        (WebCore::PublicKeyCredential::PublicKeyCredential):
        (WebCore::PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable):
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialData.h: Added.
        (WebCore::PublicKeyCredentialData::encode const):
        (WebCore::PublicKeyCredentialData::decode):
        * Modules/webauthn/cocoa/LocalAuthenticator.h:
        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticator::makeCredential):
        (WebCore::LocalAuthenticator::getAssertion):
        * Modules/webvr/VRStageParameters.cpp:
        Add a header file to prevent linkage error.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        * page/Page.h:
        (WebCore::Page::authenticatorCoordinator const):
        * page/PageConfiguration.cpp:
        * page/PageConfiguration.h:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::mockAuthenticatorCoordinator const):
        (WebCore::Internals::mockCredentialsMessenger const): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockAuthenticatorCoordinator.cpp: Added.
        (WebCore::MockAuthenticatorCoordinator::setCreationReturnBundle):
        (WebCore::MockAuthenticatorCoordinator::setAssertionReturnBundle):
        (WebCore::MockAuthenticatorCoordinator::makeCredential):
        (WebCore::MockAuthenticatorCoordinator::getAssertion):
        (WebCore::MockAuthenticatorCoordinator::isUserVerifyingPlatformAuthenticatorAvailable):
        * testing/MockAuthenticatorCoordinator.h: Renamed from Source/WebCore/testing/MockCredentialsMessenger.h.
        * testing/MockAuthenticatorCoordinator.idl: Renamed from Source/WebCore/testing/MockCredentialsMessenger.idl.
        * testing/MockCredentialsMessenger.cpp: Removed.

2018-09-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        Remove unused needsDestruction class variables from HashTraits
        https://bugs.webkit.org/show_bug.cgi?id=189490

        Reviewed by Daniel Bates.

        needsDestruction has been obsoleted in Bug 121983.

        No new tests (No behavior change).

        * css/makeprop.pl: Removed needsDestruction.
        * platform/graphics/FloatSizeHash.h: Ditto.
        * platform/graphics/IntPointHash.h: Ditto.
        * platform/graphics/IntRectHash.h: Ditto.
        * platform/graphics/IntSizeHash.h: Ditto.
        * platform/graphics/WidthCache.h: Ditto.

2018-09-10  Michael Saboff  <msaboff@apple.com>

        Test262 failure with Named Capture Groups - using a reference before the group is defined
        https://bugs.webkit.org/show_bug.cgi?id=189407

        Reviewed by Alex Christensen.

        Created new delegate stubs for RegExp parsing.  These are not needed for the URL filtering
        use cases.  Also changed all the delegate methods that take a String to take 
        const String& to eliminate copy churn.

        Updated TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp.

        * contentextensions/URLFilterParser.cpp:
        (WebCore::ContentExtensions::PatternParser::atomNamedBackReference):
        (WebCore::ContentExtensions::PatternParser::isValidNamedForwardReference):
        (WebCore::ContentExtensions::PatternParser::atomNamedForwardReference):
        (WebCore::ContentExtensions::URLFilterParser::statusString):
        * contentextensions/URLFilterParser.h:

2018-09-10  Megan Gardner  <megan_gardner@apple.com>

        Correctly interpret from angle for conic gradients
        https://bugs.webkit.org/show_bug.cgi?id=189445

        Reviewed by Simon Fraser

        No new tests, no functionality is changing.

        Just renaming angle to angleRadians to make the type more clear, 
        and hopefully avoid bugs in the future. Update patch to original bug
        fix.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSConicGradientValue::createGradient):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::hash const):
        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):

2018-09-10  Youenn Fablet  <youenn@apple.com>

        ontrack events should be fired even if an existing transceiver exists
        https://bugs.webkit.org/show_bug.cgi?id=189477

        Reviewed by Eric Carlson.

        In case of an OnTrack callback from libwebrtc, make sure the ontrack event is called even if a transceiver already exists for that track.

        Covered by updated video-addTransceiver.html
        New test video-addLegacyTransceiver.html keeps testing the old transceiver behavior.
        Test: webrtc/video-addLegacyTransceiver.html

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::newTransceiver):

2018-09-10  Megan Gardner  <megan_gardner@apple.com>

        Correctly interpret from angle for conic gradients
        https://bugs.webkit.org/show_bug.cgi?id=189445
        <rdar://problem/44158271>

        Reviewed by Tim Horton.

        Test: fast/gradients/conic-from-angle.html

        We were pulling the angle as degrees when we really need radians.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSConicGradientValue::createGradient):

2018-09-10  James Savage  <james.savage@apple.com>

        Expose -apple-system-container-border color to internal web views.
        https://bugs.webkit.org/show_bug.cgi?id=189178.

        Reviewed by Timothy Hatcher.

        Tests: LayoutTests/fast/css/apple-system-colors.html

        * css/CSSValueKeywords.in: Add new semantic color name.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const): Use system color on supported
        systems, and fall back to approximation for older systems.

2018-09-07  Ryosuke Niwa  <rniwa@webkit.org>

        mouseenter and mouseleave events don't get dispatched even when there is a capturing event listener for a slot ancestor
        https://bugs.webkit.org/show_bug.cgi?id=188561

        Reviewed by Darin Adler.

        This patch makes mouseenter and mouseleave events to work with shadow trees and slots therein, and makes them uncomposed
        as discussed in https://github.com/w3c/uievents/issues/208.

        This patch also makes these events dispatched on DOM tree ancestors of the currently hovered element instead of
        render tree's hover ancestors to be consistent with the check in hierarchyHasCapturingEventListeners and other browsers.
        In particular, using hover ancestors is problematic when there is an element with display: contents such as slot elements,
        which do not have a render object.

        Tests: fast/shadow-dom/mouseenter-mouseleave-across-shadow-boundary.html
               fast/shadow-dom/mouseenter-mouseleave-inside-shadow-tree.html
               fast/shadow-dom/mouseenter-mouseleave-on-slot-parent.html

        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        * page/EventHandler.cpp:
        (WebCore::nearestCommonHoverAncestor): Deleted.
        (WebCore::hierarchyHasCapturingEventListeners): Use parentInComposedTree. Else we would miss capturing event listeners
        on inclusive ancestors of slots.
        (WebCore::EventHandler::updateMouseEventTargetNode): Use the composed tree's ancestor chain to fire mouseenter and
        mouseleave events. This is needed to dispatch mouseenter / mouseleave events on slot elements. Also removed comments
        which just state what is self-evident from the code beneath them.


2018-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove isOrphan check in ShadowRoot::setInnerHTML
        https://bugs.webkit.org/show_bug.cgi?id=189449

        Reviewed by Darin Adler.

        Removed isOrphan() check in ShadowRoot::setInnerHTML needed for webkit.org/b/88834.

        The only reason this check was kept in the code was because the fix for V8 couldn't be landed
        due to a perf regression but V8 binding isn't even a thing in WebKit anymore.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setInnerHTML):
        * dom/ShadowRoot.h:

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

        Many textarea tests leak documents because Document::removeFocusNavigationNodeOfSubtree() can trigger a Document retain cycle
        https://bugs.webkit.org/show_bug.cgi?id=188722

        Reviewed by Ryosuke Niwa.

        Fix a retain cycle created when Document::adjustFocusNavigationNodeOnNodeRemoval() sets
        m_focusNavigationStartingNode to itself. m_focusNavigationStartingNode is a Node* (not sure why it's not an Element*),
        making it possible to assign the Document to it, which creates a reference to the document which prevents
        Document::removedLastRef() ever running and doing the necessary cleanup.
        
        Fix by setting m_focusNavigationStartingNode to null if code tries to set it to the Document. This can happen
        when an element is focused and the page calls document.write(), which removes all children.
        
        Will be tested by future leak testing. Fixes the document leak in at least the following tests:
          fast/forms/append-children-during-form-submission.html
          fast/forms/empty-textarea-toggle-disabled.html
          fast/forms/textarea-paste-newline.html
          fast/forms/textarea-trailing-newline.html

        * dom/Document.cpp:
        (WebCore::Document::setFocusNavigationStartingNode):
        (WebCore::Document::adjustFocusNavigationNodeOnNodeRemoval):

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

        svg/W3C-SVG-1.1/render-groups-03-t.svg and some other SVG tests leak documents
        https://bugs.webkit.org/show_bug.cgi?id=189147

        Reviewed by Dean Jackson.
        
        Document::removedLastRef() needs to clean up m_fontSelector, because it can reference
        CSSFontFaceSources that keep SVGFontFaceElements alive, and they in turn will keep
        the Document alive.
        
        Also add the beginnings of a Fonts log channel.

        This will be tested by world leak testing (webkit.org/b/189332).

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::CSSFontSelector):
        (WebCore::CSSFontSelector::~CSSFontSelector):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        * platform/Logging.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):
        * svg/SVGFontFaceElement.h:

2018-09-10  Don Olmstead  <don.olmstead@sony.com>

        CBOR coders should only be compiled if WebAuthN is enabled
        https://bugs.webkit.org/show_bug.cgi?id=189425

        Reviewed by Jiewen Tan.

        No new tests. No change in behavior.

        Just places ENABLE(WEB_AUTHN) guards around all CBOR files.

        * Modules/webauthn/cbor/CBORBinary.h:
        * Modules/webauthn/cbor/CBORReader.cpp:
        * Modules/webauthn/cbor/CBORReader.h:
        * Modules/webauthn/cbor/CBORValue.cpp:
        * Modules/webauthn/cbor/CBORValue.h:
        * Modules/webauthn/cbor/CBORWriter.cpp:
        * Modules/webauthn/cbor/CBORWriter.h:

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

        [iOS] Arrow keys do not dispatch DOM events to non-editable elements
        https://bugs.webkit.org/show_bug.cgi?id=189389

        Reviewed by Simon Fraser.

        On iOS the arrow keys are identified by special multi character key strings: UIKeyInput{Up,
        Down, Left, Right}Arrow as opposed to special key codes as on Mac. When converting the iOS-
        specific WebEvent we need to take care to recognize when the key string for the event is
        one of these special key strings when computing key code, character code, and key identifier
        properties for the WebCore platform-specific event. These details will be included in
        the corresponding DOM keyboard events that are dispatched when the arrow keys are pressed.

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Mark file PlatformEventFactoryIOS as @no-unify as it is not compatible with the unified sources
        build strategy given its use of wtf/cocoa/SoftLinking.h macros.

        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::convertSpecialKeyToCharCode): Manufacture the appropriate character code for an
        event that represents an arrow key. Otherwise, return std::nullopt to indicate that the
        event is not for an arrow key.
        (WebCore::keyCodeForEvent): Manufacture the appropriate Windows virtual key code for an
        event that represents an arrow key. Otherwise, do what we do now and return the key code
        associated with the WebEvent.
        (WebCore::keyIdentifierForKeyEvent): Modified to test if the event is for an arrow key
        and return the appropriate key identifier.
        (WebCore::keyForKeyEvent): Modified to test if the event is for an arrow key
        and return the appropriate character code.
        (WebCore::codeForKeyEvent): Modified to call keyCodeForEvent(), which knows how to account
        for events that represent arrow keys.
        (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder):

2018-09-10  Dan Bernstein  <mitz@apple.com>

        [macOS] Editor::readSelectionFromPasteboard’s MailBlockquoteHandling argument is effectively unused
        https://bugs.webkit.org/show_bug.cgi?id=189480

        Reviewed by Anders Carlsson.

        No new tests, because this doesn’t change behavior.

        * editing/Editor.h: Removed the MailBlockquoteHandling argument from
          readSelectionFromPasteboard.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::readSelectionFromPasteboard): Don’t pass mailBlockquoteHandling to
          pasteWithPasteboard. It was always set to RespectBlockquote, which is the latter’s
          default.

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

        [Payment Request] Use JSValueInWrappedObject for PaymentResponse's details attribute
        https://bugs.webkit.org/show_bug.cgi?id=189458

        Reviewed by Youenn Fablet.

        Test: http/tests/paymentrequest/payment-response-reference-cycle-leak.https.html

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):

        Created a PaymentResponse::DetailsFunction that converts the ApplePayPayment into a JSValue.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::accept):

        Passed detailsFunction into PaymentResponse::create().

        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::PaymentResponse):
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/paymentrequest/PaymentResponse.idl:

        Removed m_details and replaced it with a DetailsFunction and a cached JSValueInWrappedObject.
        JSPaymentResponseCustom.cpp uses these values to implement the details attribute getter.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPaymentResponseCustom.cpp: Added.
        (WebCore::JSPaymentResponse::details const):

        Called PaymentResponse::detailsFunction() to cache a JSValue for the details attribute.

        (WebCore::JSPaymentResponse::visitAdditionalChildren):

        Visited PaymentResponse::cachedDetails().

        * bindings/js/JSServiceWorkerClientCustom.cpp:

        Fixed a missing include issue that cropped up due to unified source shuffling.

2018-09-10  Antoine Quint  <graouts@apple.com>

        [Web Animations] Positive delays of accelerated animations are not respected
        https://bugs.webkit.org/show_bug.cgi?id=189411
        <rdar://problem/44151416>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-with-delay-and-seek.html

        We were only accounting for negative delays for accelerated actions. We also were misbehaving
        when seeking an animation with a delay (positive or negative) since we wouldn't reset the animation
        begin time to be the current time when adjusting its time offset, while the begin time set when
        first creating the animation would be set accounting for the time offset.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::seekCAAnimationOnLayer):

2018-09-10  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [WTF] Add Markable<T, Traits>
        https://bugs.webkit.org/show_bug.cgi?id=189231

        Reviewed by Sam Weinig.

        Use Markable<Seconds> and Markable<WallTime> in ResourceResponseBase.
        Since these fields are parsed results from http header fields, Seconds::nan() and WallTime::nan()
        can be used as an empty value for these fields. Thus we can use Markable because it uses
        these nan values as an empty values (they are configured by Seconds::MarkableTraits and WallTime::MarkableTraits).
        This reduces the size of ResourceResponseBase from 448 to 416.

        * platform/network/ResourceResponseBase.h:

2018-09-07  Matt Rajca  <mrajca@apple.com>

        Touch Bar displays an active PIP button for audio elements (and it doesn't do anything)
        https://bugs.webkit.org/show_bug.cgi?id=189433
        <rdar://problem/44186498> Touch Bar displays an active PIP button for audio elements (and it doesn't do anything)

        Reviewed by Eric Carlson.

        When playing an audio element, the media Touch Bar displays an active PIP button even though only
        videos are PIP-able. Pressing it does not do anything. The issue is canTogglePictureInPicture is set
        to YES unconditionally on the WebPlaybackControlsManager. It is then only updated based on whether or
        not external playback is enabled.

        This patch extends that logic such that the picture-in-picture Touch Bar button will be disabled for
        audio elements. Since PlaybackSessionModelMediaElement today does not know whether we're dealing
        with an audio or video element, a new isPictureInPictureSupported flag has been added (as well as
        the plumbing necessary to get the state over from the web process).

        An API test has been added that checks the value of the canTogglePictureInPicture and ensures it
        is NO when audio elements are playing. To expose it to tests, a _canTogglePictureInPictureForTesting
        property has been added to the WKTesting category.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::isPictureInPictureSupportedChanged):
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::setMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::isPictureInPictureSupported const):
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        (WebCore::PlaybackSessionInterfaceMac::isPictureInPictureSupportedChanged):
        (WebCore::PlaybackSessionInterfaceMac::externalPlaybackChanged):
        (WebCore::PlaybackSessionInterfaceMac::updatePlaybackControlsManagerCanTogglePictureInPicture):

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

        [GStreamer] Fix overflow in buffered ranges
        https://bugs.webkit.org/show_bug.cgi?id=189419

        Reviewed by Philippe Normand.

        Scale operations on big numbers (like media timestamps or durations)
        should be made with GStreamer utility functions to avoid overflows.

        This fixes an assertion when a 24 hour long fragmented MP4 file is
        played.

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

2018-09-07  Frederic Wang  <fwang@igalia.com>

        Refactor filter list checking code
        https://bugs.webkit.org/show_bug.cgi?id=185087

        Reviewed by Yusuke Suzuki.

        No new tests, behavior unchanged.

        * animation/KeyframeEffectReadOnly.h: Add missing forward-declaration FilterOperations.

2018-09-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Several media related tests timing out around the same revision
        https://bugs.webkit.org/show_bug.cgi?id=189349

        Reviewed by Carlos Garcia Campos.

        The timeouts were happening because the `ended` event was no
        longer properly emitted. The change in playbackPosition also
        ensures `timeupdate` event remains emitted in a... timely manner.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        Reduce the position cache threshold to 200ms, which is a value
        slightly lower than the 250ms defined in HTMLMediaElement.
        (WebCore::MediaPlayerPrivateGStreamer::didEnd): Reset the cached
        position value to ensure the following query will most likely
        return the same value as reported by the duration query.

2018-09-10  Rob Buis  <rbuis@igalia.com>

        XMLHttpRequest: overrideMimeType should not update the response's "Content-Type" header
        https://bugs.webkit.org/show_bug.cgi?id=189465

        Reviewed by Frédéric Wang.

        The xhr spec changed [1, 2] so that overrideMimeType should not update the
        response's "Content-Type" header anymore.

        Behavior matches Firefox and Chrome.

        [1] https://xhr.spec.whatwg.org/#dom-xmlhttprequest-overridemimetype
        [2] https://github.com/whatwg/xhr/issues/157

        Tests: http/tests/xmlhttprequest/xmlhttprequest-overridemimetype-content-type-header.html
               web-platform-tests/xhr/overridemimetype-invalid-mime-type.htm

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didReceiveResponse):

2018-09-10  Antoine Quint  <graouts@apple.com>

        [Web Animations] Interrupting an accelerated CSS transition on a composited element in flight fails
        https://bugs.webkit.org/show_bug.cgi?id=189405
        <rdar://problem/43342639>

        Reviewed by Simon Fraser.

        Test: webanimations/accelerated-transition-interrupted-on-composited-element.html

        If we interrupt an animation on an element that is composited also outside of the duration of the animation,
        the "stop" accelerated action would fail to be performed because we no longer had a resolved current time and
        the accelerated animation applied to the layer would never be removed.

        However, having a resolved current time is not necessary to stop an animation, only for the other types of
        actions (play, pause and seek). So we now simply default to a 0s time for an unresolved current time for a
        simple fix to this issue.

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

2018-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add specialized template declarations of HashTraits and DefaultHash to detect misuse
        https://bugs.webkit.org/show_bug.cgi?id=189044

        Reviewed by Yusuke Suzuki.

        Some classes have a separate header for specializations of
        WTF::HashTraits and WTF::DefaultHash to reduce the number of
        header files included. For example, ColorHash.h and Color.h.

        If someone is mistakenly using HashSet or HashMap without
        including the specialization header, unexpected template
        instantiation can cause subtle bugs. For example, MSVC linker
        would silently produce an broken executable (Bug 188893).

        By applying this change, I found three misuse cases in
        DebugPageOverlays.cpp, AVVideoCaptureSource.h and WebPage.h. As
        far as I analyzed, I concluded that these misuses don't introduce
        any bugs at the moment, and they are not testable (Bug 189044 Comment 9),
        except the MSVC issue (Bug 188893).

        No new tests (Covered by existing tests).

        * Modules/webdatabase/SQLResultSetRowList.h: Removed unused #include <wtf/HashTraits.h>.
        * bindings/js/SerializedScriptValue.cpp: Ditto.
        * page/DebugPageOverlays.cpp: Added #include "ColorHash.h" to instantiate HashMap<String, Color>.
        * platform/URLHash.h: Added DefaultHash<URL> specialization definition.
        * platform/URL.h: Added specialized template declarations.
        * platform/graphics/Color.h: Ditto.
        * platform/graphics/FloatSize.h: Ditto.
        * platform/graphics/IntPoint.h: Ditto.
        * platform/graphics/IntSize.h: Ditto.
        * platform/network/ProtectionSpace.h: Ditto.
        * platform/network/ProtectionSpaceHash.h: Removed unnecessary DefaultHash declaration.
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        Added #include "IntSizeHash.h" to instantiate HashMap<String, IntSize>.

2018-09-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] Add FloatRect(const RECT&) constructor
        https://bugs.webkit.org/show_bug.cgi?id=189398

        Reviewed by Alex Christensen.

        While trying to build WebKit WinCairo port with the latest Clang
        (Bug 171618), the following compilation errors were reported.

          error: no viable conversion from returned value of type 'RECT' (aka 'tagRECT') to function return type 'WebCore::FloatRect'

        No new tests (No behavior change).

        * platform/graphics/FloatRect.h:
        * platform/graphics/win/FloatRectDirect2D.cpp:
        (WebCore::FloatRect::FloatRect): Added a new constructor taking a RECT as the argument.

2018-09-08  Andy Estes  <aestes@apple.com>

        [Apple Pay] Dispatch a paymentmethodchange event when the payment method changes
        https://bugs.webkit.org/show_bug.cgi?id=189386

        Reviewed by Darin Adler.

        Implemented the "payment method changed" algorithm as defined in the Payment Request API W3C
        Editor's Draft of 05 September 2018.

        Payment Request says that the user agent MAY run this algorithm when the payment method
        changes. In our case, we only wish to dispatch this event when a listener is registered for
        it. Since PassKit requires merchants to respond to this event by calling updateWith() within
        30 seconds, firing the event unconditionally would break compatibility with existing
        clients.

        For merchants that do not listen for this event, they can continue to use modifiers to
        update details based on the selected payment method type.
        
        Also made PaymentMethodChangeEvent.methodDetails a cached attribute in a way that avoids
        potential reference cycles from holding a JSC::Strong in the wrapped object.

        Test: http/tests/ssl/applepay/ApplePayPaymentMethodChangeEvent.https.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::toJSDictionary):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):
        * Modules/paymentrequest/PaymentMethodChangeEvent.cpp:
        (WebCore::PaymentMethodChangeEvent::PaymentMethodChangeEvent):
        * Modules/paymentrequest/PaymentMethodChangeEvent.h:
        * Modules/paymentrequest/PaymentMethodChangeEvent.idl:
        * Modules/paymentrequest/PaymentMethodChangeEventInit.idl: Removed.
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::paymentMethodChanged):
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::updateWith):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPaymentMethodChangeEventCustom.cpp: Added.
        (WebCore::JSPaymentMethodChangeEvent::methodDetails const):
        (WebCore::JSPaymentMethodChangeEvent::visitAdditionalChildren):

2018-09-08  Simon Fraser  <simon.fraser@apple.com>

        Clean up code related to Document node removal
        https://bugs.webkit.org/show_bug.cgi?id=189452

        Reviewed by Wenson Hsieh.

        Replace the "amongChildrenOnly" boolean argument with an enum for clarity.
        
        Rename the remove*OfSubtree functions, because that naming is very unclear.
        Instead, use adjust*OnNodeRemoval which better describes what the code does.

        * dom/Document.cpp:
        (WebCore::isNodeInSubtree):
        (WebCore::Document::adjustFocusedNodeOnNodeRemoval):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::adjustFocusNavigationNodeOnNodeRemoval):
        (WebCore::Document::adjustFullScreenElementOnNodeRemoval):
        (WebCore::Document::removeFocusedNodeOfSubtree): Deleted.
        (WebCore::Document::removeFocusNavigationNodeOfSubtree): Deleted.
        (WebCore::Document::removeFullScreenElementOfSubtree): Deleted.
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::removeShadowRoot):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):

2018-09-08  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [CSSJIT] Use lshiftPtr instead of mul32
        https://bugs.webkit.org/show_bug.cgi?id=189451

        Reviewed by Sam Weinig.

        Use `value << 4` instead of `value * 16`. In 64bit environment, sizeof(Style::Relation) is 16,
        so that we can use `value << 4` in CSS JIT.

        No behavior change.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAddStyleRelation):

2018-09-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] exceptionShouldTerminateProgram of StructuredExceptionHandlerSuppressor.cpp should take DWORD
        https://bugs.webkit.org/show_bug.cgi?id=189402

        Reviewed by Alex Christensen.

        Clang reports compilation errors like following:

        > StructuredExceptionHandlerSuppressor.cpp(38,10):  error: case value evaluates to 2147483650, which cannot be narrowed to type 'int' [-Wc++11-narrowing]
        >     case EXCEPTION_DATATYPE_MISALIGNMENT:
        >          ^

        No new tests (no behavioral change).

        * platform/win/StructuredExceptionHandlerSuppressor.cpp:
        (exceptionShouldTerminateProgram): Changed the type of argument from int to DWORD.

2018-09-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Stop sending request with credential if no authorization requested.
        https://bugs.webkit.org/show_bug.cgi?id=189057

        Reviewed by Alex Christensen.

        When 401 response returns without 'www-authenticate' header, suppress another request with credential.

        Test: http/tests/xmlhttprequest/unauthorized-without-authenticate-header.html

        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):

2018-09-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][Clang] duplicated variable name `advance` in UniscribeController::shapeAndPlaceItem
        https://bugs.webkit.org/show_bug.cgi?id=189399

        Reviewed by Myles C. Maxfield.

        Clang reports the following compilation error:

        UniscribeController.cpp(372,56):  error: invalid operands to binary expression ('float' and 'WebCore::GlyphBufferAdvance' (aka 'WebCore::FloatSize'))
             GlyphBufferAdvance advance(-origin.width() + advance, -origin.height());
                                        ~~~~~~~~~~~~~~~ ^ ~~~~~~~
        No new tests (No behavior change).

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Replaced the second variable named `advance` with `glyphAdvance`.

2018-09-07  Youenn Fablet  <youenn@apple.com>

        RTCRtpReceiver::track should return a MediaStreamTrack reference
        https://bugs.webkit.org/show_bug.cgi?id=189420

        Reviewed by Eric Carlson.

        As per spec, a receiver always has a track.
        Remove unneeded RTCRtpSenderReceiverBase and make RTCRtpReceiver have a Ref<MediaStreamTrack>.
        RTCRtpSender keeps having a RefPtr<MediaStreamTrack>.
        Update call sites accordingly. 
        No change of behavior.

        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        (WebCore::RTCRtpReceiver::stop):
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::track):
        * Modules/mediastream/RTCRtpReceiver.idl:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpSender.h:
        (WebCore::RTCRtpSender::track):
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderReceiverBase.h: Removed.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        * WebCore.xcodeproj/project.pbxproj:

2018-09-07  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove extraneous "using namespace" and scope WebCore::LogThreading
        https://bugs.webkit.org/show_bug.cgi?id=189381

        Reviewed by Simon Fraser.

        * platform/ios/wak/WKGraphics.mm:
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable):

2018-09-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Clean up FontAttributeChanges.cpp after r235748
        https://bugs.webkit.org/show_bug.cgi?id=189394

        Reviewed by Tim Horton.

        * Sources.txt: Move FontAttributeChanges.cpp into unified sources.
        * WebCore.xcodeproj/project.pbxproj:
        * editing/FontAttributeChanges.cpp: Replace `#import`s with `#include`s.

2018-09-07  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl][WebKitLegacy] Stop sending credential embedded in the url via XHR.
        https://bugs.webkit.org/show_bug.cgi?id=189198

        Reviewed by Alexey Proskuryakov.

        Because sync XHR of Curl port uses passed request directly, the credential information in
        url is not removed. Use ResourceHandleInternal's firstRequest because those are
        already takne out.

        Test: http/tests/xmlhttprequest/url-with-credentials.html

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2018-09-07  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSourceCocoa should use VTImageRotationSession to rotate CVPixelBuffers
        https://bugs.webkit.org/show_bug.cgi?id=189427

        Reviewed by Eric Carlson.

        Previously, we were relying on libwebrtc utils to do the rotation.
        This is inefficient compared to VTImageRotateSession and also induces additional memory cost
        since libwebrtc is rotating using its own buffers and the encoder will convert this buffer back to a CVPixelBuffer.

        Instead use VTImageRotationSession when rotation must be done at sending side.
        Covered by webrtc/video-rotation.html.

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

2018-09-07  Youenn Fablet  <youenn@apple.com>

        Add support for unified plan transceivers
        https://bugs.webkit.org/show_bug.cgi?id=189390

        Reviewed by Eric Carlson.

        Keep previous transceiver behavior when unified plan flag is off.
        Otherwise, use the libwebrtc transceiver API to create and use unified plan transceivers.
        Fuel the implementation of transceivers through a dedicated backend.

        Update transceiver IDL and make some smaller fixes at the same time:
        - Make sure remote sources have a proper name as per https://w3c.github.io/webrtc-pc/#dfn-create-an-rtcrtpreceiver.
        - Add support for transceiver.currentDirection.

        Our mock peer connections are only supporting plan B APIs at the moment.
        We therefore mandate plan B when using such mocks until we can upgrade mocks to support unified plan APIs.

        Covered by modified and rebased tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addTrack):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::addTransceiver):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::mid const):
        (WebCore::RTCRtpTransceiver::currentDirection const):
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::backend):
        * Modules/mediastream/RTCRtpTransceiver.idl:
        * Modules/mediastream/RTCRtpTransceiverBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::newTransceiver):
        (WebCore::LibWebRTCMediaEndpoint::addTransceiver):
        (WebCore::LibWebRTCMediaEndpoint::transceiverBackendFromSender):
        (WebCore::LibWebRTCMediaEndpoint::OnAddTrack):
        (WebCore::LibWebRTCMediaEndpoint::OnTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createReceiverForSource):
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        (WebCore::backendFromRTPTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::existingTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::newTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.cpp: Added.
        (WebCore::LibWebRTCRtpTransceiverBackend::createReceiverBackend):
        (WebCore::LibWebRTCRtpTransceiverBackend::createSenderBackend):
        (WebCore::LibWebRTCRtpTransceiverBackend::direction const):
        (WebCore::LibWebRTCRtpTransceiverBackend::currentDirection const):
        (WebCore::LibWebRTCRtpTransceiverBackend::setDirection):
        (WebCore::LibWebRTCRtpTransceiverBackend::mid):
        (WebCore::LibWebRTCRtpTransceiverBackend::stop):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpTransceiverBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCRtpTransceiverDirection):
        (WebCore::fromRTCRtpTransceiverDirection):
        (WebCore::fromRtpTransceiverInit):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeIncomingAudioSource.cpp:
        (WebCore::RealtimeIncomingAudioSource::RealtimeIncomingAudioSource):
        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
        * platform/mediastream/RealtimeMediaSource.h:
        * testing/Internals.cpp:
        (WebCore::Internals::useMockRTCPeerConnectionFactory):

2018-09-07  Rob Buis  <rbuis@igalia.com>

        XMLHttpRequest: open() does not throw a SYNTAX_ERR exception if method is empty or url cannot be resolved
        https://bugs.webkit.org/show_bug.cgi?id=46008

        Reviewed by Chris Dumez.

        Check if passed URL is valid as specified here [1].

        Test: web-platform-tests/xhr/open-url-bogus.htm

        [1] https://xhr.spec.whatwg.org/#the-open()-method Step 7

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):

2018-09-07  Frederic Wang  <fwang@igalia.com>

        [CSSOM View] Handle the scrollingElement in Element::scroll(Left/Top/Width/Height/To)
        https://bugs.webkit.org/show_bug.cgi?id=182230

        Reviewed by Simon Fraser.

        This commit moves the special logic for "scrolling element" body from the
        HtmlBodyElement::scroll(Left/Top/Width/Height/To) functions to the Element class. The code
        is executed when the element is the scrolling element which includes the case of body
        in Quirks mode and of documentElement in standard mode. This makes the behavior closer to
        the CSSOM View spec (bug 5991) while not deviating too much from the current implementation.
        Finally, CSSOMViewScrollingAPI is now enabled for running tests and some adjustments are made
        to existing tests. Further improvements will be performed in dependencies of bug 5991.

        No new tests, already covered by existing tests.

        * dom/Document.cpp: Split scrollingElement into two functions so that one can be called
        internally without updating the layout.
        (WebCore::Document::scrollingElement):
        (WebCore::Document::scrollingElementForAPI):
        * dom/Document.h: Ditto.
        * dom/Document.idl: Use the version updating the layout for API calls.
        * dom/Element.cpp: Add include to call DOMWindow::ScrollTo
        (WebCore::Element::scrollTo): Moved some logic from HtmlBodyElement to handle the case of
        the scrolling element. Also skip special handling of documentElement() when
        CSSOMViewScrollingAPI is disabled.
        (WebCore::adjustContentsScrollPositionOrSizeForZoom): Moved some logic from HtmlBodyElement
        to handle the case of the scrolling element. Also add a FIXME for improving these kinds of
        helper functions. Renamed to make more explicit the semantic of the value argument.
        (WebCore::Element::scrollLeft): Moved some logic from HtmlBodyElement to handle the case of
        the scrolling element. Use the new documentFrameWithNonNullView() helper function.
        (WebCore::Element::scrollTop): Ditto.
        (WebCore::Element::setScrollLeft): Ditto
        (WebCore::Element::setScrollTop): Ditto.
        (WebCore::Element::scrollWidth): Ditto.
        (WebCore::Element::scrollHeight): Ditto.
        * dom/Element.h:
        (WebCore::Document::documentFrameWithNonNullView): New helper function to retrieve the
        frame and ensure a view is available.
        * html/HTMLBodyElement.cpp: Remove code that is now in Element.
        * html/HTMLBodyElement.h: Ditto.

2018-09-07  Don Olmstead  <don.olmstead@sony.com>

        [AX] Fix compile error in AXObjectCache constructor when !HAVE(ACCESSIBILITY)
        https://bugs.webkit.org/show_bug.cgi?id=189423
        <rdar://problem/44231775>

        Reviewed by Yusuke Suzuki.

        No new tests. Compilation fix.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):

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

        [LFC] Replace "computed" value with "used" value to match spec language
        https://bugs.webkit.org/show_bug.cgi?id=189414

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):

2018-09-06  Ryosuke Niwa  <rniwa@webkit.org>

        ShadowRoot should have its own node flag
        https://bugs.webkit.org/show_bug.cgi?id=189392

        Reviewed by Antti Koivisto.

        Added IsShadowRootFlag and IsDocumentNodeFlag, and removed IsDocumentFragmentFlag and IsStyledElementFlag.
        Also re-ordered flags to group flags used by subclasses below ones directly used by Node in
        accordinate with the comment.

        No new tests since there should be no behavioral change.

        * dom/ContainerNode.h:
        (WebCore::Node::isTreeScope const): Deleted.
        * dom/Node.h:
        (WebCore::Node::isStyledElement const): Check if this is a HTML, SVG, or MathML element instead.
        (WebCore::Node::isDocumentNode const): Simply check IsDocumentNodeFlag.
        (WebCore::Node::isTreeScope const): Check if this is a document or a shadow root Instead of comparing
        the tree scope to this.
        (WebCore::Node::isDocumentFragment const): Check if this is a container node which is neither document,
        element, nor shadow root.
        (WebCore::Node::isShadowRoot const): Simply check IsShadowRootFlag. This is the change needed to fix
        the blockign bug 166748.
        (WebCore::Node::flagIsShadowRoot): Added. Will be used in the bug 166748.

2018-09-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Inline replaced height calculation should use "used value"
        https://bugs.webkit.org/show_bug.cgi?id=189395

        Reviewed by Antti Koivisto.

        Use the already assigned width value (aka used value) instead of the computed value when computing the inline's height.
        see https://www.w3.org/TR/CSS22/cascade.html#value-stages for "used" and "computed" value.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Refactor WebCore::EditAction to be an 8-bit enum class
        https://bugs.webkit.org/show_bug.cgi?id=189383

        Reviewed by Dan Bernstein.

        Currently, EditAction.h defines an EditAction as an enum. This patch changes EditAction to instead be an 8-bit-
        wide enum class, and renames all EditAction values from EditAction(*) to EditAction::(*).

        No change in behavior.

        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::create):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::apply):
        (WebCore::deleteSelectionEditingActionForEditingAction):
        * editing/CompositeEditCommand.h:
        (WebCore::EditCommandComposition::wasCreateLinkCommand const):
        * editing/CreateLinkCommand.h:
        * editing/DeleteFromTextNodeCommand.h:
        (WebCore::DeleteFromTextNodeCommand::create):
        * editing/DeleteSelectionCommand.h:
        (WebCore::DeleteSelectionCommand::create):
        * editing/DictationCommand.cpp:
        (WebCore::DictationCommand::insertTextRunWithoutNewlines):
        (WebCore::DictationCommand::insertParagraphSeparator):
        * editing/EditAction.h:
        (): Deleted.
        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/EditCommand.h:
        * editing/Editor.cpp:
        (WebCore::inputEventDataForEditingStyleAndAction):
        (WebCore::ClearTextCommand::editingAction const):
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::performCutOrCopy):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::transpose):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::executeInsertFragment):
        (WebCore::executeBackColor):
        (WebCore::executeFontName):
        (WebCore::executeFontSize):
        (WebCore::executeFontSizeDelta):
        (WebCore::executeForeColor):
        (WebCore::executeJustifyCenter):
        (WebCore::executeJustifyFull):
        (WebCore::executeJustifyLeft):
        (WebCore::executeJustifyRight):
        (WebCore::executeMakeTextWritingDirectionLeftToRight):
        (WebCore::executeMakeTextWritingDirectionNatural):
        (WebCore::executeMakeTextWritingDirectionRightToLeft):
        (WebCore::executeStrikethrough):
        (WebCore::executeSubscript):
        (WebCore::executeSuperscript):
        (WebCore::executeToggleBold):
        (WebCore::executeToggleItalic):
        (WebCore::executeUnderline):
        (WebCore::executeUnscript):
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        (WebCore::InsertIntoTextNodeCommand::create):
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::editingAction const):
        * editing/InsertNodeBeforeCommand.h:
        (WebCore::InsertNodeBeforeCommand::create):
        * editing/InsertParagraphSeparatorCommand.h:
        (WebCore::InsertParagraphSeparatorCommand::create):
        * editing/InsertTextCommand.h:
        (WebCore::InsertTextCommand::create):
        (WebCore::InsertTextCommand::createWithMarkerSupplier):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        (WebCore::MoveSelectionCommand::editingAction const):
        * editing/RemoveFormatCommand.h:
        * editing/RemoveNodeCommand.h:
        (WebCore::RemoveNodeCommand::create):
        * editing/ReplaceRangeWithTextCommand.cpp:
        (WebCore::ReplaceRangeWithTextCommand::ReplaceRangeWithTextCommand):
        (WebCore::ReplaceRangeWithTextCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement):
        (WebCore::ReplaceSelectionCommand::performTrivialReplace):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/SpellingCorrectionCommand.cpp:
        (WebCore::SpellingCorrectionCommand::SpellingCorrectionCommand):
        (WebCore::SpellingCorrectionCommand::doApply):
        * editing/TextInsertionBaseCommand.h:
        * editing/TypingCommand.cpp:
        (WebCore::editActionForTypingCommand):
        (WebCore::editActionIsDeleteByTyping):
        (WebCore::TypingCommand::isBeforeInputEventCancelable const):
        (WebCore::TypingCommand::inputEventData const):
        (WebCore::TypingCommand::inputEventDataTransfer const):
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::insertParagraphSeparator):
        * editing/UnlinkCommand.h:
        * editing/ios/DictationCommandIOS.cpp:
        (WebCore::DictationCommandIOS::DictationCommandIOS):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::removeUnchangeableStyles):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):

2018-09-06  Simon Fraser  <simon.fraser@apple.com>

        Fix the build for non-Cocoa platforms after r235772.

        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::createPlatformGradient):
        * platform/graphics/win/GradientDirect2D.cpp:
        (WebCore::Gradient::generateGradient):
        (WebCore::Gradient::fill):

2018-09-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for min/max-height percentage values.
        https://bugs.webkit.org/show_bug.cgi?id=189391

        Reviewed by Antti Koivisto.

        The percentage is calculated with respect to the height of the generated box's containing block.
        If the height of the containing block is not specified explicitly (i.e., it depends on content height), and this element
        is not absolutely positioned, the percentage value is treated as '0' (for 'min-height') or 'none' (for 'max-height').

        Test: fast/block/block-only/min-max-height-percentage.html

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto):
        (WebCore::Layout::FormattingContext::Geometry::computedMaxHeight):
        (WebCore::Layout::FormattingContext::Geometry::computedMinHeight):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):

2018-09-06  Megan Gardner  <megan_gardner@apple.com>

        Add Support for Conic Gradients
        https://bugs.webkit.org/show_bug.cgi?id=189329
        <rdar://problem/21444701>

        Reviewed by Simon Fraser.

        Add support for rendering CSS conic gradients.
        The parsing work was already done, this just hooks up the data we have
        with the CG functionality for conic gradients. Add the needed plumbing
        to allow for this additional type and fill in the creation of 
        a conic gradient.

        Tests: fast/gradients/conic-repeating.html
               fast/gradients/conic.html

        * css/CSSGradientValue.cpp:
        (WebCore::createGradient):
        (WebCore::LinearGradientAdapter::gradientLength const):
        (WebCore::RadialGradientAdapter::gradientLength const):
        (WebCore::ConicGradientAdapter::ConicGradientAdapter):
        (WebCore::ConicGradientAdapter::gradientLength const):
        (WebCore::ConicGradientAdapter::maxExtent const):
        (WebCore::ConicGradientAdapter::normalizeStopsAndEndpointsOutsideRange):

        Compute what the color stops should be if they extend past 0-1

        (WebCore::CSSGradientValue::computeStops):
        (WebCore::CSSConicGradientValue::createGradient):
        (WebCore::LinearGradientAdapter::startPoint const): Deleted.
        (WebCore::LinearGradientAdapter::endPoint const): Deleted.
        (WebCore::RadialGradientAdapter::startPoint const): Deleted.
        (WebCore::RadialGradientAdapter::endPoint const): Deleted.

        Start and End points weren't very universal. All we really need from these
        gradientAdapters is their length, so just ask for that instead.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::create):
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::type const):
        (WebCore::Gradient::adjustParametersForTiledDrawing):
        (WebCore::Gradient::isZeroSize const):
        (WebCore::Gradient::hash const):
        * platform/graphics/Gradient.h:
        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::paint):

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Support changing attributes for selected text (text shadow, underline, strike-through)
        https://bugs.webkit.org/show_bug.cgi?id=189356
        <rdar://problem/44185674>

        Reviewed by Tim Horton.

        Add support for encoding and decoding FontAttributeChanges, so that we can send FontAttributeChanges over IPC in
        WebKit2. Also change m_verticalAlign to a new VerticalAlignChange enum type, so that it's no longer tied to the
        CSS property values of "vertical-align", and can be encoded/decoded separately from VerticalAlign in
        RenderStyleConstants.

        Test: FontManagerTests.ChangeAttributesWithFontEffectsBox

        * editing/FontAttributeChanges.cpp:
        (WebCore::FontAttributeChanges::createEditingStyle const):
        * editing/FontAttributeChanges.h:
        (WebCore::FontAttributeChanges::setVerticalAlign):
        (WebCore::FontShadow::encode const):
        (WebCore::FontShadow::decode):
        (WebCore::FontAttributeChanges::encode const):
        (WebCore::FontAttributeChanges::decode):
        * platform/mac/WebCoreNSFontManagerExtras.mm:
        (WebCore::computedFontAttributeChanges):

2018-09-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for min(max)-height
        https://bugs.webkit.org/show_bug.cgi?id=189377

        Reviewed by Antti Koivisto.

        See https://www.w3.org/TR/CSS22/visudet.html#min-max-heights for details.

        Tests: fast/block/block-only/absolute-position-min-max-height.html
               fast/block/block-only/float-min-max-height.html
               fast/block/block-only/inflow-min-max-height.html

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):

2018-09-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Include supported frame rates in video capture presets
        https://bugs.webkit.org/show_bug.cgi?id=189351
        <rdar://problem/44188917>

        Reviewed by Youenn Fablet.

        No new tests, no functionality changed.

        Include frame rates as well as width/height in video capture presets, so the mock video
        capture devices model real camera devices more closely.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::setSizeAndFrameRate): Renamed from applySizeAndFrameRate. Use
        setSize instead of setWidth and setHeight.
        (WebCore::RealtimeMediaSource::applyConstraints): applySizeAndFrameRate -> setSizeAndFrameRate.
        (WebCore::RealtimeMediaSource::applySizeAndFrameRate): Deleted.
        (WebCore::RealtimeMediaSource::setWidth): Deleted.
        (WebCore::RealtimeMediaSource::setHeight): Deleted.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::setSupportedPresets): New.
        (WebCore::updateMinMax):
        (WebCore::RealtimeVideoSource::addSupportedCapabilities const): Calculate capabilities from
        presets.
        (WebCore::RealtimeVideoSource::supportsSizeAndFrameRate): Use bestSupportedSizeAndFrameRate.
        (WebCore::RealtimeVideoSource::bestSupportedSizeAndFrameRate): 
        (WebCore::RealtimeVideoSource::setSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::setSupportedFrameRates): Deleted.
        (WebCore::RealtimeVideoSource::bestSupportedCaptureSizeForWidthAndHeight): Deleted.
        (WebCore::RealtimeVideoSource::applySizeAndFrameRate): Deleted.
        (WebCore::RealtimeVideoSource::supportsFrameRate): Deleted.
        * platform/mediastream/RealtimeVideoSource.h:
        (WebCore::RealtimeVideoSource::setSupportedCaptureSizes): Deleted.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::stopProducingData):
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setSizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::applySizeAndFrameRate): Deleted.
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        * platform/mock/MockMediaDevice.h:
        (WebCore::MockCameraProperties::encode const):
        (WebCore::MockCameraProperties::decode):
        (WebCore::MockDisplayProperties::encode const):
        (WebCore::MockDisplayProperties::decode):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::defaultDevices):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::capabilities const):
        (WebCore::MockRealtimeVideoSource::settings const):

2018-09-06  Antti Koivisto  <antti@apple.com>

        Actively prewarm processes created for prewarm pool
        https://bugs.webkit.org/show_bug.cgi?id=189364

        Reviewed by Chris Dumez.

        Do some basic prewarming for newly created processes.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        * css/CSSDefaultStyleSheets.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/ProcessWarming.cpp: Added.
        (WebCore::ProcessWarming::initializeNames):

        Factor name initialization into a function.

        (WebCore::ProcessWarming::prewarm):

        Prewarm
        - names
        - settings (system fonts)
        - user agent stylesheet
        - JavaScript VM
        - telephone number detection

        * page/ProcessWarming.h: Added.

2018-09-06  Youenn Fablet  <youenn@apple.com>

        Move replaceTrack logic to RTCRtpSender backend
        https://bugs.webkit.org/show_bug.cgi?id=189359

        Reviewed by Eric Carlson.

        Move replaceTrack handling from LibWebRTCPeerConnectionBackend to LibWebRTCRtpSenderBackend.
        This will allow using SetTrack when fully implementing unified plan.
        No change of behavior.

        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack): Deleted.
        (WebCore::LibWebRTCPeerConnectionBackend::enqueueReplaceTrackTask): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::updateTrackSource):
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2018-09-06  Andy Estes  <aestes@apple.com>

        [Apple Pay] Rename the -apple-pay-button-type value "checkout" to "check-out"
        https://bugs.webkit.org/show_bug.cgi?id=189366
        <rdar://problem/44193218>

        Reviewed by Sam Weinig.

        The button title is "Check out with Apple Pay", so we should use the verb phrase "check out"
        rather than the noun "checkout" for naming this value.

        Updated http/tests/ssl/applepay/ApplePayButtonV4.html.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.h:

2018-09-06  Jer Noble  <jer.noble@apple.com>

        Don't pause playback when locking screen if video is being displayed on second screen.
        https://bugs.webkit.org/show_bug.cgi?id=189321

        Reviewed by Eric Carlson.

        Expand the existing behavior when AirPlaying to an external device to playing to a local
        external screen. Don't pause when the screen locks, and don't stop buffering in that mode either.

        Add a KVO-observer to the WebAVPlayerController's playingOnSecondScreen property, and pass
        that observed value on to the media element.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget):
        (WebCore::HTMLMediaElement::setPlayingOnSecondScreen):
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):
        (WebCore::HTMLMediaElement::processingUserGestureForMedia const):
        (WebCore::HTMLMediaElement::mediaState const):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundLoadingRestriction const):
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless const): Deleted.
        (WebCore::HTMLMediaElement::canPlayToWirelessPlaybackTarget const): Deleted.
        (WebCore::HTMLMediaElement::isPlayingToWirelessPlaybackTarget const): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless const):
        (WebCore::HTMLMediaElement::isPlayingToExternalTarget const):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canPlayToWirelessPlaybackTarget const): Deleted.
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::setWirelessPlaybackTarget):
        (WebCore::PlatformMediaSessionClient::isPlayingOnSecondScreen const):
        (WebCore::PlatformMediaSession::canPlayToWirelessPlaybackTarget const): Deleted.
        (WebCore::PlatformMediaSessionClient::canPlayToWirelessPlaybackTarget const): Deleted.
        * platform/cocoa/PlaybackSessionModel.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::setPlayingOnSecondScreen):
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController observeValueForKeyPath:ofObject:change:context:]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::setPlayingOnSecondScreen):

2018-09-06  Frederic Wang  <fwang@igalia.com>

        Group options of scrollRectToVisible into a struct
        https://bugs.webkit.org/show_bug.cgi?id=189352

        Reviewed by Simon Fraser.

        RenderLayer::scrollRectToVisible and RenderObject::scrollRectToVisible have several
        parameters to configure the type of scrolling. This patch groups the const options into a
        single struct to make easier to handle them in the future. For example, an #ifdefed scroll
        behavior option will be added in bug 188043. This refactoring can maybe help too for other
        scroll extensions (e.g. bug 176454 and bug 161611).

        No new tests, behavior unchanged.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollToMakeVisible const): Pass options via a struct.
        * dom/Element.cpp:
        (WebCore::Element::scrollIntoView): Ditto.
        (WebCore::Element::scrollIntoViewIfNeeded): Ditto.
        (WebCore::Element::scrollIntoViewIfNotVisible): Ditto.
        * editing/FrameSelection.cpp: Include RenderLayer.h in all WebKit ports in order to define
        ScrollRectToVisibleOptions.
        (WebCore::FrameSelection::revealSelection): Pass options via a struct.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFocusedElementInternal): Ditto.
        (WebCore::FrameView::scrollToAnchor): Ditto.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible): Pass options via a struct. Note that
        absoluteRect and insideFixed are modified in this function.
        (WebCore::RenderLayer::autoscroll): Pass options via a struct.
        * rendering/RenderLayer.h: Add ScrollRectToVisibleOptions and use it in order to pass
        scrollRectToVisible options.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::scrollRectToVisible): Pass options via a struct
        * rendering/RenderObject.h: Forward-declare ScrollRectToVisibleOptions and use in order to
        pass scrollRectToVisible options.

2018-09-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Cannot change font size at selection until font panel is shown
        https://bugs.webkit.org/show_bug.cgi?id=189295
        <rdar://problem/35593389>

        Reviewed by Ryosuke Niwa.

        Currently, attempting to alter the font size of currently selected editable text in WKWebView via menu items
        will fail if the font panel has never been shown. This is because WebViewImpl::changeFontFromFontPanel, which is
        responsible for converting the current font at the selection to the new font using -[NSFontManager convertFont:]
        bails as a result of NSFontManager's currently selected font always being nil.

        WKWebView is responsible for keeping NSFontManager up-to-date with the currently selected font; in fact, this
        was initially the case in r180465, which introduced NSFontManager support in WebKit2 by propagating EditorState
        updates that contained font information for the current selection. However, this regressed performance due to
        selected font computation triggering extra layout passes; r180768 addressed this by introducing a mechanism for
        requesting the font at the current selection, and only updating NSFontManager with the new selected font when
        the shared font panel is visible (determined by KVO on NSFontPanel). However, this again regressed WKWebView
        launch performance, due to KVO registration always forcing the shared NSFontPanel to be created. r182037
        addressed this by only registering for KVO on the font panel if the WKWebView has been made editable (SPI on
        WKWebView).

        This leads to two issues when attempting to alter font attributes using macOS UI: (1) in web views that have not
        been made editable using SPI, showing the font panel and attempting to change the font fails due to the selected
        font staying nil, because we've never begun registering for KVO notifications on the font panel so we don't try
        to keep the font manager up to date. (2) Even if the web view is made editable, if the font panel is never
        shown, then the font manager still won't be kept up to date with the current selection, so changing fonts using
        menu items still does not work.

        We fix both of these problems by refactoring font manager support on WebKit2 such that an up-to-date selected
        font in the UI process is no longer necessary in order to alter the font at the current selection. To do this,
        we figure out what changes the NSFontManager would've made to the currently selected font in the UI process, and
        then propagate this information to the web process, where we convert this information into an EditingStyle which
        we apply to the current selection.

        The code to both determine the attributes changed by NSFontManager and to convert these attributes into editing
        styles to be applied via Editor already exists in WebKitLegacy, in WebHTMLView.mm. This patch moves this
        existing logic into WebCore and teases it apart into two portions: the first portion probes NSFontManager to
        determine which aspects of the font changed and constructs FontChanges, which captures these differences. The
        second portion maps FontChanges to an EditingStyle, which can then be applied to the current selection. In
        WebKitLegacy, we construct FontChanges using the font manager, and then immediately use it to create and apply
        an EditingStyle. In WebKit, we construct FontChanges in the UI process using the font manager, and then send
        this over to the web process via WebPage::changeFont, which then creates and applies the EditingStyle.

        Note that this patch also introduces FontAttributeChanges, which is similar in concept to FontChanges, but
        captures a broader range of changes possible via NSFontPanel. This was done so that we can eliminate all of the
        font manager probing code (along with the two specimen fonts) from WebHTMLView, but is also necessary in order
        to allow changing font shadow, strikethrough, and underlines via the font panel to work in WebKit2. This will be
        fixed in a followup, by making FontAttributeChanges IPC encodable and by making WKWebView/WKView respond to the
        -changeAttributes: selector.

        Changes in behavior to WebKit2 are covered by new API tests; legacy WebKit behavior should remain unchanged.

        Tests:  FontManagerTests.ChangeFontSizeWithMenuItems
                FontManagerTests.ChangeFontWithPanel

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.h:

        Remove applyFontStyles.

        * editing/FontAttributeChanges.cpp: Added.
        (WebCore::FontChanges::platformFontFamilyNameForCSS const):

        Given a font family name and a font name, returns the string to use as the "font-family" style property value.
        Originally from WebHTMLView.mm.

        (WebCore::FontChanges::createEditingStyle const):

        Converts font changes to an EditingStyle that can be used to apply these changes.

        (WebCore::FontChanges::createStyleProperties const):

        Introduce FontChanges, which encapsulates changes which are to be applied to the font in the current selection.

        (WebCore::cssValueListForShadow):
        (WebCore::FontAttributeChanges::createEditingStyle const):

        Converts font attribute changes to an EditingStyle that can be used to apply these changes.

        * editing/FontAttributeChanges.h: Added.

        Introduce FontAttributeChanges, which encapsulates changes which are to be applied to the font attributes in the
        current selection. This includes a set of FontChanges, as well as additional attributes such as strike-through
        and underlines.

        (WebCore::FontChanges::setFontName):
        (WebCore::FontChanges::setFontFamily):
        (WebCore::FontChanges::setFontSize):
        (WebCore::FontChanges::setFontSizeDelta):
        (WebCore::FontChanges::setBold):
        (WebCore::FontChanges::setItalic):
        (WebCore::FontAttributeChanges::setVerticalAlign):
        (WebCore::FontAttributeChanges::setBackgroundColor):
        (WebCore::FontAttributeChanges::setForegroundColor):
        (WebCore::FontAttributeChanges::setShadow):
        (WebCore::FontAttributeChanges::setStrikeThrough):
        (WebCore::FontAttributeChanges::setUnderline):
        (WebCore::FontAttributeChanges::setFontChanges):

        Setters for FontChanges and FontAttributeChanges. Initially, most of these values are optional, indicating that
        there should be no change.

        (WebCore::FontChanges::encode const):
        (WebCore::FontChanges::decode):

        Add encoding/decoding support to FontChanges, so that it can be sent over IPC for WebKit2.

        * editing/cocoa/FontAttributeChangesCocoa.mm: Added.
        (WebCore::FontChanges::platformFontFamilyNameForCSS const):

        Helper method to determine whether the font family or the font name should be used, by looking up the PostScript
        font name using a FontDescriptor and comparing it against the result of -[NSFont fontName]. This logic was
        originally in WebHTMLView.mm.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::applyFontStyles): Deleted.
        * platform/mac/WebCoreNSFontManagerExtras.h: Added.
        * platform/mac/WebCoreNSFontManagerExtras.mm: Added.

        Add helper functions to compute FontChanges and FontAttributeChanges from NSFontManager.

        (WebCore::firstFontConversionSpecimen):
        (WebCore::secondFontConversionSpecimen):

        Two "specimen fonts" used to determine what changes NSFontManager or NSFontPanel makes when performing font or
        font attribute conversion. Moved from WebHTMLView.mm.

        (WebCore::computedFontChanges):
        (WebCore::computedFontAttributeChanges):

        Moved here from WebHTMLView.mm. Instead of converting font attributes to NSStrings and setting properties on
        DOMCSSStyleDeclaration, we instead specify properties on MutableStyleProperties using CSSValues.

2018-09-06  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Add support for min(max)-width
        https://bugs.webkit.org/show_bug.cgi?id=189358

        Reviewed by Antti Koivisto.

        See https://www.w3.org/TR/CSS22/visudet.html#min-max-widths for details.

        Tests: fast/block/block-only/absolute-position-min-max-width.html
               fast/block/block-only/float-min-max-width.html
               fast/block/block-only/inflow-min-max-width.html

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):

2018-09-06  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Initialize AVVideoCapture video presets
        https://bugs.webkit.org/show_bug.cgi?id=189355

        Reviewed by Youenn Fablet.

        No new tests, no functionality changed.

        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource): Don't try to load symbols if they
        aren't available.

2018-09-06  Ali Juma  <ajuma@chromium.org>

        IntersectionObserver leaks documents
        https://bugs.webkit.org/show_bug.cgi?id=189128

        Reviewed by Simon Fraser.

        Currently, Documents own IntersectionObservers while IntersectionObservers own callbacks
        that have strong references to Documents. To break this cycle, make Documents only have
        weak pointers to IntersectionObservers. Instead, manage the lifetime of an
        IntersectionObserver as an ActiveDOMObject, overriding hasPendingActivity to keep
        the observer alive while there are ongoing observations.

        However, there is a still a potential reference cycle. The callback keeps global
        references alive, so if there's a global reference to the observer in JavaScript,
        we have an observer->callback->observer cycle, keeping the callback (and hence the Document)
        alive. To break this cycle, make IntersectionObserver release the callback when its
        Document is stopped.

        With these changes, there are no longer any leaks reported with run-webkit-tests --world-leaks
        on LayoutTests/intersection-observer and LayoutTests/imported/w3c/web-platform-tests/intersection-observer.

        Tests: intersection-observer/no-document-leak.html
               intersection-observer/observer-and-callback-without-js-references.html

        * dom/Document.cpp:
        (WebCore::Document::addIntersectionObserver):
        (WebCore::Document::removeIntersectionObserver):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::~IntersectionObserver):
        (WebCore::IntersectionObserver::observe):
        (WebCore::IntersectionObserver::rootDestroyed):
        (WebCore::IntersectionObserver::createTimestamp const):
        (WebCore::IntersectionObserver::notify):
        (WebCore::IntersectionObserver::hasPendingActivity const):
        (WebCore::IntersectionObserver::activeDOMObjectName const):
        (WebCore::IntersectionObserver::canSuspendForDocumentSuspension const):
        (WebCore::IntersectionObserver::stop):
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::trackingDocument const):
        (WebCore::IntersectionObserver::trackingDocument): Deleted.
        * page/IntersectionObserver.idl:

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

        [LFC] Adapt to the new const WeakPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=189334

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/LayoutContext.h:
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::FloatingState):
        * layout/floats/FloatingState.h:
        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::addOutOfFlowDescendant):
        * layout/layouttree/LayoutContainer.h:
        (WebCore::Layout::Container::outOfFlowDescendants const):

2018-09-06  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Extra ASSERTs at MainThreadNotifier
        https://bugs.webkit.org/show_bug.cgi?id=188786

        Reviewed by Carlos Garcia Campos.

        We add a couple of checks in debug mode: there is only one bit on
        per notification and ensure a notifier was invalidated before
        being destroyed.

        * platform/graphics/gstreamer/MainThreadNotifier.h:

2018-09-05  Youenn Fablet  <youenn@apple.com>

        Move ownership of outgoing source to RTCRtpSender backend
        https://bugs.webkit.org/show_bug.cgi?id=189310

        Reviewed by Alex Christensen.

        RTCRtpSender should own the source so that it can replace/stop it.
        Since this is libwebrtc specific, the source is actually owned by the backend.
        Simplified replaceTrack a bit based on that.

        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        (WebCore::updateTrackSource):
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::applyRotationForOutgoingVideoSources):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

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

        The width of an empty or nullptr TextRun should be zero
        https://bugs.webkit.org/show_bug.cgi?id=189154
        <rdar://problem/43685926>

        Reviewed by Zalan Bujtas.

        If a page has an empty TextRun and attempts to paint it we can crash with a nullptr.

        This patch recognizes that an empty TextRun should always produce a zero width, rather than
        attempt to compute this value from font data. It also prevents ListBox from attempting to
        paint a null string.

        Test: fast/text/null-string-textrun.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const): An empty TextRun has zero width.
        (WebCore::FontCascade::width const): Ditto.
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): ASSERT that the supplied String is non-null.
        (WebCore::TextRun::setText): Ditto.
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground): Don't attempt to paint a null string.

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

        [LFC][BFC] ComputeFloat* methods should take a const FloatingContext&
        https://bugs.webkit.org/show_bug.cgi?id=189333

        Reviewed by Antti Koivisto.

        Only layoutFormattingContextRoot() needs a non-const FloatingContext& object (to add the floating box to the floating state).

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        * layout/blockformatting/BlockFormattingContext.h:

2018-09-05  Youenn Fablet  <youenn@apple.com>

        Introduce a backend for RTCRtpTransceiver
        https://bugs.webkit.org/show_bug.cgi?id=189322

        Reviewed by Eric Carlson.

        Introduce RTCRtpTransceiverBackend to implement the transceiver functionality using libwebrtc.
        Remove provisional mids as it will be done by the webrtc backend.

        No observable change of behavior yet since there is no transceiver backend yet.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::RTCRtpTransceiver):
        (WebCore::RTCRtpTransceiver::mid const):
        (WebCore::RTCRtpTransceiver::direction const):
        (WebCore::RTCRtpTransceiver::setDirection):
        (WebCore::RTCRtpTransceiver::stop):
        (WebCore::RTCRtpTransceiver::getNextMid): Deleted.
        (WebCore::RTCRtpTransceiver::directionString const): Deleted.
        * Modules/mediastream/RTCRtpTransceiver.h:
        (WebCore::RTCRtpTransceiver::create):
        (WebCore::RTCRtpTransceiver::provisionalMid const): Deleted.
        (WebCore::RTCRtpTransceiver::setMid): Deleted.
        * Modules/mediastream/RTCRtpTransceiverBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::createReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::completeAddTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * WebCore.xcodeproj/project.pbxproj:

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

        [LFC] Pass in const LayoutContext& to geometry methods when possible
        https://bugs.webkit.org/show_bug.cgi?id=189331

        Reviewed by Antti Koivisto.

        Only layout and layout-like methods (intrinsic width computation -> shrink to fit -> out-of-flow/floating boxes) should take a
        non-const LayoutContext&. Other geometry functions should not mutate the the context.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutContext::establishedFormattingState const):
        (WebCore::Layout::LayoutContext::createFormattingStateForFormattingRootIfNeeded):
        (WebCore::Layout::LayoutContext::formattingContext const):
        (WebCore::Layout::LayoutContext::establishedFormattingState): Deleted.
        (WebCore::Layout::LayoutContext::formattingContext): Deleted.
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-09-05  Youenn Fablet  <youenn@apple.com>

        Expose RTCRtpSender.setParameters
        https://bugs.webkit.org/show_bug.cgi?id=189307

        Reviewed by Eric Carlson.

        Implement RTCRtpSender.setParameters.
        This is an incomplete implementation as we need to refresh parameters as per the spec and testing is much easier with full transceiver support.
        Implementation uses sender backend to set the parameters at libwebrtc level.
        Fix the case of a stopped sender/transceiver in which case promise should be rejected.
        Covered by rebased and modified tests.

        * Modules/mediastream/RTCRtpParameters.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::setParameters):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSender.idl:
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/RTCRtpTransceiver.cpp:
        (WebCore::RTCRtpTransceiver::stop):
        * Modules/mediastream/RTCRtpTransceiver.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
        (WebCore::LibWebRTCRtpReceiverBackend::getParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
        (WebCore::LibWebRTCRtpSenderBackend::setParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
        (WebCore::toRTCEncodingParameters):
        (WebCore::fromRTCEncodingParameters):
        (WebCore::toRTCHeaderExtensionParameters):
        (WebCore::fromRTCHeaderExtensionParameters):
        (WebCore::toRTCCodecParameters):
        (WebCore::toRTCRtpParameters):
        (WebCore::fromRTCRtpParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:

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

        Remove some logging that I committed by mistake.

        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::RenderLayerFilters):
        (WebCore::RenderLayerFilters::~RenderLayerFilters):

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

        [LFC] Construct the Display::Box objects on demand.
        https://bugs.webkit.org/show_bug.cgi?id=189320

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        (WebCore::Layout::LayoutContext::displayBoxForLayoutBox const):
        (WebCore::Layout::LayoutContext::createDisplayBox): Deleted.
        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::displayBoxForLayoutBox const): Deleted.
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/displaytree/DisplayBox.h:

2018-09-05  Woodrow Wang  <woodrow_wang@apple.com>

        Add infrastructure to dump resource load statistics
        https://bugs.webkit.org/show_bug.cgi?id=189213

        Reviewed by Daniel Bates. 

        The dumping functionality is not currently used, but will be included in tests for
        <https://bugs.webkit.org/show_bug.cgi?id=187773>.

        * loader/ResourceLoadStatistics.h:

2018-09-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the build with recent SDKs.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer):

2018-09-05  Woodrow Wang  <woodrow_wang@apple.com>

        Added runtime feature flag for web API statistics
        https://bugs.webkit.org/show_bug.cgi?id=189211

        Reviewed by Daniel Bates.

        Added functionality to get and set the runtime flag.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebAPIStatisticsEnabled):
        (WebCore::RuntimeEnabledFeatures::webAPIStatisticsEnabled const):

2018-09-05  Youenn Fablet  <youenn@apple.com>

        Move replaceTrack logic to LibWebRTCPeerConnectionBackend
        https://bugs.webkit.org/show_bug.cgi?id=189281

        Reviewed by Eric Carlson.

        Move replaceTrack handling code from RTCPeerConnection to LibWebRTCPeerConnectionBackend.
        This makes the logic easier to understand.
        Future refactoring will further try to put more handling in RTCRtpSenderBackend.
        No change of behavior.

        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::tryUpdatingTrackSource):
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::enqueueReplaceTrackTask):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):

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

        [LFC] LayoutContext::displayBoxForLayoutBox() should return a Display::Box&
        https://bugs.webkit.org/show_bug.cgi?id=189311

        Reviewed by Antti Koivisto.

        When the layout logic needs a Display::Box, we must have already created one for the associated Layout::Box.
        (It does not necessarily mean that evey Layout::Box has a Display::Box. For example in case of inline formatting context,
        we don't create a Display::Box for every inline box, but the formatting logic does not require such pairs.)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::mapBoxToAncestor):
        (WebCore::Layout::FormattingContext::mapTopLeftToAncestor):
        (WebCore::Layout::FormattingContext::mapCoordinateToAncestor):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::displayBoxForLayoutBox const):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::showLayoutTree):

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

        [LFC] Drop Display:Box from FormattingContext::compute* functions
        https://bugs.webkit.org/show_bug.cgi?id=189309

        Reviewed by Antti Koivisto.

        They are redundant and could get out of sync.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-09-05  Jer Noble  <jer.noble@apple.com>

        Add MediaCapabilities as an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=189209

        Reviewed by Eric Carlson.

        Move mediaCapabilitiesEnabled out of RuntimeEnabledFeatures. It already (also) exists in Settings.

        * Modules/mediacapabilities/MediaCapabilities.idl:
        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
        * Modules/mediacapabilities/NavigatorMediaCapabilities.idl:
        * Modules/mediacapabilities/ScreenLuminance.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMediaCapabilitiesEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::mediaCapabilitiesEnabled const): Deleted.

2018-09-05  Woodrow Wang  <woodrow_wang@apple.com>

        Add functionality to encode and decode a uint64_t in KeyedCoding
        https://bugs.webkit.org/show_bug.cgi?id=189216

        Reviewed by Daniel Bates.

        I've added this functionality in order to be able to encode and decode the raw uint64_t 
        representation of an OptionSet for my patch here <https://bugs.webkit.org/show_bug.cgi?id=187773>. 

        The changes in the KeyedEncoder/KeyedDecoder for Glib were made because they are derived classes
        of KeyedCoding which contains pure virtual functions that need to be implemented.

        * platform/KeyedCoding.h:
        * platform/cf/KeyedDecoderCF.cpp:
        (WebCore::KeyedDecoderCF::decodeUInt64):
        * platform/cf/KeyedDecoderCF.h:
        * platform/cf/KeyedEncoderCF.cpp:
        (WebCore::KeyedEncoderCF::encodeUInt64):
        * platform/cf/KeyedEncoderCF.h:
        * platform/glib/KeyedDecoderGlib.cpp:
        (WebCore::KeyedDecoderGlib::decodeUInt64):
        * platform/glib/KeyedDecoderGlib.h:
        * platform/glib/KeyedEncoderGlib.cpp:
        (WebCore::KeyedEncoderGlib::encodeUInt64):
        * platform/glib/KeyedEncoderGlib.h:

2018-09-05  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] ASSERT(!m_nicosia.imageBacking) when starting any YouTube video
        https://bugs.webkit.org/show_bug.cgi?id=189215

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        Manually clear out any layer-side state of any image backing that is
        associated with this layer, much like we do for backing stores.

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

        [MediaStream] Simplify logic when changing RealtimeMediaSource settings
        https://bugs.webkit.org/show_bug.cgi?id=189284
        <rdar://problem/44117948>

        Reviewed by Youenn Fablet.

        Remove all "apply<setting>" methods from RealtimeMediaSource and derived classes, and
        add a bitfield to settingsDidChange so classes can do setting-specific setup and
        configuration by overriding settingsDidChange.

        No new tests, no functionality changed.

        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::fitnessDistance const):
        (WebCore::NumericConstraint::valueForDiscreteCapabilityValues const):
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        (): Deleted.
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::RealtimeMediaSource):
        (WebCore::RealtimeMediaSource::settingsDidChange):
        (WebCore::RealtimeMediaSource::fitnessDistance):
        (WebCore::applyNumericConstraint):
        (WebCore::RealtimeMediaSource::applyConstraint):
        (WebCore::RealtimeMediaSource::applyConstraints):
        (WebCore::RealtimeMediaSource::setSize):
        (WebCore::RealtimeMediaSource::setWidth):
        (WebCore::RealtimeMediaSource::setHeight):
        (WebCore::RealtimeMediaSource::setFrameRate):
        (WebCore::RealtimeMediaSource::setAspectRatio):
        (WebCore::RealtimeMediaSource::setFacingMode):
        (WebCore::RealtimeMediaSource::setVolume):
        (WebCore::RealtimeMediaSource::setSampleRate):
        (WebCore::RealtimeMediaSource::setSampleSize):
        (WebCore::RealtimeMediaSource::setEchoCancellation):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeMediaSourceSettings.cpp:
        (WebCore::RealtimeMediaSourceSettings::diff const):
        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::allFlags):
        * platform/mediastream/RealtimeVideoSource.cpp:
        (WebCore::RealtimeVideoSource::applySize): Deleted.
        (WebCore::RealtimeVideoSource::applyFrameRate): Deleted.
        * platform/mediastream/RealtimeVideoSource.h:
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::settingsDidChange):
        (WebCore::GStreamerAudioCaptureSource::applySampleRate): Deleted.
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::settingsDidChange):
        (WebCore::GStreamerVideoCaptureSource::applySize): Deleted.
        (WebCore::GStreamerVideoCaptureSource::applyFrameRate): Deleted.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::settingsDidChange):
        (WebCore::AVVideoCaptureSource::setPreset):
        (WebCore::AVVideoCaptureSource::setFrameRate):
        (WebCore::AVVideoCaptureSource::applySizeAndFrameRate):
        (WebCore::AVVideoCaptureSource::processNewFrame):
        (WebCore::AVVideoCaptureSource::applySize): Deleted.
        (WebCore::AVVideoCaptureSource::applyFrameRate): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSource::settingsDidChange):
        (WebCore::CoreAudioCaptureSource::applySampleRate): Deleted.
        (WebCore::CoreAudioCaptureSource::applyEchoCancellation): Deleted.
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        (WebCore::DisplayCaptureSourceCocoa::applySize): Deleted.
        (WebCore::DisplayCaptureSourceCocoa::applyFrameRate): Deleted.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::settingsDidChange):
        (WebCore::MockRealtimeAudioSourceMac::applySampleRate): Deleted.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::settingsDidChange):
        (WebCore::MockRealtimeVideoSourceMac::applySize): Deleted.
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        (WebCore::RealtimeIncomingVideoSourceCocoa::processNewSample):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::settingsDidChange):
        (WebCore::ScreenDisplayCaptureSourceMac::applySize): Deleted.
        (WebCore::ScreenDisplayCaptureSourceMac::applyFrameRate): Deleted.
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::settingsDidChange):
        * platform/mock/MockRealtimeAudioSource.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::settingsDidChange):
        (WebCore::MockRealtimeVideoSource::applySize): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:

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

        [LFC][BFC] Move MarginCollapse class under BlockFormattingContext::Geometry
        https://bugs.webkit.org/show_bug.cgi?id=189296

        Reviewed by Antti Koivisto.

        Margin collapsing is part of geometry after all.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginTop):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBottom): Deleted.
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginTop): Deleted.

2018-09-04  Zalan Bujtas  <zalan@apple.com>

        [LFC] Make BlockFormattingContext::Geometry a subclass of FormattingContext::Geometry
        https://bugs.webkit.org/show_bug.cgi?id=189294

        Reviewed by Antti Koivisto.

        This simplifies some of the call sites.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::instrinsicWidthConstraints):

2018-09-04  Frederic Wang  <fwang@igalia.com>

        Add basic support for ScrollIntoViewOptions
        https://bugs.webkit.org/show_bug.cgi?id=189258

        Reviewed by Simon Fraser.

        This patch introduces a new ScrollIntoViewOptions parameter that can be passed into
        Element.scrollIntoView instead of a boolean. A basic support for scroll alignments is
        implemented, so that it is closer to the behavior of the CSSOMView spec while still remaining
        compatible with the current boolean-parameter implementation. Full implementation that
        takes into account orientation/direction will be handled in bug 161611. This patch is also a
        preliminary step to support the ScrollBehavior (bug 188043) for ScrollIntoView.

        Tests: web-platform-tests/css/cssom-view/scrollintoview-html
               web-platform-tests/css/cssom-view/scrollIntoView-smooth.html

        * CMakeLists.txt: Add new IDL files.
        * DerivedSources.make: Ditto.
        * Sources.txt: Add new generated cpp JS bindings.
        * WebCore.xcodeproj/project.pbxproj: Add files to build to XCode.
        * dom/Element.cpp:
        (WebCore::toScrollAlignment): Convert ScrollLogicalPosition to scroll alignment. Orientation
        and direction are not implemented yet.
        (WebCore::Element::scrollIntoView): Implement new scrollIntoView version accepting
        ScrollIntoViewOptions parameter.
        * dom/Element.h: Declare new scrollIntoView.
        * dom/Element.idl: Make scrollIntoView accept a ScrollIntoViewOptions parameter.
        * page/ScrollIntoViewOptions.h: Added.
        * page/ScrollIntoViewOptions.idl: Added.
        * page/ScrollLogicalPosition.h: Added.
        * page/ScrollLogicalPosition.idl: Added.

2018-09-04  Oriol Brufau  <obrufau@igalia.com>

        Check important flags when serializing shorthand with "initial" values
        https://bugs.webkit.org/show_bug.cgi?id=188984

        Reviewed by Antti Koivisto.

        Test: imported/w3c/web-platform-tests/css/cssom/shorthand-serialization.html

        The test still has some failures due to https://bugs.webkit.org/show_bug.cgi?id=185953
        but without this patch it would fail earlier.

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::get4Values const):

2018-09-04  Antti Koivisto  <antti@apple.com>

        Remove pointless RenderSVGResourceMode::ApplyToDefault enum value
        https://bugs.webkit.org/show_bug.cgi?id=189260

        Reviewed by Sam Weinig.

        Default does not need a bit, it is better represented with an empty OptionSet.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::acquirePaintingResource):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::~SVGRenderingContext):
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2018-08-29  Emilio Cobos Álvarez  <emilio@crisal.io>

        Remove PseudoElementUserAgentCustom.
        https://bugs.webkit.org/show_bug.cgi?id=189089

        Reviewed by Ryosuke Niwa.

        Tests at https://github.com/web-platform-tests/wpt/pull/12743.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::CSSSelector::parsePseudoElementType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::isCustomPseudoElement const):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addRule):
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::needsImplicitShadowCombinatorForMatching const):

2018-09-04  Dean Jackson  <dino@apple.com>

        Post review Weinig fix-ups
        https://bugs.webkit.org/show_bug.cgi?id=189288

        Reviewed by Sam Weinig.

        Fix-ups from https://bugs.webkit.org/show_bug.cgi?id=189252

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getSystemPreviewMIMETypes):
        (WebCore::initializeSystemPreviewMIMETypes): Deleted.
        * rendering/RenderThemeIOS.mm:
        (WebCore::arKitBundle):
        (WebCore::loadARKitPDFPage):
        (WebCore::systemPreviewLogo):

2018-09-04  Ryosuke Niwa  <rniwa@webkit.org>

        slotchange event doesn't get fired when inserting, removing, or renaming slot elements
        https://bugs.webkit.org/show_bug.cgi?id=189144
        <rdar://problem/43871061>

        Reviewed by Antti Koivisto.

        This patch implements `slotchange` event when a slot element is inserted, removed, or renamed in the DOM tree.
        Let us consider each scenario separately.

        Insertion (https://dom.spec.whatwg.org/#concept-node-insert): In this case, we must fire `slotchange` event on
        slot elements whose assigned nodes have changed in the tree order. When there is at most one slot element for
        each name, this can be done by simply checking whether each slot has assigned nodes or not. When there are more
        than one slot element, however, the newly inserted slot element may now become the first slot of a given name,
        and gain assined nodes while the previously first element loses its assigned nodes. To see if the newly inserted
        slot element is the first of its kind, we must travere the DOM tree to check the order of that and the previously
        first slot element. To do this, we resolve the slot elements before start inserting nodes in
        executeNodeInsertionWithScriptAssertion via SlotAssignment::resolveSlotsBeforeNodeInsertionOrRemoval. Note that
        when the DOM tree has at most one slot element of its kind, resolveSlotsBeforeNodeInsertionOrRemoval is a no-op
        and addSlotElementByName continues to operate in O(1). Becasue addSlotElementByName is called on each inserted
        slot element in the tree order, we do the tree traversal upon finding the first slot element which has more than
        one of its kind in the current tree. In this case, we resolve all other slot elements and enqueues slotchange
        event as needed to avoid doing the tree traversal more than once.

        Removal (https://dom.spec.whatwg.org/#concept-node-remove): In removal, we're concerned with removing the first
        slot element of its kind. We must fire slotchange event on the remaining slot elements which became the first of
        its kind after the removal as well as the ones which got removed from the tree if they had assigned nodes.
        Furthermore, the DOM specification mandates that we first fire slotchange events in the tree from which a node
        was removed and then in the removed subtree. Because we must only fire slotchange event on the first slot element
        of its kind which has been removed, we must resolve the first slot elements of each kind before a node removal
        in removeAllChildrenWithScriptAssertion and removeNodeWithScriptAssertion as we've done for insertion. Again,
        in the case there was at most one slot element of each kind, resolveSlotsBeforeNodeInsertionOrRemoval is a no-op
        and removeSlotElementByName would continue to operate in O(1). When there are multiple slot elements for a given
        kind, we immediately enqueue slotchange event on the slot elements which newly became the first of its kind but
        delay the enqueuing of slotchange event on the removed slot elements until removeSlotElementByName is called on
        that element so that enqueuing of slotchange events on the slot elements still remaining in the in the tree would
        happen before those which got removed as the DOM specification mandates.

        Rename (https://dom.spec.whatwg.org/#shadow-tree-slots): In the case the slot element's name content attribute
        is changed, the renamed element might have become the first of its kind or ceased to be the first of its kind.
        There could be two other slot elements appearing later in the tree order which might have gained or lost assigned
        nodes as a result. In this case, we invoke the algorithms for removing & inserting the slot with a key difference:
        we enqueue slotchange event on the renamed slot immediately if it has assigned nodes.

        To enqueue slotchange event in the tree order, this patch adds oldElement, which is a WeakPtr to a slot element,
        to SlotAssignment::Slot. This WeakPtr is set to the slot element which used to have assigned nodes prior to the
        node insertion, removal, or rename but no longer has after the mutation. This patch also adds a slot mutation
        version number, m_slotMutationVersion, which is incremented whenever a node is about to be inserted or removed,
        and slot resolution version, m_slotResolutionVersion, which is set to the current slot mutation version number
        when the full slot resolution is triggered during slot mutations. They are used to avoid redundant tree traversals
        in resolveSlotsAfterSlotMutation. This patch also makes m_needsToResolveSlotElements compiled in release builds
        to avoid resolving slot elements when there is at most one slot element of each kind.

        For insertion, oldElement is set to the slot which used to be the first of its kind before getting set to a slot
        element being inserted in resolveSlotsAfterSlotMutation. We enqueue slotchange event on the newly inserted slot
        element at that point (1). Since the slot element which used to be the first of its kind appears after the newly
        inserted slot element by definition, we're guaranteed to see this oldElement later in the tree traversal upon
        which we enqueue slotchange event. Note that if this slot element was the first of its kind, then we're simply
        hitting (1), which is O(1) and does not invoke the tree traversal.

        For removal, oldElement is set to the slot which used to be the first of its kind. Because this slot element is
        getting removed, slotchange event must be enqueud after slotchange events have been enqueued on all slot elements
        still remaining in the tree. To do this, we enqueue slotchange event immediately on the first slot element of
        its kind during the tree traversal as we encounter it (2), and set oldElement to the previosuly-first-but-removed
        slot element. slotchange event is enqueued on this slot element when removeSlotElementByName is later invoked via
        HTMLSlotElement::removedFromAncestor which traverses each removed element in the tree order. Again, if this was
        the last slot of its kind, we'd simply expedite (2) by enqueuing slotchange event during removeSlotElementByName,
        which is O(1).

        When the DOM invokes the concept to replace all children (https://dom.spec.whatwg.org/#concept-node-replace-all),
        however, this algorithm isn't sufficient because the removal of each child happens one after another. We would
        either need to resolve slots between each removal, or treat the removal of all children as a single operation.
        While the DOM specification currently specifies the former behavior, this patch implements the latter behavior
        to avoid useless work. See the DOM spec issue: https://github.com/w3c/webcomponents/issues/764

        Test: fast/shadow-dom/slotchange-for-slot-mutation.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeAllChildrenWithScriptAssertion): Call resolveSlotsBeforeNodeInsertionOrRemoval
        before start removing children.
        (WebCore::ContainerNode::removeNodeWithScriptAssertion): Ditto.
        (WebCore::executeNodeInsertionWithScriptAssertion): Ditto before inserting children.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::~ShadowRoot): Set m_hasBegunDeletingDetachedChildren to true. This flag is used to supress
        slotchange events during the shadow tree destruction.
        (WebCore::ShadowRoot::renameSlotElement): Added.
        (WebCore::ShadowRoot::removeSlotElementByName): Added oldParentOfRemovedTree as an argument.
        * dom/ShadowRoot.h:
        (WebCore::ShadowRoot::shouldFireSlotchangeEvent): Added.
        * dom/SlotAssignment.cpp:
        (WebCore::findSlotElement): Added.
        (WebCore::nextSlotElementSkippingSubtree): Added.
        (WebCore::SlotAssignment::hasAssignedNodes): Added. Returns true if the slot of a given name has assigned nodes.
        (WebCore::SlotAssignment::renameSlotElement): Added.
        (WebCore::SlotAssignment::addSlotElementByName): Call resolveSlotsAfterSlotMutation when slotchange event needs
        to be dispatched for the current slot and there are more than one slot elements.
        (WebCore::SlotAssignment::removeSlotElementByName): Ditto. When the slot's oldElement is set to the current slot
        element, meaning that this slot element used to have assigned nodes, then enqueue slotchange event. It also has
        a special case for oldParentOfRemovedTree is null when renaming a slot element. In this case, we want to enqueue
        slot change event immediately on the renamed slot element and any affected elements as in a node insertion since
        removeSlotElementByName would never be called on a slot element which newly become the first of its kind after
        a slot rename.
        (WebCore::SlotAssignment::resolveSlotsAfterSlotMutation): Added. This is the slot resolution algorithm invoked
        when there are more than one slot elements for a given name. It has two modes dealing with insertion & removal.
        The insertion mode is also used for renaming a slot element. The firs
        (WebCore::SlotAssignment::resolveSlotsBeforeNodeInsertionOrRemoval): Added. Resolves all slot elements prior to
        inserting or removing nodes. In many cases, this should be a no-op since m_needsToResolveSlotElements is set to
        true only when there are more than one slot element of its kind.
        (WebCore::SlotAssignment::willRemoveAllChildren): Ditto. Also sets m_willBeRemovingAllChildren to true.
        (WebCore::SlotAssignment::didChangeSlot):
        (WebCore::SlotAssignment::resolveAllSlotElements): Use seenFirstElement instead of element to indicate whether
        we have seen a slot element of given name for consistency with resolveSlotsAfterSlotMutation.
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::Slot): Added oldElement and seenFirstElement.
        (WebCore::SlotAssignment): Always compile m_needsToResolveSlotElements. Added m_willBeRemovingAllChildren,
        m_slotMutationVersion, and m_slotResolutionVersion.
        (WebCore::ShadowRoot::resolveSlotsBeforeNodeInsertionOrRemoval): Added. Calls the one in SlotAssignment.
        (WebCore::ShadowRoot::willRemoveAllChildren): Ditto.
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::removedFromAncestor):
        (WebCore::HTMLSlotElement::attributeChanged): Calls ShadowRoot::renameSlotElement instead of
        removeSlotElementByName and addSlotElementByName pair.

2018-09-04  Youenn Fablet  <youenn@apple.com>

        Make LibWebRTCRtpSenderBackend own its libwebrtc RTP sender backend
        https://bugs.webkit.org/show_bug.cgi?id=189270

        Reviewed by Eric Carlson.

        Previously, the libwebrtc senders were owned in LibWebRTCMediaEndpoint.
        This patch makes them be owned by LibWebRTCRtpSenderBackend.
        This simplifies the implementation of RTCRtpSender::getParameters.
        This will help simplify the implementation of RTCRtpSender::replaceTrack.

        removeTrack is also refactored so that LibWebRTCMediaEndpoint directly uses libwebrtc constructs and not WebCore libwebrtc-agnostic ones.

        No change of behavior.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::removeTrack):
        (WebCore::PeerConnectionBackend::notifyRemovedTrack): Deleted.
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::removeTrack):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::getParameters):
        * Modules/mediastream/RTCRtpSender.h:
        (WebCore::RTCRtpSender::backend):
        * Modules/mediastream/RTCRtpSenderBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::removeTrack):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer):
        (WebCore::LibWebRTCMediaEndpoint::stop):
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveAudio const): Deleted.
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveVideo const): Deleted.
        (WebCore::LibWebRTCMediaEndpoint::getRTCRtpSenderParameters): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::backendFromRTPSender):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::removeTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::shouldOfferAllowToReceive const):
        (WebCore::LibWebRTCPeerConnectionBackend::notifyRemovedTrack): Deleted.
        (WebCore::LibWebRTCPeerConnectionBackend::getParameters const): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:

2018-09-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        Populate "text/uri-list" with multiple URLs when the pasteboard contains multiple URLs
        https://bugs.webkit.org/show_bug.cgi?id=188890
        <rdar://problem/43648605>

        Reviewed by Tim Horton.

        Adds support for exposing a newline separated list of URLs via DataTransfer's "text/uri-list" type when pasting
        or dropping multiple items on the pasteboard that can be represented as URLs. Currently on iOS, only the URL of
        the first item (if present) is exposed, and on macOS, only the first out of all the URLs in the pasteboard is
        exposed.

        To fix this, we introduce `Pasteboard::readAllStrings`, which reads a list of pasteboard strings collected from
        all available items on the platform pasteboard. Currently, this is only used to provide a list of URL strings
        when fetching data for the "text/uri-list" type when calling `DataTransfer.getData()` and
        `DataTransferItem.getAsString()`.

        Tests:  DragAndDropTests.ExposeMultipleURLsInDataTransfer
                UIPasteboardTests.DataTransferURIListContainsMultipleURLs
                PasteMixedContent.PasteOneOrMoreURLs

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

        Add a helper method that reads all URL strings from the pasteboard (for the MIME type "text/uri-list", which
        corresponds to NSURLPboardType and "public.url" on macOS and iOS, respectively) and returns a single string
        containing all non-empty URLs joined by newline characters. Also takes a filtering block which may be used to
        reject URLs from being included in "text/uri-list" output.

        (WebCore::DataTransfer::getDataForItem const):
        (WebCore::DataTransfer::readStringFromPasteboard const):

        Insteading of reading a single string from the pasteboard for "text/uri-list", call the above helper function to
        read all URL strings in the pasteboard. If there are files present in the pasteboard, we also filter out URLs
        whose schemes are not in the set of schemes that are safe to expose to the page (i.e. http(s), blob, and data).

        * platform/Pasteboard.cpp:
        (WebCore::Pasteboard::readAllStrings):

        Add a default non-Cocoa implementation of readAllStrings() that returns a vector, which may contain the result
        of readString().

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

        Add plumbing to grab a list of strings from the pasteboard for a given type.

        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::readAllStrings):
        (WebCore::Pasteboard::readString):

        Implement these two methods in terms of `readPlatformValuesAsStrings`. `readAllStrings` returns the full list of
        results, while `readString` only returns the first result.

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPlatformValuesAsStrings):
        (WebCore::Pasteboard::readPlatformValueAsString): Deleted.

        Refactor this Cocoa helper function to return a list of pasteboard string values for the given type, rather than
        a single string.

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

        Grab a string for each item (represented by an NSItemProvider) in the pasteboard that has data for the given
        type identifier.

        (WebCore::PlatformPasteboard::readString const):

        Return the absolute string of the NSURL, instead of WebCore::URL::string(). This is needed to handle the case
        where the NSURL is constructed from absolute and relative parts using a Plist. While -absoluteString gets us the
        full URL string, URL::string() only returns the relative portion.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::readPlatformValuesAsStrings):
        (WebCore::Pasteboard::readPlatformValueAsString): Deleted.

        Also refactor this to retrieve a list of pasteboard strings, rather than a single result.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::typeIdentifierForPasteboardType):
        (WebCore::PlatformPasteboard::allStringsForType const):

        Add an implementation for `allStringsForType` on macOS. Unlike iOS, it's much trickier to get this right since
        we need to maintain compatibility with legacy "NS*Pboard" types, and `NSPasteboardItem` can only provide data
        for `NSPasteboardType`s (i.e. UTIs), so there's no way to just iterate through each pasteboard item and ask it
        for data that matches the given type, if the types are not UTIs. However, in the case where we have multiple
        items, the client must have used NSPasteboardWriting-conformant objects and/or NSPasteboardItem itself to write
        data to the pasteboard. Since NSPasteboardWriting-conformant objects register modern pasteboard types when
        writing to the pasteboard, we can simply iterate over these pasteboard items and ask for property lists using
        type identifiers instead of having to worry about legacy pasteboard types. Furthermore, in the case where there
        is only a single item in the pasteboard and we do need to handle legacy pasteboard types, using `-[NSPasteboard
        stringForType:]` in the same way we do currently should yield the correct result.

        As such, in the case where there is a single pasteboard item, we use `-[NSPasteboard stringForType:]` with the
        original legacy type, and in the case where there are multiple items on the pasteboard, we iterate over each of
        the pasteboard items and call `-[NSPasteboardItem propertyListForType:]` with the modern pasteboard type
        corresponding to the given legacy pasteboard type.

        The different corner cases in this logic are tested by the new API test, PasteMixedContent.PasteOneOrMoreURLs,
        which exercises several different ways of writing one or more URLs to the pasteboard on macOS, which each result
        in different legacy and modern pasteboard types being written to the pasteboard; our implementation of
        `PlatformPasteboard::allStringsForType` on macOS handles all cases correctly.

2018-09-04  Simon Fraser  <simon.fraser@apple.com>

        CSS reference filter that references a tiled feTurbulence is blank
        https://bugs.webkit.org/show_bug.cgi?id=188950

        Reviewed by Dean Jackson.
        
        We need to run the code that was in RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion()
        for CSS reference filters, to set up the various rects in the filter effects.
        
        Do this by moving the code to FilterEffect::determineFilterPrimitiveSubregion(), which makes sense
        because it recurses on the FilterEffect input chain. To make it CSS/SVGFilter agnostic, we move filterRegionInUserSpace()
        to the Filter base class (for CSSFilter, it just returns m_filterRegion).

        Test: css3/filters/reference-filter-set-filter-regions.html

        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        * platform/graphics/filters/FilterEffect.h:
        * rendering/CSSFilter.cpp:
        (WebCore::CSSFilter::determineFilterPrimitiveSubregion):
        * rendering/CSSFilter.h:
        * rendering/RenderLayerFilters.cpp:
        (WebCore::RenderLayerFilters::beginFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion): Deleted.
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * svg/graphics/filters/SVGFilter.h:

2018-09-04  Zalan Bujtas  <zalan@apple.com>

        [LFC] Rename LayoutPair to BoxPair
        https://bugs.webkit.org/show_bug.cgi?id=189276

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):

2018-09-04  Youenn Fablet  <youenn@apple.com>

        Disable WebRTC unified plan runtime flag by default
        https://bugs.webkit.org/show_bug.cgi?id=189264

        Reviewed by Jer Noble.

        Covered by existing tests.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        Activate unified plan for testing.

2018-09-04  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Merge computeInFlowWidth(Height)AndMargin and computeFloatingWidth(Height)AndMargin.
        https://bugs.webkit.org/show_bug.cgi?id=189271

        Reviewed by Antti Koivisto.

        This is in preparation for adding min/max-widht(height).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const): Deleted.
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const): Deleted.
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidthAndMargin const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:

2018-09-04  Rob Buis  <rbuis@igalia.com>

        Adjust XMLHttpRequest username/password precedence rules
        https://bugs.webkit.org/show_bug.cgi?id=184910

        Reviewed by Chris Dumez.

        Steps 9.1 and 9.2 in the XMLHTTPRequest::open [1] algorithm
        specify that non null user or non null password ought
        to be set on the URL, so implement this.

        Behavior matches Firefox and Chrome.

        [1] https://xhr.spec.whatwg.org/#dom-xmlhttprequest-open

        Test: xhr/send-authentication-competing-names-passwords.htm

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):

2018-09-04  Simon Fraser  <simon.fraser@apple.com>

        Simplify RenderLayer filter code
        https://bugs.webkit.org/show_bug.cgi?id=189248

        Reviewed by Dean Jackson.
        
        Painting filters in RenderLayer involved the confusingly named RenderLayer::FilterInfo,
        and FilterEffectRenderer/FilterEffectRendererHelper. Reduce confusion by just collapsing
        these together into RenderLayerFilters. RenderLayerFilters stores a reference to the
        CSSFilter, and knows how to set it up, and vend a GraphicsContext* for painting the content
        to be filtered.
        
        It's also simpler to just give RenderLayer a member variable for RenderLayerFilters, rather
        than using a side hash (we can recoup the space in other ways layer).

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFilterImageValue.cpp:
        * rendering/CSSFilter.h:
        * rendering/FilterEffectRenderer.cpp: Removed.
        * rendering/FilterEffectRenderer.h: Removed.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::paintsWithFilters const):
        (WebCore::RenderLayer::requiresFullLayerImageForFilters const):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::filtersForPainting const):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::applyFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::filter const): Deleted.
        (WebCore::RenderLayer::filterPainter const): Deleted.
        (WebCore::RenderLayer::hasFilterThatIsPainting const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.cpp: Removed.
        * rendering/RenderLayerFilters.cpp: Added.
        (WebCore::RenderLayerFilters::RenderLayerFilters):
        (WebCore::RenderLayerFilters::~RenderLayerFilters):
        (WebCore::RenderLayerFilters::setFilter):
        (WebCore::RenderLayerFilters::hasFilterThatMovesPixels const):
        (WebCore::RenderLayerFilters::hasFilterThatShouldBeRestrictedBySecurityOrigin const):
        (WebCore::RenderLayerFilters::notifyFinished):
        (WebCore::RenderLayerFilters::updateReferenceFilterClients):
        (WebCore::RenderLayerFilters::removeReferenceFilterClients):
        (WebCore::RenderLayerFilters::buildFilter):
        (WebCore::RenderLayerFilters::beginFilterEffect):
        (WebCore::RenderLayerFilters::applyFilterEffect):
        * rendering/RenderLayerFilters.h: Renamed from Source/WebCore/rendering/RenderLayerFilterInfo.h.

2018-09-04  Dean Jackson  <dino@apple.com>

        Build fix.

        * testing/Internals.cpp:

2018-09-03  Dean Jackson  <dino@apple.com>

        Move SystemPreview code from WebKitAdditions to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=189252
        <rdar://problem/44080245>

        Reviewed by Wenson Hsieh.

        Move the WebKitAdditions code into WebKit/WebCore.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList const): Look for "ar".
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const): Ditto.

        * platform/MIMETypeRegistry.cpp: Add a couple of new static methods
        for System Preview MIME types.
        (WebCore::initializeSystemPreviewMIMETypes):
        (WebCore::MIMETypeRegistry::getSystemPreviewMIMETypes):
        (WebCore::MIMETypeRegistry::isSystemPreviewMIMEType):
        * platform/MIMETypeRegistry.h:

        * rendering/RenderThemeIOS.mm: Load the ARKit artwork from the framework.
        (WebCore::arKitBundle):
        (WebCore::loadARKitPDFPage):
        (WebCore::systemPreviewLogo):
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):

        * testing/Internals.cpp: Remove internal helper.
        (WebCore::Internals::systemPreviewRelType): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-04  Andy Estes  <aestes@apple.com>

        [Payment Request] PaymentResponse should have an onpayerdetailchange event handler
        https://bugs.webkit.org/show_bug.cgi?id=189249

        Reviewed by Alex Christensen.

        Implemented the onpayerdetailchange event handler as defined in the Payment Request API W3C Editor's Draft of 30 August 2018.

        The "payer detail changed" algorithm will be implemented in a follow-up patch.

        Covered by existing web platform tests.

        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::scriptExecutionContext const):
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/paymentrequest/PaymentResponse.idl:
        * dom/EventNames.h:
        * dom/EventTargetFactory.in:

2018-09-04  Youenn Fablet  <youenn@apple.com>

        Introduce LibWebRTC backends for sender and receiver
        https://bugs.webkit.org/show_bug.cgi?id=189171

        Reviewed by Alejandro G. Castro.

        Rename RTCRtpSender::Backend to RTCRtpSenderBackend, ditto for RTCRtpReceiver::Backend.
        Make RTCRtpSender/RTCRtpReceiver own their backend.
        This will allow the backends to own a libwebrtc sender/receiver ref counted object
        and might allow us to cleanly separate code from unified plan vs plan B.

        Update code so that libwebrtc code specific code is now creating senders and receivers.
        This moves code from RTCPeerConnection down to LibWebRTCPeerConnectionBackend, in particular for
        addTrack and addTransceiver methods.

        Moved some code from LibWebRTCMediaEndpoint to LibWebRTCUtils to ease readability.

        A future patch will allow to tie the libwebrtc sender/receiver to WebKit DOM sender/receiver.

        Covered by existing tests.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addTrack):
        (WebCore::PeerConnectionBackend::addTransceiver):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::RTCPeerConnection::enqueueReplaceTrackTask):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpReceiver.cpp:
        (WebCore::RTCRtpReceiver::RTCRtpReceiver):
        * Modules/mediastream/RTCRtpReceiver.h:
        (WebCore::RTCRtpReceiver::create):
        (WebCore::RTCRtpReceiver::setBackend):
        * Modules/mediastream/RTCRtpReceiverBackend.h: Added.
        (WebCore::RTCRtpReceiverBackend::getParameters):
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::create):
        (WebCore::RTCRtpSender::RTCRtpSender):
        * Modules/mediastream/RTCRtpSender.h:
        * Modules/mediastream/RTCRtpSenderBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::videoReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::audioReceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::addTrack):
        (WebCore::LibWebRTCPeerConnectionBackend::addTransceiver):
        (WebCore::LibWebRTCPeerConnectionBackend::completeAddTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp: Added.
        (WebCore::LibWebRTCRtpReceiverBackend::getParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp: Added.
        (WebCore::LibWebRTCRtpSenderBackend::replaceTrack):
        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h: Added.
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp: Added.
        (WebCore::fillEncodingParameters):
        (WebCore::fillHeaderExtensionParameters):
        (WebCore::fillCodecParameters):
        (WebCore::fillRtpParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h: Added.
        (WebCore::fromStdString):
        * WebCore.xcodeproj/project.pbxproj:

2018-09-04  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Disabling both fullscreen and picture-in-picture shows an empty top left container
        https://bugs.webkit.org/show_bug.cgi?id=189259
        <rdar://problem/42026625>

        Reviewed by Dean Jackson.

        Test: media/modern-media-controls/macos-inline-media-controls/macos-inline-media-controls-disabled-fullscreen-and-pip.html

        Ensure the top left controls bar is hidden when none of its children are visible.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):

2018-09-04  Daniel Bates  <dabates@apple.com>

        Attempt to fix failing tests following r235615 (https://bugs.webkit.org/show_bug.cgi?id=187925)

        An inline text box that does not have combined text and contains a single character
        should be considered as having text content.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::hasTextContent const):

2018-09-04  Per Arne Vollan  <pvollan@apple.com>

        Add test for fix in https://bugs.webkit.org/show_bug.cgi?id=187922
        https://bugs.webkit.org/show_bug.cgi?id=187925

        Reviewed by Simon Fraser.

        This will test that the function primaryScreenDisplayID() returns a valid display ID.

        Test: fast/misc/valid-primary-screen-displayID.html

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::primaryScreenDisplayID):
        * testing/Internals.cpp:
        (WebCore::Internals::primaryScreenDisplayID):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-09-04  Daniel Bates  <dabates@apple.com>

        Add helper function to create a potential CORS request
        https://bugs.webkit.org/show_bug.cgi?id=189251

        Reviewed by Andy Estes.

        Add a new function, createPotentialAccessControlRequest, that we will use to implement the algorithm Create a potential-
        CORS request from the HTML standard: <https://html.spec.whatwg.org/multipage/urls-and-fetching.html#create-a-potential-cors-request> (31 August 2018).
        This function replaces CachedResourceRequest::setAsPotentiallyCrossOrigin() and is the first step towards separating
        the concepts of CORS settings states and module script credentials mode as well as implementing the aforementioned
        algorithm. Rename CachedResourceRequest::setAsPotentiallyCrossOrigin() to deprecatedSetAsPotentiallyCrossOrigin()
        and switch existing callers to use createPotentialAccessControlRequest(). For now, createPotentialAccessControlRequest()
        is implemented in terms of deprecatedSetAsPotentiallyCrossOrigin().

        No functionality changed. So, no new tests.

        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestScriptWithCache const): Write in terms of WebCore::createPotentialAccessControlRequest().
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process): Ditto.
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest): Ditto.
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createPotentialAccessControlRequest): For now, implemented in terms of CachedResourceRequest::deprecatedSetAsPotentiallyCrossOrigin().
        * loader/CrossOriginAccessControl.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): Write in terms of WebCore::createPotentialAccessControlRequest().
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preloadIfNeeded): Ditto.
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource): Ditto. Also renamed local variable cacheRequest to cachedRequest.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::load): Write in terms of WebCore::createPotentialAccessControlRequest(). Also change local variable
        document from a pointer to a reference since this function asserts that the script execution context is a non-null Document.
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::deprecatedSetAsPotentiallyCrossOrigin): Renamed; formerly named setAsPotentiallyCrossOrigin.
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin): Deleted.
        * loader/cache/CachedResourceRequest.h:
        (WebCore::CachedResourceRequest::setPriority): Added.

2018-09-04  Daniel Bates  <dabates@apple.com>

        Remove redundant inline text boxes for empty combined text
        https://bugs.webkit.org/show_bug.cgi?id=189119

        Reviewed by Zalan Bujtas.

        We should consider inline text boxes that have a combined text renderer (RenderCombineText)
        whose composed string is empty as "redundant" just as we do for inline text boxes that have
        a non-combined text renderer that have zero length so that we remove them. Such boxes are
        visibly empty and do not take up space visually. By removing them we reduce memory and make
        it easier to reason about the line box tree.

        Currently RenderBlockFlow::computeBlockDirectionPositionsForLine() tests if an inline text
        box is empty by checking if it has a zero length (InlineTextBox::len()). However an inline
        text box associated with a RenderCombineText always has length 1 regardless of whether the
        composed string it represents is the empty string. Instead we should expose a way to check
        if an inline text box is visually empty and have RenderBlockFlow::computeBlockDirectionPositionsForLine()
        query the inline text box for this answer.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::hasTextContent const): Added. Returns whether an inline text box
        has text content. We do not need to consider hypenation since hypens are an embellishment (i.e.
        they are not part of the markup of the page).
        (WebCore::InlineTextBox::paint): Write in terms of hasTextContent().
        (WebCore::InlineTextBox::subdivideAndResolveStyle): Assert that WebCore::subdivide() always
        returns a non-empty list of subdivisions. A non-empty text box should always have at least
        one subdivision, say for the unmarked text. I left the existing conditonal (though marked
        it as UNLIKELY()) so as to be forgiving and avoid a bad user experience should WebCore::subdivide()
        return an empty vector in a non-debug build.
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeBlockDirectionPositionsForLine): Write in terms of InlineTextBox::hasTextContent()
        so that we remove empty inline text boxes associated with combined text.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionLineBox): Write in terms of InlineTextBox::hasTextContent().

2018-09-04  Zan Dobersek  <zdobersek@igalia.com> and Ms2ger  <Ms2ger@igalia.com>

        Implement support for passing ImageBitmap to texImage2D/texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=187584

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/gl-teximage-imagebitmap.html

        * html/canvas/WebGL2RenderingContext.h: Update union type definition.
        * html/canvas/WebGL2RenderingContext.idl: Update union type definition.
        * html/canvas/WebGLRenderingContext.idl: Update union type definition.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::texSubImage2D): implement.
        (WebCore::WebGLRenderingContextBase::texImage2D): implement.
        * html/canvas/WebGLRenderingContextBase.h: Update union type definition; add to TexFuncValidationSourceType.
        * html/canvas/WebGLRenderingContextBase.idl: Remove unused union type definition.

2018-09-04  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME] Add the WebM initData support in ClearKey CDM
        https://bugs.webkit.org/show_bug.cgi?id=189240

        Reviewed by Xabier Rodriguez-Calvar.

        Add the "webm" initDataType support in ClearKey CDM.
        Read the WebM initData by following the W3C spec https://www.w3.org/TR/eme-initdata-webm/#common-system,
        and put it in JSON object format like is specified in https://www.w3.org/TR/encrypted-media/#clear-key-request-format.

        Tests: media/encrypted-media/clearKey/clearKey-encrypted-webm-event-mse.html
               media/encrypted-media/clearKey/clearKey-webm-video-playback-mse.html

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyIdFromWebMInitData):
        (WebCore::CDMPrivateClearKey::supportsInitDataType const):
        (WebCore::CDMPrivateClearKey::supportsInitData const):
        (WebCore::CDMInstanceClearKey::requestLicense):

2018-09-03  Andy Estes  <aestes@apple.com>

        [Payment Request] Remove PaymentAddress.languageCode
        https://bugs.webkit.org/show_bug.cgi?id=189254

        Reviewed by Sam Weinig.

        PaymentAddress.languageCode is marked as "at risk" in the latest Payment Request Editor's
        Draft (30 August 2018). Firefox has already removed it, and Chrome is considering it.

        There is some compatibility risk in removing this attribute, but considering we never
        populated it with a meaningful value, the risk seems very low. If we learn about
        compatibility problems, we can address them by evangelising or even reverting this change.

        Updated existing tests.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::convert):
        * Modules/paymentrequest/PaymentAddress.cpp:
        (WebCore::PaymentAddress::PaymentAddress):
        * Modules/paymentrequest/PaymentAddress.h:
        * Modules/paymentrequest/PaymentAddress.idl:

2018-09-03  Andy Estes  <aestes@apple.com>

        [Payment Request] Add a stub for PaymentResponse.retry
        https://bugs.webkit.org/show_bug.cgi?id=189253

        Reviewed by Sam Weinig.

        Implemented the AddressErrors, PayerErrorFields, and PaymentValidationErrors dictionaries as
        defined in the Payment Request API W3C Editor's Draft of 30 August 2018.

        Also added a stub implementation of PaymentResponse.retry. This method will be implemented
        with tests in a follow-up patch.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/paymentrequest/AddressErrors.h: Added.
        * Modules/paymentrequest/AddressErrors.idl: Added.
        * Modules/paymentrequest/PayerErrorFields.h: Added.
        * Modules/paymentrequest/PayerErrorFields.idl: Added.
        * Modules/paymentrequest/PaymentResponse.cpp:
        (WebCore::PaymentResponse::retry):
        * Modules/paymentrequest/PaymentResponse.h:
        * Modules/paymentrequest/PaymentResponse.idl:
        * Modules/paymentrequest/PaymentValidationErrors.h: Added.
        * Modules/paymentrequest/PaymentValidationErrors.idl: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-09-03  Andy Estes  <aestes@apple.com>

        [Payment Request] MerchantValidationEvent should be enabled by the PaymentRequest setting
        https://bugs.webkit.org/show_bug.cgi?id=189250

        Reviewed by Daniel Bates.

        * Modules/paymentrequest/MerchantValidationEvent.idl:

2018-09-03  Youenn Fablet  <youenn@apple.com>

        REGRESSION: Layout Test http/tests/security/bypassing-cors-checks-for-extension-urls.html is Flaky
        https://bugs.webkit.org/show_bug.cgi?id=187658
        <rdar://problem/42306442>

        Reviewed by Alexey Proskuryakov.

        Test is flaky as a previous test was setting the isRunningUserScripts state on the Page and it was never reset.
        This patch moves this state to the topDocument so that it will be reset for every navigation.
        Covered by existing test being no longer flaky.

        * dom/Document.h:
        (WebCore::Document::setAsRunningUserScripts):
        (WebCore::Document::isRunningUserScripts const):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        * page/Page.h:
        (WebCore::Page::setAsRunningUserScripts): Deleted.
        (WebCore::Page::isRunningUserScripts const): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::setAsRunningUserScripts):

2018-09-03  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement the MerchantValidationEvent constructor
        https://bugs.webkit.org/show_bug.cgi?id=189235

        Reviewed by Daniel Bates.

        Implemented the constructor for MerchantValidationEvent as defined in the Payment Request API W3C Editor's Draft of 30 August 2018.

        Updated the payment-request web platform tests to include MerchantValidationEvent tests.

        Tests: imported/w3c/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html
               imported/w3c/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html
               imported/w3c/web-platform-tests/payment-request/PaymentRequestUpdateEvent/constructor.http.html
               imported/w3c/web-platform-tests/payment-request/PaymentRequestUpdateEvent/constructor.https.html
               imported/w3c/web-platform-tests/payment-request/PaymentRequestUpdateEvent/updatewith-method.https.html
               imported/w3c/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        (WebCore::MerchantValidationEvent::create):
        (WebCore::MerchantValidationEvent::MerchantValidationEvent):
        (WebCore::MerchantValidationEvent::complete):
        * Modules/paymentrequest/MerchantValidationEvent.h:
        * Modules/paymentrequest/MerchantValidationEvent.idl:
        * Modules/paymentrequest/MerchantValidationEventInit.h: Added.
        * Modules/paymentrequest/MerchantValidationEventInit.idl: Added.
        * Modules/paymentrequest/PaymentRequest.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-09-03  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] elements registration clean-ups
        https://bugs.webkit.org/show_bug.cgi?id=189192

        Reviewed by Xabier Rodriguez-Calvar.

        Register all our elements from the base player class. This
        simplifies the MSE player by removing duplicated code.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::registerWebKitGStreamerElements): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::mimeTypeCache):
        (WebCore::initializeGStreamerAndRegisterWebKitMSEElement): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerMSE::isAvailable): Deleted.
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2018-09-02  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r191336): RenderFlexibleBox::adjustChildSizeForMinAndMax crashes in std::optional<>::value()
        https://bugs.webkit.org/show_bug.cgi?id=189232
        <rdar://problem/43886373>

        Reviewed by Brent Fulgham.

        It's not guaranteed that RenderFlexibleBox::computeMainAxisExtentForChild() always returns with a valid value.

        Test: fast/flexbox/crash-when-min-max-content-is-not-computed.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):

2018-09-01  Simon Fraser  <simon.fraser@apple.com>

        Rename FilterEffectRenderer to CSSFilter
        https://bugs.webkit.org/show_bug.cgi?id=189223

        Reviewed by Sam Weinig.

        Filter was subclassed by SVGFilter for SVG, and FilterEffectRenderer for CSS,
        which was very confusing, especially when the code uses renderer() to get it.
        
        Rename FilterEffectRenderer to CSSFilter, and access via filter().
        
        Future cleanup will deal with FilterEffectRendererHelper.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::isCSSFilter const):
        * rendering/CSSFilter.cpp: Copied from Source/WebCore/rendering/FilterEffectRenderer.cpp.
        (WebCore::endMatrixRow):
        (WebCore::lastMatrixRow):
        (WebCore::CSSFilter::create):
        (WebCore::CSSFilter::CSSFilter):
        (WebCore::m_sourceGraphic):
        (WebCore::CSSFilter::inputContext):
        (WebCore::CSSFilter::buildReferenceFilter):
        (WebCore::CSSFilter::build):
        (WebCore::CSSFilter::updateBackingStoreRect):
        (WebCore::CSSFilter::allocateBackingStoreIfNeeded):
        (WebCore::CSSFilter::clearIntermediateResults):
        (WebCore::CSSFilter::apply):
        (WebCore::CSSFilter::computeSourceImageRectForDirtyRect):
        (WebCore::CSSFilter::output const):
        (WebCore::CSSFilter::setSourceImageRect):
        (WebCore::CSSFilter::setMaxEffectRects):
        (WebCore::CSSFilter::outputRect const):
        * rendering/CSSFilter.h: Copied from Source/WebCore/rendering/FilterEffectRenderer.h.
        (isType):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::prepareFilterEffect):
        (WebCore::FilterEffectRendererHelper::filterContext const):
        (WebCore::FilterEffectRendererHelper::beginFilterEffect):
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        (WebCore::endMatrixRow): Deleted.
        (WebCore::lastMatrixRow): Deleted.
        (WebCore::FilterEffectRenderer::FilterEffectRenderer): Deleted.
        (WebCore::m_sourceGraphic): Deleted.
        (WebCore::FilterEffectRenderer::create): Deleted.
        (WebCore::FilterEffectRenderer::inputContext): Deleted.
        (WebCore::FilterEffectRenderer::buildReferenceFilter): Deleted.
        (WebCore::FilterEffectRenderer::build): Deleted.
        (WebCore::FilterEffectRenderer::updateBackingStoreRect): Deleted.
        (WebCore::FilterEffectRenderer::allocateBackingStoreIfNeeded): Deleted.
        (WebCore::FilterEffectRenderer::clearIntermediateResults): Deleted.
        (WebCore::FilterEffectRenderer::apply): Deleted.
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect): Deleted.
        (WebCore::FilterEffectRenderer::output const): Deleted.
        (WebCore::FilterEffectRenderer::setMaxEffectRects): Deleted.
        (WebCore::FilterEffectRenderer::outputRect const): Deleted.
        * rendering/FilterEffectRenderer.h:
        (WebCore::FilterEffectRendererHelper::FilterEffectRendererHelper):
        (WebCore::FilterEffectRenderer::setSourceImageRect): Deleted.
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderFrame.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::requiresFullLayerImageForFilters const):
        (WebCore::RenderLayer::filter const):
        (WebCore::RenderLayer::filterPainter const):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::filterRenderer const): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::setFilter):
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
        (WebCore::RenderLayer::FilterInfo::setRenderer): Deleted.
        * rendering/RenderLayerFilterInfo.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:

2018-09-01  Darin Adler  <darin@apple.com>

        [CFNetwork] Update CFNetwork SPI use to use CFNetworkSPI.h more consistently
        https://bugs.webkit.org/show_bug.cgi?id=189072

        Reviewed by Dan Bernstein.

        * platform/mac/WebCoreNSURLExtras.mm: Include CFNetworkSPI.h and remove a
        declaration of +[NSURLProtocol _protocolClassForRequest:].

        * platform/network/mac/ResourceHandleMac.mm: Remove a declaration of
        -[NSURLConnection _initWithRequest:delegate:usesCache:maxContentLength:startImmediately:connectionProperties:].
        (WebCore::ResourceHandle::createNSURLConnection): Add ignore of
        "-Wdeprecated-declarations" around use of the above method, since it
        is deprecated.

2018-09-01  Simon Fraser  <simon.fraser@apple.com>

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

        Reviewed by Anders Carlsson.

        Add logging in FilterEffect::apply() that shows all the filter rects, and logging
        that brackets the application of a whole filter chain, for both SVG and CSS filters.

        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::apply):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRendererHelper::applyFilterEffect):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):

2018-08-31  Youenn Fablet  <youenn@apple.com>

        Move stats gathering out of LibWebRTCMediaEndpoint
        https://bugs.webkit.org/show_bug.cgi?id=189180

        Reviewed by Alejandro G. Castro.

        Move stats gathering in LibWebRTCStatsCollector.
        Make sure that the lambda given to the collector is always called and destroyed from the main thread.
        This allows capturing the promise here instead of storing it into the peer connection backend.
        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::getStats):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::getStats):
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.cpp: Added.
        (WebCore::LibWebRTCStatsCollector::LibWebRTCStatsCollector):
        (WebCore::LibWebRTCStatsCollector::~LibWebRTCStatsCollector):
        (WebCore::fromStdString):
        (WebCore::fillRTCStats):
        (WebCore::fillRTCRTPStreamStats):
        (WebCore::fillInboundRTPStreamStats):
        (WebCore::fillOutboundRTPStreamStats):
        (WebCore::fillRTCMediaStreamTrackStats):
        (WebCore::fillRTCDataChannelStats):
        (WebCore::iceCandidatePairState):
        (WebCore::fillRTCIceCandidatePairStats):
        (WebCore::fillRTCCertificateStats):
        (WebCore::LibWebRTCStatsCollector::OnStatsDelivered):
        * Modules/mediastream/libwebrtc/LibWebRTCStatsCollector.h: Added.
        (WebCore::LibWebRTCStatsCollector::create):
        * WebCore.xcodeproj/project.pbxproj:

2018-08-31  Jer Noble  <jer.noble@apple.com>

        Compile error in RealtimeOutgoingVideoSource.cpp; unused parameter in libwebrtc header
        https://bugs.webkit.org/show_bug.cgi?id=189203

        Reviewed by Youenn Fablet.

        If RealtimeOutgoingVideoSource.cpp is compiled alone (non-unified) or if it is the first file compiled in
        a unified build, there is no pragma set to ignore unused parameter warnings in place.

        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:

2018-08-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Consolidate the implementations of readString, stringForType, and readURL in PlatformPasteboardIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=189054
        <rdar://problem/43819779>

        Reviewed by Tim Horton.

        Remove redundant and unnecessary logic for reading from the pasteboard on iOS.

        * platform/PlatformPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::stringForType const):

        This currently grabs a string corresponding to the given type from the first item in the pasteboard. Make
        stringForType instead call readString with pasteboard item index 0.

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

        Make readString with "public.url" call readURL.

        (WebCore::PlatformPasteboard::readURL const):

        Remove logic for reading URLs from the pasteboard as property lists deserialized from properly lists. This was
        added in r223195 due to fix a case "when UIPasteboard serializes NSURL as a plist" when grabbing pasteboard data
        using -valuesForPasteboardType:inItemSet:. However, this case only arises in non-UI applications (i.e. when
        UIApplicationInitialize() has not been invoked); this is currently exercised by the test CopyURL.ValidURL, but
        doesn't really correspond to a real-world use case, since all UI applications where a user would be able to
        paste in a web view already invoke UIApplicationInitialize().

        Instead of handling the case where the pasteboard contains a property list that has not been coerced to an
        NSURL, simply remove the code from PlatformPasteboard::readURL and allow UIKit to perform the coercion when
        running the test.

        (WebCore::PlatformPasteboard::count): Deleted.
        (WebCore::PlatformPasteboard::readBuffer): Deleted.
        (WebCore::PlatformPasteboard::readString): Deleted.
        (WebCore::PlatformPasteboard::readURL): Deleted.

        Mark these functions as `const`.

        * platform/wpe/PlatformPasteboardWPE.cpp:
        (WebCore::PlatformPasteboard::readString const):
        (WebCore::PlatformPasteboard::readString): Deleted.

        Mark this function as const.

2018-08-31  Jer Noble  <jer.noble@apple.com>

        Compilation error in FormData.cpp: incomplete type 'WebCore::SharedBuffer'
        https://bugs.webkit.org/show_bug.cgi?id=189207

        Reviewed by Youenn Fablet.

        If FormData.cpp is compiled alone (non-unified) or if it is the first file compiled in
        a unified build, SharedBuffer.h is not included.

        * platform/network/FormData.cpp:

2018-08-31  Chris Dumez  <cdumez@apple.com>

        [ WK2 ] http/tests/workers/service/client-*-page-cache.html LayoutTests are flaky
        https://bugs.webkit.org/show_bug.cgi?id=183705
        <rdar://problem/42440606>

        Reviewed by Youenn Fablet.

        Add internals.serviceWorkerClientIdentifier() utility function so that a layout test can get the
        service worker client identifier of a document.

        * testing/Internals.cpp:
        (WebCore::Internals::serviceWorkerClientIdentifier const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-08-31  John Wilander  <wilander@apple.com>

        Storage Access API: Maintain access through same-site navigations
        https://bugs.webkit.org/show_bug.cgi?id=188564
        <rdar://problem/43445160>

        Reviewed by Alex Christensen.

        Tests: http/tests/storageAccess/request-and-grant-access-then-navigate-cross-site-should-not-have-access.html
               http/tests/storageAccess/request-and-grant-access-then-navigate-same-site-should-have-access.html

        * dom/Document.h:
            Removed unused member variable m_hasFrameSpecificStorageAccess.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoaderClient.h:

2018-08-31  Youenn Fablet  <youenn@apple.com>

        WebAudioBufferList.cpp/.h is named as cocoa/WebAudioBufferList.cpp/.h
        https://bugs.webkit.org/show_bug.cgi?id=189160

        Reviewed by Jer Noble.

        Add WebAudioBufferList.cpp to unified build.
        Update XCode project so that the file names are right.
        No change of behavior.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-08-31  Chris Dumez  <cdumez@apple.com>

        Assertion hit in ~CompletionHandler() from ~WebFrame()
        https://bugs.webkit.org/show_bug.cgi?id=189199
        <rdar://problem/42657233>

        Reviewed by Youenn Fablet.

        The issue was caused by WebFrame::m_willSubmitFormCompletionHandlers implicitly containing
        CompletionHandlers (wrapped in WTF::Functions) and not calling them upon WebFrame
        destruction.

        No new tests, covered by fast/frames/iframe-target.html.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchWillSubmitForm):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:

2018-08-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add margin box verification back now that Display::Box has non-computed horizontal margin.
        https://bugs.webkit.org/show_bug.cgi?id=189193

        Reviewed by Antti Koivisto.

        Use the non-computed margin values to verify correctness.
        This patch also fixes a margin collapsing issue when the inflow box has a float sibling. The float
        sibling does not prevent collapsing with the parent's top/bottom margin.

        Test: fast/block/block-only/floating-and-next-previous-inflow-with-margin-with-no-border.html

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):

2018-08-31  Antti Koivisto  <antti@apple.com>

        Replace OptionSet |= and -= operators with add() and remove() functions
        https://bugs.webkit.org/show_bug.cgi?id=189169

        Reviewed by Anders Carlsson.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection const):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextDecoration):
        (WebCore::StyleBuilderConverter::convertTextEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextUnderlinePosition):
        (WebCore::StyleBuilderConverter::convertTextDecorationSkip):
        (WebCore::StyleBuilderConverter::convertSpeakAs):
        (WebCore::StyleBuilderConverter::convertHangingPunctuation):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * dom/Document.cpp:
        (WebCore::Document::styleColorOptions const):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::removeMarkers):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::addThrottlingReason):
        (WebCore::ScriptedAnimationController::removeThrottlingReason):
        * dom/SecurityContext.h:
        (WebCore::SecurityContext::setFoundMixedContent):
        * dom/UIEventWithKeyState.cpp:
        (WebCore::UIEventWithKeyState::modifiersFromInitializer):
        (WebCore::UIEventWithKeyState::setModifierKeys):
        * dom/UserActionElementSet.cpp:
        (WebCore::UserActionElementSet::setFlags):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelectedRange):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::defaultSetSelectionOptions):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheckSucceed):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange const):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::SearchBuffer):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::find const):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):
        (WebCore::FrameView::willPaintContents):
        * page/Page.cpp:
        (WebCore::Page::setIsVisible):
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):
        * page/WindowFeatures.cpp:
        (WebCore::parseDisabledAdaptations):
        * page/csp/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::addHashAlgorithmsForInlineScripts):
        (WebCore::ContentSecurityPolicy::addHashAlgorithmsForInlineStylesheets):
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::parseHashSource):
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::PlatformEvent):
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::modifiersForEvent):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::modifiersForEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintForegroundForFragments):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::collectStylesForRenderer):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::RenderStyle::changeRequiresLayerRepaint const):
        (WebCore::RenderStyle::changeRequiresRepaint const):
        * testing/Internals.cpp:
        (WebCore::parseFindOptions):
        (WebCore::Internals::forceReload):
        (WebCore::Internals::setPageVisibility):
        (WebCore::Internals::setPageIsFocusedAndActive):

2018-08-31  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][iOS] Add suggestions UI for TextFieldInputTypes
        https://bugs.webkit.org/show_bug.cgi?id=186714

        Reviewed by Wenson Hsieh.

        On iOS, the datalist button should appear as a downward triangle. Furthermore, the
        button should only be displayed if the input has focus and there are suggested
        values.

        * css/html.css:
        (input::-webkit-list-button): Draw the triangle using an SVG.
        * html/DataListSuggestionInformation.h:
        * html/HTMLInputElement.h:
        * html/TextFieldInputType.cpp: Added logic to show and hide the datalist button as necessary.
        (WebCore::TextFieldInputType::handleFocusEvent):
        (WebCore::TextFieldInputType::handleBlurEvent):
        (WebCore::TextFieldInputType::didSetValueByUserEdit):
        (WebCore::TextFieldInputType::listAttributeTargetChanged):
        (WebCore::TextFieldInputType::displaySuggestions):

2018-08-31  Youenn Fablet  <youenn@apple.com>

        Move LibWebRTCMediaEndpoint data channel code to LibWebRTCDataChannelHandler
        https://bugs.webkit.org/show_bug.cgi?id=189182

        Reviewed by Alejandro G. Castro.

        Moving data channel code outside of LibWebRTCMediaEndpoint.
        This will allow future development to support unified plan.
        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::fromRTCDataChannelInit):
        (WebCore::LibWebRTCDataChannelHandler::channelEvent):
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createDataChannel):
        (WebCore::LibWebRTCMediaEndpoint::OnDataChannel):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2018-08-31  Youenn Fablet  <youenn@apple.com>

        Move session observers outside LibWebRTCMediaEndpoint
        https://bugs.webkit.org/show_bug.cgi?id=189181

        Reviewed by Alejandro G. Castro.

        Move classes of LibWebRTCMediaEndpoint to a separate file.
        No change of behavior.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCObservers.h: Added.
        * WebCore.xcodeproj/project.pbxproj:

2018-08-31  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Remove AVMediaCaptureSource
        https://bugs.webkit.org/show_bug.cgi?id=189159

        Reviewed by Youenn Fablet.

        No new tests, no change in functionality.

        Refactor video capture to get rid of a base class we don't 
        need any more.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/mac/AVMediaCaptureSource.h: Removed.
        * platform/mediastream/mac/AVMediaCaptureSource.mm: Removed.
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        (WebCore::AVVideoCaptureSource::session const):
        (WebCore::AVVideoCaptureSource::device const):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::globaVideoCaptureSerialQueue):
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::startProducingData):
        (WebCore::AVVideoCaptureSource::stopProducingData):
        (WebCore::AVVideoCaptureSource::beginConfiguration):
        (WebCore::AVVideoCaptureSource::commitConfiguration):
        (WebCore::AVVideoCaptureSource::settingsDidChange):
        (WebCore::AVVideoCaptureSource::settings const):
        (WebCore::AVVideoCaptureSource::capabilities const):
        (WebCore::AVVideoCaptureSource::setPreset):
        (WebCore::AVVideoCaptureSource::setupSession):
        (WebCore::AVVideoCaptureSource::setupCaptureSession):
        (WebCore::AVVideoCaptureSource::captureSessionIsRunningDidChange):
        (WebCore::AVVideoCaptureSource::interrupted const):
        (WebCore::AVVideoCaptureSource::captureSessionRuntimeError):
        (WebCore::AVVideoCaptureSource::captureSessionBeginInterruption):
        (WebCore::AVVideoCaptureSource::captureSessionEndInterruption):
        (-[WebCoreAVVideoCaptureSourceObserver initWithCallback:]):
        (-[WebCoreAVVideoCaptureSourceObserver disconnect]):
        (-[WebCoreAVVideoCaptureSourceObserver addNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver removeNotificationObservers]):
        (-[WebCoreAVVideoCaptureSourceObserver captureOutput:didOutputSampleBuffer:fromConnection:]):
        (-[WebCoreAVVideoCaptureSourceObserver observeValueForKeyPath:ofObject:change:context:]):
        (-[WebCoreAVVideoCaptureSourceObserver sessionRuntimeError:]):
        (-[WebCoreAVVideoCaptureSourceObserver beginSessionInterrupted:]):
        (-[WebCoreAVVideoCaptureSourceObserver endSessionInterrupted:]):
        (WebCore::AVVideoCaptureSource::initializeCapabilities): Deleted.
        (WebCore::AVVideoCaptureSource::initializeSupportedConstraints): Deleted.
        (WebCore::AVVideoCaptureSource::updateSettings): Deleted.

2018-08-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK Ubuntu LTS build fix after r235543.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2018-08-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, fix compilation warning in EME GStreamer backend.

        Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:1293:19:
        warning: format ‘%lu’ expects argument of type ‘long unsigned
        int’, but argument 9 has type ‘unsigned int’ [-Wformat=]

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):

2018-08-31  Philippe Normand  <philn@igalia.com>

        [GStreamer][GL] useless ifdef in pushTextureToCompositor
        https://bugs.webkit.org/show_bug.cgi?id=188552

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        There's no need for an ifdef because the frame holder already
        ensures a valid texture ID will be set if it maps a GL video frame.

2018-08-31  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r235190): Fix name of WebAudioBufferList.{cpp,h} in Xcode project

        * WebCore.xcodeproj/project.pbxproj:
        - Add the 'name' parameter to the file references, then fix the
          visual name everywhere else, so these files don't appear as
          "cocoa/WebAudioBufferList.{cpp,h}" in the project.

2018-08-31  Frederic Wang  <fwang@igalia.com>

        Bug 182053 - [CSSOM View] Implement standard behavior for scrollingElement
        https://bugs.webkit.org/show_bug.cgi?id=182053

        Reviewed by Simon Fraser.

        This commit introduces a new CSSOMViewScrollingAPIEnabled flag that will be used to implement
        the standard behavior of DOM scroll* API as specified by the CSSOM View spec (see bug 5991).
        It changes the behavior of document.scrollingElement so that it follows the spec when the
        flag is enabled. This will allow to pass the WPT test cssom-view/scrollingElement.html when
        it becomes the default behavior. WPT tests cssom-view/scrollingElement-quirks-dynamic*.html
        still fail; comparing with Chromium's code, we might need to propagate the style of <html>
        and <body> to the viewport element. Behaviors for other scrolling attributes will be changed
        in follow-up bugs.

        Tests: fast/dom/Document/scrollingElement-quirks-mode.html
               fast/dom/Document/scrollingElement-standard-mode.html

        * dom/Document.cpp:
        (WebCore::Document::isBodyPotentiallyScrollable): Helper function to verify whether the body
        is potentially scrollable, as defined by the CSSOM View spec. It seems that
        RenderObject::hasOverflowClip() may return incorrect value at this point and we might need
        to do something similar to Chromium's style propagation to make it work. For now, we just
        use the computed style. See bug 182292.
        (WebCore::Document::scrollingElement): When CSSOMViewScrollingAPIEnabled is enabled, we
        implement the algorithm of the CSSOM View spec.
        (WebCore::Document::body const): Verify that the root is actually a <html> element or
        otherwise return null. This is required by the CSSOM View spec and for WPT test
        scrollingElement.html. It is consistent  with bodyOrFrameset().
        * dom/Document.h: Add spec references for body() and bodyOrFrameset() and declare
        isBodyPotentiallyScrollable().
        * page/Settings.yaml: Add developer option for enabling the CSSOM View behavior.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isOverflowVisible const): Add helper function to check whether the
        style implies visible overflow.

2018-08-30  Zalan Bujtas  <zalan@apple.com>

        CounterMaps should hold a unique_ptr of CounterMap.
        https://bugs.webkit.org/show_bug.cgi?id=189174
        <rdar://problem/43686458>

        Reviewed by Ryosuke Niwa.

        In certain cases calls to CounterMaps might lead to unexpected deletion of the CounterMap object.

        Test: fast/css/counters/crash-when-cloning-body.html

        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        (showCounterRendererTree):

2018-08-30  Ross Kirsling  <ross.kirsling@sony.com>

        Speculative build fix for WPE after r235531.

        * platform/graphics/filters/PointLightSource.cpp:
        Add missing include.

2018-08-30  Ryosuke Niwa  <rniwa@webkit.org>

        Add assignedElements to HTMLSlotElement
        https://bugs.webkit.org/show_bug.cgi?id=189146

        Reviewed by Darin Adler.

        Added assignedElements to HTMLSlotElement. For now, we simply filter the results returned by assignedNodes.

        Also fixed a bug that assignedNodes was returning the fallback content when the slot is not in a shadow tree,
        which is specified in step 2 of the concept to find flattened slotables for a slot.

        Spec: https://html.spec.whatwg.org/multipage/scripting.html#dom-slot-assignedelements
              https://dom.spec.whatwg.org/#find-flattened-slotables

        Tests: imported/w3c/web-platform-tests/shadow-dom/slots.html
               imported/w3c/web-platform-tests/shadow-dom/slots-fallback.html

        * html/HTMLSlotElement.cpp:
        (WebCore::flattenAssignedNodes): Updated to take Vector<Ref<Node>> for consistency.
        (WebCore::HTMLSlotElement::assignedNodes const): Ditto.
        (WebCore::HTMLSlotElement::assignedElements const):
        * html/HTMLSlotElement.h:
        * html/HTMLSlotElement.idl:

2018-08-30  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Replace AVFoundationSupport.py using CMake
        https://bugs.webkit.org/show_bug.cgi?id=182891

        Reviewed by Per Arne Vollan.

        No new tests. No change in behavior.

        Remove refernces to PAL derived sources.

        * PlatformWin.cmake:
        * config.h:

2018-08-30  Olivia Barnett  <obarnett@apple.com>

        REGRESSION(r235489): fast/dom/navigator-detached-no-crash.html crashes under Navigator::share
        https://bugs.webkit.org/show_bug.cgi?id=189170

        Reviewed by Tim Horton.

        No new tests; fixing a failing existing test.

        * page/Navigator.cpp:
        (WebCore::Navigator::share):
        Added null check for frame.

2018-08-30  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r235516.

        Caused 50 Crashes on Sierra

        Reverted changeset:

        "The width of a nullptr TextRun should be zero"
        https://bugs.webkit.org/show_bug.cgi?id=189154
        https://trac.webkit.org/changeset/235516

2018-08-30  Tim Horton  <timothy_horton@apple.com>

        Bundle unified sources more tightly in projects with deep directory structures
        https://bugs.webkit.org/show_bug.cgi?id=189009

        Reviewed by Simon Fraser.

        Fix a variety of unification errors due to reshuffling the bundles.

        * Modules/mediastream/RTCController.cpp:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * dom/Document.h:
        * html/parser/HTMLTreeBuilder.cpp:
        * loader/appcache/ApplicationCacheResourceLoader.h:
        * page/AlternativeTextClient.h:
        * platform/Pasteboard.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        * platform/graphics/FontFamilySpecificationNull.cpp:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]):
        * platform/graphics/cocoa/WebGPULayer.mm:
        (-[WebGPULayer initWithGPUDevice:]):
        * platform/graphics/metal/GPUCommandQueueMetal.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        * platform/network/ResourceRequestBase.cpp:
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        * rendering/updating/RenderTreeBuilderInline.cpp:

2018-08-30  Andy Estes  <aestes@apple.com>

        [Payment Request] Implement the PaymentMethodChangeEvent and PaymentMethodChangeEventInit interfaces
        https://bugs.webkit.org/show_bug.cgi?id=189100

        Reviewed by Daniel Bates.

        Implement the PaymentMethodChangeEvent interface and PaymentMethodChangeEventInit dictionary
        defined in the Payment Request API W3C Editor's Draft of 30 August 2018.

        <https://w3c.github.io/payment-request/#paymentmethodchangeevent-interface>

        The "payment method changed" algorithm will be implemented in a follow-up.

        Covered by existing web platform tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/paymentrequest/PaymentMethodChangeEvent.cpp: Added.
        (WebCore::PaymentMethodChangeEvent::eventInterface const):
        (WebCore::PaymentMethodChangeEvent::PaymentMethodChangeEvent):
        * Modules/paymentrequest/PaymentMethodChangeEvent.h: Added.
        * Modules/paymentrequest/PaymentMethodChangeEvent.idl: Added.
        * Modules/paymentrequest/PaymentMethodChangeEventInit.h: Added.
        * Modules/paymentrequest/PaymentMethodChangeEventInit.idl: Added.
        * Modules/paymentrequest/PaymentRequest.idl:
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::PaymentRequestUpdateEvent):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.h:
        * Modules/paymentrequest/PaymentRequestUpdateEventInit.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.h:
        * dom/EventNames.in:

2018-08-30  Brent Fulgham  <bfulgham@apple.com>

        The width of a nullptr TextRun should be zero
        https://bugs.webkit.org/show_bug.cgi?id=189154
        <rdar://problem/43685926>

        Reviewed by Zalan Bujtas.

        If a page has an empty TextRun and attempts to paint it we can crash with a nullptr.

        This patch recognizes that an empty TextRun should always produce a zero width, rather than
        attempt to compute this value from font data.

        Test: fast/text/null-string-textrun.html

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const): An empty TextRun has zero width.
        (WebCore::FontCascade::width const): Ditto.
        (WebCore::FontCascade::codePath const): ASSERT that the TextRun is non-empty.

2018-08-30  Eric Carlson  <eric.carlson@apple.com>

        Mock video devices should only support discrete sizes
        https://bugs.webkit.org/show_bug.cgi?id=189000
        <rdar://problem/43766551>

        Reviewed by Youenn Fablet.
        
        While many/most video capture devices only support a finite number of discrete width/height
        pairs, our mock video capture devices supported arbitrary width and height combinations which
        made it difficult to write realistic tests using them. Change the mock devices to support
        finite "presets" like those supported by AVFoundation. Create a RealtimeVideoSource base
        class with support for these presets, so the same code will eventually be used by the mock
        and real capture devices.

        No new tests, existing tests updated for these changes.

        * Sources.txt: Add RealtimeVideoSource.cpp, remove MockRealtimeMediaSource.cpp.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/mediastream/MediaConstraints.h: Deal with min constraint less than the supported minimum
        and max larger than the supported maximum when there is no ideal.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::selectSettings): Use supportsSizeAndFrameRate for widths,
        heights, and framerates in advanced constraints so a width and height that are supported but
        in the same preset are filtered out.
        (WebCore::RealtimeMediaSource::setSize): New.
        * platform/mediastream/RealtimeMediaSource.h:

        * platform/mediastream/RealtimeMediaSourceSettings.h: Remove an unneeded include.

        * platform/mediastream/RealtimeVideoSource.cpp: Added.
        (WebCore::RealtimeVideoSource::RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::~RealtimeVideoSource):
        (WebCore::RealtimeVideoSource::startProducingData):
        (WebCore::RealtimeVideoSource::setSupportedFrameRates):
        (WebCore::RealtimeVideoSource::addSupportedCapabilities const):
        (WebCore::RealtimeVideoSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeVideoSource::bestSupportedCaptureSizeForWidthAndHeight):
        (WebCore::RealtimeVideoSource::applySize):
        (WebCore::RealtimeVideoSource::applySizeAndFrameRate):
        (WebCore::RealtimeVideoSource::videoSampleAvailable):
        (WebCore::RealtimeVideoSource::applyFrameRate):
        (WebCore::RealtimeVideoSource::supportsFrameRate):

        * platform/mediastream/RealtimeVideoSource.h: Copied from Source/WebCore/platform/mock/MockRealtimeAudioSource.h.
        (WebCore::RealtimeVideoSource::setSupportedCaptureSizes):
        (WebCore::RealtimeVideoSource::setDefaultSize):
        (WebCore::RealtimeVideoSource::observedFrameRate const):

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::AVMediaCaptureSource::initializeSettings): Don't set label, it isn't used.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::applySize): Call the base class.

        * platform/mock/MockMediaDevice.h:
        (WebCore::MockCameraProperties::encode const): Add frame rates, sizes, and facing mode.
        (WebCore::MockCameraProperties::decode): Ditto.

        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource): No more MockRealtimeMediaSource.
        (WebCore::MockRealtimeAudioSource::settings const): Clean up.
        (WebCore::MockRealtimeAudioSource::capabilities const): Ditto.
        (WebCore::MockRealtimeAudioSource::settingsDidChange): Ditto.
        (WebCore::MockRealtimeAudioSource::stopProducingData): m_elapsedTime isn't used, delete it.
        (WebCore::MockRealtimeAudioSource::updateSettings): Deleted.
        (WebCore::MockRealtimeAudioSource::initializeCapabilities): Deleted.
        (WebCore::MockRealtimeAudioSource::initializeSupportedConstraints): Deleted.
        (WebCore::MockRealtimeAudioSource::elapsedTime): Deleted.
        * platform/mock/MockRealtimeAudioSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp: Moved all of the mock device management
        code from MockRealtimeMediaSource.cpp here.
        (WebCore::defaultDevices):
        (WebCore::devices):
        (WebCore::deviceMap):
        (WebCore::deviceListForDevice):
        (WebCore::createCaptureDevice):
        (WebCore::MockRealtimeMediaSourceCenter::resetDevices):
        (WebCore::MockRealtimeMediaSourceCenter::setDevices):
        (WebCore::MockRealtimeMediaSourceCenter::addDevice):
        (WebCore::MockRealtimeMediaSourceCenter::removeDevice):
        (WebCore::MockRealtimeMediaSourceCenter::mockDeviceWithPersistentID):
        (WebCore::MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID):
        (WebCore::MockRealtimeMediaSourceCenter::audioDevices):
        (WebCore::MockRealtimeMediaSourceCenter::videoDevices):
        (WebCore::MockRealtimeMediaSourceCenter::displayDevices):

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Use RealtimeVideoSource, no
        more MockRealtimeMediaSource.
        (WebCore::MockRealtimeVideoSource::capabilities const): Ditto, cleanup.
        (WebCore::MockRealtimeVideoSource::settings const): Ditto.
        (WebCore::MockRealtimeVideoSource::settingsDidChange): Ditto.
        (WebCore::MockRealtimeVideoSource::startCaptureTimer): Ditto.
        (WebCore::MockRealtimeVideoSource::startProducingData): Ditto.
        (WebCore::MockRealtimeVideoSource::stopProducingData): Ditto.
        (WebCore::MockRealtimeVideoSource::elapsedTime): Ditto.
        (WebCore::MockRealtimeVideoSource::applySize): Ditto.
        (WebCore::MockRealtimeVideoSource::drawText): Render the actual frame rate.
        (WebCore::MockRealtimeVideoSource::generateFrame): Use m_fillColor.
        (WebCore::MockRealtimeVideoSource::~MockRealtimeVideoSource): Deleted.
        (WebCore::MockRealtimeVideoSource::updateSettings): Deleted.
        (WebCore::MockRealtimeVideoSource::initializeCapabilities): Deleted.
        (WebCore::MockRealtimeVideoSource::initializeSupportedConstraints): Deleted.
        (WebCore::MockRealtimeVideoSource::applyFrameRate): Deleted.
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::updateSampleBuffer): Deleted.

2018-08-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Block formatting context roots avoid floats.
        https://bugs.webkit.org/show_bug.cgi?id=189150

        Reviewed by Antti Koivisto.

        This patch implements the float avoiding behaviour for block formatting context roots.

        When a box establishes a block formatting context, floats from outside of the context can't interfere with content inside. In order
        to achive this, such formatting root boxes need to be positioned so that they don't overlap with floats (floats that share the same
        context with the formatting root). In ltr block direction, roots start with avoiding floats on the left, while in rtl on the right.

        Tests: fast/block/block-only/float-avoider-multiple-roots.html
               fast/block/block-only/float-avoider-simple-left.html
               fast/block/block-only/float-avoider-simple-right.html
               fast/block/block-only/float-avoider-with-margins.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloatAvoiding const):
        * layout/floats/FloatingContext.h:

2018-08-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Move containing block constraint logic from FloatAvoider to FloatingContext
        https://bugs.webkit.org/show_bug.cgi?id=189145

        Reviewed by Antti Koivisto.

        When the float avoider is constrained horizontally, simply align it with the left/right edge of its containing block (with the combination of the constraints)
        and check the overflow as part of the FloatingContext::floatingPosition() logic. It simplifies the constraint logic/helps implementing the non-float avoider
        case.

        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::overflowsContainingBlock const):
        * layout/floats/FloatAvoider.h:
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::floatingPosition const):

2018-08-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Use non-computed horizontal margins when intersecting floats with float avoiders.
        https://bugs.webkit.org/show_bug.cgi?id=189143

        Reviewed by Antti Koivisto.

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::marginTop const):
        (WebCore::Layout::FloatAvoider::marginBottom const):
        (WebCore::Layout::FloatAvoider::marginLeft const):
        (WebCore::Layout::FloatAvoider::marginRight const):
        (WebCore::Layout::FloatAvoider::marginBoxWidth const):
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::rect const):
        (WebCore::Layout::FloatBox::horizontalPositionCandidate):
        (WebCore::Layout::FloatBox::verticalPositionCandidate):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatBox.h:

2018-08-30  Zalan Bujtas  <zalan@apple.com>

        [LFC][Margins] Add non-computed horizontal margins to DisplayBox
        https://bugs.webkit.org/show_bug.cgi?id=189141

        Reviewed by Antti Koivisto.

        Inflow block boxes' horizontal margins extend all the way to the left/right edge of their containing block.
        See https://www.w3.org/TR/CSS22/visudet.html#blockwidth for example
        "...
        10.3.3 Block-level, non-replaced elements in normal flow
        'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' = width of containing block
        ..."

        In certain cases (float avoiding) we need to know the original (non-extended) horiztonal margin values.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        * 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::initializeRoot):
        * layout/LayoutUnits.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidHorizontalNonComputedMargin):
        (WebCore::Display::Box::setHorizontalNonComputedMargin):
        (WebCore::Display::Box::nonComputedMarginLeft const):
        (WebCore::Display::Box::nonComputedMarginRight const):

2018-08-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, add comments about enum names to bitfields
        https://bugs.webkit.org/show_bug.cgi?id=188944

        * xml/XMLHttpRequest.h:

2018-08-30  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, add comments about enum names to bitfields
        https://bugs.webkit.org/show_bug.cgi?id=188945

        * html/HTMLCollection.h:

2018-08-29  Andy Estes  <aestes@apple.com>

        Addressed additional review feedback after r235342.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):

        Used '"' instead of "\"" with makeString().

2018-08-29  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Display prefix-matched suggestions first
        https://bugs.webkit.org/show_bug.cgi?id=189106

        Reviewed by Tim Horton.

        In order to increase suggestion relevancy, we should display suggestions that have
        the same prefix as the input value first. In order to achieve this, we can place
        the suggestions into two buckets, one that contains prefix-matched values and
        another that contains only substring-matched values.

        TextFieldInputType::suggestions() can be called up to three times before we
        display the values. In order to avoid generating the same suggestions multiple
        times, the most recent values can be stored and reused. We clear the cached values
        whenever the datalist element is modified or when the suggestions view is hidden.

        Finally, removed logic to de-duplicate the list of suggested values. This behavior
        is not a part of the specification and leads to unnecessary slowdown when
        populating the suggestions view.

        Test: fast/forms/datalist/datalist-textinput-suggestions-order.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::listAttributeTargetChanged):
        (WebCore::TextFieldInputType::suggestions):
        (WebCore::TextFieldInputType::didCloseSuggestions):
        * html/TextFieldInputType.h:
        * platform/DataListSuggestionsClient.h:

2018-08-29  Olivia Barnett  <obarnett@apple.com>

        Implement the Web Share API
        https://bugs.webkit.org/show_bug.cgi?id=171100
        <rdar://problem/31751734>

        Reviewed by Tim Horton.

        Added one test in fast/events/ios called share.html; adjusted expectations for existing tests.

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * features.json:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::showShareSheet):
        * loader/EmptyClients.h:
        Added empty showShareSheet function.

        * page/Chrome.cpp:
        (WebCore::Chrome::showShareSheet):
        * page/Chrome.h:
        Added call to showShareSheet on client.

        * page/ChromeClient.h:
        Virtual showShareSheet function.

        * page/Navigator.cpp:
        (WebCore::Navigator::share):
        * page/Navigator.h:
        Share function that returns a promise and invokes the share sheet.

        * page/Navigator.idl:
        Implements NavigatorShare

        * page/NavigatorShare.idl: Added.
        Added definition of share function returning a promise.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebShareEnabled):
        (WebCore::RuntimeEnabledFeatures::webShareEnabled const):
        Added RuntimeEnabledFeature switch.

        * page/ShareData.h: Added.
        * page/ShareData.idl: Added.
        Definition of ShareData struct.

2018-08-29  Daniel Bates  <dabates@apple.com>

        REGRESSION (r226138): WebCore::subdivide() may return an empty vector; Web process can crash when performing find in Epiphany
        https://bugs.webkit.org/show_bug.cgi?id=184390
        <rdar://problem/41804994>
        And
        <rdar://problem/39771867>

        Reviewed by Simon Fraser.

        Speculative fix for Epiphany.

        In theory, WebCore::subdivide() should never return an empty vector - no subdivisions - as such a
        result represents a programmer error. In practice, InlineTextBox can invoke WebCore::subdivide()
        such that it returns an empty vector. One way this can happen is when subdividing an empty inline
        text box associated with combined text (RenderCombineText). For now we add a check to bail out of
        resolving the style of subdivisions when WebCore::subdivide() returns no subdivisions. In a
        subsequent patch we will look to assert that WebCore::subdivide() always returns subdivisions.

        Test: fast/text/text-combine-surroundContents-crash.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::subdivideAndResolveStyle):

2018-08-29  Youenn Fablet  <youenn@apple.com>

        Remove WebRTC legacy API implementation
        https://bugs.webkit.org/show_bug.cgi?id=189040

        Reviewed by Eric Carlson.

        This API is no longer needed as the runtime flag is off by default.
        Removing this option allows removing some code and will ease future WebRTC improvements.
        Covered by existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/mediastream/MediaStreamEvent.cpp: Removed.
        * Modules/mediastream/MediaStreamEvent.h: Removed.
        * Modules/mediastream/MediaStreamEvent.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.idl: Removed.
        * Modules/mediastream/NavigatorUserMedia.js: Removed.
        * Modules/mediastream/PeerConnectionBackend.cpp:
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):
        (createOffer):
        (createAnswer):
        (setLocalDescription):
        (setRemoteDescription):
        (addIceCandidate):
        (getLocalStreams): Deleted.
        (getStreamById): Deleted.
        (addStream): Deleted.
        (): Deleted.
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        (callbacksAndDictionaryOverload):
        (if): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::removeRemoteStream):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        (WebCore::LibWebRTCPeerConnectionBackend::removeRemoteStream): Deleted.
        (WebCore::LibWebRTCPeerConnectionBackend::addRemoteStream): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::addBuiltinGlobals):
        (WebCore::isWebRTCLegacyAPIEnabled): Deleted.
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPeerConnectionEnabled):
        (WebCore::RuntimeEnabledFeatures::webRTCLegacyAPIEnabled const): Deleted.
        (WebCore::RuntimeEnabledFeatures::setWebRTCLegacyAPIEnabled): Deleted.

2018-08-29  Ryosuke Niwa  <rniwa@webkit.org>

        Modernize SlotAssignment
        https://bugs.webkit.org/show_bug.cgi?id=189075

        Reviewed by Antti Koivisto.

        Modernized the code related to SlotAssignment. Namely, use HashMap<>::get instead of HashMap<>::find,
        and use HashMap<>::ensure instead of HashMap<>::add. Also use WeakPtr to keep track of HTMLSlotElement
        instead of a raw pointer.

        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::findAssignedSlot):
        (WebCore::SlotAssignment::addSlotElementByName):
        (WebCore::SlotAssignment::removeSlotElementByName):
        (WebCore::SlotAssignment::didChangeSlot):
        (WebCore::SlotAssignment::findFirstSlotElement):
        (WebCore::SlotAssignment::resolveAllSlotElements):
        (WebCore::SlotAssignment::assignToSlot):
        * dom/SlotAssignment.h:
        (WebCore::SlotAssignment::Slot::Slot): Renamed from SlotInfo since "Info" doesn't add any value.
        * html/HTMLSlotElement.h:

2018-08-29  Chris Dumez  <cdumez@apple.com>

        [PSON] We should only process-swap when eTLD+1 changes on navigation
        https://bugs.webkit.org/show_bug.cgi?id=189090
        <rdar://problem/43799225>

        Reviewed by Geoffrey Garen.

        Add toRegistrableDomain() utility function to get the eTLD+1 (aka "registrable
        domain") from an URL.

        * platform/network/ResourceRequestBase.h:
        (WebCore::toRegistrableDomain):
        (WebCore::registrableDomainsAreEqual):

2018-08-29  Youenn Fablet  <youenn@apple.com>

        Add a runtime flag for WebRTC unified plan
        https://bugs.webkit.org/show_bug.cgi?id=189068

        Reviewed by Eric Carlson.

        Covered by existing updated tests.
        Main change is to call addTrack with a stream parameter so that on the other side, the track will be tied to a stream.
        Receive-only case in unified plan is not yet supported.
        This will be supported in follow-up patches.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::setConfiguration): Activate unified plan based on runtime flag.
        (WebCore::LibWebRTCMediaEndpoint::addTrack): Do not use AddStream in case of unified plan.
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveAudio const):
        (WebCore::LibWebRTCMediaEndpoint::shouldOfferAllowToReceiveVideo const):
        (WebCore::LibWebRTCMediaEndpoint::doCreateOffer): Use legacy webrtc option for receive only cases only in plan B case.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webRTCUnifiedPlanEnabled const):
        (WebCore::RuntimeEnabledFeatures::setWebRTCUnifiedPlanEnabled):

2018-08-28  Simon Fraser  <simon.fraser@apple.com>

        Fix crash when reflections and backdrop filter are combined
        https://bugs.webkit.org/show_bug.cgi?id=188504
        rdar://problem/43225590

        Reviewed by Dan Bates.
        
        GraphicsLayerCA::updateBackdropFiltersRect() was confused about which hash map to modify
        when changes to the clipping rect affect whether we make backdrop clipping layers;
        we need to add/remove from backdropClippingLayerClones, not backdropLayerClones.

        Test: compositing/filters/backdrop-filter-update-rect.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateBackdropFiltersRect):

2018-08-29  Jer Noble  <jer.noble@apple.com>

        Muted elements do not have their Now Playing status updated when unmuted.
        https://bugs.webkit.org/show_bug.cgi?id=189069

        Reviewed by Eric Carlson.

        Schedule an updateNowPlayingInfo() when an element becomes unmuted.

        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::sessionCanProduceAudioChanged):

2018-08-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        Use the null string instead of std::nullopt for missing attachment file names and content types
        https://bugs.webkit.org/show_bug.cgi?id=189080

        Reviewed by Tim Horton.

        Replace instances of std::optional<String> with just String instead, and use the null string to represent a
        missing value instead of std::nullopt. No change in behavior.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateAttributes):
        * html/HTMLAttachmentElement.h:

2018-08-29  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/189081>

        * Modules/proximity: Removed.

2018-08-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Introduce FloatBox, a FloatAvoider subclass.
        https://bugs.webkit.org/show_bug.cgi?id=189074

        Reviewed by Antti Koivisto.

        FloatBox is a float avoider and a float positioned box as well.
        This is in preparation for the float avoidance feature where formatting context root boxes avoid existing floats.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/displaytree/DisplayBox.h:
        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::setVerticalConstraint):
        (WebCore::Layout::FloatAvoider::horizontalPositionCandidate):
        (WebCore::Layout::FloatAvoider::verticalPositionCandidate):
        (WebCore::Layout::FloatAvoider::resetPosition):
        (WebCore::Layout::FloatAvoider::rectInContainingBlock const):
        (WebCore::Layout::FloatAvoider::initializePosition): Deleted.
        (WebCore::Layout::FloatAvoider::isLeftAligned const): Deleted.
        (WebCore::Layout::FloatAvoider::rect const): Deleted.
        (WebCore::Layout::FloatAvoider::resetHorizontalConstraints): Deleted.
        (WebCore::Layout::FloatAvoider::initialVerticalPosition const): Deleted.
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::rect const):
        (WebCore::Layout::FloatAvoider::isLeftAligned const):
        (WebCore::Layout::FloatAvoider::initialVerticalPosition const):
        (WebCore::Layout::FloatAvoider::floatingState const):
        (WebCore::Layout::FloatAvoider::layoutBox const):
        (WebCore::Layout::FloatAvoider::displayBox const):
        * layout/floats/FloatBox.cpp: Copied from Source/WebCore/layout/floats/FloatAvoider.h.
        (WebCore::Layout::FloatBox::FloatBox):
        (WebCore::Layout::FloatBox::horizontalPositionCandidate):
        (WebCore::Layout::FloatBox::verticalPositionCandidate):
        (WebCore::Layout::FloatBox::initialVerticalPosition const):
        * layout/floats/FloatBox.h: Copied from Source/WebCore/layout/floats/FloatAvoider.h.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::floatingPosition const):

2018-08-29  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver]  Implement intersection logic for the same-document implicit root case
        https://bugs.webkit.org/show_bug.cgi?id=189055

        Reviewed by Simon Fraser.

        Extend the intersection logic to handle computing the intersection of the target and the
        viewport, for the case where the target is in the main frame.

        Tested by existing tests in imported/w3c/web-platform-tests/intersection-observer.

        * dom/Document.cpp:
        (WebCore::computeIntersectionRects):
        (WebCore::Document::updateIntersectionObservations):

2018-08-28  Ryosuke Niwa  <rniwa@webkit.org>

        Changes to slot children should trigger slotchange
        https://bugs.webkit.org/show_bug.cgi?id=169718
        <rdar://problem/43317496>

        Reviewed by Darin Adler.

        Fix the bug that slotchange event is not fired when a slot's fallback content is updated now that slotchange event
        is more formally specified.

        This particular behavior corresponds to step 7.5. of the concept *to insert a node* where it says:
        "[I]f parent’s root is a shadow root, and parent is a slot whose assigned nodes is the empty list, then run signal
        a slot change for parent."

        See https://dom.spec.whatwg.org/#concept-node-insert

        Tests: fast/shadow-dom/slotchange-in-fallback.html
               imported/w3c/web-platform-tests/shadow-dom/slotchange.html 

        * dom/Element.cpp:
        (WebCore::Element::childrenChanged): Updated the comment.
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::addSlotElementByName): Added an assertion.
        (WebCore::ShadowRoot::slotFallbackDidChange): Added.
        * dom/ShadowRoot.h:
        * dom/SlotAssignment.cpp:
        (WebCore::SlotAssignment::slotFallbackDidChange): Added. When the assigned nodes is empty, we enqueue a slotchange.
        Because assignedNodesForSlot invokes assignSlots, this can be O(n) but we don't expect mutating slot's fallback
        contents and shadow host's children in turn to be a common scenario so this shouldn't be an issue in practice.
        * dom/SlotAssignment.h:
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::insertedIntoAncestor): Be explicit about auto* being used here.
        (WebCore::HTMLSlotElement::childrenChanged): Added. Invokes slotFallbackDidChange whenver child node is muated.
        * html/HTMLSlotElement.h:

2018-08-28  Don Olmstead  <don.olmstead@sony.com>

        Check for null renderer in canBeScrolledIntoView
        https://bugs.webkit.org/show_bug.cgi?id=188935

        Reviewed by Simon Fraser.

        Test: fast/spatial-navigation/snav-display-contents-crash.html

        * page/SpatialNavigation.cpp:
        (WebCore::canBeScrolledIntoView):

2018-08-28  Youenn Fablet  <youenn@apple.com>

        IDBDatabase should not return true to hasPendingActivity after being stopped
        https://bugs.webkit.org/show_bug.cgi?id=189073

        Reviewed by Darin Adler.

        There is a chance that IDBDatabase::hasPendingActivity returns true.
        The case that might happen is when stop() is called but there are still some active/being committed transactions.
        In that case, hasPendingActivity will return true until these transactions get finalized.
        While these transactions will probably be finalized at some point, it delays GC for no good reason.
        And we might want in a follow-up patch to assert that ActiveDOMObject are GC-able whenever their context is stopped.
        For that purpose, make sure hasPendingActivity returns false when context is stopped.

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

2018-08-28  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use CMake's FindFreetype
        https://bugs.webkit.org/show_bug.cgi?id=189071

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        * platform/FreeType.cmake:

2018-08-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        Work towards: [iOS] Consolidate the implementations of readString, stringForType, and readURL in PlatformPasteboardIOS.mm
        https://bugs.webkit.org/show_bug.cgi?id=189054

        Reviewed by Andy Estes.

        Remove the pasteboard type argument from PlatformPasteboard::readURL(). Currently, we only ever pass it
        "public.url" anyways; for reading other types of strings, readString() already exists, which takes an arbitrary
        pasteboard type.

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::readPasteboardWebContentDataForType):
        (WebCore::Pasteboard::readPlatformValueAsString):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::readURL):

2018-08-28  Youenn Fablet  <youenn@apple.com>

        MediaDevices should be collectable as soon as its document is stopped
        https://bugs.webkit.org/show_bug.cgi?id=189021

        Reviewed by Eric Carlson.

        Introduce ActiveDOMObject::isContextStopped to check whether the context is stopped.
        Use this check in MediaDevices::hasPendingActivity so that it returns false as soon as active dom objects are stopped.

        Test: http/tests/media/collect-media-devices.https.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::hasPendingActivity const):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::hasPendingActivity const):
        (WebCore::ActiveDOMObject::isContextStopped const):
        * dom/ActiveDOMObject.h:

2018-08-28  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix issue that extra cookie is added when redirect happens.
        https://bugs.webkit.org/show_bug.cgi?id=187874

        Reviewed by Alex Christensen.

        When initial request has cookie set and redirect happens, it add extra Cookie header to that
        abd request was broken. Just stop modifying the original request by passing a value.

        Test: http/tests/cookies/multiple-redirect-and-set-cookie.php

        * platform/network/ResourceHandle.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):

2018-08-28  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear rounded and textured
        https://bugs.webkit.org/show_bug.cgi?id=189039

        Reviewed by Tim Horton.

        Color wells should have a rounded and textured appearance on macOS. We can use
        NSBezelStyleTexturedSquare to achieve this appearance.

        Also updated the user-agent stylesheet to match the system appearance.

        Rebaselined existing test: fast/forms/color/input-appearance-color.html

        * css/html.css:
        (input[type="color"]::-webkit-color-swatch-wrapper):
        (input[type="color"]::-webkit-color-swatch):
        * platform/mac/ThemeMac.mm:
        (WebCore::setUpButtonCell):
        * rendering/RenderThemeMac.h: Build fix.

2018-08-28  Youenn Fablet  <youenn@apple.com>

        WebKitMediaSession should be GC collectable when its document is being stopped
        https://bugs.webkit.org/show_bug.cgi?id=189016

        Reviewed by Eric Carlson.

        Make sure WebKitMediaSession is  collectable after its document is stopped.
        This is done by nullifying m_session when calling close.
        This way hasPendingActivity() returns false when stop() is called.

        Test: http/tests/media/clearkey/collect-webkit-media-session.html

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::WebKitMediaKeySession):
        (WebCore::WebKitMediaKeySession::close):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:

2018-08-28  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Fix build after r235424
        https://bugs.webkit.org/show_bug.cgi?id=189051

        Rubber-stamped by Simon Fraser.

        Fix unused variable warning by using the variable.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):

2018-08-28  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support inputmode=none
        https://bugs.webkit.org/show_bug.cgi?id=188896

        Reviewed by Tim Horton.

        Updated InputMode.cpp to ensure that "none" is recognized as a valid value for the
        inputmode attribute. This keyword is useful for content that renders its own
        keyboard control.

        Spec: https://html.spec.whatwg.org/multipage/interaction.html#input-modalities%3A-the-inputmode-attribute

        Test: fast/forms/ios/inputmode-none.html

        * html/InputMode.cpp:
        (WebCore::inputModeForAttributeValue):
        (WebCore::stringForInputMode):
        (WebCore::InputModeNames::none):
        * html/InputMode.h:

2018-08-28  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Schedule intersection observation updates
        https://bugs.webkit.org/show_bug.cgi?id=189007

        Reviewed by Simon Fraser.

        Schedule intersection observation updates in the following situations:
        1) A new observation target is added.
        2) FrameView::viewportContentsChanged -- this covers changes to layout and
           to scroll positions for same-document observation. Scheduling for
           cross-document observation will be handled in a future patch.
        3) Style is resolved without triggering layout -- this handles updates that
           were deferred because of a pending style recalculation.

        Tested by existing tests in imported/w3c/web-platform-tests/intersection-observer.

        * dom/Document.cpp:
        (WebCore::Document::resolveStyle):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::scheduleIntersectionObservationUpdate):
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::viewportContentsChanged):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::observe):

2018-08-28  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Remove redundant FloatAvoider functions.
        https://bugs.webkit.org/show_bug.cgi?id=189035

        Reviewed by Antti Koivisto.

        and move some code from FloatContext to FloatAvoider.

        * layout/floats/FloatAvoider.cpp:
        (WebCore::Layout::FloatAvoider::initializePosition):
        (WebCore::Layout::FloatAvoider::rect const):
        (WebCore::Layout::FloatAvoider::setVerticalConstraint):
        (WebCore::Layout::FloatAvoider::setHorizontalConstraints):
        (WebCore::Layout::FloatAvoider::resetHorizontalConstraint):
        (WebCore::Layout::FloatAvoider::initialVerticalPosition const):
        (WebCore::Layout::FloatAvoider::initialHorizontalPosition const):
        (WebCore::Layout::FloatAvoider::rectInContainingBlock const):
        (WebCore::Layout::FloatAvoider::setLeft): Deleted.
        (WebCore::Layout::FloatAvoider::setTopLeft): Deleted.
        (WebCore::Layout::FloatAvoider::resetVertically): Deleted.
        (WebCore::Layout::FloatAvoider::resetHorizontally): Deleted.
        (WebCore::Layout::FloatAvoider::topLeftInContainingBlock const): Deleted.
        * layout/floats/FloatAvoider.h:
        (WebCore::Layout::FloatAvoider::top const): Deleted.
        (WebCore::Layout::FloatAvoider::left const): Deleted.
        (WebCore::Layout::FloatAvoider::marginTop const): Deleted.
        (WebCore::Layout::FloatAvoider::marginLeft const): Deleted.
        (WebCore::Layout::FloatAvoider::marginBottom const): Deleted.
        (WebCore::Layout::FloatAvoider::marginRight const): Deleted.
        (WebCore::Layout::FloatAvoider::rectWithMargin const): Deleted.
        (WebCore::Layout::FloatAvoider::setTop): Deleted.
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::horizontalConstraints const):
        (WebCore::Layout::FloatingPair::horiztonalPosition const): Deleted.

2018-08-28  Eric Carlson  <eric.carlson@apple.com>

        Revert changes to RealtimeMediaSource.cpp made in r235086
        https://bugs.webkit.org/show_bug.cgi?id=189046
        <rdar://problem/43794875>

        Unreviewed, reverting an accidental change.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate): 

2018-08-28  Alejandro G. Castro  <alex@igalia.com>

        Fix gcc compilation warnings after r235230
        https://bugs.webkit.org/show_bug.cgi?id=188981

        Reviewed by Eric Carlson.

        Replace the pragma clang with pragma GCC, it is understood by
        clang and gcc.

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/MockLibWebRTCPeerConnection.h:

2018-08-27  Justin Fan  <justin_fan@apple.com>

        WebGL 2 conformance: framebuffer-test
        https://bugs.webkit.org/show_bug.cgi?id=188812

        Reviewed by Jon Lee.

        Update WebGL 2 implementation to handle READ_FRAMEBUFFER and default framebuffer conformance. Also taking this
        chance to fix memory leak in PlatformScreenMac/gpuIDForDisplayMask().

        Covered by existing WebGL tests as well as newly-enabled webgl/2.0.0/conformance2/renderbuffers/framebuffer-test.html.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::blitFramebuffer):
        (WebCore::WebGL2RenderingContext::framebufferTextureLayer):
        (WebCore::validateDefaultFramebufferAttachment):
        (WebCore::WebGL2RenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGL2RenderingContext::validateFramebufferFuncParameters):
        (WebCore::WebGL2RenderingContext::validateFramebufferTarget):
        (WebCore::WebGL2RenderingContext::validateNonDefaultFramebufferAttachment):
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::isBound const):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::initializeNewContext):
        (WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):
        (WebCore::WebGLRenderingContextBase::bindFramebuffer):
        (WebCore::WebGLRenderingContextBase::checkFramebufferStatus):
        (WebCore::WebGLRenderingContextBase::deleteFramebuffer):
        (WebCore::WebGLRenderingContextBase::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContextBase::framebufferTexture2D):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::blitFramebuffer):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::gpuIDForDisplayMask):

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

        Null pointer deref in WidthIterator
        https://bugs.webkit.org/show_bug.cgi?id=188993

        Reviewed by Brent Fulgham.

        Test: fast/text/rtl-justification.html

        We simply need to guard glyphBuffer like we do in the rest of the function.

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

2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Remove WebCore::AttachmentDisplayOptions and friends
        https://bugs.webkit.org/show_bug.cgi?id=189004

        Reviewed by Dan Bernstein.

        No new tests, since there is no change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachment):
        * editing/Editor.h:
        * html/AttachmentTypes.h: Removed.
        * html/HTMLAttachmentElement.h:

2018-08-27  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix -- disable LTO for production builds

        * Configurations/Base.xcconfig:

2018-08-27  Youenn Fablet  <youenn@apple.com>

        Various IndexDB tests abandon documents
        https://bugs.webkit.org/show_bug.cgi?id=188728
        <rdar://problem/43651095>

        Reviewed by Alex Christensen.

        Some IDB objects implement hasPendingActivity but there are some possibilities that they continue returning true after being stopped.
        This is the case for requests that get stopped while still waiting for some pending activity.
        This is also the case for requests that emits upgradeneeded or blocked events.

        Enforce that these objects return false to hasPendingActivity once being stopped.
        This ensures that they can be garbage collected once their context is preparing for destruction like in Document::prepareForDestruction.

        Test: http/tests/IndexedDB/collect-IDB-objects.https.html

        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::hasPendingActivity const):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::hasPendingActivity const):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::hasPendingActivity const):
        (WebCore::IDBRequest::enqueueEvent):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::notifyDidAbort):
        In case the context is stopped, IDBTransaction should not ask IDBRequest to fire an event.

2018-08-27  Simon Fraser  <simon.fraser@apple.com>

        Teach WebKitTestRunner and DumpRenderTree about detecting world leaks
        https://bugs.webkit.org/show_bug.cgi?id=188994

        Reviewed by Tim Horton.

        Export Document::postTask() for use by WTR's injected bundle.

        * dom/Document.h:

2018-08-27  Aditya Keerthi  <akeerthi@apple.com>

        Consolidate ENABLE_INPUT_TYPE_COLOR and ENABLE_INPUT_TYPE_COLOR_POPOVER
        https://bugs.webkit.org/show_bug.cgi?id=188931

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig: Removed ENABLE_INPUT_TYPE_COLOR_POPOVER.

2018-08-27  Simon Fraser  <simon.fraser@apple.com>

        Improve the showAllDocuments logging
        https://bugs.webkit.org/show_bug.cgi?id=188990

        Reviewed by Tim Horton.
        
        Improve the output triggered by "notifyutil -p com.apple.WebKit.showAllDocuments" to denote
        SVG documents (which often have no URL), and to show the refCount and referencingNodeCount,
        which helps with leak debugging.
        
        Sample output:

        2 live documents:
        Document 0x1236f1200 3 (refCount 6, referencingNodeCount 580) https://webkit.org/
        SVGDocument 0x134b60000 13 (refCount 1, referencingNodeCount 197) 

        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):

2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Cocoa] Exception (fileType 'dyn.agq8u' is not a valid UTI) raised when dragging an attachment whose file wrapper is a directory
        https://bugs.webkit.org/show_bug.cgi?id=188903
        <rdar://problem/43702993>

        Reviewed by Tim Horton.

        Fixes the exception for attachments that are created when dropping files with extensions that don't map to any
        known UTIs, and when dropping folders. See below for more detail.

        Tests:  WKAttachmentTests.InsertFolderAndFileWithUnknownExtension
                WKAttachmentTests.DropFolderAsAttachmentAndMoveByDragging
                WKAttachmentTests.ChangeAttachmentDataAndFileInformation

        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachment):
        * editing/Editor.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readFilePaths):

        When creating an attachment by dropping or pasting a file backed by a file path, handle the cases where…
        (1)     the dropped path is a directory, by setting the UTI to "public.directory". This allows us to show a
                folder icon for the dropped attachment element on macOS.
        (2)     the dropped path is a file whose UTI is unknown, by defaulting to "public.data".

        By ensuring that the UTI of a dropped file-backed attachment is set to a concrete type in any case, we avoid an
        exception when dragging the attachment on macOS, and on iOS, avoid silently failing to drag an attachment.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::updateAttributes):

        Change this method to take an optional file size (the subtitle attribute will only be set if the file size is
        not `std::nullopt`). Furthermore, allow callers of this method to clear attributes on the attachment element by
        passing in `std::nullopt` for any of the three arguments. This allows us to handle the case where an
        attachment's file wrapper is changed from a regular file to a folder whose total size is currently unknown.
        Instead of showing "0 bytes", we'll simply refrain from showing a subtitle at all (in the future, this should
        be improved by implementing a way to estimate the size of the files in the folder, or perhaps show the number of
        items in the folder as the subtitle).

        * html/HTMLAttachmentElement.h:

2018-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide autocompletion for event breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=188717

        Reviewed by Brian Burg.

        Test: inspector/dom/getSupportedEventNames.html

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getSupportedEventNames): Added.

2018-08-27  Keith Rollin  <krollin@apple.com>

        Build system support for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187785
        <rdar://problem/42353132>

        Reviewed by Dan Bernstein.

        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
        LTO.

        No new tests -- no new WebKit functionality.

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

2018-08-27  Daniel Bates  <dabates@apple.com>

        [iOS] Make color of spelling dots match UIKit
        https://bugs.webkit.org/show_bug.cgi?id=188861

        Reviewed by Simon Fraser.

        * rendering/RenderThemeCocoa.h:
        * rendering/RenderThemeCocoa.mm:
        (WebCore::RenderThemeCocoa::drawLineForDocumentMarker): Modified to call colorForMarkerLineStyle()
        for the color to use for the line style.
        (WebCore::colorForStyle): Deleted.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::colorForMarkerLineStyle): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::colorForMarkerLineStyle): Added.

2018-08-27  Daniel Bates  <dabates@apple.com>

        Spelling dots do not scale with page on iOS; share spelling dot painting code between Mac and iOS
        https://bugs.webkit.org/show_bug.cgi?id=188828
        <rdar://problem/15966403>

        Reviewed by Simon Fraser.

        The look of the spelling dots on Mac and iOS are identical up to color. Towards making the
        spelling dots in WebKit on iOS more closely match the look of the spelling dots in UIKit-
        apps, standardize on using the same painting code for both Mac and iOS.

        Currently iOS uses bitmaps to render the spelling dots and does not account for user/CSS
        zooming. As a result, the spelling dots on iOS render with artifacts (e.g. truncated dots).
        A side benefit of having iOS share the same painting code as Mac is that iOS will now paint
        the dots programmatically and we avoid both the need to use bitmaps and fix the bugs in
        the painting of the bitmap dots with respect to zooming.

        * Resources/DictationPhraseWithAlternativesDot.png: Removed.
        * Resources/DictationPhraseWithAlternativesDot@2x.png: Removed.
        * Resources/SpellingDot.png: Removed.
        * Resources/SpellingDot@2x.png: Removed.
        * Resources/SpellingDot@3x.png: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::setDeviceScaleFactor):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::updateDocumentMarkerResources): Deleted.
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::findImage): Deleted.
        (WebCore::createDotPattern): Deleted.
        (WebCore::GraphicsContext::updateDocumentMarkerResources): Deleted.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::updateDocumentMarkerResources): Deleted.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::updateDocumentMarkerResources): Deleted.
        * platform/ios/wak/WKGraphics.mm:
        (WKRectFill): Incorporated the logic from _FillRectUsingOperation().
        (_FillRectUsingOperation): Deleted; moved the logic into WKRectFill() since WKRectFill()
        is now the only caller of this function.
        (WKRectFillUsingOperation): Deleted.
        (imageResourcePath): Deleted.
        (WKGraphicsCreateImageFromBundleWithName): Deleted.
        (WKDrawPatternBitmap): Deleted.
        (WKReleasePatternBitmap): Deleted.
        (WKSetPattern): Deleted.
        * platform/ios/wak/WKGraphicsInternal.h: Removed.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        * rendering/RenderThemeCocoa.h: Add headers RenderText.h and GraphicsContextCG.h. Fix some style nits while I am here;
        substitute #import for #include and remove some unnecessary headers TranslateTransformOperation.h, RenderStyle.h, and
        RenderElement.h.
        * rendering/RenderThemeCocoa.mm:
        (WebCore::colorForStyle):
        (WebCore::RenderThemeCocoa::drawLineForDocumentMarker): Moved from RenderThemeMac. I renamed
        the local variable ctx to context and fixed a type in a comment while moving this code.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::colorForStyle): Deleted; moved to class RenderThemeCocoa.
        (WebCore::RenderThemeMac::drawLineForDocumentMarker): Deleted; moved to class RenderThemeCocoa.

2018-08-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] [WK2] Images copied from Mail message view paste with the wrong file name in compose
        https://bugs.webkit.org/show_bug.cgi?id=188957
        <rdar://problem/43737715>

        Reviewed by Darin Adler.

        Allow the alt attribute of a pasted image element to determine the name of an image attachment, rather than
        using the source URL's last path component first. This is because in some clients, such as Mail, the source of
        the image element is some nondescript UUID, and the alt text contains the real name of the image.

        Test: WKAttachmentTests.PasteWebArchiveContainingImages

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::replaceRichContentWithAttachments):

2018-08-27  Alex Christensen  <achristensen@webkit.org>

        Fix IOSMAC build
        https://bugs.webkit.org/show_bug.cgi?id=188934
        <rdar://problem/43694979>

        Reviewed by Darin Adler.

        * platform/network/cf/FormDataStreamCFNet.cpp:

2018-08-27  Rob Buis  <rbuis@igalia.com>

        XMLHTTPRequest.send for Document should have same Content-Type processing rules as String
        https://bugs.webkit.org/show_bug.cgi?id=188953

        Reviewed by Darin Adler.

        Processing rules for Content-Type have been implemented for send with String as parameter, but
        not for Document, but both should be treated the same according to the spec [1]. This patch
        implements this.

        Behavior matches Firefox.

        [1] https://xhr.spec.whatwg.org/#the-send()-method

        Test: web-platform-tests/XMLHttpRequest/setrequestheader-content-type.htm

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2018-08-27  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Implement intersection logic for the explicit root case
        https://bugs.webkit.org/show_bug.cgi?id=188809

        Reviewed by Simon Fraser.

        Add logic to Document::updateIntersectionObservations to compute the intersection
        between the target and root elements, for the case where an IntersectionObserver
        has a root element.

        There are no changes to the scheduling of intersection observations in this patch,
        so observations are still only computed once for each observer.

        * dom/Document.cpp:
        (WebCore::computeIntersectionRects):
        (WebCore::Document::updateIntersectionObservations):
        * page/FrameView.cpp:
        (WebCore::FrameView::absoluteToClientRect const):
        * page/FrameView.h:
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::createTimestamp const):
        * page/IntersectionObserver.h:
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::area const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isContainingBlockAncestorFor const):
        * rendering/RenderBlock.h:

2018-08-25  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Shrink size of HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=188945

        Reviewed by Darin Adler.

        Shrink the size of HTMLCollection by reordering members.

        No behavior change.

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        * html/HTMLCollection.h:

2018-08-25  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Shrink size of XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=188944

        Reviewed by Saam Barati.

        Shrink the size of XMLHttpRequest by packing bits and reordering members.
        It reduces the size from 1248 to 1176.

        No behavior change.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::createResponseBlob):
        (WebCore::XMLHttpRequest::createResponseArrayBuffer):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::changeState):
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::setWithCredentials):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::prepareToSend):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::overrideMimeType):
        (WebCore::XMLHttpRequest::setRequestHeader):
        (WebCore::XMLHttpRequest::getAllResponseHeaders const):
        (WebCore::XMLHttpRequest::getResponseHeader const):
        (WebCore::XMLHttpRequest::status const):
        (WebCore::XMLHttpRequest::statusText const):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::createDecoder const):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::didReachTimeout):
        (WebCore::XMLHttpRequest::readyState const): Deleted.
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::responseType const):
        (WebCore::XMLHttpRequest::readyState const):
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        * xml/XMLHttpRequestProgressEventThrottle.h:

2018-08-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] FloatBox -> FloatAvoider
        https://bugs.webkit.org/show_bug.cgi?id=188941

        Reviewed by Antti Koivisto.

        This is in preparation for the float avoidance feature where formatting context root boxes avoid existing floats.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/displaytree/DisplayBox.h:
        * layout/floats/FloatAvoider.cpp: Renamed from Source/WebCore/layout/floats/FloatBox.cpp.
        (WebCore::Layout::FloatAvoider::FloatAvoider):
        (WebCore::Layout::FloatAvoider::initializePosition):
        (WebCore::Layout::FloatAvoider::isLeftAligned const):
        (WebCore::Layout::FloatAvoider::setLeft):
        (WebCore::Layout::FloatAvoider::setTopLeft):
        (WebCore::Layout::FloatAvoider::resetVertically):
        (WebCore::Layout::FloatAvoider::resetHorizontally):
        (WebCore::Layout::FloatAvoider::topLeftInContainingBlock const):
        * layout/floats/FloatAvoider.h: Renamed from Source/WebCore/layout/floats/FloatBox.h.
        (WebCore::Layout::FloatAvoider::top const):
        (WebCore::Layout::FloatAvoider::left const):
        (WebCore::Layout::FloatAvoider::marginTop const):
        (WebCore::Layout::FloatAvoider::marginLeft const):
        (WebCore::Layout::FloatAvoider::marginBottom const):
        (WebCore::Layout::FloatAvoider::marginRight const):
        (WebCore::Layout::FloatAvoider::rectWithMargin const):
        (WebCore::Layout::FloatAvoider::setTop):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        * layout/floats/FloatingContext.h:

2018-08-26  Christopher Reid  <chris.reid@sony.com>

        [Curl] Implement deleteCookie()
        https://bugs.webkit.org/show_bug.cgi?id=188908

        Reviewed by Fujii Hironori.

        Support deleting cookies from the web inspector

        Tested from the web inspector.

        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::deleteCookie const):

2018-08-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Simplify FloatingState::FloatItem class
        https://bugs.webkit.org/show_bug.cgi?id=188912

        Reviewed by Antti Koivisto.

        Let's remove some redundant code now that FloatingState::FloatItem is not used for incoming floats anymore.

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/floats/FloatBox.cpp:
        (WebCore::Layout::FloatBox::resetVertically):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::left const):
        (WebCore::Layout::FloatingPair::right const):
        (WebCore::Layout::FloatingPair::intersects const):
        (WebCore::Layout::previousFloatingIndex):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        * layout/floats/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::remove):
        (WebCore::Layout::FloatingState::bottom const):
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::FloatItem::operator== const):
        (WebCore::Layout::FloatingState::FloatItem::isLeftPositioned const):
        (WebCore::Layout::FloatingState::FloatItem::rectWithMargin const):
        (WebCore::Layout::FloatingState::FloatItem::bottom const):
        (WebCore::Layout::FloatingState::leftBottom const):
        (WebCore::Layout::FloatingState::rightBottom const):
        (WebCore::Layout::FloatingState::bottom const):
        (WebCore::Layout::FloatingState::FloatItem::inFormattingContext const):
        (WebCore::Layout::FloatingState::FloatItem::layoutBox const): Deleted.
        (WebCore::Layout::FloatingState::FloatItem::containingBlock const): Deleted.
        (WebCore::Layout::FloatingState::FloatItem::displayBox const): Deleted.
        (WebCore::Layout::FloatingState::FloatItem::containingBlockDisplayBox const): Deleted.

2018-08-26  Andy Estes  <aestes@apple.com>

        [Apple Pay] Introduce new values for -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=188949
        <rdar://problem/39992228>

        Reviewed by Anders Carlsson.

        Added "in-store", "checkout", "book", and "subscribe" keywords for -apple-pay-button-type,
        and mapped those values to their equivalent PKPaymentButtonTypes.

        Tests: http/tests/ssl/applepay/ApplePayButton.html
               http/tests/ssl/applepay/ApplePayButtonV4.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ApplePayButtonType const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        * rendering/RenderThemeCocoa.mm:
        (WebCore::toPKPaymentButtonType):
        * rendering/style/RenderStyleConstants.h:

2018-08-26  Youenn Fablet  <youenn@apple.com>

        Make IDBCursor::m_request a WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=188938

        Reviewed by Alex Christensen.

        Make m_request a WeakPtr so that if m_request is destroyed, the related cursor will not use the invalid pointer.

        Covered by existing tests.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continuePrimaryKey): Other continue and advance methods that are calling uncheckedIterateCursor do check for m_request.
        Apply the same check for continuePrimaryKey.
        (WebCore::IDBCursor::uncheckedIterateCursor):
        * Modules/indexeddb/IDBCursor.h:
        (WebCore::IDBCursor::setRequest):
        (WebCore::IDBCursor::clearRequest):
        (WebCore::IDBCursor::request):
        * Modules/indexeddb/IDBRequest.h:

2018-08-26  Youenn Fablet  <youenn@apple.com>

        IDBCursor does not need to be an ActiveDOMObject
        https://bugs.webkit.org/show_bug.cgi?id=188937

        Reviewed by Alex Christensen.

        Remove ActiveDOMObject from IDBCursor IDL.
        Update constructors and call sites accordingly.
        This allows removing m_outstandingRequestCount and related code in IDBRequest.

        Covered by existing tests.

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::create):
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::uncheckedIterateCursor):
        (WebCore::IDBCursor::deleteFunction):
        (WebCore::IDBCursor::activeDOMObjectName const): Deleted.
        (WebCore::IDBCursor::canSuspendForDocumentSuspension const): Deleted.
        (WebCore::IDBCursor::hasPendingActivity const): Deleted.
        (WebCore::IDBCursor::decrementOutstandingRequestCount): Deleted.
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        (WebCore::IDBCursorWithValue::create):
        (WebCore::IDBCursorWithValue::IDBCursorWithValue):
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBCursorWithValue.idl:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setSource):
        (WebCore::IDBRequest::dispatchEvent):
        (WebCore::IDBRequest::willIterateCursor):
        (WebCore::IDBRequest::didOpenOrIterateCursor):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::requestOpenCursor):
        * WebCore.xcodeproj/project.pbxproj:

2018-08-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Dropping and pasting images should insert inline image elements with _WKAttachments
        https://bugs.webkit.org/show_bug.cgi?id=188933
        <rdar://problem/43699724>

        Reviewed by Darin Adler.

        Support the ability to drop and paste images as image elements, with attachment elements, only if attachment
        elements are enabled. See changes below for more detail.

        Tests:  WKAttachmentTests.CutAndPastePastedImage
                WKAttachmentTests.MovePastedImageByDragging
                WKAttachmentTests.RemoveNewlinesBeforePastedImage

        * editing/Editor.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):

        Adjust this helper to take an Element& rather than an HTMLAttachmentElement&, and address a FIXME by writing the
        document origin identifier to the pasteboard via custom pasteboard data when dragging an attachment. This allows
        us to avoid creating extra image and attachment elements when dragging an image backed by an attachment within
        the same document.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::contentTypeIsSuitableForInlineImageRepresentation):

        Add a helper to determine whether a content type (UTI or MIME type) should be read as an inline image.

        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::WebContentReader::readFilePaths):

        Teach codepaths where we currently create attachment elements to instead create image elements if the MIME type,
        is something suitable for display via an inline image element; add the attachment element under the shadow root
        of the image element.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendCustomAttributes):
        (WebCore::restoreAttachmentElementsInFragment):

        When dragging or copying an image element, we need to make sure that any attachment element backing the image
        is preserved in the pasted or dropped fragment. To do this, we use a technique similar to what was done for
        r180785 and r224593 and write a temporary "webkitattachmentid" attribute to the serialized markup on copy. Upon
        deserializing the markup back to a fragment, we then create an attachment element with the same identifier under
        the image.

        (WebCore::createFragmentFromMarkup):
        * html/HTMLAttachmentElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setAttachmentElement):
        (WebCore::HTMLImageElement::attachmentElement const):

        Helper methods to get and set an attachment element under an image element. Setting an image's attachment
        element puts that attachment element under the shadow root of the image, and also hides the attachment element.

        (WebCore::HTMLImageElement::attachmentIdentifier const):

        Returns the identifier of an attachment element associated with the image element, or null.

        * html/HTMLImageElement.h:
        * html/HTMLImageElement.idl:

        Add HTMLImageElement.webkitAttachmentIdentifier, a readonly attribute guarded by runtime-enabled attachment
        element feature.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

        In the case of dragging an image, if that image element is backed by an attachment element, don't bother writing
        the image data to the clipboard; instead, write the attachment data as a promise.

        (WebCore::DragController::doImageDrag):

        Plumb promised attachment information to DragController::doSystemDrag.

        (WebCore::DragController::promisedAttachmentInfo):

        Teach this to handle attachment elements as well as image elements that are backed by attachment elements.

        * page/DragController.h:
        * platform/PromisedAttachmentInfo.h:
        (WebCore::PromisedAttachmentInfo::operator bool const):

        A valid PromisedAttachmentInfo no longer requires a contentType to be set; instead, an attachment identifier
        alone is sufficient, since an up-to-date content type can be requested in the UI process from the API attachment
        object.

2018-08-26  Andy Estes  <aestes@apple.com>

        [Apple Pay] PaymentRequest.show() should reject when an unsupported ApplePayRequest version is specified
        https://bugs.webkit.org/show_bug.cgi?id=188954

        Reviewed by Darin Adler.

        In Apple Pay JS, calling the ApplePaySession constructor with an unsupported version results
        in an exception being thrown. We need to do something similar for Payment Request.

        This patch moves the logic for validating the version from ApplePaySession to a common
        routine in ApplePayRequestBase that both APIs call to convert requests into a common format.

        In Apple Pay JS, an exception will still be thrown when constructing an ApplePaySession. In
        Payment Request, the promise returned by show() will be rejected.

        Added test cases to http/tests/ssl/applepay/PaymentRequest.https.html.

        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):

2018-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Click event from click() is not composed
        https://bugs.webkit.org/show_bug.cgi?id=170211

        Reviewed by Wenson Hsieh.

        Fixed the bug. All simulated clicks should be composed regardless of whether it's trusted or not.
        See: https://html.spec.whatwg.org/multipage/interaction.html#dom-click
             https://html.spec.whatwg.org/multipage/webappapis.html#fire-a-synthetic-mouse-event

        * dom/SimulatedClick.cpp:

2018-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Avoid calling setUntrusted in SimulatedMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=188929

        Reviewed by Simon Fraser.

        Added IsTrusted flag to Event constructors instead of creating a trusted event
        and making it untrusted in the constructor of SimulatedMouseEvent.

        This makes EventTarget::dispatchEventForBindings the only caller of setUntrusted().

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/SimulatedClick.cpp:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        * dom/UIEvent.h:
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):

2018-08-24  Jer Noble  <jer.noble@apple.com>

        Using Touch Bar to scrub video on Youtube results in video playback freeze
        https://bugs.webkit.org/show_bug.cgi?id=188926

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-seek-twice.html

        When converting from a double-precision float to a MediaTime, a certain amount of precision is lost. If that
        results in a round-trip between `float in -> MediaTime -> float out` where in != out, we will wait forever for
        the time jump observer to fire. Break the cycle by comparing m_lastSeekTime to the synchronizerTime only after
        m_lastSeekTime has been normalized into a rational-time value.

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

2018-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Pass in IsComposed flag to Event constructors
        https://bugs.webkit.org/show_bug.cgi?id=188720
        <rdar://problem/43580387>

        Reviewed by Simon Fraser.

        This patch replaces the logic in Event::isComposed to decide whether an event is composed or not by
        explicitly passing IsComposed flag to Event constructor. This decouples being composed from whether
        an event is trusted and of a partciular event type, paving our way to make synthetic click event
        dispatched by an author script composable in webkit.org/b/170211.

        This patch also removes IsTrusted from the argument list of event constructors and create functions
        to systematically eliminate the possibility of this patch making an event uncomposed by not setting
        IsComposed flag.

        No new tests since there should be no behavioral change.

        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::ClipboardEvent): A trusted ClipboardEvent is composed.
        * dom/ClipboardEvent.h:
        (WebCore::ClipboardEvent::ClipboardEvent): Removed IsTrusted from the variant which takes Init object
        to make sure this refactoring is correct.
        (WebCore::ClipboardEvent::create): Ditto.
        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::CompositionEvent): A trusted CompositionEvent is composed.
        * dom/CompositionEvent.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent): A trusted dblclick event is composed (this is a non-standard
        event but virtually every mouse event is composed so it makes sense to make this composed).
        * dom/Event.cpp:
        (WebCore::Event::Event):
        (WebCore::Event::create):
        (WebCore::Event::composed const): Deleted. The trival implementation moved to the header file.
        * dom/Event.h:
        (WebCore::Event::composed const):
        * dom/FocusEvent.cpp:
        (WebCore::FocusEvent::FocusEvent): A trusted Focus event is composed.
        * dom/FocusEvent.h:
        (WebCore::FocusEvent::create): Removed IsTrusted from Init variant for the correctness guarantee.
        (WebCore::FocusEvent::FocusEvent): Ditto.
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::create): Removed IsTrusted from Init variant for the correctness guarantee.
        (WebCore::InputEvent::InputEvent): A trsuted InputEvent is composed.
        * dom/InputEvent.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent): A trsuted KeyboardEvent is composed.
        (WebCore::KeyboardEvent::create): Removed IsTrusted from Init variant for the correctness guarantee.
        * dom/KeyboardEvent.h:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create): Removed IsTrusted from Init variant for the correctness guarantee.
        (WebCore::MouseEvent::MouseEvent): Explicitly take IsComposed flag from subclasses since simulated click
        does not currently compose.
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): A trusted touch event is composed.
        * dom/MouseRelatedEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchDOMActivateEvent): A trusted DOMActivateEvent event is composed.
        (WebCore::Node::dispatchInputEvent): A trusted input event is composed.
        * dom/SimulatedClick.cpp:
        (SimulatedMouseEvent::SimulatedMouseEvent): A simulated click is composed if it's a trusted event for now.
        This is the bug to be fixed in webkit.org/b/170211.
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::TextEvent): A trsuted textInput event is composed.
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent): Added IsComposed as an argument to the variant which creates a trusted event,
        and removed IsTrusted from Init variant for the correctness guarantee.
        * dom/UIEvent.h:
        (WebCore::UIEvent::create): Ditto.
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState): Ditto.
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent): A trusted Wheel event, which is a subclass of MouseEvent, is composed.
        (WebCore::WheelEvent::create): Removed IsTrusted from Init variant for the correctness guarantee.
        * dom/WheelEvent.h:
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchInputEvent):
        (WebCore::dispatchClipboardEvent): Call the newly added variant which takes DataTransfer directly so that
        we can remove IsTrusted from the variant which takes Init for the correctness guarantee.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent): A trusted mouse event is composed.

2018-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Add getModifierState to MouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=188913
        <rdar://problem/43668772>

        Reviewed by Simon Fraser.

        Moved getModifierState from KeyboardEvent to UIEventWithKeyState and exposed it in MouseEvent.
        See https://www.w3.org/TR/2016/WD-uievents-20160804/#mouseevent

        This patch also fixes the bug that initMouseEvent was not clearing AltGraph and CapsLock states,
        which was preserved in the refactoring done in r235158.

        Tests: fast/events/constructors/mouse-event-getModifierState.html
               fast/events/dblclick-event-getModifierState.html

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::getModifierState const): Moved to UIEventWithKeyState.
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl: Insert a blank line to match the spec's IDL.
        * dom/MouseEvent.idl: Added getModifierState. 
        * dom/UIEventWithKeyState.cpp:
        (WebCore::UIEventWithKeyState::modifiersFromInitializer): Moved from the header file.
        (WebCore::UIEventWithKeyState::getModifierState const):
        (WebCore::UIEventWithKeyState::setModifierKeys): Moved from the header file.
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::modifierKeys const):
        (WebCore::UIEventWithKeyState::setModifierKeys): Deleted the variant which didn't take altGraphKey
        since that variant behaves same as the one which takes altGraphKey.

2018-08-24  Youenn Fablet  <youenn@apple.com>

        libwebrtc PeerConnection::AddTrack sometimes fail
        https://bugs.webkit.org/show_bug.cgi?id=188914

        Reviewed by Eric Carlson.

        AddTrack may fail so test the result and if not successful, make JS addTrack to throw an exception.
        This makes some tests to fail now.
        These tests should pass again when unified plan will be enabled.
        Covered by rebased tests.

        * Modules/mediastream/PeerConnectionBackend.h:
        (WebCore::PeerConnectionBackend::notifyAddedTrack):
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTrack):
        (WebCore::RTCPeerConnection::addTransceiver):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::notifyAddedTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2018-08-24  Adrian Perez de Castro  <aperez@igalia.com>

        [FreeType] Do not cast through GLib types in FontCustomPlatformDataFreeType.cpp
        https://bugs.webkit.org/show_bug.cgi?id=188919

        Reviewed by Michael Catanzaro.

        No new tests needed.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Cast
        through "void (*)(void)" instead of GCallback to avoid the warning
        produced by -Wcast-function-type.

2018-08-24  Andy Estes  <aestes@apple.com>

        [Apple Pay] Allow $0 totals
        https://bugs.webkit.org/show_bug.cgi?id=185150
        <rdar://problem/39212331>

        Reviewed by Dan Bernstein.

        Relaxed payment request validation to allow $0 totals. This matches PassKit behavior.

        Updated test cases in http/tests/ssl/applepay/.

        * Modules/applepay/PaymentRequestValidator.mm:
        (WebCore::PaymentRequestValidator::validateTotal):

2018-08-24  Frederic Wang  <fwang@igalia.com>

        Remove ScrollByPrecisePixel granularity
        https://bugs.webkit.org/show_bug.cgi?id=188915

        Reviewed by Carlos Garcia Campos.

        ScrollByPrecisePixel was introduced in bug 87535 and bug 91020 for Chromium Linux/Windows but
        it is no longer used.

        No new tests, behavior unchanged.

        * platform/ScrollAnimatorSmooth.cpp:
        (WebCore::ScrollAnimatorSmooth::scroll): Remove special handling for ScrollByPrecisePixel.
        * platform/ScrollTypes.h: Remove ScrollByPrecisePixel, it is never used.
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::scroll): Remove special handling for ScrollByPrecisePixel.
        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::scroll): Remove special handling for ScrollByPrecisePixel.

2018-08-24  Antti Koivisto  <antti@apple.com>

        Allow creating WeakPtrs to const objects
        https://bugs.webkit.org/show_bug.cgi?id=188785

        Reviewed by Geoff Garen.

        Remove some unneeded const_casts.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator::evaluate const):
        * css/MediaQueryEvaluator.h:
        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FloatingObjects::FloatingObjects):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObjects::renderer const):

2018-08-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Move inline methods on CoordinatedGraphicsLayer out-of-line
        https://bugs.webkit.org/show_bug.cgi?id=188916

        Reviewed by Carlos Garcia Campos.

        Style checker produced complaints that CoordinatedGraphicsLayer class is
        using inline-defined methods despite the WEBCORE_EXPORT macro being used
        for the whole class. Keep the macro where it is but instead move the
        method definitions out-of-line.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::isCoordinatedGraphicsLayer const):
        (WebCore::CoordinatedGraphicsLayer::id const):
        (WebCore::CoordinatedGraphicsLayer::primaryLayerID const):
        (WebCore::CoordinatedGraphicsLayer::usesContentsLayer const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-08-24  Antti Koivisto  <antti@apple.com>

        Use OptionSet::containsAny and containsAll in some more places
        https://bugs.webkit.org/show_bug.cgi?id=188885

        Reviewed by Sam Weinig.

        * page/PerformanceMonitor.cpp:
        (WebCore::PerformanceMonitor::activityStateChanged):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):

2018-08-23  Simon Fraser  <simon.fraser@apple.com>

        Add support for dumping GC heap snapshots, and a viewer
        https://bugs.webkit.org/show_bug.cgi?id=186416

        Reviewed by Joseph Pecoraro.

        Make a way to dump information about the GC heap that is useful for looking for leaked
        or abandoned objects. This dump is obtained (on Apple platforms) via:
            notifyutil -p com.apple.WebKit.dumpGCHeap
        which writes a JSON file to /tmp which can then be loaded into the viewer in Tools/GCHeapInspector.

        This leverages the heap snapshot used by Web Inspector, adding an alternate format for
        the snapshot JSON that adds additional data about objects and why they are GC roots.
        
        The generated bindings code is changed to include the output root reason from isReachableFromOpaqueRoots(),
        and to implement heapSnapshot() which provides the address of the wrapped object. A new IDL attribute,
        CustomHeapSnapshot, is used to allow custom heapSnapshot() implementations for classes like JSDocument
        that need to decorate the heap snapshot cell data with things like the document URL.

        GCController registers a notifyutil callback which gathers the debug heap snapshot, and dumps it
        to a file in /tmp. The file path is printed out to the system log.

        * bindings/js/DOMGCOutputConstraint.cpp:
        (WebCore::DOMGCOutputConstraint::executeImpl):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::dumpHeap):
        * bindings/js/GCController.h:
        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackDataWeak::WeakOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::heapSnapshot):
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::heapSnapshot):
        * bindings/js/JSMicrotaskCallback.h:
        (WebCore::JSMicrotaskCallback::call):
        * bindings/js/JSMutationObserverCustom.cpp:
        (WebCore::JSMutationObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNavigatorCustom.cpp:
        (WebCore::JSNavigator::visitAdditionalChildren):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isReachableFromDOM):
        (WebCore::JSNodeOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSOffscreenCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSOffscreenCanvasRenderingContext2DOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSPerformanceObserverCustom.cpp:
        (WebCore::JSPerformanceObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSPopStateEventCustom.cpp:
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::JSTextTrackCueOwner::isReachableFromOpaqueRoots):
        * bindings/js/WebCoreTypedArrayController.cpp:
        (WebCore::WebCoreTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots):
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.json:
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceName::heapSnapshot):
        (WebCore::JSInterfaceNameOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSInterfaceName.h:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLike::heapSnapshot):
        (WebCore::JSMapLikeOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSMapLike.h:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLike::heapSnapshot):
        (WebCore::JSReadOnlyMapLikeOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.h:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObject::heapSnapshot):
        (WebCore::JSTestActiveDOMObjectOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactions::heapSnapshot):
        (WebCore::JSTestCEReactionsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestCEReactions.h:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifier::heapSnapshot):
        (WebCore::JSTestCEReactionsStringifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.h:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracer::heapSnapshot):
        (WebCore::JSTestCallTracerOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestCallTracer.h:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructor::heapSnapshot):
        (WebCore::JSTestClassWithJSBuiltinConstructorOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::heapSnapshot):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJIT::heapSnapshot):
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySetting::heapSnapshot):
        (WebCore::JSTestEnabledBySettingOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::heapSnapshot):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTarget::heapSnapshot):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestException::heapSnapshot):
        (WebCore::JSTestExceptionOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::heapSnapshot):
        (WebCore::JSTestGenerateIsReachableOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObject::heapSnapshot):
        (WebCore::JSTestGlobalObjectOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestGlobalObject.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifier::heapSnapshot):
        (WebCore::JSTestIndexedSetterNoIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingException::heapSnapshot):
        (WebCore::JSTestIndexedSetterThrowingExceptionOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifier::heapSnapshot):
        (WebCore::JSTestIndexedSetterWithIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::heapSnapshot):
        (WebCore::JSTestInterfaceOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscore::heapSnapshot):
        (WebCore::JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterable::heapSnapshot):
        (WebCore::JSTestIterableOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestIterable.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListener::heapSnapshot):
        (WebCore::JSTestMediaQueryListListenerOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::heapSnapshot):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::heapSnapshot):
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::heapSnapshot):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::heapSnapshot):
        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifier::heapSnapshot):
        (WebCore::JSTestNamedDeleterNoIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingException::heapSnapshot):
        (WebCore::JSTestNamedDeleterThrowingExceptionOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifier::heapSnapshot):
        (WebCore::JSTestNamedDeleterWithIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetter::heapSnapshot):
        (WebCore::JSTestNamedDeleterWithIndexedGetterOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWith::heapSnapshot):
        (WebCore::JSTestNamedGetterCallWithOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.h:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifier::heapSnapshot):
        (WebCore::JSTestNamedGetterNoIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifier::heapSnapshot):
        (WebCore::JSTestNamedGetterWithIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifier::heapSnapshot):
        (WebCore::JSTestNamedSetterNoIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingException::heapSnapshot):
        (WebCore::JSTestNamedSetterThrowingExceptionOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifier::heapSnapshot):
        (WebCore::JSTestNamedSetterWithIdentifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetter::heapSnapshot):
        (WebCore::JSTestNamedSetterWithIndexedGetterOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::heapSnapshot):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::heapSnapshot):
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgableProperties::heapSnapshot):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.h:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::heapSnapshot):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::heapSnapshot):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObj::heapSnapshot):
        (WebCore::JSTestObjOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::heapSnapshot):
        (WebCore::JSTestOverloadedConstructorsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequence::heapSnapshot):
        (WebCore::JSTestOverloadedConstructorsWithSequenceOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.h:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltins::heapSnapshot):
        (WebCore::JSTestOverrideBuiltinsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterface::heapSnapshot):
        (WebCore::JSTestPluginInterfaceOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEvent::heapSnapshot):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.h:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerialization::heapSnapshot):
        (WebCore::JSTestSerializationOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestSerialization.h:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritance::heapSnapshot):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.h:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInherit::heapSnapshot):
        * bindings/scripts/test/JS/JSTestSerializationInherit.h:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinal::heapSnapshot):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::heapSnapshot):
        (WebCore::JSTestSerializedScriptValueInterfaceOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifier::heapSnapshot):
        (WebCore::JSTestStringifierOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifier.h:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperation::heapSnapshot):
        (WebCore::JSTestStringifierAnonymousOperationOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.h:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperation::heapSnapshot):
        (WebCore::JSTestStringifierNamedOperationOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.h:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAs::heapSnapshot):
        (WebCore::JSTestStringifierOperationImplementedAsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.h:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToString::heapSnapshot):
        (WebCore::JSTestStringifierOperationNamedToStringOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.h:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttribute::heapSnapshot):
        (WebCore::JSTestStringifierReadOnlyAttributeOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.h:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttribute::heapSnapshot):
        (WebCore::JSTestStringifierReadWriteAttributeOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefs::heapSnapshot):
        (WebCore::JSTestTypedefsOwner::isReachableFromOpaqueRoots):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * dom/Document.idl:
        * page/DOMWindow.idl:

2018-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        initKeyboardEvent doesn't clear CapsLock state
        https://bugs.webkit.org/show_bug.cgi?id=188909

        Reviewed by Wenson Hsieh.

        Fixed the bug by not preserving CapsLock state in setModifierKeys variant which takes boolean
        for altGraphKey, which is only called by KeyboardEvent::initKeyboardEvent.

        Test: fast/events/init-event-clears-capslock.html

        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::setModifierKeys):

2018-08-23  Aditya Keerthi  <akeerthi@apple.com>

        Unreviewed, fix the Windows build after r235245.

        * html/InputMode.cpp:
        (WebCore::stringForInputMode):

2018-08-23  Saam barati  <sbarati@apple.com>

        JSRunLoopTimer may run part of a member function after it's destroyed
        https://bugs.webkit.org/show_bug.cgi?id=188426

        Reviewed by Mark Lam.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformThreadBody):
        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformThreadBody):

2018-08-23  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r235129.

        broke internal builds

        Reverted changeset:

        "Allow creating WeakPtrs to const objects"
        https://bugs.webkit.org/show_bug.cgi?id=188785
        https://trac.webkit.org/changeset/235129

2018-08-23  Daniel Bates  <dabates@apple.com>

        [iOS] Test editing/undo/replace-text-in-node-preserving-markers-crash.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=188898

        Reviewed by Simon Fraser.

        Not all document markers may have a dictation metadata on iOS.

        Currently we assume that every marker has dictation alternatives (i.e. DocumentMarker::alternatives()
        can be called) when deleting a selection preserving document markers on iOS. However, only markers
        for dictation may have dictation alternatives. For example, document markers for misspelled words do
        not have dictation metadata by definition. Instead of assuming every marker has dictation alternatives
        on iOS we need to check the marker type to determine whether it has associated dictation metadata and
        invoke the appropriate DocumentMarkerController::addMarker() overload.

        * dom/DocumentMarker.h:
        (WebCore::DocumentMarker::isDictation const): Added.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers): Only access DocumentMarker::alternatives()
        and add a dictation marker on iOS if the marker is a dictation marker.

2018-08-23  Mark Lam  <mark.lam@apple.com>

        Move vmEntryGlobalObject() to VM from CallFrame.
        https://bugs.webkit.org/show_bug.cgi?id=188900
        <rdar://problem/43655753>

        Reviewed by Michael Saboff.

        No new tests needed because this patch does not introduce new functionality.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::callerGlobalObject):
        (WebCore::toJSDOMGlobalObject): Deleted.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::firstDOMWindow):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::convertValueToObjcObject):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        * testing/Internals.cpp:
        (WebCore::Internals::cloneArrayBuffer):

2018-08-23  Andy Estes  <aestes@apple.com>

        [Apple Pay] Introduce Apple Pay JS v4 on iOS 12 and macOS Mojave
        https://bugs.webkit.org/show_bug.cgi?id=188829

        Reviewed by Tim Horton.

        Test: http/tests/ssl/applepay/ApplePaySessionV4.html

        * Configurations/FeatureDefines.xcconfig:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::supportsVersion):

2018-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: support breakpoints for timers and animation-frame events
        https://bugs.webkit.org/show_bug.cgi?id=188778

        Reviewed by Brian Burg.

        The original implementation of "instrumentation" breakpoints relied upon the frontend
        sending somewhat arbitrary strings when enabling breakpoints for specific events. As an
        example, setting a breakpoint for `requestAnimationFrame` expects `"animationFrameFired"`
        as the string, which doesn't make much sense. This patch removes the usage of these strings
        and instead expects the agent to implement a method that matches what is happening.

        Tests: inspector/dom-debugger/event-animation-frame-breakpoints.html
               inspector/dom-debugger/event-listener-breakpoints.html
               inspector/dom-debugger/event-timer-breakpoints.html

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willFireTimer):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded): Deleted.

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::setEventBreakpoint): Added.
        (WebCore::InspectorDOMDebuggerAgent::removeEventBreakpoint): Added.
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent):
        (WebCore::InspectorDOMDebuggerAgent::willFireTimer): Added.
        (WebCore::InspectorDOMDebuggerAgent::willFireAnimationFrame): Added.
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint): Deleted.
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded): Deleted.
        Unify the event listener and instrumentation breakpoint commands into a single method,
        `setEventBreakpoint`, that takes in both an `EventBreakpointType` and `eventName`.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):

2018-08-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Support the inputmode attribute on contenteditable elements
        https://bugs.webkit.org/show_bug.cgi?id=188878

        Reviewed by Ryosuke Niwa.

        The inputmode attribute should apply to contenteditable elements, in addition to
        textfield inputs and textareas.

        Moved the inputmode attribute from HTMLInputElement.idl and
        HTMLTextAreaElement.idl to HTMLElement.idl to reflect the specification.

        Also moved all logic to convert between the InputMode enum and string values
        into InputMode.cpp to avoid exposing unnecessary details to WebKit. Furthermore,
        InputMode::Auto was renamed to InputMode::Unspecified to avoid confusion with the
        specification.

        Spec: https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute

        Tests: fast/forms/inputmode-attribute-contenteditable.html
               fast/forms/inputmode-attribute-input.html
               fast/forms/inputmode-attribute-textarea.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::canonicalInputMode const):
        (WebCore::HTMLElement::inputMode const):
        (WebCore::HTMLElement::setInputMode):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLTextFormControlElement.h:
        * html/InputMode.cpp: Renamed from Source/WebCore/html/InputModeNames.cpp.
        (WebCore::inputModeForAttributeValue):
        (WebCore::stringForInputMode):
        * html/InputMode.h: Renamed from Source/WebCore/html/InputModeNames.h.

2018-08-23  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Store video preset sizes in a map
        https://bugs.webkit.org/show_bug.cgi?id=188866
        <rdar://problem/43622643>

        Reviewed by Youenn Fablet.

        No new tests, tested manually.

        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::AVVideoCaptureSource):
        (WebCore::AVVideoCaptureSource::initializeCapabilities):
        (WebCore::AVVideoCaptureSource::sizeForPreset):
        (WebCore::AVVideoCaptureSource::setPreset):
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions):
        (WebCore::sizeForPreset): Deleted.
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions const): Deleted.

2018-08-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, attempt to fix the build after r235230.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:

2018-08-23  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc up to 984f1a80c0
        https://bugs.webkit.org/show_bug.cgi?id=188745
        <rdar://problem/43539177>

        Reviewed by Eric Carlson.

        Updated implementation according new webrtc backend.
        Instead of modifying libwebrtc header files, we disable unused parameter warning for such headers included in WebCore.
        WebCore implementation is updated according new webrtc API, mostly AddRef/Release.
        RealtimeOutgoingVideoSource now uses a pixel convolver to convert RGB pixel buffers as I420.

        Covered by existing tests.

        * CMakeLists.txt:
        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addTrack):
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::fillEncodingParameters):
        (WebCore::fillRtpParameters):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::Release const):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeIncomingAudioSource.h:
        * platform/mediastream/RealtimeIncomingVideoSource.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeMediaSource::supportsConstraint const):
        (WebCore::RealtimeMediaSource::supportsConstraints):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp:
        (WebCore::GStreamerVideoDecoder::newSampleCallback):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):
        (WebCore::GStreamerVideoEncoder::newSampleCallback):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer):
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::ConvertToI420):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h:
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm: Added.
        (WebCore::RealtimeOutgoingVideoSourceCocoa::convertToYUV):
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::MockLibWebRTCPeerConnection::AddTrack):
        * testing/MockLibWebRTCPeerConnection.h:
        (WebCore::MockRtpSender::GetParameters):
        (WebCore::MockRtpSender::SetParameters):

2018-08-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Attachment elements don't appear in drag images on macOS
        https://bugs.webkit.org/show_bug.cgi?id=188823
        <rdar://problem/43616378>

        Reviewed by Tim Horton.

        Currently, attachment elements don't show up in the drag image snapshot on macOS. This is because only the
        "Selection" phase is painted when generating a drag image on macOS, and many replaced renderers (with some
        exceptions, such as RenderImage) only paint visible content during the "Foreground" phase. To fix this, we
        override RenderAttachment::paintReplaced to paint the attachment in the case where the Selection phase is being
        painted.

        Tests:  WKAttachmentTestsMac.DragAttachmentAsFilePromise
                WKAttachmentTests.MoveAttachmentElementAsIconByDragging

        * rendering/RenderAttachment.cpp:
        (WebCore::RenderAttachment::paintReplaced):
        * rendering/RenderAttachment.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::titleTextColorForAttachment):
        (WebCore::AttachmentLayout::layOutTitle):

        Plumb an AttachmentLayoutStyle (i.e. NonSelected or Selected) to AttachmentLayout, and use this bit when
        determining the title text color, as well whether to paint backgrounds for the icon and title.

        (WebCore::AttachmentLayout::AttachmentLayout):
        (WebCore::RenderThemeMac::attachmentIntrinsicSize const):
        (WebCore::RenderThemeMac::attachmentBaseline const):
        (WebCore::paintAttachmentIconBackground):
        (WebCore::paintAttachmentTitleBackground):

        Bail from painting backgrounds if a selected style is used for the attachment.

        (WebCore::RenderThemeMac::paintAttachment):

        Rather than check the RenderAttachment's selection state when determining whether to paint with a non-selected
        or selected style, only use selected style if the RenderAttachment has a selection _and_ the painting phase is
        not "Selection". While this sounds extremely counter-intuitive, the "Selection" painting phase refers to
        painting the selected foreground content _without_ including any part of the selection highlight.

2018-08-23  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Decouple the incoming floats and floats already placed in the list
        https://bugs.webkit.org/show_bug.cgi?id=188886

        Reviewed by Antti Koivisto.

        This is in preparation for the float avoidance feature where formatting context root boxes avoid existing floats.

        1. Introduce FloatBox class for the incoming floats (This will need to be renamed when adding support for avoidance -incoming box is actually not a float).
        2. Use the existing FloatState::FloatItem class for placed floats.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutUnits.h:
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/displaytree/DisplayBox.h:
        * layout/floats/FloatBox.cpp: Added.
        (WebCore::Layout::FloatBox::FloatBox):
        (WebCore::Layout::FloatBox::initializePosition):
        (WebCore::Layout::FloatBox::isLeftAligned const):
        (WebCore::Layout::FloatBox::setLeft):
        (WebCore::Layout::FloatBox::setTopLeft):
        (WebCore::Layout::FloatBox::resetVertically):
        (WebCore::Layout::FloatBox::resetHorizontally):
        (WebCore::Layout::FloatBox::topLeftInContainingBlock const):
        * layout/floats/FloatBox.h: Copied from Source/WebCore/layout/floats/FloatingContext.h.
        (WebCore::Layout::FloatBox::top const):
        (WebCore::Layout::FloatBox::left const):
        (WebCore::Layout::FloatBox::marginTop const):
        (WebCore::Layout::FloatBox::marginLeft const):
        (WebCore::Layout::FloatBox::marginBottom const):
        (WebCore::Layout::FloatBox::marginRight const):
        (WebCore::Layout::FloatBox::rectWithMargin const):
        (WebCore::Layout::FloatBox::setTop):
        * layout/floats/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::verticalPosition const):
        (WebCore::Layout::begin):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::horiztonalPosition const):
        (WebCore::Layout::FloatingPair::bottom const):
        (WebCore::Layout::Iterator::Iterator):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        (WebCore::Layout::FloatingContext::initialVerticalPosition const): Deleted.
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const): Deleted.
        (WebCore::Layout::FloatingContext::alignWithFloatings const): Deleted.
        (WebCore::Layout::FloatingContext::toContainingBlock const): Deleted.
        * layout/floats/FloatingContext.h:
        * layout/floats/FloatingState.h:
        (WebCore::Layout::FloatingState::root const):
        (WebCore::Layout::FloatingState::layoutContext const):

2018-08-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove the remaining CoordinatedGraphicsLayerState cruft
        https://bugs.webkit.org/show_bug.cgi?id=188881

        Reviewed by Carlos Garcia Campos.

        Remove what's left of CoordinatedGraphicsLayerState usage in the
        CoordinatedGraphics subsystem. In CoordinatedGraphicsLayer, this means
        dropping the m_layerState member variable since at this point it is not
        used anymore in any capacity. Affected helper methods and member
        variables are also removed where possible.

        The syncLayerState() method on the CoordinatedGraphicsLayerClient
        interface is adjusted to not accept any parameters. Client should just
        mark frame synchronization as required while the layer state is now
        managed differently.

        Instead of the CoordinatedLayerID (which is removed) the
        Nicosia::PlatformLayer::LayerID alias is introduced as a layer ID type,
        aliased to the uint64_t type.

        CoordinatedGraphicsState.h file is rid of all structs except the
        basic CoordinatedGraphicsState struct that at this point contains only
        a reference to the Nicosia::Scene object. This will be further
        simplified in the patches that follow.

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::PlatformLayer::id const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didChangeAnimations):
        (WebCore::CoordinatedGraphicsLayer::didChangeChildren):
        (WebCore::CoordinatedGraphicsLayer::didChangeFilters):
        (WebCore::CoordinatedGraphicsLayer::didUpdateTileBuffers):
        (WebCore::CoordinatedGraphicsLayer::didChangeGeometry):
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setPosition):
        (WebCore::CoordinatedGraphicsLayer::setAnchorPoint):
        (WebCore::CoordinatedGraphicsLayer::setSize):
        (WebCore::CoordinatedGraphicsLayer::setTransform):
        (WebCore::CoordinatedGraphicsLayer::setChildrenTransform):
        (WebCore::CoordinatedGraphicsLayer::setPreserves3D):
        (WebCore::CoordinatedGraphicsLayer::setMasksToBounds):
        (WebCore::CoordinatedGraphicsLayer::setDrawsContent):
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
        (WebCore::CoordinatedGraphicsLayer::setBackfaceVisibility):
        (WebCore::CoordinatedGraphicsLayer::setOpacity):
        (WebCore::CoordinatedGraphicsLayer::setContentsRect):
        (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
        (WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
        (WebCore::CoordinatedGraphicsLayer::setShowDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::CoordinatedGraphicsLayer::setDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded):
        (WebCore::toCoordinatedLayerID): Deleted.
        (WebCore::CoordinatedGraphicsLayer::didChangeLayerState): Deleted.
        (WebCore::CoordinatedGraphicsLayer::syncChildren): Deleted.
        (WebCore::CoordinatedGraphicsLayer::syncFilters): Deleted.
        (WebCore::CoordinatedGraphicsLayer::syncLayerState): Deleted.
        (WebCore::CoordinatedGraphicsLayer::syncAnimations): Deleted.
        (WebCore::CoordinatedGraphicsLayer::resetLayerState): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (): Deleted.
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState): Deleted.
        (WebCore::CoordinatedGraphicsLayerState::hasPendingChanges const): Deleted.

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Drop old-school PlatformLayer management in CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=188850

        Reviewed by Michael Catanzaro.

        Remove the m_platformLayer member from the CoordinatedGraphicsLayer
        class as it's been unused since the rework in r235165.

        The CoordinatedGraphicsLayer::syncPlatformLayer() helper method and the
        related member variable can both be removed as well. On the
        CoordinatedGraphicsLayerState class, we can remove the obsolete
        flags and the TextureMapperPlatformLayerProxy member variable that's
        unused now that such objects are handled through the Nicosia impl class.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::syncPlatformLayer): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove TiledBackingStoreClient inheritance from CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=188849

        Reviewed by Michael Catanzaro.

        Remove the TiledBackingStoreClient inheritance from the
        CoordinatedGraphicsLayer class since it's not used anymore after changes
        made in r235165.

        Related TiledBackingStore objects on this class, along with tile state
        tracking member variables on the CoordinatedGraphicsLayerState class,
        are also removed.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::resetLayerState):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::tiledBackingStoreHasPendingTileCreation): Deleted.
        (WebCore::CoordinatedGraphicsLayer::createTile): Deleted.
        (WebCore::CoordinatedGraphicsLayer::updateTile): Deleted.
        (WebCore::CoordinatedGraphicsLayer::removeTile): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::hasPendingChanges const):

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove CoordinatedImageBacking and related functionality
        https://bugs.webkit.org/show_bug.cgi?id=188847

        Reviewed by Michael Catanzaro.

        Remove the CoordinatedImageBacking class and its intertwining use in the
        CoordinatedGraphics system.

        Remove the now-unused m_coordinatedImageBacking member variable from the
        CoordinatedGraphicsLayer class, along with CoordinatedImageBacking::Host
        inheritance. Various related helper methods are also removed.

        In CoordinatedGraphicsState and CoordinatedGraphicsLayerState classes,
        we are able to drop different CoordinatedImageBacking-related state
        values that are not used anymore.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsToImage):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::didChangeImageBacking): Deleted.
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking): Deleted.
        (WebCore::CoordinatedGraphicsLayer::imageBackingVisible): Deleted.
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h: Removed.

2018-08-22  Ryosuke Niwa  <rniwa@webkit.org>

        Store RefPtr in FocusNavigationScope
        https://bugs.webkit.org/show_bug.cgi?id=188864

        Reviewed by Simon Fraser.

        Use RefPtr to store the root node of a tree scope and a slot element instead of a reference and a raw pointer.

        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::parentInScope const):
        (WebCore::FocusNavigationScope::firstNodeInScope const):
        (WebCore::FocusNavigationScope::lastNodeInScope const):
        (WebCore::FocusNavigationScope::FocusNavigationScope):
        (WebCore::FocusNavigationScope::owner const):

2018-08-22  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, update "Web Authentication" from "Under Consideration" to "In Development"
        in features.json.

        * features.json:

2018-08-22  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support dragging attachment elements out as files on macOS
        https://bugs.webkit.org/show_bug.cgi?id=181294
        <rdar://problem/36298801>

        Reviewed by Tim Horton.

        Serialize a dragged attachment element as a web archive on macOS. This allows us to move attachment elements
        around a document by dragging, without performing a file upload upon every drop. Ideally, we should do this on
        iOS as well, but this currently causes attachment data to go missing; further investigation to fix this for iOS
        is tracked in <https://bugs.webkit.org/show_bug.cgi?id=181514>.

        Tests:  WKAttachmentTestsMac.DragAttachmentAsFilePromise
                WKAttachmentTests.MoveAttachmentElementAsIconByDragging

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):

2018-08-22  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for the inputmode attribute
        https://bugs.webkit.org/show_bug.cgi?id=183621

        Reviewed by Tim Horton.

        Added the inputmode attribute to the HTMLInputElement and HTMLTextAreaElement IDL
        files. The possible values for the attribute are specified in InputModeNames.

        Test: fast/forms/inputmode-attribute.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::inputMode const):
        (WebCore::HTMLTextFormControlElement::setInputMode):
        * html/HTMLTextFormControlElement.h:
        * html/InputModeNames.cpp: Added.
        (WebCore::InputModeNames::text):
        (WebCore::InputModeNames::tel):
        (WebCore::InputModeNames::url):
        (WebCore::InputModeNames::email):
        (WebCore::InputModeNames::numeric):
        (WebCore::InputModeNames::decimal):
        (WebCore::InputModeNames::search):
        * html/InputModeNames.h: Added.

2018-08-22  Eric Carlson  <eric.carlson@apple.com>

        Log more often during AirPlay state changes
        https://bugs.webkit.org/show_bug.cgi?id=188854

        Always log some infrequent but important AirPlay state changes to make debugging easier.

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Low always.
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Ditto.
        (WebCore::HTMLMediaElement::setWirelessPlaybackTarget): Ditto.
        (WebCore::HTMLMediaElement::setShouldPlayToPlaybackTarget): Ditto.

2018-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Focus navigation order in slot fallback contents is wrong
        https://bugs.webkit.org/show_bug.cgi?id=178001
        <rdar://problem/42842997>

        Reviewed by Antti Koivisto.

        The bug here is that when a slot uses its fallback content, the fallback content's focus order doesn't get
        grouped by that of the slot. Consider the following DOM tree:

        - ShadowRoot
            - div tabindex = 2
            - slot tabindex = 1
                - span tabindex = 3

        In this example, the sequential focus navigation should be slot, span, then div. Even though span has tabindex
        order of 3, which is lower than that of div, the fallback content of the slot should be grouped together
        before the focus moves out of the slot content.

        In WebKit, this concept of grouping elements for the sequential focus navigation ordering is implemeneted
        as FocusNavigationScope. Both ShadowRoot and HTMLSlotElement are treated as a focus scope owner but we had
        a bug that a slot element which uses its fallback content was not treated as a focus scope owner.

        This patch addresses the bug by treating a slot wich uses its fallback content as a focus scope owner.

        Test: fast/shadow-dom/focus-navigation-across-slots.html

        * page/FocusController.cpp:
        (WebCore::isFocusScopeOwner): Treat a slot elment hs a focus scope owner regardless of whether it has assigned
        nodes or not.
        (WebCore::FocusNavigationScope::SlotKind): Added.
        (WebCore::FocusNavigationScope::m_slotKind): Added.
        (WebCore::FocusNavigationScope::parentInScope const): Return null if `node` is a child of the slot element for
        which this FocusNavigationScope is created (i.e. `node` is slot's fallback content).
        (WebCore::FocusNavigationScope::firstNodeInScope const): Return the first child node when this
        FocusNavigationScope is for a slot element using its fallback content.
        (WebCore::FocusNavigationScope::lastNodeInScope const): Ditto for the last child.
        (WebCore::FocusNavigationScope::FocusNavigationScope):
        (WebCore::FocusNavigationScope::scopeOf): The scope of a child of a slot element which uses its fallback content
        is its slot element (i.e. the current node is a fallback content). We can't simply check the current node is
        a slot element which uses a fallback content since the scope of a slot element is the parent scope. e.g. its
        tree scope like ShadowRoot or Document inside which this slot element appears.
        (WebCore::FocusNavigationScope::scopeOwnedByScopeOwner): Create the appropriate FocusNavigationScope based on
        whether the slot element has assigned or it uses its fallback content.

2018-08-22  David Kilzer  <ddkilzer@apple.com>

        Move files in WebCore project to match Xcode folder structure
        <https://webkit.org/b/188851>

        Reviewed by Tim Horton.

        * Scripts/LocalizableStrings.pm: Renamed from Source/WebCore/LocalizableStrings.pm.
        * Scripts/extract-localizable-strings.pl: Renamed from Source/WebCore/extract-localizable-strings.pl.
        * WebCore.xcodeproj/project.pbxproj: Update to match new location of files.
        * platform/audio/cocoa/WebAudioBufferList.cpp: Renamed from Source/WebCore/platform/audio/WebAudioBufferList.cpp.
        * platform/audio/cocoa/WebAudioBufferList.h: Renamed from Source/WebCore/platform/audio/WebAudioBufferList.h.
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h: Renamed from Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h.
        * platform/ios/wak/WAKViewInternal.h: Renamed from Source/WebCore/platform/WAKViewInternal.h.
          Also fix 3 webkit-style warnings.

2018-08-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Move files to a dedicated directory.
        https://bugs.webkit.org/show_bug.cgi?id=188846

        Reviewed by Simon Fraser.

        layout/Float* -> layout/floats

        * WebCore.xcodeproj/project.pbxproj:
        * layout/floatformatting/FloatingContext.cpp: Renamed from Source/WebCore/layout/FloatingContext.cpp.
        (WebCore::Layout::FloatingPair::isEmpty const):
        (WebCore::Layout::FloatingPair::verticalPosition const):
        (WebCore::Layout::Iterator::operator* const):
        (WebCore::Layout::begin):
        (WebCore::Layout::end):
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingContext::initialVerticalPosition const):
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const):
        (WebCore::Layout::FloatingContext::alignWithFloatings const):
        (WebCore::Layout::FloatingContext::toContainingBlock const):
        (WebCore::Layout::FloatingPair::FloatingPair):
        (WebCore::Layout::FloatingPair::left const):
        (WebCore::Layout::FloatingPair::right const):
        (WebCore::Layout::FloatingPair::intersects const):
        (WebCore::Layout::FloatingPair::operator == const):
        (WebCore::Layout::FloatingPair::bottom const):
        (WebCore::Layout::Iterator::Iterator):
        (WebCore::Layout::previousFloatingIndex):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        (WebCore::Layout::Iterator::operator== const):
        (WebCore::Layout::Iterator::operator!= const):
        * layout/floatformatting/FloatingContext.h: Renamed from Source/WebCore/layout/FloatingContext.h.
        (WebCore::Layout::FloatingContext::floatingState const):
        (WebCore::Layout::FloatingContext::layoutContext const):
        * layout/floatformatting/FloatingState.cpp: Renamed from Source/WebCore/layout/FloatingState.cpp.
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::FloatingState):
        (WebCore::Layout::belongsToThisFloatingContext):
        (WebCore::Layout::FloatingState::remove):
        (WebCore::Layout::FloatingState::append):
        (WebCore::Layout::FloatingState::bottom const):
        * layout/floatformatting/FloatingState.h: Renamed from Source/WebCore/layout/FloatingState.h.
        (WebCore::Layout::FloatingState::create):
        (WebCore::Layout::FloatingState::isEmpty const):
        (WebCore::Layout::FloatingState::FloatItem::layoutBox const):
        (WebCore::Layout::FloatingState::FloatItem::containingBlock const):
        (WebCore::Layout::FloatingState::FloatItem::displayBox const):
        (WebCore::Layout::FloatingState::FloatItem::containingBlockDisplayBox const):
        (WebCore::Layout::FloatingState::floats const):
        (WebCore::Layout::FloatingState::last const):
        (WebCore::Layout::FloatingState::layoutContext const):
        (WebCore::Layout::FloatingState::root const):
        (WebCore::Layout::FloatingState::leftBottom const):
        (WebCore::Layout::FloatingState::rightBottom const):
        (WebCore::Layout::FloatingState::bottom const):

2018-08-22  Rob Buis  <rbuis@igalia.com>

        Fetch: Stop checking Request.integrity's value in no-cors mode
        https://bugs.webkit.org/show_bug.cgi?id=188802

        Reviewed by Frédéric Wang.

        Remove this check since it was removed from the spec.

        Behavior matches Chrome and Firefox.

        Test: http/tests/subresource-integrity/sri-fetch.js:

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeOptions):

2018-08-22  Youenn Fablet  <youenn@apple.com>

        Mark MediaStream Recording API as under consideration
        https://bugs.webkit.org/show_bug.cgi?id=188822

        Reviewed by Jon Lee.

        * features.json:

2018-08-22  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Never return an uninitialized ImageGStreamer object.
        https://bugs.webkit.org/show_bug.cgi?id=188305

        Reviewed by Philippe Normand.

        The single caller was already checking for a null return value, so
        make that check actually do something. Also remove the null-check on
        the return value of image(), which asserted that it would never return
        null.

        Test: fast/canvas/canvas-createPattern-video-loading.html

        * platform/graphics/gstreamer/ImageGStreamer.h:
        (WebCore::ImageGStreamer::createImage): Return null if m_image wasn't created.
        (WebCore::ImageGStreamer::image): Return a reference.
        (WebCore::ImageGStreamer::rect): Always assert that m_image is present.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Update for new signature.

2018-08-22  Zalan Bujtas  <zalan@apple.com>

        Add changes missing from r234925.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):

2018-08-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Switch to Nicosia::CompositionLayer state tracking
        https://bugs.webkit.org/show_bug.cgi?id=188693

        Reviewed by Carlos Garcia Campos.

        Populate Nicosia::CompositionLayer with additional LayerState member
        objects. For now we're using pending, staging and committed states,
        though it might be possible to narrow down these to just two.

        Pending state contains state that will be moved to staging during the
        final steps of the next layer flush. flushState() method accumulates all
        state changes in the staging state, and also allows the caller to
        additionally perform flushing operations that are specific to backing
        store, image backing or content layer containers.

        commitState() method moves staging state over into the committed state,
        again allowing user to pass a functor that receives the just-committed
        state and apply it to their composition engine.

        Changes in state objects are done under a thread-safe lock. This might
        not be completely necessary at this point, but will be useful when
        additonal layer state updates will be coming from e.g. the scrolling
        thread. It might also make sense to tie in this lock use with the
        Nicosia::Scene lock in the future.

        Nicosia::ContentLayerTextureMapperImpl is modified slightly to allow
        determining during flushes whether an update is pending. This is
        necessary for a special case in ThreadedCompositor where content (i.e.
        platform) layers like WebGL or video require an additional level of
        scene update coordination. This complete special case has to go through
        another review to see whether it's still necessary. Ideally we would be
        able to remove it.

        CoordinatedGraphicsLayer is finally switched over to using
        Nicosia layer objects for state updates of any kind. This patch only
        adds all the necessary bits, but doesn't yet remove any of the existing
        code (but rather disables it temporarily, before it's removed).

        Updating of simple state values is already in place. For backing stores,
        the flushCompositingStateForThisLayerOnly() method now takes care of
        preparing the backing store object if necessary as per layer state,
        while the updateContentBuffers() method is switched to operate with
        TiledBackingStore objects now kept on the BackingStoreTextureMapperImpl
        instance associated with that backing store. Helper methods like
        adjustContentsScale() and createBackingStore(), only called from the
        updateContentBuffers() method, are removed and the code there inlined.

        For image-backed layers, the update is now done directly in
        the flushCompositingStateForThisLayerOnly() method, if necessary. The
        helper syncImageBacking() method is commented out in order to prevent
        double-painting of image buffers for now, but all this (along with the
        CoordinatedImageBacking logic in CompositingCoordinator) will be removed
        later.

        For layers backed by platform layer objects, integration is relatively
        simple. setContentsToPlatformLayer() is changed to properly handle any
        passed-in platform layer object, and updatePlatformLayer() invokes the
        swapBuffersIfNeeded() method on the ContentLayerTextureMapperImpl object
        during each flush, if necessary.

        In order to ensure any Nicosia-specific state update properly triggers
        a composition update, m_nicosia.performLayerUpdate is added and flipped
        to true during the flush in case of any state change. This then triggers
        a layer sync in the CompositingCoordinator object when the
        syncPendingStateChangesIncludingSubLayers() method is called. While no
        old-style layer state update is provided, it causes the necessary
        synchronization step that properly picks up the Nicosia-provided state
        changes. Once the old-style layer state tracking is removed, this method
        of update triggering will have to be updated as well.

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::CompositionLayer::flushState):
        (Nicosia::CompositionLayer::commitState):
        (Nicosia::CompositionLayer::accessCommitted):
        * platform/graphics/nicosia/NicosiaScene.h:
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.cpp:
        (Nicosia::ContentLayerTextureMapperImpl::flushUpdate):
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::~CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setContentsNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        (WebCore::CoordinatedGraphicsLayer::syncPendingStateChangesIncludingSubLayers):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        (WebCore::CoordinatedGraphicsLayer::purgeBackingStores):
        (WebCore::CoordinatedGraphicsLayer::adjustContentsScale): Deleted.
        (WebCore::CoordinatedGraphicsLayer::createBackingStore): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-08-22  David Kilzer  <ddkilzer@apple.com>

        Remove stale file references in WebCore Xcode project

        I manually removed these using Xcode and verified that there was
        a commit that removed the original files.

        Found by tool created for Bug 188754: Tool to fix folders that
        should map to directories in Xcode project files.

        * WebCore.xcodeproj/project.pbxproj:
        (dom/DOMExceptions.in): Removed in r219741.
        (Modules/modern-media-controls/start-button.js):
        (Modules/modern-media-controls/volume-slider.css):
        (Modules/modern-media-controls/icon-button.css):
        (Modules/modern-media-controls/volume-slider.js):
        (Modules/modern-media-controls/macos-media-controls.js):
        (Modules/modern-media-controls/ios-inline-media-controls.css):
        (Modules/modern-media-controls/scrubber.css):
        (Modules/modern-media-controls/start-button.css):
        (Modules/modern-media-controls/scrubber.js):
        (Modules/modern-media-controls/icon-button.js):
        (Modules/modern-media-controls/macos-compact-inline-media-controls.css):
        (Modules/modern-media-controls/images/iOS/enter-fullscreen@2x.png):
        (Modules/modern-media-controls/images/iOS/start@1x.png):
        (Modules/modern-media-controls/images/iOS/enter-fullscreen@1x.png):
        (Modules/modern-media-controls/images/iOS/pause@2x.png):
        (Modules/modern-media-controls/images/iOS/play@3x.png):
        (Modules/modern-media-controls/images/iOS/interval-skip-back@2x.png):
        (Modules/modern-media-controls/images/iOS/interval-skip-back@3x.png):
        (Modules/modern-media-controls/images/iOS/pip-in@2x.png):
        (Modules/modern-media-controls/images/iOS/start@3x.png):
        (Modules/modern-media-controls/images/iOS/airplay@1x.png):
        (Modules/modern-media-controls/images/iOS/enter-fullscreen@3x.png):
        (Modules/modern-media-controls/images/iOS/slider-thumb@2x.png):
        (Modules/modern-media-controls/images/iOS/airplay@2x.png):
        (Modules/modern-media-controls/images/iOS/pause@3x.png):
        (Modules/modern-media-controls/images/iOS/pip-in@3x.png):
        (Modules/modern-media-controls/images/iOS/interval-skip-back@1x.png):
        (Modules/modern-media-controls/images/iOS/pause@1x.png):
        (Modules/modern-media-controls/images/iOS/start@2x.png):
        (Modules/modern-media-controls/images/iOS/play@2x.png):
        (Modules/modern-media-controls/images/iOS/pip-in@1x.png):
        (Modules/modern-media-controls/images/iOS/play@1x.png):
        (Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@1x.png):
        (Modules/modern-media-controls/images/macOS/rewind@1x.png):
        (Modules/modern-media-controls/images/macOS/play@2x.png):
        (Modules/modern-media-controls/images/macOS/volume-mute@2x.png):
        (Modules/modern-media-controls/images/macOS/airplay-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/volume@2x.png):
        (Modules/modern-media-controls/images/macOS/interval-skip-back@2x.png):
        (Modules/modern-media-controls/images/macOS/volume-compact@2x.png):
        (Modules/modern-media-controls/images/macOS/start@2x.png):
        (Modules/modern-media-controls/images/macOS/exit-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/airplay@2x.png):
        (Modules/modern-media-controls/images/macOS/media-selection-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/interval-skip-back@1x.png):
        (Modules/modern-media-controls/images/macOS/airplay@1x.png):
        (Modules/modern-media-controls/images/macOS/pip-in@1x.png):
        (Modules/modern-media-controls/images/macOS/scale-to-fill@2x.png):
        (Modules/modern-media-controls/images/macOS/rewind@2x.png):
        (Modules/modern-media-controls/images/macOS/play-compact@1x.png):
        (Modules/modern-media-controls/images/macOS/media-selection-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/pip-in-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/volume@1x.png):
        (Modules/modern-media-controls/images/macOS/pip-in@2x.png):
        (Modules/modern-media-controls/images/macOS/play-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/volume-down-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/pause-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/enter-fullscreen-compact@2x.png):
        (Modules/modern-media-controls/images/macOS/enter-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/pause-compact@1x.png):
        (Modules/modern-media-controls/images/macOS/start@1x.png):
        (Modules/modern-media-controls/images/macOS/pip-in-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/pause-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/play@1x.png):
        (Modules/modern-media-controls/images/macOS/exit-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/forward@1x.png):
        (Modules/modern-media-controls/images/macOS/enter-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/pause@1x.png):
        (Modules/modern-media-controls/images/macOS/scale-to-fit@2x.png):
        (Modules/modern-media-controls/images/macOS/interval-skip-back-compact@2x.png):
        (Modules/modern-media-controls/images/macOS/pause@2x.png):
        (Modules/modern-media-controls/images/macOS/volume-up-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/volume-compact@1x.png):
        (Modules/modern-media-controls/images/macOS/play-compact@2x.png):
        (Modules/modern-media-controls/images/macOS/media-selection@2x.png):
        (Modules/modern-media-controls/images/macOS/forward@2x.png):
        (Modules/modern-media-controls/images/macOS/interval-skip-back-compact@1x.png):
        (Modules/modern-media-controls/images/macOS/scale-to-fill@1x.png):
        (Modules/modern-media-controls/images/macOS/airplay-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/media-selection@1x.png):
        (Modules/modern-media-controls/images/macOS/volume-mute@1x.png):
        (Modules/modern-media-controls/images/macOS/pause-compact@2x.png):
        (Modules/modern-media-controls/images/macOS/volume-up-fullscreen@2x.png):
        (Modules/modern-media-controls/images/macOS/scale-to-fit@1x.png):
        (Modules/modern-media-controls/images/macOS/play-fullscreen@1x.png):
        (Modules/modern-media-controls/images/macOS/volume-down-fullscreen@2x.png):
        (Modules/modern-media-controls/media/time-labels-support.js):
        - Removed in r217823.
        (Modules/webvr/VRDisplayCapabilities.cpp): Removed in r229089.
        (Modules/webvr/VRFieldOfView.cpp): Removed in r228819.
        (rendering/svg/RenderSVGAllInOne.cpp): Removed in r234655.

2018-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Do not try to update the compositing policy when not in accelerated compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=188787

        Reviewed by Simon Fraser.

        RenderLayerCompositor::updateCompositingPolicy() is called very often (called from
        RenderLayerCompositor::cacheAcceleratedCompositingFlags()) and it uses WTF::memoryFootprint() to decide the
        current compositing policy. Getting the memory footprint is an expensive operation in Linux (and I suspect other
        non-cocoa ports too), causing an excessive CPU usage. This caused the WPE and GTK+ unit test
        /webkit/WebKitWebContext/uri-scheme to start timing out in the bots, because the test expects things to happen
        fast and that's no longer the case. We could reduce the CPU usage a lot by not trying to update the policy when
        not in accelerated compositing mode. We will need a solution for the accelerated compositing mode, though.

        Fixes WPE/GTK+ unit test /webkit/WebKitWebContext/uri-scheme.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingPolicy): Return early when not in accelerated compositing mode.

2018-08-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Support "name" option for dedicated workers
        https://bugs.webkit.org/show_bug.cgi?id=188779

        Reviewed by Joseph Pecoraro.

        This patch adds `new Worker(url, { name: "Worker Name" })` option support[1].
        This name can be accessible from `self.name` of DedicatedWorkerGlobalScope.
        It is useful for debugging dedicated workers if the inspector can show the
        names of the workers. This enhancement is tracked by [2].

        [1]: https://github.com/whatwg/html/issues/2477
        [2]: https://bugs.webkit.org/show_bug.cgi?id=164678

        Tests: http/wpt/workers/name-property-enhanced.html
               http/wpt/workers/name-property-no-name.html

        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        Hold `name` member.

        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerGlobalScope.idl:
        Add `name` attribute.

        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::create):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/Worker.idl:
        Add WorkerOptions for dedicated worker creation.

        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        Isolate copy the given `name` to pass the worker thread.

        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:

2018-08-21  Ryosuke Niwa  <rniwa@webkit.org>

        Replace booleans for modifier keys in UIEventWithKeyState with OptionSet<Modifier>
        https://bugs.webkit.org/show_bug.cgi?id=188777

        Reviewed by Simon Fraser.

        Replaced boolean arguments and instance variables for modifier keys (ctrl, alt, shift, and meta keys) in
        UIEventWithKeyState with OptionSet<Modifier> and isSimulated boolean in MouseRelatedEvent with IsSimulated
        enum class.

        Also made movementDelta always compiled instead of only when ENABLE(POINTER_LOCK) to simplify the code.

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

        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::initKeyboardEvent): Call setModifierKeys.
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent): Ditto.
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Added a new variant which takes the minimum arguments
        for gesture & touch events. In those events, detail is always set to 0, movementDelta is always set to 0,0,
        and they are never simulated.
        * dom/MouseRelatedEvent.h:
        (WebCore::MouseRelatedEvent::IsSimulated): Added.
        * dom/SimulatedClick.cpp:
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent): Get OptionSet<Modifier> out of the underlying event
        instead of manually setting each key state. This code now preserves the state of caps lock and alt-graph
        keys but this is not observable because we have yet to implement getModifierState on MouseEvent.
        (WebCore::SimulatedMouseEvent::modifiersFromUnderlyingEvent): Added.
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        * dom/TouchEvent.h:
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::Modifier): Alias to PlatformEvent::Modifier.
        (WebCore::UIEventWithKeyState::ctrlKey const): Updated to use m_modifiers.
        (WebCore::UIEventWithKeyState::shiftKey const): Ditto.
        (WebCore::UIEventWithKeyState::altKey const): Ditto.
        (WebCore::UIEventWithKeyState::metaKey const): Ditto.
        (WebCore::UIEventWithKeyState::altGraphKey const): Ditto.
        (WebCore::UIEventWithKeyState::capsLockKey const): Ditto.
        (WebCore::UIEventWithKeyState::modifierKeys): Added.
        (WebCore::UIEventWithKeyState::UIEventWithKeyState): Now takes OptionSet<Modifier>.
        (WebCore::UIEventWithKeyState::setModifierKeys): Added. Used by init*Event functions in subclasses. Note that
        these functions preseve the states of alt-graph and caps lock keys to match the existing behaviors in this
        cleanup patch but they don't match behaviors of Chrome or Firefox.
        (WebCore::UIEventWithKeyState::modifiersFromInitializer): Added.
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent): Simulated::No corresponds to the last boolean being false.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchDragEvent):
        (WebCore::EventHandler::handleTouchEvent):
        * platform/PlatformEvent.h:
        (WebCore::PlatformEvent::Modifier): Added AltGraphKey.
        * platform/mac/PlatformEventFactoryMac.h:
        (WebCore::modifiersForEvent): Exported to be used in [WebPDFView PDFViewWillClickOnLink:withURL:].
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::modifiersForEvent):
        * testing/Internals.cpp:
        (WebCore::Internals::accessKeyModifiers const):

2018-08-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Remove _WKAttachments and notify the UI client upon mainframe navigation
        https://bugs.webkit.org/show_bug.cgi?id=188715
        <rdar://problem/43541790>

        Reviewed by Tim Horton.

        Rename didInsertAttachment to didInsertAttachmentWithIdentifier. See WebKit ChangeLog for more detail.

        Tests:  WKAttachmentTests.InvalidateAttachmentsAfterMainFrameNavigation
                WKAttachmentTests.InvalidateAttachmentsAfterWebProcessTermination

        * editing/Editor.cpp:
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        * page/EditorClient.h:
        (WebCore::EditorClient::didInsertAttachmentWithIdentifier):
        (WebCore::EditorClient::didRemoveAttachmentWithIdentifier):
        (WebCore::EditorClient::didInsertAttachment): Deleted.
        (WebCore::EditorClient::didRemoveAttachment): Deleted.

2018-08-21  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r235128.

        The test added with this change is frequently failing.

        Reverted changeset:

        "Support "name" option for dedicated workers"
        https://bugs.webkit.org/show_bug.cgi?id=188779
        https://trac.webkit.org/changeset/235128

2018-08-21  Commit Queue  <commit-queue@webkit.org>

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

        "It revealed bugs in Blob code as well as regressed JS
        performance tests" (Requested by saamyjoon on #webkit).

        Reverted changeset:

        "JSRunLoopTimer may run part of a member function after it's
        destroyed"
        https://bugs.webkit.org/show_bug.cgi?id=188426
        https://trac.webkit.org/changeset/235107

2018-08-21  Megan Gardner  <megan_gardner@apple.com>

        Use VisiblePosition to calculate selection ranges
        https://bugs.webkit.org/show_bug.cgi?id=188767
        <rdar://problem/43577166>

        Reviewed by Ryosuke Niwa.

        Exposing comparePositions.

        * editing/Editing.h:

2018-08-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Augment _WKAttachment SPI to handle NSFileWrappers in addition to NSData
        https://bugs.webkit.org/show_bug.cgi?id=188496
        <rdar://problem/43216836>

        Reviewed by Tim Horton.

        Refactors logic around HTMLAttachmentElement and pasteboard reading helpers, in support of moving the data
        backing for attachment elements to the client layer, instead of keeping it in the attachment element's File.
        Augmented existing API tests in WKAttachmentTests, and also added a new API test (see Tools for more detail).

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::didInsertAttachmentElement):

        Notify the client layer when a newly inserted attachment element's identifier has been updated to avoid
        colliding with the identifier of an existing attachment element. This can happen if, for instance, one or more
        attachments are copied and pasted within the same document.

        * editing/Editor.cpp:
        (WebCore::Editor::registerAttachmentIdentifier):
        (WebCore::Editor::cloneAttachmentData):

        Add new helper functions to notify the client when the attachment identifier to data mapping needs to be
        updated. This can happen in three ways: (1) an attachment is created with raw data, or (2) an attachment is
        created with a file path, or (3) the unique identifier for an attachment element has been reassigned. These
        correspond to the two versions of `registerAttachmentIdentifier`, and `cloneAttachmentData`, respectively.

        (WebCore::EditorClient::supportsClientSideAttachmentData const):

        Add a new EditorClient hook to determine whether client-side attachment data management is supported. Currently,
        this only returns true for WebKit2. If this flag is set to true, we register attachment identifiers and don't
        create a new File object for the attachment element; otherwise, fall back to creating and setting a File for the
        new attachment element.

        (WebCore::Editor::insertAttachment):
        (WebCore::Editor::insertAttachmentFromFile): Deleted.

        Adjust logic when inserting an attachment; we now only need to update the attributes of the attachment element
        with metadata from the client layer.

        * editing/Editor.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::supportsClientSideAttachmentData):
        (WebCore::createFragmentForImageAttachment):

        Notify the client when creating an attachment element from image data on the pasteboard.

        (WebCore::replaceRichContentWithAttachments):

        Refactor this helper function to no longer connect attachment elements to File objects created from
        subresources. Instead, just update each attachment element's attributes using information about the subresource,
        and then notify the client about the new attachment data and attachment identifier.

        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):

        Plumb the current WebContentReader's Frame& to each of these helpers, so that it can call out to the client.

        (WebCore::WebContentReader::readWebArchive):
        (WebCore::WebContentMarkupReader::readWebArchive):
        (WebCore::WebContentReader::readImage):
        (WebCore::WebContentReader::readFilePaths):

        Notify the client when creating an attachment from the path of a dropped file.

        * html/AttachmentTypes.h:

        Remove AttachmentInfo. This is no longer necessary because we don't need to request attachment data from the web
        process anymore.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::ensureUniqueIdentifier):

        Add a helper function on the attachment element to create and return a unique identifier if needed.

        (WebCore::HTMLAttachmentElement::updateAttributes):

        Add a helper method to update the displayed element attributes (type, title and subtitle) or an attachment.

        (WebCore::AttachmentDataReader::create): Deleted.
        (WebCore::AttachmentDataReader::AttachmentDataReader): Deleted.

        Remove AttachmentDataReader. This helper class was only used to load attachment data when requesting attachment
        information in the client, but this is now obviated by moving attachment data to the client layer.

        (WebCore::HTMLAttachmentElement::updateFileWithData): Deleted.
        (WebCore::HTMLAttachmentElement::requestInfo): Deleted.
        (WebCore::HTMLAttachmentElement::destroyReader): Deleted.
        (WebCore::AttachmentDataReader::~AttachmentDataReader): Deleted.
        (WebCore::AttachmentDataReader::didFinishLoading): Deleted.
        (WebCore::AttachmentDataReader::didFail): Deleted.
        (WebCore::AttachmentDataReader::invokeCallbackAndFinishReading): Deleted.
        * html/HTMLAttachmentElement.h:
        * page/DragClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doSystemDrag):
        (WebCore::DragController::promisedAttachmentInfo):

        Allow dragging an attachment (even if it does not have a file) as long as it has a unique identifier and a
        content type.

        (WebCore::DragController::promisedBlobInfo): Deleted.
        * page/DragController.h:
        * page/EditorClient.h:
        (WebCore::EditorClient::registerAttachmentIdentifier):
        (WebCore::EditorClient::cloneAttachmentData):
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):
        * platform/PromisedAttachmentInfo.h: Renamed from Source/WebCore/platform/PromisedBlobInfo.h.

        Add an attachment identifier to PromisedBlobInfo. Additionally, rename PromisedBlobInfo to
        PromisedAttachmentInfo, since it is currently exclusively used to attachment element data to the pasteboard.
        In the future, this could be renamed to something more general (e.g. PromisedPasteboardData), should we use this
        mechanism to write data from other sources to the pasteboard.

        (WebCore::PromisedAttachmentInfo::operator bool const):

2018-08-21  Brent Fulgham  <bfulgham@apple.com>

        Remove experimental affiliated domain code now that StorageAccess API is available
        https://bugs.webkit.org/show_bug.cgi?id=188756
        <rdar://problem/43527848>

        Reviewed by Alex Christensen.

        In Bug 174661 we added a compatibility quirk to support wsj.com authentication. This quirk is no longer needed,
        since the StorageAccess API provides the necessary tools to do this type of interaction without needing global
        cross-site access.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::areDomainsAssociated): Deleted.
        (WebCore::shouldEnableSiteSpecificQuirks): Deleted.
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::areDomainsAssociated): Deleted.
        * loader/ResourceLoadStatistics.h:

2018-08-21  Antti Koivisto  <antti@apple.com>

        Allow creating WeakPtrs to const objects
        https://bugs.webkit.org/show_bug.cgi?id=188785

        Reviewed by Geoffrey Garen.

        Remove some unneeded const_casts.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
        (WebCore::MediaQueryEvaluator::evaluate const):
        * css/MediaQueryEvaluator.h:
        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FloatingObjects::FloatingObjects):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObjects::renderer const):

2018-08-21  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Support "name" option for dedicated workers
        https://bugs.webkit.org/show_bug.cgi?id=188779

        Reviewed by Joseph Pecoraro.

        This patch adds `new Worker(url, { name: "Worker Name" })` option support[1].
        This name can be accessible from `self.name` of DedicatedWorkerGlobalScope.
        It is useful for debugging dedicated workers if the inspector can show the
        names of the workers. This enhancement is tracked by [2].

        [1]: https://github.com/whatwg/html/issues/2477
        [2]: https://bugs.webkit.org/show_bug.cgi?id=164678

        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        Hold `name` member.

        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerGlobalScope.idl:
        Add `name` attribute.

        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::DedicatedWorkerThread):
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::create):
        (WebCore::Worker::notifyFinished):
        * workers/Worker.h:
        * workers/Worker.idl:
        Add WorkerOptions for dedicated worker creation.

        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::startWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        Isolate copy the given `name` to pass the worker thread.

        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThread.h:

2018-08-21  Per Arne Vollan  <pvollan@apple.com>

        [WebGL] Contexts are not updated when display configuration changed.
        https://bugs.webkit.org/show_bug.cgi?id=188750

        Reviewed by Brent Fulgham.

        Calling CGDisplayRegisterReconfigurationCallback in GraphicsContext3DManager::addContext
        returns kCGErrorSuccess when WindowServer access is blocked in the WebContent process,
        but the callback function is never called. We should register the callback function in
        the UI process, and send a message to the WebContent process when the display
        configuration changed.

        Test: fast/canvas/webgl/context-update-on-display-configuration.html

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext3DManager.cpp:
        (WebCore::GraphicsContext3DManager::displayWasReconfigured):
        (WebCore::GraphicsContext3DManager::addContext):
        (WebCore::GraphicsContext3DManager::removeContext):
        (WebCore::displayWasReconfigured): Deleted.
        * platform/graphics/GraphicsContext3DManager.h:

2018-08-21  John Wilander  <wilander@apple.com>

        Make ResourceLoadObserver::logWebSocketLoading() handle websockets in detached frames
        https://bugs.webkit.org/show_bug.cgi?id=188757
        <rdar://problem/38713390>

        Reviewed by Alex Christensen.

        Test: http/tests/websocket/construct-in-detached-frame-resource-load-statistics.html

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
            Now logs even when a frame doesn't exist.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::shouldLog const):
            Now takes boolean 'usesEphemeralSession' instead of a page to support logging when there is no page.
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
            Changed to send a boolean to ResourceLoadObserver::shouldLog().
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
            Changed to:
            - receive the main frame's URL and a boolean for ephemeral sessions instead of the Frame.
            - send a boolean to ResourceLoadObserver::shouldLog().
            - No longer call areDomainsAssociated(). It is being removed in https://bugs.webkit.org/show_bug.cgi?id=188756.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Changed to send a boolean to ResourceLoadObserver::shouldLog().
        * loader/ResourceLoadObserver.h:

2018-08-21  Daniel Bates  <dabates@apple.com>

        Disallow navigations when page cache updates the current document of the frame
        https://bugs.webkit.org/show_bug.cgi?id=188422

        Reviewed by Ryosuke Niwa.

        Make use of NavigationDisabler to disallow navigations when associating the cached
        document back with its frame (i.e. calling Frame::setDocument()).

        When we associate a cached document with its frame we will construct its render tree
        and run post style resolution callbacks that can do anything, including performing
        a frame load. Until page restoration is comnplete the frame tree is in a transient
        state that makes reasoning about it difficult and error prone. We should not allow
        navigations in this state.

        Test: fast/history/go-back-to-object-subframe.html

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

2018-08-21  Daniel Bates  <dabates@apple.com>

        Replace TextCheckingTypeMask with OptionSet
        https://bugs.webkit.org/show_bug.cgi?id=188678

        Reviewed by Antti Koivisto.

        Replaces TextCheckingTypeMask with an OptionSet to improve type safety and code clarity. Additionally
        change the values of TextCheckingType such that all the enumerators fit within an uint8_t.

        * PlatformMac.cmake:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasMisspelling const):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetSpelling):
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        (WebCore::AlternativeTextController::processMarkersOnTextToBeReplacedByResult):
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::isAutomaticTextReplacementType):
        (WebCore::Editor::markAndReplaceFor): For now, change a local variable from const to non-const to work
        around the following MSVC compiler bug: <https://developercommunity.visualstudio.com/content/problem/316713/msvc-cant-compile-webkits-optionsetcontainsany.html>.
        (WebCore::Editor::markMisspellingsAndBadGrammar):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::editorUIUpdateTimerFired):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):
        (WebCore::SpellCheckRequest::create):
        (WebCore::SpellChecker::didCheckSucceed):
        * editing/SpellChecker.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::findGrammaticalErrors):
        (WebCore::findMisspellings):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange const):
        (WebCore::checkTextOfParagraph):
        * editing/TextCheckingHelper.h:
        * loader/EmptyClients.cpp:
        * platform/text/TextCheckerClient.h:
        * platform/text/TextChecking.h: Remove TextCheckingTypeMask. Reorganized the fields of TextCheckingRequestData
        to coallesce padding and move it to the end of class. Also used default initializer syntax and defaulted (= default)
        the default constructor of TextCheckingRequestData, removing the need for a user-defined default constructor.
        (WebCore::TextCheckingRequestData::TextCheckingRequestData):
        (WebCore::TextCheckingRequestData::text const): Changed return type from String to const String&
        to avoid unnecessary ref-count churn for callers that do not need to take a shared ownership in
        this string.
        (WebCore::TextCheckingRequestData::checkingTypes const): Renamed; formerly named mask.
        (WebCore::TextCheckingRequestData::mask const): Deleted.
        * platform/text/mac/TextCheckingMac.mm: Added.
        (WebCore::nsTextCheckingTypes):
        * testing/Internals.cpp:
        (WebCore::Internals::handleAcceptedCandidate):

2018-08-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        Don't place "using namespace XXX;" in global space for unified source builds
        https://bugs.webkit.org/show_bug.cgi?id=188739

        Reviewed by Yusuke Suzuki.

        No new tests (No behavior change).

        * html/track/AudioTrackList.cpp:
        * html/track/TextTrackList.cpp:
        * html/track/VideoTrackList.cpp:
        * page/SecurityOriginData.cpp:
        * page/TextIndicator.cpp:
        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/win/FullScreenController.cpp:
        * platform/mediastream/CaptureDeviceManager.cpp:
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        * svg/animation/SMILTime.cpp:
        * testing/js/WebCoreTestSupport.cpp:
        * xml/XPathParser.cpp:

2018-08-21  Philippe Normand  <philn@igalia.com>

        [GStreamer] Warn early about incomplete MSE track switching support
        https://bugs.webkit.org/show_bug.cgi?id=188653

        Reviewed by Xabier Rodriguez-Calvar.

        The proper track switching support shall be fixed at some point by:
        https://bugs.webkit.org/show_bug.cgi?id=182531.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Remove redundant test.
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack): Exit early if
        this method is called by the MSE player.

2018-08-21  Philippe Normand  <philn@igalia.com>

        [GStreamer][MSE] Generic main thread notification support
        https://bugs.webkit.org/show_bug.cgi?id=188647

        Reviewed by Xabier Rodriguez-Calvar.

        Using GstBus for main thread notifications has the side effect of "leaking" the
        application messages to the media player, leading to CPU cycles wasting.

        No new tests, existing MSE tests cover this change.

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetMediaPlayerPrivate):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:

2018-08-21  Philippe Normand  <philn@igalia.com>

        [GStreamer][MSE] Remove parsers from playback pipeline
        https://bugs.webkit.org/show_bug.cgi?id=188646

        Reviewed by Xabier Rodriguez-Calvar.

        Decodebin already includes parsers in front of the decoders.

        No new tests, existing MSE tests cover this change.

        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::addSourceBuffer):
        (WebCore::PlaybackPipeline::attachTrack):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcLinkSourcePad):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:

2018-08-21  Commit Queue  <commit-queue@webkit.org>

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

        broke ubuntu LTS build (Requested by philn on #webkit).

        Reverted changeset:

        "[GTK] Never return an uninitialized ImageGStreamer object."
        https://bugs.webkit.org/show_bug.cgi?id=188305
        https://trac.webkit.org/changeset/234979

2018-08-21  Saam barati  <sbarati@apple.com>

        JSRunLoopTimer may run part of a member function after it's destroyed
        https://bugs.webkit.org/show_bug.cgi?id=188426

        Reviewed by Mark Lam.

        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::ResourceUsageThread::platformThreadBody):
        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::ResourceUsageThread::platformThreadBody):

2018-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow breakpoints to be set for specific event listeners
        https://bugs.webkit.org/show_bug.cgi?id=183138

        Reviewed by Joseph Pecoraro.

        Test: inspector/dom/breakpoint-for-event-listener.html

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::setEventListenerDisabled):
        (WebCore::InspectorDOMAgent::setBreakpointForEventListener): Added.
        (WebCore::InspectorDOMAgent::removeBreakpointForEventListener): Added.
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::willRemoveEventListener):
        (WebCore::InspectorDOMAgent::isEventListenerDisabled):
        (WebCore::InspectorDOMAgent::hasBreakpointForEventListener): Added.
        (WebCore::InspectorDOMAgent::idForEventListener): Added.
        Rework the event listener data structure to be based on ID instead of `EventListener`, since
        it is possible to have the same `EventListener` be used for multiple events.

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willHandleEvent): Added.
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        For DOM events, also check to see if there is a matching event listener specific breakpoint
        set via the DOMAgent, and break on it if one is found.

        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willHandleEventImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::didRequestAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::didCancelAnimationFrameImpl):
        (WebCore::InspectorInstrumentation::willFireAnimationFrameImpl):
        Split off `pauseOnNativeEventIfNeeded` to only handle non-DOM events, since all DOM events
        would already only go through `willHandleEvent`.

2018-08-20  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Sync unified build with Cocoa ports
        https://bugs.webkit.org/show_bug.cgi?id=188732

        Reviewed by Tim Horton.

        For iOS, disambiguate between ::WebEvent declared in PlatformKeyboardEvent.h and
        WebCore::WebEvent declared in WebEvent.h. It's expected that we'll have to deal with random
        issues like this when modifying unrelated source files in higher-level projects, since any
        change to the sources list changes which files get bundled together, and headers from
        lower-level projects that were not included before may now be included together.

        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::event const):

2018-08-20  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r223192): Remove invalid `path` for Modules/geolocation/ios folder

        * WebCore.xcodeproj/project.pbxproj: Remove invalid `path`
        setting for WebCore/Modules/geolocation/ios folder. This was
        found while working on a script for Bug 188754: Tool to fix
        folders that should map to directories in Xcode project files.

2018-08-20  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r235015): Xcode changes `mainGroup` name when updating WebCore project file

        * WebCore.xcodeproj/project.pbxproj:
        - Change `name` to "WebCore" within the group used by
          `mainGroup` so Xcode won't keep changing its value back to
          "WebKit".

2018-08-20  Jeremy Jones  <jeremyj@apple.com>

        UIWebView crashes while attempting to play youtube video on phone
        https://bugs.webkit.org/show_bug.cgi?id=188351
        rdar://problem/42489664

        Reviewed by David Kilzer.

        Test will be incorporated with fix for 188749, which will test both fixes.

        VideoFullscreenControllerContext must remove unretained reference to it from m_playbackModel during cleanup.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::didCleanupFullscreen):

2018-08-20  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Move capture device monitoring to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=188521
        <rdar://problem/43251787>

        Reviewed by Youenn Fablet.

        No new tests, updated fast/mediastream/device-change-event-2.html for the changes.

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices): Device change listener is added in addEventListener.
        (WebCore::MediaDevices::stop): Device change listener is on the user media controller.
        (WebCore::MediaDevices::addEventListener): Add the device change listener only once the first
        event handler is added.
        * Modules/mediastream/MediaDevices.h:

        * Modules/mediastream/UserMediaClient.h:
        * Modules/mediastream/UserMediaController.h:
        (WebCore::UserMediaController::addDeviceChangeObserver): Pass through to the client.
        (WebCore::UserMediaController::removeDeviceChangeObserver): Ditto.

        * platform/mediastream/CaptureDeviceManager.cpp:
        (CaptureDeviceManager::deviceChanged): Notify RealtimeMediaSourceCenter.
        (nextObserverToken): Deleted.
        (CaptureDeviceManager::addCaptureDeviceChangedObserver): Deleted.
        (CaptureDeviceManager::removeCaptureDeviceChangedObserver): Deleted.
        * platform/mediastream/CaptureDeviceManager.h:

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::setDevicesChangedObserver):
        (WebCore::RealtimeMediaSourceCenter::captureDevicesChanged):
        (WebCore::observerMap): Deleted.
        (WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): Deleted.
        (WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver): Deleted.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
        (WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices): Call base class.

        * platform/mediastream/mac/AVCaptureDeviceManager.mm:
        (WebCore::AVCaptureDeviceManager::deviceConnected): Ditto.
        (WebCore::AVCaptureDeviceManager::deviceDisconnected): Ditto.

        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
        (WebCore::deviceHasInputStreams): Drive-by fix, check the number of buffers to see if the
        device has input streams.
        (WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices): Use new bool parameter
        added to refreshAudioCaptureDevices so we won't trigger a device change event on the first scan.
        (WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices): Add param.
        (WebCore::CoreAudioCaptureDeviceManager::devicesChanged): Use new param.
        * platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::setDevices): Don't need to call captureDevicesChanged,
        it is done in the UI process.
        (WebCore::MockRealtimeMediaSourceCenter::addDevice): Ditto.
        (WebCore::MockRealtimeMediaSourceCenter::removeDevice): Ditto.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setPageIsFocusedAndActive): New, used by updated test.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-08-20  Rob Buis  <rbuis@igalia.com>

        Throw an exception if window.open() gets passed a URL that cannot be parsed
        https://bugs.webkit.org/show_bug.cgi?id=171656

        Reviewed by Darin Adler.

        Throw a SyntaxError exception when an invalid url gets passed into window.open().

        Tests: imported/w3c/web-platform-tests/url/failure.html
               fast/dom/Window/open-invalid-url.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::open):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):

2018-08-20  Ms2ger  <Ms2ger@igalia.com>

        [SOUP] Check length before calling soup_message_body_append_buffer.
        https://bugs.webkit.org/show_bug.cgi?id=176803

        Reviewed by Carlos Garcia Campos.

        The function has a precondition that the buffer is non-empty.

        Test: http/tests/local/blob/send-hybrid-blob-using-open-panel.html

        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::appendEncodedBlobItemToSoupMessageBody):
        (WebCore::ResourceRequest::updateSoupMessageBody const):

2018-08-20  Rob Buis  <rbuis@igalia.com>

        Relax Request constructor around referrers
        https://bugs.webkit.org/show_bug.cgi?id=168649

        Reviewed by Darin Adler.

        Implement remaining part of fetch change
        https://github.com/whatwg/fetch/pull/377, i.e.
        if "parsedReferrer’s origin is not same origin with origin",
        then set request’s referrer to "client", instead of
        throwing an exception [1].

        WebKit's new behavior matches that of Chrome and Firefox.

        Testing is covered by existing wpt tests.

        [1] Step 15.3.3 of https://fetch.spec.whatwg.org/#main-fetch

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::computeReferrer):

2018-08-19  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Shrink size of WebCore::Event further by reordering members
        https://bugs.webkit.org/show_bug.cgi?id=188734

        Reviewed by Daniel Bates.

        Since WebCore::Event is ref-counted class, it has 4bytes m_refCount at the head of the class.
        So placing 4bytes just after that before placing 8bytes aligned member (like pointers in 64bit
        platforms) can save the size of WebCore::Event further.
        This patch reorders members of WebCore::Event to shrink the size from 80bytes to 72bytes.

        No behavior change.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:

2018-08-18  David Kilzer  <ddkilzer@apple.com>

        Let Xcode have its way with the WebCore project

        * WebCore.xcodeproj/project.pbxproj:
        - Let Xcode sort recently added resources by unique ID.
        - Manually change the `mainGroup` name from "WebKit" to
          "WebCore".  There's no need to do this other than to make the
          inside of the proverbial cabinet match the outside.  It's been
          this way since the project file was committed in r9857.

2018-08-18  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Fire an initial dummy notification
        https://bugs.webkit.org/show_bug.cgi?id=188670

        Reviewed by Simon Fraser.

        Add logic to track ongoing intersection observations. Create an IntersectionObserverRegistration
        and fire a single dummy notification for each one.

        Test: intersection-observer/root-element-moved.html
        Also tested by existing tests in imported/w3c/web-platform-tests/intersection-observer.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::addIntersectionObserver):
        (WebCore::Document::removeIntersectionObserver):
        (WebCore::Document::updateIntersectionObservations):
        (WebCore::Document::notifyIntersectionObserversTimerFired):
        * dom/Document.h:
        (WebCore::Document::numberOfIntersectionObservers const):
        * dom/Element.cpp:
        (WebCore::Element::didMoveToNewDocument):
        (WebCore::Element::disconnectFromIntersectionObservers):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::~IntersectionObserver):
        (WebCore::IntersectionObserver::observe):
        (WebCore::IntersectionObserver::unobserve):
        (WebCore::IntersectionObserver::disconnect):
        (WebCore::IntersectionObserver::takeRecords):
        (WebCore::IntersectionObserver::targetDestroyed):
        (WebCore::IntersectionObserver::removeTargetRegistration):
        (WebCore::IntersectionObserver::removeAllTargets):
        (WebCore::IntersectionObserver::rootDestroyed):
        (WebCore::IntersectionObserver::appendQueuedEntry):
        (WebCore::IntersectionObserver::notify):
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::trackingDocument):
        (WebCore::IntersectionObserver:: const):
        (WebCore::IntersectionObserver::hasObservationTargets const):
        * page/IntersectionObserver.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfIntersectionObservers const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-08-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Paste is missing from callout bar when pasteboard only contains custom data
        https://bugs.webkit.org/show_bug.cgi?id=184271
        <rdar://problem/39256708>

        Reviewed by Ryosuke Niwa.

        Export a couple of WebCore functions for use in WebKit.

        * dom/Document.h:
        * platform/Pasteboard.h:

2018-08-17  Ryosuke Niwa  <rniwa@webkit.org>

        Pack booleans in Event into a bitfield
        https://bugs.webkit.org/show_bug.cgi?id=188713

        Reviewed by Daniel Bates.

        Use bitfields for booleans in Event class.

        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        (WebCore::Event::IsComposed): Added.
        (WebCore::Event): Packed booleans into a bitfield.

2018-08-17  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][iOS] Display suggestions for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=188669

        Reviewed by Tim Horton.

        Expose suggestedColors() in HTMLInputElement in order to allow the UIProcess to
        access the list of suggested colors from a <datalist> element.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestedColors const):
        * html/ColorInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::suggestedColors const):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::suggestedColors const):
        * html/InputType.h:
        * platform/ColorChooserClient.h:

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Clean up CSSSelectorList after r234825
        https://bugs.webkit.org/show_bug.cgi?id=188566

        Reviewed by Megan Gardner.

        This is responding to Darin's feedback in https://bugs.webkit.org/show_bug.cgi?id=188539

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::operator=): Deleted.
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::CSSSelectorList):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeComplexSelectorList):
        (WebCore::CSSSelectorParser::consumeCompoundSelectorList):

2018-08-17  Brent Fulgham  <bfulgham@apple.com>

        Remove Adobe SSO exception now that StorageAccess API is available
        https://bugs.webkit.org/show_bug.cgi?id=188710
        <rdar://problem/35056707>

        Reviewed by Alex Christensen.

        Remove custom quirk now that proper API exists to allow the same functions.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logSubresourceLoading): Remove unneeded quirk.
        (WebCore::resourceNeedsSSOQuirk): Deleted.

2018-08-17  Ryosuke Niwa  <rniwa@webkit.org>

        Replace canBubble and cancelable booleans in Event by enum classes
        https://bugs.webkit.org/show_bug.cgi?id=188692
        <rdar://problem/43411944>

        Rubber-stamped by Alex Christensen.

        Make these enum classes uint8_t.

        * dom/Event.h:

2018-08-17  Alex Christensen  <achristensen@webkit.org>

        Add some plumbing for safe browsing
        https://bugs.webkit.org/show_bug.cgi?id=188709

        Reviewed by Tim Horton.

        No change in behavior.  Just passing around unused booleans.
        We will need this for a way to load a page even though safe browsing says it's unsafe.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldSkipSafeBrowsingCheck):
        (WebCore::FrameLoadRequest::shouldSkipSafeBrowsingCheck):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadArchive):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::shouldReloadToHandleUnreachableURL):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadWithNavigationAction):
        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:
        * loader/ShouldSkipSafeBrowsingCheck.h: Added.

2018-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Replace canBubble and cancelable booleans in Event by enum classes
        https://bugs.webkit.org/show_bug.cgi?id=188692

        Reviewed by Alex Christensen.

        Replaced booleans indicating whether an event can bubble and an event is cancelable
        by two enum classes: CanBubble and IsCancelable.

        No new tests since there should be no behavioral changes.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp:
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
        * Modules/applepay/ApplePayPaymentAuthorizedEvent.cpp:
        (WebCore::ApplePayPaymentAuthorizedEvent::ApplePayPaymentAuthorizedEvent):
        * Modules/applepay/ApplePayPaymentMethodSelectedEvent.cpp:
        (WebCore::ApplePayPaymentMethodSelectedEvent::ApplePayPaymentMethodSelectedEvent):
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::didCancelPaymentSession):
        * Modules/applepay/ApplePayShippingContactSelectedEvent.cpp:
        (WebCore::ApplePayShippingContactSelectedEvent::ApplePayShippingContactSelectedEvent):
        * Modules/applepay/ApplePayShippingMethodSelectedEvent.cpp:
        (WebCore::ApplePayShippingMethodSelectedEvent::ApplePayShippingMethodSelectedEvent):
        * Modules/applepay/ApplePayValidateMerchantEvent.cpp:
        (WebCore::ApplePayValidateMerchantEvent::ApplePayValidateMerchantEvent):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        (WebCore::WebKitMediaKeyMessageEvent::WebKitMediaKeyMessageEvent):
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        (WebCore::WebKitMediaKeyNeededEvent::WebKitMediaKeyNeededEvent):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::addKeyTimerFired):
        (WebCore::WebKitMediaKeySession::sendError):
        * Modules/gamepad/GamepadEvent.cpp:
        (WebCore::GamepadEvent::GamepadEvent):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::connectionToServerLost):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onError):
        (WebCore::IDBOpenDBRequest::fireSuccessAfterVersionChangeCommit):
        (WebCore::IDBOpenDBRequest::fireErrorAfterVersionChangeCompletion):
        (WebCore::IDBOpenDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onError):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequestCompletionEvent.cpp:
        (WebCore::IDBRequestCompletionEvent::IDBRequestCompletionEvent):
        * Modules/indexeddb/IDBRequestCompletionEvent.h:
        (WebCore::IDBRequestCompletionEvent::create):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::fireOnComplete):
        (WebCore::IDBTransaction::fireOnAbort):
        * Modules/indexeddb/IDBVersionChangeEvent.cpp:
        (WebCore::IDBVersionChangeEvent::IDBVersionChangeEvent):
        * Modules/mediasession/MediaSession.cpp:
        (WebCore::MediaSession::skipToNextTrack):
        (WebCore::MediaSession::skipToPreviousTrack):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::scheduleEvent):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::scheduleEvent):
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::scheduleEvent):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::internalAddTrack):
        (WebCore::MediaStream::internalRemoveTrack):
        * Modules/mediastream/MediaStreamEvent.cpp:
        (WebCore::MediaStreamEvent::create):
        (WebCore::MediaStreamEvent::MediaStreamEvent):
        * Modules/mediastream/MediaStreamEvent.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::trackEnded):
        (WebCore::MediaStreamTrack::trackMutedChanged):
        * Modules/mediastream/MediaStreamTrackEvent.cpp:
        (WebCore::MediaStreamTrackEvent::create):
        (WebCore::MediaStreamTrackEvent::MediaStreamTrackEvent):
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/OverconstrainedErrorEvent.h:
        (WebCore::OverconstrainedErrorEvent::create):
        (WebCore::OverconstrainedErrorEvent::OverconstrainedErrorEvent):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::fireICECandidateEvent):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        (WebCore::PeerConnectionBackend::updateSignalingState):
        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::RTCDTMFToneChangeEvent):
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::didChangeReadyState):
        (WebCore::RTCDataChannel::didDetectError):
        (WebCore::RTCDataChannel::bufferedAmountIsDecreasing):
        * Modules/mediastream/RTCDataChannelEvent.cpp:
        (WebCore::RTCDataChannelEvent::create):
        (WebCore::RTCDataChannelEvent::RTCDataChannelEvent):
        * Modules/mediastream/RTCDataChannelEvent.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::updateIceGatheringState):
        (WebCore::RTCPeerConnection::updateIceConnectionState):
        (WebCore::RTCPeerConnection::updateConnectionState):
        (WebCore::RTCPeerConnection::scheduleNegotiationNeededEvent):
        * Modules/mediastream/RTCPeerConnectionIceEvent.cpp:
        (WebCore::RTCPeerConnectionIceEvent::create):
        (WebCore::RTCPeerConnectionIceEvent::RTCPeerConnectionIceEvent):
        * Modules/mediastream/RTCPeerConnectionIceEvent.h:
        * Modules/mediastream/RTCTrackEvent.cpp:
        (WebCore::RTCTrackEvent::create):
        (WebCore::RTCTrackEvent::RTCTrackEvent):
        * Modules/mediastream/RTCTrackEvent.h:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::addRemoteStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::addDataChannel):
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::dispatchShowEvent):
        (WebCore::Notification::dispatchClickEvent):
        (WebCore::Notification::dispatchCloseEvent):
        (WebCore::Notification::dispatchErrorEvent):
        * Modules/paymentrequest/MerchantValidationEvent.cpp:
        (WebCore::MerchantValidationEvent::MerchantValidationEvent):
        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::PaymentRequestUpdateEvent):
        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::postEvent):
        * Modules/speech/SpeechSynthesisEvent.cpp:
        (WebCore::SpeechSynthesisEvent::SpeechSynthesisEvent):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::setState):
        * Modules/webaudio/AudioProcessingEvent.cpp:
        (WebCore::AudioProcessingEvent::AudioProcessingEvent):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):
        * Modules/webaudio/OfflineAudioCompletionEvent.cpp:
        (WebCore::OfflineAudioCompletionEvent::OfflineAudioCompletionEvent):
        * Modules/websockets/CloseEvent.h:
        (WebCore::CloseEvent::CloseEvent):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didConnect):
        (WebCore::WebSocket::dispatchOrQueueErrorEvent):
        * Modules/webvr/VRDisplayEvent.cpp:
        (WebCore::VRDisplayEvent::VRDisplayEvent):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::dispatchAccessibilityEventWithType const):
        * accessibility/AccessibleSetValueEvent.cpp:
        (WebCore::AccessibleSetValueEvent::AccessibleSetValueEvent):
        * animation/AnimationPlaybackEvent.cpp:
        (WebCore::AnimationPlaybackEvent::AnimationPlaybackEvent):
        * dom/AbortSignal.cpp:
        (WebCore::AbortSignal::abort):
        * dom/AnimationEvent.cpp:
        (WebCore::AnimationEvent::AnimationEvent):
        * dom/BeforeLoadEvent.h:
        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::BeforeTextInsertedEvent):
        * dom/BeforeUnloadEvent.cpp:
        (WebCore::BeforeUnloadEvent::BeforeUnloadEvent):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::CompositionEvent):
        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildInsertionEvents):
        (WebCore::dispatchChildRemovalEvents):
        * dom/DeviceMotionEvent.cpp:
        (WebCore::DeviceMotionEvent::DeviceMotionEvent):
        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::DeviceOrientationEvent):
        * dom/Document.cpp:
        (WebCore::Document::setReadyState):
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::finishedParsing):
        (WebCore::Document::dispatchFullScreenChangeOrErrorEvent):
        (WebCore::Document::orientationChanged):
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueOrDispatchScrollEvent):
        (WebCore::DocumentEventQueue::enqueueScrollEvent):
        (WebCore::DocumentEventQueue::enqueueResizeEvent):
        * dom/DocumentEventQueue.h:
        * dom/Element.cpp:
        (WebCore::Element::dispatchMouseEvent):
        (WebCore::Element::dispatchFocusInEvent):
        (WebCore::Element::dispatchFocusOutEvent):
        (WebCore::Element::dispatchFocusEvent):
        (WebCore::Element::dispatchBlurEvent):
        (WebCore::Element::dispatchWebKitImageReadyEventForTesting):
        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::ErrorEvent):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        (WebCore::Event::create):
        * dom/Event.h:
        * dom/FocusEvent.cpp:
        (WebCore::FocusEvent::FocusEvent):
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::create):
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::MutationEvent):
        * dom/MutationEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent):
        (WebCore::Node::dispatchDOMActivateEvent):
        (WebCore::Node::dispatchInputEvent):
        * dom/OverflowEvent.cpp:
        (WebCore::OverflowEvent::OverflowEvent):
        * dom/PageTransitionEvent.cpp:
        (WebCore::PageTransitionEvent::PageTransitionEvent):
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent):
        * dom/ProgressEvent.cpp:
        (WebCore::ProgressEvent::ProgressEvent):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::dispatchErrorEvent):
        * dom/SecurityPolicyViolationEvent.h:
        * dom/SimulatedClick.cpp:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::TextEvent):
        * dom/TransitionEvent.cpp:
        (WebCore::TransitionEvent::TransitionEvent):
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        * dom/UIEvent.h:
        (WebCore::UIEvent::create):
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WebKitAnimationEvent.cpp:
        (WebCore::WebKitAnimationEvent::WebKitAnimationEvent):
        * dom/WebKitTransitionEvent.cpp:
        (WebCore::WebKitTransitionEvent::WebKitTransitionEvent):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        * editing/Editor.cpp:
        (WebCore::dispatchBeforeInputEvent):
        (WebCore::dispatchBeforeInputEvents):
        (WebCore::Editor::willApplyEditing const):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::dispatchSelectStart):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::dispatchPendingEvent):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::dispatchChangeEvent):
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareForSubmission):
        (WebCore::HTMLFormElement::reset):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::onSearch):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::dispatchPendingEvent):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::notifyAboutPlaying):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::layoutSizeChanged):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent):
        * html/HTMLSlotElement.cpp:
        (WebCore::HTMLSlotElement::dispatchSlotChangeEvent):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::dispatchPendingEvent):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selectionChanged):
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::didCompleteLoad):
        * html/MediaController.cpp:
        (WebCore::MediaController::scheduleEvent):
        * html/canvas/WebGLContextEvent.cpp:
        (WebCore::WebGLContextEvent::WebGLContextEvent):
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::dispatchContextLostEvent):
        (WebCore::WebGLRenderingContextBase::maybeRestoreContext):
        (WebCore::WebGLRenderingContextBase::dispatchContextChangedEvent):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::createScriptLoadEvent):
        * html/track/TrackEvent.cpp:
        (WebCore::TrackEvent::TrackEvent):
        * html/track/TrackEvent.h:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::scheduleTrackEvent):
        (WebCore::TrackListBase::scheduleChangeEvent):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchUnloadEvents):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::createApplicationCacheEvent):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::languagesChanged):
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/EventHandler.cpp:
        (WebCore::dispatchSelectStart):
        (WebCore::EventHandler::dispatchDragEvent):
        * page/EventSource.cpp:
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::abortConnectionAttempt):
        * page/FocusController.cpp:
        (WebCore::dispatchEventsOnWindowAndFocusedElement):
        (WebCore::FocusController::setFocusedFrame):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.cpp:
        (WebCore::networkStateChanged):
        * page/Performance.cpp:
        (WebCore::Performance::resourceTimingBufferFullTimerFired):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::enqueueEvent):
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::enqueueResizeEvent):
        (WebCore::VisualViewport::enqueueScrollEvent):
        * storage/StorageEvent.cpp:
        (WebCore::StorageEvent::StorageEvent):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::sendSVGLoadEventIfPossible):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::notifyFinished):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::dispatchPendingEvent):
        * workers/Worker.cpp:
        (WebCore::Worker::notifyFinished):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::notifyNetworkStateChange):
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::ExtendableEvent):
        * workers/service/ExtendableEvent.h:
        * workers/service/ExtendableMessageEvent.cpp:
        (WebCore::ExtendableMessageEvent::ExtendableMessageEvent):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleTaskToFireControllerChangeEvent):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::scheduleTaskToFireUpdateFoundEvent):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::notifyNetworkStateChange):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2018-08-17  Yusuke Suzuki  <yusukesuzuki@slowstart.org> and Fujii Hironori  <Hironori.Fujii@sony.com>

        [JSC] Add GPRReg::InvalidGPRReg and FPRReg::InvalidFPRReg
        https://bugs.webkit.org/show_bug.cgi?id=188589

        Reviewed by Mark Lam.
        And reviewed by Yusuke Suzuki for Hironori's change.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):
        * html/HTMLKeygenElement.cpp:
        Remove `using namespace WebCore` not to introduce `operator+/-` which makes the resolution of `operator+/-` for RegisterID ambiguous.

2018-08-17  Philippe Normand  <philn@igalia.com>

        [GStreamer] reduce position queries frequency
        https://bugs.webkit.org/show_bug.cgi?id=188645

        Reviewed by Xabier Rodriguez-Calvar.

        There is no need to perform dozens of position queries per second.
        One every 300ms is enough.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2018-08-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [SOUP] Handle OAuth authentication after r234912
        https://bugs.webkit.org/show_bug.cgi?id=188651

        Reviewed by Carlos Garcia Campos.

        Update this switch to consider the new OAuth enum value added in r234912. I suppose OAuth is
        used for HTTP Auth now. It will be a one-time compatibility break as passwords previously
        stored with type "Unknown" will no longer be accessible.

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::authTypeFromProtectionSpaceAuthenticationScheme):

2018-08-17  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Never return an uninitialized ImageGStreamer object.
        https://bugs.webkit.org/show_bug.cgi?id=188305

        Reviewed by Philippe Normand.

        The single caller was already checking for a null return value, so
        make that check actually do something. Also remove the null-check on
        the return value of image(), which asserted that it would never return
        null.

        Test: fast/canvas/canvas-createPattern-video-loading.html

        * platform/graphics/gstreamer/ImageGStreamer.h:
        (WebCore::ImageGStreamer::createImage): Return null if m_image wasn't created.
        (WebCore::ImageGStreamer::image): Return a reference.
        (WebCore::ImageGStreamer::rect): Always assert that m_image is present.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Update for new signature.

2018-08-17  Philippe Normand  <philn@igalia.com>

        [GStreamer] Enable fpsdisplaysink only when MEDIA_STATISTICS is enabled
        https://bugs.webkit.org/show_bug.cgi?id=188648

        Reviewed by Xabier Rodriguez-Calvar.

        The fpsdisplaysink is useful only when MEDIA_STATISTICS is turned on.
        The text overlay is now enabled when GST_DEBUG tracing is enabled for the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):

2018-08-17  Philippe Normand  <philn@igalia.com>

        [GStreamer][MSE] Disable last-sample support in AppendPipeline
        https://bugs.webkit.org/show_bug.cgi?id=188649

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline): This property isn't
        used by the append pipeline. So as a micro-optimization, it is now
        disabled.

2018-08-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: support breakpoints for arbitrary event names
        https://bugs.webkit.org/show_bug.cgi?id=183118

        Reviewed by Joseph Pecoraro.

        Tests: inspector/dom-debugger/event-breakpoints.html
               inspector/dom-debugger/event-breakpoints-with-navigation.html

        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):

2018-08-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bug fix on deleting cookies when Max-Age is set to zero.
        https://bugs.webkit.org/show_bug.cgi?id=188617

        Reviewed by Alex Christensen.

        Delete cookie if Max-Age is set to zero in Set-Cookie. Original implementation was
        compared using "less than", but it must be "less than or equal" to zero.

        Tests: http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior.html

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::setCookie):

2018-08-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement deleteAllCookies()
        https://bugs.webkit.org/show_bug.cgi?id=188612

        Reviewed by Alex Christensen.

        deleteAllCookies() was not implemented. Connect the interface to the implementation.

        Tests: http/tests/cookies/simple-cookies-expired.html
               http/tests/cookies/simple-cookies-max-age.html

        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::deleteAllCookies const):

2018-08-16  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r234930): Don't embed a #if in an ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=188680

        Reviewed by Tim Horton.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleDrag):
        Simplify the ASSERT -- it seems we just want to know that DragSourceActionSelection and exactly one other DragSourceAction is set. 

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Remove unused allowScriptsToCloseWindows setting
        https://bugs.webkit.org/show_bug.cgi?id=188602

        Reviewed by Simon Fraser.

        No change in behaviour. It was always false.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        * page/Settings.yaml:

2018-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Custom element constructor doesn't use HTMLElement in new.target's realm
        https://bugs.webkit.org/show_bug.cgi?id=188634

        Reviewed by Keith Miller.

        Fixed the bug that HTMLElement's constructor was constructing an element of its own realm
        instead of the realm of new.target. This results in the JS wrapper created for the element
        belonging to the global object of the HTMLElement constructor which was invoked instead of
        the global object of new.target as specified in:
        https://html.spec.whatwg.org/multipage/dom.html#html-element-constructors

        In particular, step 9.2. specifies that we "perform element.[[SetPrototypeOf]](prototype)."
        where prototype is the result of Get(NewTarget, "prototype") in step 7.

        WebKit's new behavior matches that of Chrome and Firefox.

        Test: imported/w3c/web-platform-tests/custom-elements/htmlconstructor/newtarget.html

        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement): 

2018-08-16  Aditya Keerthi  <akeerthi@apple.com>

        Unreviewed, fix the watchOS build after r188464.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::setColor):

2018-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Custom element doesn't invalidate its style when :defined rule starts to apply
        https://bugs.webkit.org/show_bug.cgi?id=188637

        Reviewed by Antti Koivisto.

        Fixed the bug by invalidating the subtree when a custom element gets defined.

        Test: fast/custom-elements/defined-update-style.html

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

2018-08-16  Youenn Fablet  <youenn@apple.com>

        Change the input camera in the sources & outputs example on Safari (11) with M.Way camera
        https://bugs.webkit.org/show_bug.cgi?id=187756
        <rdar://problem/42332178>

        Reviewed by Eric Carlson.

        Covered by manual testing.

        640x480x30fps is added as ideal constraints to getUserMedia if none other is added to provide consistent behavior.
        Some cameras do not support 30fps as they have discrete frame rate ranges.
        Before the patch, we were rejecting getUserMedia promise if the 'ideal' frameRate was not supported.
        After the patch, we do not check whether frame rate is supported if it is not mandatory.
        At capture time, we will still try to apply frame rate change and if not supported, the frame rate will not be set to 30 fps.

        While we could surface discrete width/height/frame rate ranges, it seems best to fix the issue this way.
        In the future, we might implement video interpolation for width/height/framerate at WebCore level.

        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate):
        (WebCore::RealtimeMediaSource::supportsConstraint const):
        (WebCore::RealtimeMediaSource::supportsConstraints):

2018-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Perform a microtask checkpoint before creating a custom element
        https://bugs.webkit.org/show_bug.cgi?id=188189
        <rdar://problem/42843022>

        Reviewed by Geoffrey Garen.

        Fixed the bug that the HTML parser was not performing a microtask checkpoint prior to synchronously constructing
        a custom element in the concept to create an element for a token:
        https://html.spec.whatwg.org/multipage/parsing.html#creating-and-inserting-nodes:perform-a-microtask-checkpoint

        Also added a microtask checkpoint before dispatching DOMContentLoaded to work around webkit.org/b/82931 since
        scheduling a task to fire a DOMContentLoaded event in Document::finishedParsing as the HTML5 spec mandates
        is a long standing bug with a lot of implications, which is completely outside the scope of this bug fix:
        https://html.spec.whatwg.org/multipage/parsing.html#stop-parsing

        Test: fast/custom-elements/perform-microtask-checkpoint-before-construction.html

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing): Perform a microtask checkpoint before dispatching DOMContentLoaded here as
        a workaround for webkit.org/b/82931.
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Perform a microtask checkpoint here to fix the bug.

2018-08-16  Alex Christensen  <achristensen@webkit.org>

        Re-introduce assertion removed in r234890
        https://bugs.webkit.org/show_bug.cgi?id=188611

        Reviewed by Geoffrey Garen.

        The assertion was failing because Vector<String>::operator== was using memcmp,
        which failed to consider different instances of equal Strings equal.  Added an
        API test and this assertion, which now succeeds.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):

2018-08-15  Jer Noble  <jer.noble@apple.com>

        Add Experimental Feature support for SourceBuffer.changeType()
        https://bugs.webkit.org/show_bug.cgi?id=188626

        Reviewed by Eric Carlson.

        Tests: imported/w3c/web-platform-tests/media-source/mediasource-changetype-play.html
               imported/w3c/web-platform-tests/media-source/mediasource-changetype.html

        The WICG is incubating a new proposal to allow clients to switch between streams
        with different codecs within the same SourceBuffer. The proposal is being tracked
        by <https://github.com/w3c/media-source/issues/155> and the proposed spec change
        is available at <https://rawgit.com/wicg/media-source/codec-switching/index.html>.

        Drive-by fix: One of the wpt tests uses a .mp3 file to test SourceBuffer switching.
        The AVStreamDataParser does not necessarily emit every frame appended, and after a
        new init segment is appended, it's possible that frames from the previous media
        segment will be emitted. This causes an error condition to occur, due to an added
        check in the spec for a new flag. When the SourceBuffer asks its private implementation
        to reset the parser state, since there's no API on AVStreamDataParser to actually
        reset the parser state, just set a flag to drop all emitted buffers until the next
        initialization segment is parsed.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::contentTypeShouldGenerateTimestamps):
        (WebCore::MediaSource::setDurationInternal):
        (WebCore::MediaSource::addSourceBuffer):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::changeType):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        (WebCore::SourceBuffer::validateInitializationSegment):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:
        * page/Settings.yaml:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::canSwitchToType):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::resetParserState):
        (WebCore::SourceBufferPrivateAVFObjC::canSwitchToType):

2018-08-16  Christopher Reid  <chris.reid@sony.com>

        [Curl] Not all Cookie database files are deleted on corruption
        https://bugs.webkit.org/show_bug.cgi?id=185873

        Reviewed by Fujii Hironori.

        No new tests.

        Delete the cookie database file and the corruption flag file when corruption is detected.
        Adding a quick integrity check in case it can catch anything when opening the database.
        Removing PRAGMA temp_store = MEMORY and PRAGMA journal_mode = WAL as they are set in SQLiteDatabase::open.

        * platform/network/curl/CookieJarDB.cpp:

2018-08-16  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::ImageBackingTextureMapperImpl
        https://bugs.webkit.org/show_bug.cgi?id=188550

        Reviewed by Carlos Garcia Campos.

        Add the Nicosia::ImageBackingTextureMapperImpl class, the
        TextureMapper-specific implementation that will extend the ImageBacking
        class.

        This class will be used to contain and manage updates for layers that
        are backed by image objects. The CoordinatedGraphicsLayer instance will
        use the LayerState object to track the currently-presented image objects
        and to store the latest update of these objects. The Update struct
        contains information about the current visibility of the image in the
        layer tree as well as the Nicosia::Buffer object containing the painted
        image data that's to be presented on the screen.

        During the layer flush the flushUpdate() method will move the current
        update data into the pending position, from which this data will be
        gathered by the composition component through the takeUpdate() method
        and used to update the CoordinatedBackingStore object that's kept in
        the CompositionState object on this impl class.

        This will be deployed for use in the CoordinatedGraphicsLayer at a later
        stage as it requires a larger rework in both CoordinatedGraphicsLayer as
        well as the CoordinatedGraphicsScene classes.

        The implementation itself differs from the current image backing support
        in CoordinatedGraphicsLayer and CompositingCoordinator by abandoning the
        idea of sharing single image backings between layers that might be
        backed by identical Image objects. We thus end up trading any memory
        consumption benefit in these scenarios for a much simplified
        implementation. Overall this area needs more research both in figuring
        out whether there's worthy improvements in grouping image backings, as
        well as investigating whether it's possible to avoid additional image
        rasterization by just leveraging direct pixel data via the
        NativeImagePtr object.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.cpp: Added.
        (Nicosia::ImageBackingTextureMapperImpl::createFactory):
        (Nicosia::ImageBackingTextureMapperImpl::flushUpdate):
        (Nicosia::ImageBackingTextureMapperImpl::takeUpdate):
        * platform/graphics/nicosia/texmap/NicosiaImageBackingTextureMapperImpl.h: Added.

2018-08-16  Aditya Keerthi  <akeerthi@apple.com>

        Support drag-and-drop for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=188464

        Reviewed by Wenson Hsieh.

        input[type=color] should support native drag and drop on both macOS and iOS.

        Added methods to Pasteboard and PlatformPasteboard to enable colors to be read
        from and written to the pasteboard. On macOS, colors are managed through the
        NSColorPboardType, whereas on iOS, colors are managed through the
        'com.apple.uikit.color' identifier.

        DragSourceActionColor was added to the list of DragSourceActions to identify
        when a color input is being dragged.

        Tests: editing/pasteboard/drag-and-drop-color-input-events.html
               editing/pasteboard/drag-and-drop-color-input.html

        * page/DragActions.h:
        * page/DragController.cpp:
        (WebCore::DragController::dragEnteredOrUpdated):
        (WebCore::isEnabledColorInput):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::canProcessDrag):
        (WebCore::DragController::draggableElement const):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dragHysteresisExceeded const):
        (WebCore::EventHandler::handleDrag):
        * page/EventHandler.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::updateSupportedTypeIdentifiersForDragHandlingMethod const):
        * platform/DragData.h:
        * platform/DragImage.cpp:
        (WebCore::DragImage::operator=):
        * platform/DragImage.h: Added the visiblePath property to DragImage, in order for
        us to be able to clip images in the UITargetedDragPreview on iOS.
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):
        * platform/Pasteboard.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::createDragImageForColor):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::write):
        * platform/ios/DragImageIOS.mm:
        (WebCore::createDragImageForColor):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::color):
        (WebCore::PlatformPasteboard::setColor):
        * platform/mac/DragDataMac.mm:
        (WebCore::colorPasteboardType):
        (WebCore::DragData::containsCompatibleContent const):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForColor): Draw a rounded rectangle with a fill color
        matching the value of the dragged color input. The rendered image is designed to
        mimic the preview shown when dragging an NSColorWell.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::write):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setColor):
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::write):
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::write):

2018-08-16  Zalan Bujtas  <zalan@apple.com>

        [lFC][Floating] Add estimated margin top computation.
        https://bugs.webkit.org/show_bug.cgi?id=188619

        Reviewed by Antti Koivisto.

        In order to figure out whether a box should avoid a float, we need to know the final positions of both (ignore relative positioning for now).
        In block formatting context the final position for a normal flow box includes
        1. the static position and
        2. the corresponding (non)collapsed margins.
        Now the vertical margins are computed when all the descendants are finalized, because the margin values might be depending on the height of the box
        (and the height might be based on the content).
        So when we get to the point where we intersect the box with the float to decide if the box needs to move, we don't yet have the final vertical position.

        The idea here is that as long as we don't cross the block formatting context boundary, we should be able to pre-compute the final top margin.
        (if this holds true for all the cases, the estimated prefix could be removed and just use marginTop() instead.)

        Covered by existing block-only tests.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
        (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTopForAncestors const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForFloatClear const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginTop):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidTop):
        (WebCore::Display::Box::setHasValidLeft):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::left const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::setTopLeft):
        (WebCore::Display::Box::setTop):
        (WebCore::Display::Box::setLeft):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::setEstimatedMarginTop):
        (WebCore::Display::Box::estimatedMarginTop const):

2018-08-16  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Display::Box interface should reflect that padding is optional.
        https://bugs.webkit.org/show_bug.cgi?id=188630

        Reviewed by Antti Koivisto.

        Certain type of boxes can't have paddings (see Layout::Box::isPaddingApplicable).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::contentBoxTop const):
        (WebCore::Display::Box::contentBoxLeft const):
        (WebCore::Display::Box::setPadding):
        (WebCore::Display::Box::paddingTop const):
        (WebCore::Display::Box::paddingLeft const):
        (WebCore::Display::Box::paddingBottom const):
        (WebCore::Display::Box::paddingRight const):

2018-08-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add showLayoutTree() that does not require LayoutContext.
        https://bugs.webkit.org/show_bug.cgi?id=188631

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::formattingContextRoot const):
        (WebCore::Layout::Box::initialContainingBlock const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::showLayoutTree):
        (WebCore::Layout::TreeBuilder::showLayoutTree): Deleted.
        * layout/layouttree/LayoutTreeBuilder.h:

2018-08-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Tree builder should construct block and inline containers based on the display type.
        https://bugs.webkit.org/show_bug.cgi?id=188632

        Reviewed by Antti Koivisto.

        Inline elements can also construct RenderBlock renderers (inline-bloc etc), so use the display type instead when deciding what type of container to construct.   

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

2018-08-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Bail out of subtree verification when trees are out of sync.
        https://bugs.webkit.org/show_bug.cgi?id=188633

        Reviewed by Antti Koivisto.

        There's no point of trying to match geometry when subtrees are out of sync.
        They get out of sync when the render tree has unsupported boxes (see LayoutTreeBuilder).

        * layout/Verification.cpp:
        (WebCore::Layout::verifyAndOutputSubtree):

2018-08-16  Antti Koivisto  <antti@apple.com>

        Use OptionSet for ActivityState::Flags
        https://bugs.webkit.org/show_bug.cgi?id=188554

        Reviewed by Brent Fulgham.

        More typesafe flags.

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::activityStateDidChange):
        * Modules/geolocation/GeolocationController.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::activityStateDidChange):
        * html/canvas/WebGLRenderingContextBase.h:
        * page/ActivityState.cpp:
        (WebCore::operator<<):
        (WebCore::activityStateFlagsToString): Deleted.
        * page/ActivityState.h:
        (WebCore::ActivityState::allFlags):
        * page/ActivityStateChangeObserver.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActivityState):
        (WebCore::FocusController::setActive):
        * page/FocusController.h:
        (WebCore::FocusController::isActive const):
        (WebCore::FocusController::isFocused const):
        (WebCore::FocusController::contentIsVisible const):
        * page/Page.cpp:
        (WebCore::pageInitialActivityState):
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::updateTimerThrottlingState):
        (WebCore::Page::setActivityState):
        (WebCore::Page::isVisibleAndActive const):
        (WebCore::Page::isWindowActive const):
        (WebCore::Page::setIsVisible):
        * page/Page.h:
        (WebCore::Page::activityState const):
        (WebCore::Page::isVisible const):
        (WebCore::Page::isInWindow const):
        * page/PerformanceMonitor.cpp:
        (WebCore::activityStateForCPUSampling):
        (WebCore::PerformanceMonitor::activityStateChanged):
        * page/PerformanceMonitor.h:
        * platform/text/cocoa: Added.

2018-08-15  Ansh Shukla  <ansh_shukla@apple.com>

        NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
        https://bugs.webkit.org/show_bug.cgi?id=186870
        <rdar://problem/41314410>

        Reviewed by Alex Christensen.

        Add the ProtectionSpaceAuthenticationSchemeOAuth type.

        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::isPasswordBased const): Return yes because the oauth challenge
        expects a token in return.
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::scheme):
        (WebCore::ProtectionSpace::nsSpace const):

2018-08-15  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        Added functionality to FileHandle so that it can lock a file while open.
        Added a function to FileSystem to delete non empty directories.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::close):
        * platform/FileHandle.h:
        * platform/FileSystem.h:
        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::FileSystem::deleteNonEmptyDirectory):

2018-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Can't share an app on AppStore to WeChat due to a release assert
        https://bugs.webkit.org/show_bug.cgi?id=188621
        <rdar://problem/43343976>

        Reviewed by Geoffrey Garen.

        Disable the thread safety check when the app is not linked on or after iOS 12 since this release assert
        is getting hit by third party applications on iOS in UI process.

        * platform/Timer.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck): Added a SDK check.

2018-08-15  Christopher Reid  <chris.reid@sony.com>

        [Curl] Implement default cookie path handling correctly as outlined in RFC6265.
        https://bugs.webkit.org/show_bug.cgi?id=188609

        Reviewed by Alex Christensen.

        Curl implementation of default cookie path was wrong so that some cookies cannot be accessible.
        It should be generated as outlined in: https://tools.ietf.org/html/rfc6265#section-5.1.4

        Tests: http/tests/cookies/http-get-cookie-set-in-js.html

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::setCookie):
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::defaultPathForURL):
        * platform/network/curl/CookieUtil.h:

2018-08-15  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        TextFieldInputs that have an associated datalist element should be drawn as
        combo boxes. However, we cannot use NSComboBox for this control, as NSComboBox
        is not height-resizable. Furthermore, the input should also be able to contain
        additional elements, such as the stepper for type=number and the cancel button
        for type=search. For these reasons, we draw a button at the end of the input,
        mimicking appearance of a combo box.

        The list-button -webkit-appearance value was added to display the new button.

        Tests: fast/forms/datalist/datalist-searchinput-appearance.html
               fast/forms/datalist/datalist-textinput-appearance.html

        * Resources/ListButtonArrow.png: Added.
        * Resources/ListButtonArrow@2x.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/html.css:
        (input::-webkit-list-button):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataListButtonElement const):
        * html/HTMLInputElement.h:
        * html/InputType.h:
        (WebCore::InputType::dataListButtonElement const):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::needsContainer const):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        (WebCore::TextFieldInputType::listAttributeTargetChanged):
        (WebCore::TextFieldInputType::dataListButtonElement const):
        (WebCore::TextFieldInputType::dataListButtonElementWasClicked):
        (WebCore::TextFieldInputType::didCloseSuggestions):
        * html/TextFieldInputType.h:
        * html/shadow/DataListButtonElement.cpp: Added.
        (WebCore::DataListButtonElement::create):
        (WebCore::DataListButtonElement::DataListButtonElement):
        (WebCore::DataListButtonElement::~DataListButtonElement):
        (WebCore::DataListButtonElement::defaultEventHandler):
        * html/shadow/DataListButtonElement.h: Added.
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustListButtonStyle const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (-[WebListButtonCell drawWithFrame:inView:]):
        (WebCore::RenderThemeMac::paintListButtonForInput):
        (WebCore::RenderThemeMac::adjustListButtonStyle const):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::listButton const):

2018-08-15  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234870.

        The test introduced with this change is a flaky failure.

        Reverted changeset:

        "NSURLAuthenticationMethodOAuth challenges are surfaced to
        clients in -didReceiveAuthenticationChallenge as
        NSURLAuthenticationMethodDefault"
        https://bugs.webkit.org/show_bug.cgi?id=186870
        https://trac.webkit.org/changeset/234870

2018-08-14  Ryosuke Niwa  <rniwa@webkit.org>

        connectedCallback is invoked by the HTML parser after child nodes had been inserted
        https://bugs.webkit.org/show_bug.cgi?id=183931
        <rdar://problem/38843548>

        Reviewed by Alex Christensen.

        Invoke the custom element reactions after constructing and inserting a custom element as specifed in step 3.3 of:
        https://html.spec.whatwg.org/multipage/parsing.html#insert-a-foreign-element

        The bug here was that HTMLConstructionSite::insertCustomElement uses attachLater so that even though the task
        to insert the custom element was created, it didn't get executed until after CustomElementReactionStack in
        HTMLDocumentParser::runScriptsForPausedTreeBuilder had been popped off of the stack.

        Test: imported/w3c/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertCustomElement): Fixed the bug by manually executing the scheduled tasks.
        This will enqueue any custom element reactions while CustomElementReactionStack in runScriptsForPausedTreeBuilder
        is still in the stack.

2018-08-15  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Don't send Content-Type header for POST request when body is null.
        https://bugs.webkit.org/show_bug.cgi?id=188588

        Reviewed by Youenn Fablet.

        The Content-Type header was sent by libcurl automatically. Suppress that behavior
        when body is null.

        Tests: http/tests/xmlhttprequest/methods.html

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupPOST):

2018-08-15  Alex Christensen  <achristensen@webkit.org>

        Remove failing assertion introduced in r234873
        https://bugs.webkit.org/show_bug.cgi?id=188581

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        The assertion is correct but failing because VectorTraits<String> is incorrect.
        I'll re-add it and fix VectorTraits<String> in a separate patch.

2018-08-15  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment SPI] Remove attachment display mode options
        https://bugs.webkit.org/show_bug.cgi?id=188596

        Reviewed by Dan Bernstein.

        Remove the ability to specify an "in-place" or "icon" representation for attachment elements, as well as logic
        needed to allow an attachment element to render image or video elements in a shadow root. The requirements that
        initially drove this effort are obviated by r227068, which allows Mail to intercept and provide a custom scheme
        for images inserted into the document via rich editing operations.

        Removed some existing API tests in _WKAttachmentTests that exercised this functionality.

        * editing/Editor.cpp:
        (WebCore::Editor::insertAttachmentFromFile):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        * html/AttachmentTypes.h:
        (WebCore::AttachmentDisplayOptions::encode const):
        (WebCore::AttachmentDisplayOptions::decode):

        Remove logic for encoding the attachment display mode. While this leaves AttachmentDisplayOptions completely
        empty, I haven't removed AttachmentDisplayOptions as well in this patch, since it's not clear that we won't be
        needing any mechanism for influencing the display of attachment elements inserted via native SPI.

        (): Deleted.
        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::createElementRenderer):
        (WebCore::HTMLAttachmentElement::setFile):
        (WebCore::HTMLAttachmentElement::parseAttribute):
        (WebCore::HTMLAttachmentElement::invalidateShadowRootChildrenIfNecessary): Deleted.
        (WebCore::HTMLAttachmentElement::attachmentRenderer const): Deleted.
        (WebCore::HTMLAttachmentElement::updateDisplayMode): Deleted.
        (WebCore::HTMLAttachmentElement::ensureInnerImage): Deleted.
        (WebCore::HTMLAttachmentElement::ensureInnerVideo): Deleted.
        (WebCore::HTMLAttachmentElement::innerImage const): Deleted.
        (WebCore::HTMLAttachmentElement::innerVideo const): Deleted.
        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary): Deleted.

        Remove logic for building the shadow root to house inline media elements.

        * html/HTMLAttachmentElement.h:

        The renderer of the attachment element is once again always a `RenderAttachment`, so we can remove
        `attachmentRenderer()` altogether and revert to overriding `renderer()` to return a `RenderAttachment*`.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * rendering/RenderAttachment.h:
        (WebCore::HTMLAttachmentElement::renderer const):

2018-08-15  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Do not hold a strong reference to the root element
        https://bugs.webkit.org/show_bug.cgi?id=188575

        Reviewed by Simon Fraser.

        Make IntersectionObserver have only a raw pointer to its root element rather than
        a reference, so that an otherwise-unreachable root isn't kept alive. Add logic to
        to clear this pointer when the root element gets deleted.

        Test: intersection-observer/root-element-deleted.html

        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::disconnectFromIntersectionObservers):
        (WebCore::Element::ensureIntersectionObserverData):
        (WebCore::Element::intersectionObserverData):
        * dom/Element.h:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::intersectionObserverData):
        (WebCore::ElementRareData::setIntersectionObserverData):
        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::~IntersectionObserver):
        (WebCore::IntersectionObserver::rootDestroyed):
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::root const):

2018-08-14  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::BackingStoreTextureMapperImpl
        https://bugs.webkit.org/show_bug.cgi?id=188548

        Reviewed by Carlos Garcia Campos.

        Add the Nicosia::BackingStoreTextureMapperImpl class, the
        TextureMapper-specific implementation that will extend the BackingStore
        class.

        Purpose of this class is to manage content of painted layers. In the
        LayerState object that will be exposed to the CoordinatedGraphicsLayer
        owner we keep the current and previous TiledBackingStore objects that
        will be used for painting. A TileUpdate object is used to store all tile
        creation, removal and update changes that happen during the painting
        that's performed during the CoordinatedGraphicsLayer flush.

        At the point of synchronization under the Nicosia::Scene object, these
        updates will be moved over to the pending TileUpdate object that will
        then be accessed during the composition step. For that purpose we keep
        in the CompositionState member object a reference to the
        CoordinatedBackingStore object that will get updated with the tile
        creation, removal and update changes (if there are any). The composition
        step will use the takeUpdate() method to retrieve all these changes and
        apply them outside of the point of synchronization (avoiding this sync
        step to take too long).

        This will be integrated into the CoordinatedGraphicsLayer class at a
        later point, when the switch to the new infrastructure can be made in
        one go.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.cpp: Added.
        (Nicosia::BackingStoreTextureMapperImpl::createFactory):
        (Nicosia::BackingStoreTextureMapperImpl::tiledBackingStoreHasPendingTileCreation):
        (Nicosia::BackingStoreTextureMapperImpl::createTile):
        (Nicosia::BackingStoreTextureMapperImpl::updateTile):
        (Nicosia::BackingStoreTextureMapperImpl::removeTile):
        (Nicosia::BackingStoreTextureMapperImpl::flushUpdate):
        (Nicosia::BackingStoreTextureMapperImpl::takeUpdate):
        * platform/graphics/nicosia/texmap/NicosiaBackingStoreTextureMapperImpl.h: Added.

2018-08-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r234874 and r234876.

        WinCairo port can't compile

        Reverted changesets:

        "[JSC] Add GPRReg::InvalidGPRReg and FPRReg::InvalidFPRReg"
        https://bugs.webkit.org/show_bug.cgi?id=188589
        https://trac.webkit.org/changeset/234874

        "Unreviewed, attempt to fix CLoop build"
        https://bugs.webkit.org/show_bug.cgi?id=188589
        https://trac.webkit.org/changeset/234876

2018-08-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Add support for negative clearance.
        https://bugs.webkit.org/show_bug.cgi?id=188555

        Reviewed by Simon Fraser.

        1. Compute clearance to avoid float(s) (border box needs to avoid floats)
        2. Reset vertical margins to non-collapsed values.
        4. Adjust clearance with the new margins.
        5. Take the adjusted clearance and move the box vertically if needed.

        Test: fast/block/block-only/margin-collapse-with-clearance.html

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapBoxToAncestor):
        (WebCore::Layout::FormattingContext::mapTopLeftToAncestor):
        (WebCore::Layout::FormattingContext::mapCoordinateToAncestor):
        (WebCore::Layout::FormattingContext::mapToAncestor): Deleted.
        * layout/FormattingContext.h:
        * layout/LayoutUnits.h:
        (WebCore::Layout::Position::Position):
        (WebCore::Layout::Position::moveBy):
        * layout/displaytree/DisplayBox.h:

2018-08-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed, rolling out r234859.

        Windows ports can't compile

        Reverted changeset:

        "Use a Variant instead of a union in CSSSelector"
        https://bugs.webkit.org/show_bug.cgi?id=188559
        https://trac.webkit.org/changeset/234859

2018-08-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] Add GPRReg::InvalidGPRReg and FPRReg::InvalidFPRReg
        https://bugs.webkit.org/show_bug.cgi?id=188589

        Reviewed by Mark Lam.

        No behavior change.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::modulo):

2018-08-14  Alex Christensen  <achristensen@webkit.org>

        isValidCSSSelector is unsafe to be called from a non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=188581
        <rdar://problem/40517358>

        Reviewed by Sam Weinig.

        Parsing and determining whether the css selectors are valid is fast enough to do before
        hopping to the background thread for the slow NFA/DFA operations and writing to disk.
        Doing it on the main thread avoids the thread safety issues in the CSSParser's use of strings.

        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionCompiler.h:
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::isValidCSSSelector):
        (WebCore::ContentExtensions::loadEncodedRules):
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionParser.h:
        * contentextensions/ContentExtensionRule.cpp:
        (WebCore::ContentExtensions::Trigger::isolatedCopy const):
        (WebCore::ContentExtensions::Action::isolatedCopy const):
        * contentextensions/ContentExtensionRule.h:
        (WebCore::ContentExtensions::Trigger::isEmpty const):
        (WebCore::ContentExtensions::Trigger::operator== const):
        (WebCore::ContentExtensions::Action::Action):
        (WebCore::ContentExtensions::ContentExtensionRule::isolatedCopy const):
        (WebCore::ContentExtensions::ContentExtensionRule::operator== const):
        (WebCore::ContentExtensions::vectorIsolatedCopy):

2018-08-14  Ansh Shukla  <ansh_shukla@apple.com>

        NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault
        https://bugs.webkit.org/show_bug.cgi?id=186870
        <rdar://problem/41314410>

        Reviewed by Alex Christensen.

        Add the ProtectionSpaceAuthenticationSchemeOAuth type.

        * platform/network/ProtectionSpaceBase.cpp:
        (WebCore::ProtectionSpaceBase::isPasswordBased const): Return yes because the oauth challenge
        expects a token in return.
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/cocoa/ProtectionSpaceCocoa.mm:
        (WebCore::scheme):
        (WebCore::ProtectionSpace::nsSpace const):

2018-08-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement platform default timeout interval.
        https://bugs.webkit.org/show_bug.cgi?id=188565

        Reviewed by Alex Christensen.

        Curl port didn't implement platform default timeout interval. It treated
        zero value for timeout interval as no timeout.

        Add platform dependent timeout interval into CurlContext and use that if
        timeout and default timeout aren't supplied.

        Tests: http/tests/xmlhttprequest/on-network-timeout-error-during-preflight.html

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setTimeout):
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::defaultTimeoutInterval const):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::timeoutInterval const):
        (WebCore::CurlRequest::didCompleteTransfer):
        * platform/network/curl/CurlRequest.h:

2018-08-14  Alex Christensen  <achristensen@webkit.org>

        Use a Variant instead of a union in CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=188559

        Reviewed by Antti Koivisto.

        No change in behavior. This just makes some of the existing problems more obvious and easy to fix.

        I moved m_caseInsensitiveAttributeValueMatching to RareData because it's only used with RareData.
        I only have m_isForPage when assertions are enabled because it's only used for an assertion.
        The rest is pretty straightforward translating union syntax to Variant syntax.
        I use RefPtr for now where I could use Ref because it's never null to make copying easier, but that's temporary.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::createRareData):
        (WebCore::CSSSelector::setAttribute):
        (WebCore::CSSSelector::setArgument):
        (WebCore::CSSSelector::setLangArgumentList):
        (WebCore::CSSSelector::setSelectorList):
        (WebCore::CSSSelector::setNth):
        (WebCore::CSSSelector::matchNth const):
        (WebCore::CSSSelector::nthA const):
        (WebCore::CSSSelector::nthB const):
        (WebCore::CSSSelector::RareData::RareData):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::argument const):
        (WebCore::CSSSelector::langArgumentList const):
        (WebCore::CSSSelector::selectorList const):
        (WebCore::CSSSelector::attribute const):
        (WebCore::CSSSelector::attributeCanonicalLocalName const):
        (WebCore::CSSSelector::setValue):
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::tagQName const):
        (WebCore::CSSSelector::tagLowercaseLocalName const):
        (WebCore::CSSSelector::value const):
        (WebCore::CSSSelector::serializingValue const):
        (WebCore::CSSSelector::attributeValueMatchingIsCaseInsensitive const):
        (WebCore::CSSSelector::RareData::create): Deleted.
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSParserSelector.h:

2018-08-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unhandled Promise Rejection logging in workers should not emit ErrorEvent to host Worker object
        https://bugs.webkit.org/show_bug.cgi?id=188551

        Reviewed by Youenn Fablet.

        Previously we dispatched ErrorEvent on the Worker object of the host side when the unhandled promise
        rejection happens in the worker. But that was wrong. We should not dispatch such an event and we
        should just log the error message.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):

2018-08-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Unreviewed, follow-up patch for comments
        https://bugs.webkit.org/show_bug.cgi?id=188265

        * bindings/js/JSExecState.cpp:
        (WebCore::JSExecState::didLeaveScriptContext):
        Do nothing if `context` is nullptr. It is OK since we do not need to drain microtasks / rejected
        promise events after ScriptExecutionContext is gone.

        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::contextQueue):
        Drop unnecessary assertion since it is subsumed by downcast<>.

2018-08-14  Ali Juma  <ajuma@chromium.org>

        Follow-up: [IntersectionObserver] Implement rootMargin parsing
        https://bugs.webkit.org/show_bug.cgi?id=188469

        Address review feedback from Darin Adler.

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::rootMargin const):
        Use StringBuilder::appendLiteral instead of ::append to append a literal.

2018-08-14  Antoine Quint  <graouts@apple.com>

        [Web Animations] Crash under AnimationTimeline::cancelOrRemoveDeclarativeAnimation()
        https://bugs.webkit.org/show_bug.cgi?id=188519
        <rdar://problem/43237889>

        Reviewed by Eric Carlson.

        Test: webanimations/css-animation-effect-target-change-and-animation-removal-crash.html

        We would crash because we blindly assumed an animation that was found in the previous style must be in the list of running animations
        but in fact it could have been removed already due to the element being removed from the DOM or its effect target changing, etc. So when
        we iterate over names of animations that were found in the previous style but not in the new style, we must make a null check to ensure
        that there is an animation to remove. Adding an ASSERT() in AnimationTimeline::cancelOrRemoveDeclarativeAnimation() will also clarify the
        expectation here.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation):

2018-08-14  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Adjust vertical position with non-collapsed previous sibling margin.
        https://bugs.webkit.org/show_bug.cgi?id=188543

        Reviewed by Antti Koivisto.

        This patch ensures that the inital vertical position for a float is adjusted with the non-collapsed sibling margin.

        <div id=A style="margin-bottom: 20px;"></div>
        <div id=B style='float: left'></div>
        <div id=C style="margin-top: 10px;"></div>

        While computing the static position for element "B", we simply call marginBottom() on A.
        In the case above, A's margin bottom is collapsed with C's margin top and the value is 0 (C.marginTop() is 20px).
        However CSS spec says that in block formatting context, the non-collapsed margin should be used instead to offset the float box.
        (The reason why this should not be part of the BlockMarginCollapse::marginBottom() logic is because it can not differentiate the context of
        sibling float/sibling inflow. When we margin collapse, we always do it in the context of inflow boxes.)

        Test: fast/block/block-only/float-and-siblings-with-margins.html

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        * layout/blockformatting/BlockFormattingContext.h:

2018-08-14  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Worker should support unhandled promise rejections
        https://bugs.webkit.org/show_bug.cgi?id=188265

        Reviewed by Darin Adler.

        This patch adds PromiseRejectionEvent support in workers.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::promiseRejectionTracker):
        Move promiseRejectionTracker handler from JSDOMWindowBase to JSDOMGlobalObject
        to share it with WorkerGlobalScope.

        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::promiseRejectionTracker): Deleted.
        Moved to JSDOMGlobalObject.

        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSExecState.cpp:
        (WebCore::JSExecState::didLeaveScriptContext):
        PromiseRejectionTracker is driven in workers too.

        * bindings/js/JSPromiseRejectionEventCustom.cpp: Added.
        (WebCore::JSPromiseRejectionEvent::visitAdditionalChildren):
        Marking PromiseRejectionEvent::m_reason.

        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        Configure promiseRejectionTracker.

        * dom/Microtasks.cpp:
        (WebCore::MicrotaskQueue::contextQueue):
        * dom/Microtasks.h:
        * dom/PromiseRejectionEvent.cpp:
        (WebCore::PromiseRejectionEvent::PromiseRejectionEvent):
        * dom/PromiseRejectionEvent.h:
        * dom/PromiseRejectionEvent.idl:
        Expose it to worker scope. The custom mark function is required since we start
        using JSValueInWrappedObject. And the constructor no longer requires ExecState.

        * dom/RejectedPromiseTracker.cpp:
        (WebCore::RejectedPromiseTracker::reportUnhandledRejections):
        (WebCore::RejectedPromiseTracker::reportRejectionHandled):
        Remove state argument for PromiseRejectionEvent::create.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::removeRejectedPromiseTracker):
        * dom/ScriptExecutionContext.h:
        In worker thread, we should delete PromiseRejectionTracker before destroying VM
        because PromiseRejectionTracker's destruction requires VM. If we destroy VM first,
        PromiseRejectionTracker's destruction causes crashing. In main thread, we do not
        need to handle this case since we never destroy VM.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::prepareForTermination):
        (WebCore::WorkerGlobalScope::removeMicrotaskQueue): Deleted.
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScope.idl:
        Add onunhandledrejection and onrejectionhandled event handler attributes.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        We call WorkerGlobalScope::prepareForTermination, which cleans up Worker's objects touching VM.

2018-08-14  Rob Buis  <rbuis@igalia.com>

        Fetch: content-length header is being added to the safe-list
        https://bugs.webkit.org/show_bug.cgi?id=185473

        Reviewed by Youenn Fablet.

        Content-Length is a CORS-safelisted reponse header:
        https://fetch.spec.whatwg.org/#cors-safelisted-response-header-name

        Tests: web-platform-tests/fetch/api/cors/cors-filtering.html
               web-platform-tests/fetch/api/cors/cors-filtering-worker.html

        * platform/network/HTTPParsers.cpp:
        (WebCore::isCrossOriginSafeHeader):

2018-08-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Do not confuse clear with clearance.
        https://bugs.webkit.org/show_bug.cgi?id=188541

        Reviewed by Simon Fraser.

        clear -> CSS property.
        clearance -> the offset required to avoid floats when clear is present.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionForClear const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionWithClearance const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::hasClear const):
        (WebCore::Layout::Box::hasClearance const): Deleted.
        * layout/layouttree/LayoutBox.h:

2018-08-13  James Savage  <james.savage@apple.com>

        [iOS] Crash at -[UIViewController _presentViewController:withAnimationController:completion:]
        https://bugs.webkit.org/show_bug.cgi?id=188537
        <rdar://problem/41400259>

        Reviewed by Tim Horton.

        * platform/ios/ValidationBubbleIOS.mm:
        (WebCore::ValidationBubble::show): Avoid hitting a UIKit exception for
        presenting an already presented view controller by turning the scenario
        into an early return.

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Make CSSSelectorList a little more sane
        https://bugs.webkit.org/show_bug.cgi?id=188539

        Reviewed by Simon Fraser.

        This patch does four things:
        1. Use a UniqueArray<CSSSelector> instead of a raw pointer and manually calling destructors.
        2. Use move semantics a little bit better.
        3. Add a CSSSelectorList&& to the StyleRule and StyleRulePage because every time we create either
        one of those objects we call a setter to give it a CSSSelectorList.  That's what constructor arguments are for.
        4. Don't use CSSSelectorList.componentCount(), which iterates all components, to determine if it's empty.
        Use first() instead.

        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::setSelectorText):
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::componentCount const):
        (WebCore::CSSSelectorList::listSize const):
        (WebCore::CSSSelectorList::operator=):
        (WebCore::CSSSelectorList::deleteSelectors): Deleted.
        * css/CSSSelectorList.h:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::first const):
        (WebCore::CSSSelectorList::indexOfNextSelectorAfter const):
        (WebCore::CSSSelectorList::~CSSSelectorList): Deleted.
        (WebCore::CSSSelectorList::adoptSelectorArray): Deleted.
        (WebCore::CSSSelectorList::hasOneSelector const): Deleted.
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        (WebCore::StyleRule::createForSplitting):
        (WebCore::StyleRulePage::StyleRulePage):
        * css/StyleRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumePageRule):
        (WebCore::CSSParserImpl::consumeStyleRule):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):

2018-08-13  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Validate threshold values
        https://bugs.webkit.org/show_bug.cgi?id=188475

        Reviewed by Simon Fraser.

        Throw an exception if any of an IntersectionObserver's thresholds are outside
        the range [0, 1].

        Tested by: imported/w3c/web-platform-tests/intersection-observer/observer-exceptions.html
                   intersection-observer/intersection-observer-interface.html

        * page/IntersectionObserver.cpp:
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::IntersectionObserver):
        * page/IntersectionObserver.h:

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Remove unused CSSSelector::parseNth
        https://bugs.webkit.org/show_bug.cgi?id=188529

        Reviewed by Simon Fraser.

        This was conceptually replaced by the call to setNth in CSSSelectorParser::consumePseudo.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::setNth):
        (WebCore::CSSSelector::nthA const):
        (WebCore::CSSSelector::nthB const):
        (WebCore::CSSSelector::parseNth const): Deleted.
        (WebCore::CSSSelector::RareData::parseNth): Deleted.
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addNthChildType):

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Remove unused code in CSSParserSelector/CSSSelector
        https://bugs.webkit.org/show_bug.cgi?id=188528

        Reviewed by Simon Fraser.

        * css/CSSSelector.cpp:
        * css/CSSSelector.h:
        (WebCore::CSSSelector::serializingValue const):
        (WebCore::CSSSelector::setAttributeValueMatchingIsCaseInsensitive): Deleted.
        * css/parser/CSSParserSelector.h:
        (WebCore::CSSParserSelector::setAttributeValueMatchingIsCaseInsensitive): Deleted.

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Modernize CSSSelectorList a little
        https://bugs.webkit.org/show_bug.cgi?id=188527

        Reviewed by Simon Fraser.

        No change in behavior.  Just use make_unique and move semantics a little more.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::adoptSelectorVector): Deleted.
        * css/CSSSelectorList.h:
        * css/StyleRule.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parsePageSelector):
        * css/parser/CSSParserSelector.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/parser/CSSParserSelector.h:
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumeComplexSelectorList):
        (WebCore::CSSSelectorParser::consumeCompoundSelectorList):
        (WebCore::CSSSelectorParser::consumePseudo):

2018-08-13  Antti Koivisto  <antti@apple.com>

        Meaning of OptionSet::contains is unclear when used with OptionSet argument
        https://bugs.webkit.org/show_bug.cgi?id=188501

        Reviewed by Anders Carlsson.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::possiblyHasMarkers):
        * dom/DocumentMarkerController.h:
        (WebCore::DocumentMarkerController::hasMarkers const):
        * platform/FileSystem.h:
        (WebCore::FileSystem::openAndLockFile):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintForegroundForFragments):

2018-08-13  Commit Queue  <commit-queue@webkit.org>

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

        plugin processes crash on launch (Requested by smfr on
        #webkit).

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234747

2018-08-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Dragging a non-editable text selection into a plain text input inserts HTML markup
        https://bugs.webkit.org/show_bug.cgi?id=188485
        <rdar://problem/43168784>

        Reviewed by Tim Horton.

        Before r223678, -typeIdentifiersToLoadForRegisteredTypeIdentifiers:, which is responsible for determining which
        type identifiers to load upon performing a drop, returned the following when dropping a rich text selection onto
        a textarea:

            "public.plain-text",
            "public.html"

        After r223678, we now propagate a custom pasteboard data type when dragging, and the same list now looks like:

            "com.apple.WebKit.custom-pasteboard-data",
            "public.html",
            "public.plain-text"

        Subsequently, logic in `-_preLoadedDataConformingToType:…` (responsible for mapping a requested type identifier
        to data that has been loaded from an item provider) iterates through the aforementioned list of type identifiers
        and selects the data of the first type identifier in the list that conforms to the requested type identifier.
        However, this list of type identifiers is currently the result of `-[NSSet allObjects]`, which means that the
        type identifiers in the list are in no particular order!

        As such, this particular use case only worked by accident prior to r223678, and after that change, this latent
        bug was surfaced. The patch here makes two adjustments to pasteboard handling on iOS to fix the bug.

        Test: DragAndDropTests.NonEditableTextSelectionToTextarea

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):

        When reading plain text from the pasteboard, give "public.plain-text" priority over "public.text". This ensures
        that we don't end up reading markup as "plain text" when there's already more relevant plain text data present
        in the pasteboard.

        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentifiers:]):

        Refactor existing logic to enforce a consistent ordering of type identifiers to load. First, we use
        NSMutableOrderedSet instead of just an NSMutableSet to store type identifiers we've added. Secondly, move all
        logic to insert type identifiers into this set to the end of the method, where we iterate over all of the type
        identifiers in order and add each type identifier to the set if needed. This ensures that the order of resulting
        types is from highest to lowest fidelity.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentfiers:]): Deleted.

        Fix a typo in the method name.

2018-08-13  Alex Christensen  <achristensen@webkit.org>

        Use a 1-byte enum class for TextDirection
        https://bugs.webkit.org/show_bug.cgi?id=188350

        Reviewed by Simon Fraser.

        * Modules/notifications/Notification.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextDirection const):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * dom/Document.cpp:
        (WebCore::Document::updateTitleFromTitleElement):
        (WebCore::Document::setTitle):
        * dom/Position.cpp:
        (WebCore::Position::primaryDirection const):
        * dom/Range.cpp:
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines const):
        * editing/Editing.cpp:
        (WebCore::directionOfEnclosingBlock):
        * editing/Editor.cpp:
        (WebCore::Editor::baseWritingDirectionForSelectionStart const):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::willBeModified):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::textSelectionIntent):
        (WebCore::FrameSelection::modify):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate const):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate const):
        * editing/VisibleUnits.cpp:
        (WebCore::visualWordPosition):
        (WebCore::leftWordPosition):
        (WebCore::rightWordPosition):
        (WebCore::leftBoundaryOfLine):
        (WebCore::rightBoundaryOfLine):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::directionalityIfhasDirAutoAttribute const):
        (WebCore::HTMLElement::directionality const):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setupDateTimeChooserParameters):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::directionForFormData const):
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::computedTextWithDirection):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::toTextDirection const):
        (WebCore::CanvasRenderingContext2D::direction const):
        (WebCore::CanvasRenderingContext2D::textOffset):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip):
        * page/FrameView.cpp:
        (WebCore::paginationModeForRenderStyle):
        * page/Settings.yaml:
        * platform/RectEdges.h:
        (WebCore::RectEdges::start):
        (WebCore::RectEdges::end):
        (WebCore::RectEdges::start const):
        (WebCore::RectEdges::end const):
        (WebCore::RectEdges::setStart):
        (WebCore::RectEdges::setEnd):
        * platform/UserInterfaceLayoutDirection.h:
        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::computeExpansionOpportunity):
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::expansionOpportunityCountInternal):
        (WebCore::FontCascade::leadingExpansionOpportunity):
        (WebCore::FontCascade::trailingExpansionOpportunity):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawBidiText):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::rtl const):
        (WebCore::TextRun::ltr const):
        (WebCore::TextRun::setDirection):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        * platform/ios/SelectionRect.cpp:
        (WebCore::SelectionRect::SelectionRect):
        * platform/text/BidiResolver.h:
        (WebCore::BidiStatus::BidiStatus):
        * platform/text/StringWithDirection.h:
        * platform/text/WritingMode.h:
        (WebCore::isLeftToRightDirection):
        (WebCore::isVerticalWritingMode):
        (WebCore::isFlippedWritingMode):
        (WebCore::mapLogicalSideToPhysicalSide):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip const):
        (WebCore::HitTestResult::title const):
        (WebCore::HitTestResult::innerTextIfTruncated const):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::direction const):
        (WebCore::InlineBox::isLeftToRightDirection const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):
        * rendering/InlineIterator.h:
        (WebCore::embedCharFromDirection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::mirrorRTLSegment):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::determineDirectionality):
        (WebCore::RenderBlockFlow::textAlignmentForLine const):
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::handleTrailingSpaces):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/RenderBox.cpp:
        (WebCore::computeInlineStaticDistance):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing const):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::updateLogicalWidth):
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::shouldPlaceBlockDirectionScrollbarOnLeft const):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::direction const):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (RenderMenuList::clientPaddingLeft const):
        (RenderMenuList::clientPaddingRight const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::popupInternalPaddingBox const):
        (WebCore::RenderThemeIOS::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations):
        (WebCore::RenderThemeMac::popupInternalPaddingBox const):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::mirrorIfNeeded const):
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::layoutBlock):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isLeftToRightDirection const):
        (WebCore::RenderStyle::initialDirection):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::systemLayoutDirection):
        (WebCore::InternalSettings::setSystemLayoutDirection):
        * testing/Internals.h:

2018-08-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Followup (r234683): Element::getAttribute() should return the first non-null attribute value
        https://bugs.webkit.org/show_bug.cgi?id=188419

        Reviewed by Darin Adler.

        Element::getAttribute() should return the first non-null attribute value
        since an empty string is a legitimate attribute value.

        Test: svg/custom/href-svg-namespace-empty.html

        * dom/Element.h:
        (WebCore::Element::getAttribute const):

2018-08-13  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, since -Wsign-compare warnings in URL.cpp

        This regressed in r233798 when m_schemeEnd changed to a bitfield. The code looks safe to
        me, so just silence the warnings with casts.

        * platform/URL.cpp:
        (WebCore::URL::setHost):
        (WebCore::URL::setHostAndPort):
        (WebCore::URL::setUser):
        (WebCore::URL::setPass):

2018-08-13  Antti Koivisto  <antti@apple.com>

        Use OptionSet more in editing code
        https://bugs.webkit.org/show_bug.cgi?id=188500

        Reviewed by Wenson Hsieh.

        Typesafe flags.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/Editor.cpp:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::selectComposition):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:
        (WebCore::TemporarySelectionChange::TemporarySelectionChange):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::moveWithoutValidationTo):
        (WebCore::FrameSelection::setSelectionWithoutUpdatingAppearance):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::setSelectedRange):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::defaultSetSelectionOptions):
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::ReplaceSelectionCommand):
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::create):
        * editing/SetSelectionCommand.cpp:
        (WebCore::SetSelectionCommand::SetSelectionCommand):
        * editing/SetSelectionCommand.h:
        (WebCore::SetSelectionCommand::create):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/TextIndicator.cpp:
        (WebCore::TextIndicator::createWithRange):

2018-08-13  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Add basic clearance support
        https://bugs.webkit.org/show_bug.cgi?id=188492

        Reviewed by Antti Koivisto.

        Adjust final position of a block level box with clearance when float is present.

        Test: fast/block/block-only/floating-left-and-right-with-clearance.html

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::positionForFloat const):
        (WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const):
        (WebCore::Layout::FloatingContext::toContainingBlock const):
        (WebCore::Layout::FloatingContext::computePosition const): Deleted.
        * layout/FloatingContext.h:
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::bottom const):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::leftBottom const):
        (WebCore::Layout::FloatingState::rightBottom const):
        (WebCore::Layout::FloatingState::bottom const):
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        (WebCore::Layout::BlockFormattingContext::computeVerticalPositionWithClearance const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::hasClearance const):
        * layout/layouttree/LayoutBox.h:

2018-08-13  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Expose CloseEvent and CustomEvent to workers
        https://bugs.webkit.org/show_bug.cgi?id=188493

        Reviewed by Sam Weinig.

        This patch exposes CloseEvent and CustomEvent to workers.
        It is OK since they do not depend on things in the main thread.
        For example, we cannot expose FormData right now since it depends
        on Page.

        We do not expose PromiseRejectionEvent in this patch since it will
        be done in [1].

        [1]: https://bugs.webkit.org/show_bug.cgi?id=188265

        * Modules/websockets/CloseEvent.idl:
        * dom/CustomEvent.idl:

2018-08-13  Oriol Brufau  <obrufau@igalia.com>

        [css-logical] Implement flow-relative margin, padding, border and sizing properties
        https://bugs.webkit.org/show_bug.cgi?id=188386

        Reviewed by Manuel Rego Casasnovas.

        These properties provide the author with the ability to control margins
        through logical, rather than physical, direction and dimension mappings.

        Only longhand properties and border shorthands for specific sides are
        implemented as part of this patch.

        The existing prefixed properties become aliases of the new ones.

        The change in WebCore::isLayoutDependent fixes an existing issue that
        made getComputedStyle provide an old value for -webkit-logical-height
        and -webkit-logical-height (see https://crbug.com/849855).

        Tests: imported/w3c/web-platform-tests/css/css-logical/animation-001.html
               imported/w3c/web-platform-tests/css/css-logical/animation-002.html
               imported/w3c/web-platform-tests/css/css-logical/animation-003.tentative.html
               imported/w3c/web-platform-tests/css/css-logical/cascading-001.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-color.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-shorthands.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-style.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-border-width.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-inset.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-margin.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-padding.html
               imported/w3c/web-platform-tests/css/css-logical/logical-box-size.html
               imported/w3c/web-platform-tests/css/css-logical/logicalprops-block-size-vlr.html
               imported/w3c/web-platform-tests/css/css-logical/logicalprops-block-size.html
               imported/w3c/web-platform-tests/css/css-logical/logicalprops-inline-size-vlr.html
               imported/w3c/web-platform-tests/css/css-logical/logicalprops-inline-size.html
               imported/w3c/web-platform-tests/css/css-logical/logicalprops-quirklength.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        (WebCore::CSSProperty::isDirectionAwareProperty):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue const):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        (WebCore::isColorPropertyID):
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::collectStyleForPresentationAttribute):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedStartBorder const):
        (WebCore::RenderTableCell::computeCollapsedEndBorder const):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder const):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder const):

2018-08-12  Sihui Liu  <sihui_liu@apple.com>

        CrashTracer: com.apple.WebKit.Storage at WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient(WebCore::IDBServer::UniqueIDBDatabaseConnection&)
        https://bugs.webkit.org/show_bug.cgi?id=188474

        Reviewed by Chris Dumez.

        UniqueIDBDatabaseConnection is refcounted by UniqueIDBDatabaseTransaction and it refcounts
        UniqueIDBDatabaseTransaction. This cycle could make UniqueIDBDatabaseConnection outlives
        UniqueIDBDatabase, so its reference to UniqueIDBDatabase may be stale. Calling a function
        on a stale object is probably the reason of recent various storage process crashes in
        indexedDB.

        This patch makes m_database a WeakPtr and adds assertions that could help us debug the
        crashes.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesForOrigins):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabase.h:
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::abortTransactionWithoutCallback):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::confirmDidCloseFromServer):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFinishHandlingVersionChange):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
        (WebCore::IDBServer::UniqueIDBDatabaseConnection::database):
        * Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp:
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::abort):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::commit):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::clearObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::createIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::putOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getAllRecords):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::getCount):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::deleteRecord):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::openCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::iterateCursor):
        (WebCore::IDBServer::UniqueIDBDatabaseTransaction::objectStoreIdentifiers):
        * Modules/indexeddb/shared/IDBResultData.cpp:
        (WebCore::IDBResultData::openDatabaseSuccess):
        (WebCore::IDBResultData::openDatabaseUpgradeNeeded):

2018-08-12  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        Break reference cycle in ErrorEvent by using JSValueInWrappedObject
        https://bugs.webkit.org/show_bug.cgi?id=188491

        Reviewed by Darin Adler.

        ErrorEvent should not use Strong<Unkonwn> to hold error JSValue. This patch integrates
        JSValueInWrappedObject into ErrorEvent.

        * Modules/webvr/VRDisplayEvent.h:
        Fix unified build errors due to added JSErrorEventCustom.cpp. It changes the files grouped in unified build.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSErrorEventCustom.cpp: Copied from Source/WebCore/Modules/webvr/VRDisplayEvent.h.
        (WebCore::JSErrorEvent::visitAdditionalChildren):
        Add custom mark function for JSValueInWrappedObject.

        * bindings/js/JSEventListener.h:
        * bindings/js/WindowProxy.cpp:
        Fix unified build errors due to added JSErrorEventCustom.cpp. It changes the files grouped in unified build.

        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::ErrorEvent):
        (WebCore::ErrorEvent::error):
        (WebCore::ErrorEvent::trySerializeError):
        Align the implementation to PushStateEvent::trySerializeState.

        * dom/ErrorEvent.h:
        * dom/ErrorEvent.idl:

2018-08-12  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear pressed when presenting a color picker
        https://bugs.webkit.org/show_bug.cgi?id=188477

        Reviewed by Tim Horton.

        Currently, when clicking on a color well, the color well loses its pressed
        appearance once the mouse is lifted. Because of this behavior, the color well
        does not appear to be active when the color picker is displayed.

        Added the color-well -webkit-appearance value to control the drawing of the color
        well separate from other buttons. Also added a new ControlState, named
        PresentingState. A control can be in this state whenever it is presenting some
        attached view. In the case of the color well this is the color picker. The
        Information as to whether a form control is in the presenting state comes from
        isPresentingAttachedView() in HTMLInputElement.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/html.css:
        (input[type="color"]::-webkit-color-swatch):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::isPresentingAttachedView const):
        (WebCore::ColorInputType::elementDidBlur):
        (WebCore::ColorInputType::didEndChooser):
        * html/ColorInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isPresentingAttachedView const):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::isPresentingAttachedView const):
        * html/InputType.h:
        * platform/ControlStates.h:
        * platform/ThemeTypes.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::setUpButtonCell):
        (WebCore::paintColorWell):
        (WebCore::ThemeMac::minimumControlSize const):
        (WebCore::ThemeMac::controlBorder const):
        (WebCore::ThemeMac::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::isControlStyled const):
        (WebCore::RenderTheme::extractControlStatesForRenderer const):
        (WebCore::RenderTheme::isPresenting const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustRepaintRect):

2018-08-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Float prev/next sibling should prevent top/bottom margin collapsing with parent.
        https://bugs.webkit.org/show_bug.cgi?id=188487

        Reviewed by Antti Koivisto.

        Test: fast/block/block-only/floating-and-next-previous-inflow-with-margin.html

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):

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

        Use OptionSet for various RenderLayer flags
        https://bugs.webkit.org/show_bug.cgi?id=188472
        <rdar://problem/43153059>

        Followup, fix some mistakes.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::~RenderLayerBacking):

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

        [macOS] Multiple third party apps crash due to the thread safety check in TimerBase::setNextFireTime
        https://bugs.webkit.org/show_bug.cgi?id=188480

        Reviewed by Simon Fraser.

        Suppress the release assert in WebKit1 on macOS (isInWebProcess is always true in non-Cocoa platforms).

        In the future, we should consider throwing Objective-C exceptions when third party apps call WebKit1
        or WebKit2 APIs in non-main threads.

        * platform/Timer.cpp:
        (WebCore::shouldSuppressThreadSafetyCheck): Extracted out of ~TimerBase and setNextFireTime.
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::setNextFireTime):

2018-08-10  Daniel Bates  <dabates@apple.com>

        Cleanup: Remove unnecessary code to resume animations from CachedFrameBase::restore()
        https://bugs.webkit.org/show_bug.cgi?id=188459

        Reviewed by Chris Dumez.

        It is unnessary for CachedFrameBase::restore() to explicitly resume animations on the
        document as it calls Document::resume(), which already does this.

        No functionality changed. So, no new tests.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):

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

        Use OptionSet for various RenderLayer flags
        https://bugs.webkit.org/show_bug.cgi?id=188472

        Reviewed by Simon Fraser.

        Typesafe flags.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/FrameView.cpp:
        (WebCore::updateLayerPositionFlags):
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateLayerPositionsAfterScroll):
        (WebCore::RenderLayer::paint):
        (WebCore::paintForFixedRootBackground):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContentsAndReflection):
        (WebCore::RenderLayer::filterPainter const):
        (WebCore::RenderLayer::hasFilterThatIsPainting const):
        (WebCore::RenderLayer::setupFilters):
        (WebCore::RenderLayer::paintLayerContents):
        (RenderLayer::paintLayerByApplyingTransform):
        (RenderLayer::paintList):
        (RenderLayer::updatePaintingInfoForFragments):
        (RenderLayer::paintTransformedLayerIntoFragments):
        (RenderLayer::calculateClipRects const):
        (WebCore::RenderLayer::paintLayerByApplyingTransform): Deleted.
        (WebCore::RenderLayer::paintList): Deleted.
        (WebCore::RenderLayer::enclosingPaginationLayerInSubtree const): Deleted.
        (WebCore::RenderLayer::collectFragments): Deleted.
        (WebCore::RenderLayer::updatePaintingInfoForFragments): Deleted.
        (WebCore::RenderLayer::paintTransformedLayerIntoFragments): Deleted.
        (WebCore::RenderLayer::paintBackgroundForFragments): Deleted.
        (WebCore::RenderLayer::paintForegroundForFragments): Deleted.
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase): Deleted.
        (WebCore::RenderLayer::paintOutlineForFragments): Deleted.
        (WebCore::RenderLayer::paintMaskForFragments): Deleted.
        (WebCore::RenderLayer::paintChildClippingMaskForFragments): Deleted.
        (WebCore::RenderLayer::paintOverflowControlsForFragments): Deleted.
        (WebCore::RenderLayer::hitTest): Deleted.
        (WebCore::RenderLayer::enclosingElement const): Deleted.
        (WebCore::RenderLayer::enclosingFragmentedFlowAncestor const): Deleted.
        (WebCore::computeZOffset): Deleted.
        (WebCore::RenderLayer::createLocalTransformState const): Deleted.
        (WebCore::isHitCandidate): Deleted.
        (WebCore::RenderLayer::hitTestLayer): Deleted.
        (WebCore::RenderLayer::hitTestContentsForFragments const): Deleted.
        (WebCore::RenderLayer::hitTestResizerInFragments const): Deleted.
        (WebCore::RenderLayer::hitTestTransformedLayerInFragments): Deleted.
        (WebCore::RenderLayer::hitTestLayerByApplyingTransform): Deleted.
        (WebCore::RenderLayer::hitTestContents const): Deleted.
        (WebCore::RenderLayer::hitTestList): Deleted.
        (WebCore::RenderLayer::updateClipRects): Deleted.
        (WebCore::RenderLayer::clipRects const): Deleted.
        (WebCore::RenderLayer::calculateClipRects const): Deleted.
        (WebCore::showLayerTree): Deleted.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedStatus):
        (WebCore::RenderLayerCompositor::detachScrollCoordinatedLayer):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):

2018-08-10  Sihui Liu  <sihui_liu@apple.com>

        CrashTracer: com.apple.WebKit.Storage at WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose
        https://bugs.webkit.org/show_bug.cgi?id=188461
        <rdar://problem/33555052>

        Reviewed by Chris Dumez.

        When we try to schedule shutdown for database, we should cancel the timer so no 
        scheduleShutdownForClose will be running after this.

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

2018-08-10  Daniel Bates  <dabates@apple.com>

        Once <object> is hidden, its content won't be displayed again if its URL has fragment identifier ("#").
        https://bugs.webkit.org/show_bug.cgi?id=187990

        Reviewed by Simon Fraser.

        Fixes an issue where an HTML object element that behaves like an iframe and references a resource
        whose URL contains a fragment would not be repainted when its CSS display property changes. 

        Rendering of an <object> that behaves like an iframe is handled by a widget (FrameView). When
        the CSS display property for an <object> is set to "none" we detach the widget from its renderer
        as part of destroying the render tree for the <object>. Subsequently changing the CSS display
        to a non-"none"/"contents" value will create a new renderer for <object> R. For an <object> that
        behaves like an iframe, we navigate to the resource associated with the <object> reusing the
        existing Frame F object created when we first displayed the <object>. Unlike the case where
        the URL of the resource does not contain a fragment, navigating to a fragment in the same document
        uses a different code path that does not re-associate the FrameView of F with R before it scrolls
        the view; => the FrameView of F is not in the view hierarchy. Therefore we do not paint anything
        for the content of the <object> and hence the scroll is not observable. Instead we need to ensure
        that the FrameView of F installed in the view hierarchy when navigating to an anchor in the same
        document.

        As a side benefit of this fix we now also repaint an <object> that is programmatically navigated
        to a different anchor in the same document.

        Tests: fast/repaint/object-as-iframe-hide-and-show-document-at-anchor.html
               fast/repaint/object-as-iframe-navigate-to-same-document-anchor-repaint.html

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

2018-08-10  Ali Juma  <ajuma@chromium.org>

        [IntersectionObserver] Implement rootMargin parsing
        https://bugs.webkit.org/show_bug.cgi?id=188469

        Reviewed by Darin Adler.

        Parse IntersectionObserver's rootMargin argument and throw an exception if it's invalid.
        Change the stored rootMargin from a String to a LengthBox so that future patches can
        use this value in intersection logic.

        Tested by: imported/w3c/web-platform-tests/intersection-observer/observer-attributes.html
                   imported/w3c/web-platform-tests/intersection-observer/observer-exceptions.html
                   intersection-observer/intersection-observer-interface.html

        * page/IntersectionObserver.cpp:
        (WebCore::parseRootMargin):
        (WebCore::IntersectionObserver::create):
        (WebCore::IntersectionObserver::IntersectionObserver):
        (WebCore::IntersectionObserver::rootMargin const):
        * page/IntersectionObserver.h:
        (WebCore::IntersectionObserver::create): Deleted.
        (WebCore::IntersectionObserver::rootMargin const): Deleted.
        * page/IntersectionObserver.idl:

2018-08-09  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        Added functionality to FileHandle so that it can lock a file while open.
        Added a function to FileSystem to delete non empty directories.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::close):
        * platform/FileHandle.h:
        * platform/FileSystem.h:
        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::FileSystem::deleteNonEmptyDirectory):

2018-08-09  Chris Dumez  <cdumez@apple.com>

        InputType should not interact with an HTMLInputElement is no longer associated with
        https://bugs.webkit.org/show_bug.cgi?id=188410

        Reviewed by Ryosuke Niwa.

        Clear InputType::m_element when the InputType is no longer associated with the HTMLInputElement
        because the element changed type. We were already dealing with the InputType no longer being
        associated with an element because the element died by using a WeakPtr. However, it is conceptually
        better (more correct) to also clear this pointer if the element is still alive but associated with
        another InputType.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/InputType.h:
        (WebCore::InputType::detachFromElement):

2018-08-09  Jer Noble  <jer.noble@apple.com>

        Video playback is using more power
        https://bugs.webkit.org/show_bug.cgi?id=188452
        <rdar://problem/42298937>

        Reviewed by Eric Carlson.

        Test: TestWebKitAPI/Tests/WebKitCocoa/PreferredAudioBufferSize.mm

        When the meaning of PlatformMediaSession::Video changed to "video-only", we failed to update
        MediaSessionManagerCocoa::updateSessionState() to use the new PlatformMediaSession::VideoAudio
        enum, so Video-only sessions were getting the higher audio buffer size (where it's not needed)
        and Video-and-Audio sessions were getting the default value.

        To enable testing, add a preferredAudioBufferSize property to Internals. Also, the getter for
        AudioSession::preferredBufferSize was using the wrong CoreAudio property address, and was
        always returning 0.

        * platform/audio/AudioSession.h:
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (MediaSessionManagerCocoa::updateSessionState):
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::preferredBufferSize const):
        * testing/Internals.cpp:
        (WebCore::Internals::preferredAudioBufferSize const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-08-09  Saam Barati  <sbarati@apple.com>

        memoryFootprint should return size_t not optional<size_t>
        https://bugs.webkit.org/show_bug.cgi?id=188444

        Reviewed by Simon Fraser.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw):

2018-08-09  Ali Juma  <ajuma@chromium.org>

        Update IDL for IntersectionObserverEntry and IntersectionObserverEntryInit
        https://bugs.webkit.org/show_bug.cgi?id=188445

        Reviewed by Simon Fraser.

        Update IntersectionObserverEntry by making rootBounds nullable, and adding an
        isIntersecting attribute. Make the same changes to IntersectionObserverEntryInit,
        and also add an intersectionRatio attribute.

        Tested by intersection-observer/intersection-observer-entry-interface.html

        * page/IntersectionObserverEntry.cpp:
        (WebCore::IntersectionObserverEntry::IntersectionObserverEntry):
        * page/IntersectionObserverEntry.h:
        (WebCore::IntersectionObserverEntry::isIntersecting const):
        * page/IntersectionObserverEntry.idl:

2018-08-09  Charlie Turner  <cturner@igalia.com>

        Fix copyright headers on new ISO parsing class
        https://bugs.webkit.org/show_bug.cgi?id=188432

        Unreviewed fix.

        This was left off from a previous bug by mistake, retrospectively
        adding the correct copyright headers.

        No tests required.

        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.cpp:
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.h:

2018-08-08  Ross Kirsling  <ross.kirsling@sony.com>

        run-bindings-tests is not Win32-compatible
        https://bugs.webkit.org/show_bug.cgi?id=188424

        Reviewed by Fujii Hironori.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        Ensure that we fall back to cl.exe if CC env var is not set on Windows.

2018-08-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r228260): Events handled by input method invoke default event handler
        https://bugs.webkit.org/show_bug.cgi?id=188370

        Reviewed by Wenson Hsieh.

        The bug was caused by the default event handler being invoked for the "virtual" keydown events
        generated for input methods. Namely, when Japanese or Chinese input methods swallows TAB key,
        WebKit should not invoke the default event handler and move the focus during input composition.

        Fixed the bug by adding a new boolean on Event indicating whether the default event handler
        should be invoked, and restoring the behavior prior to r228260 for these virtual keydown events.

        Test: editing/input/press-tab-during-ime-composition.html

        * dom/Event.h:
        (WebCore::Event::isDefaultEventHandlerIgnored const): Added.
        (WebCore::Event::setIsDefaultEventHandlerIgnored): Added.
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Don't invoke the default event handler if
        isDefaultEventHandlerIgnored is set.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::internalKeyEvent): Set isDefaultEventHandlerIgnored. This restores WebKit's
        behavior prior to r228260.

2018-08-08  Justin Fan  <justin_fan@apple.com>

        Prevent collectScreenProperties from crashing Base System
        https://bugs.webkit.org/show_bug.cgi?id=188429
        <rdar://problem/43075662>

        Reviewed by Simon Fraser.

        Adding some error-checking and early returns to further prevent calling CGLDescribeRenderer with invalid parameters.

        Existing WebGL tests should cover; no expected change in behavior. Crash happened primarily on Base System.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::gpuIDForDisplayMask):

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

        [Curl] Surface additional NetworkLoadMetrics
        https://bugs.webkit.org/show_bug.cgi?id=188391

        Reviewed by Joseph Pecoraro.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getNetworkLoadMetrics):

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

        [Nicosia] Add the Nicosia-specific PlatformLayer type alias
        https://bugs.webkit.org/show_bug.cgi?id=188405
        <rdar://problem/43039520>

        Unreviewed build fix.

        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:

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

        Add a WebKit2 logging channel for ActivityState
        https://bugs.webkit.org/show_bug.cgi?id=188411

        Reviewed by Tim Horton.

        Add logging for ActivityState changes and the entrypoints that affect ActivityState.
        
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ActivityState.cpp: Added.
        (WebCore::activityStateFlagsToString):
        * page/ActivityState.h:

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

        Add LogArgument template for PlatformMediaSession::RemoteControlCommandType
        https://bugs.webkit.org/show_bug.cgi?id=188314

        Reviewed by Alex Christensen.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didReceiveRemoteControlCommand): Don't coerce to int for logging.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::convertEnumerationToString): New.
        (WebCore::PlatformMediaSession::didReceiveRemoteControlCommand): Log command.
        * platform/audio/PlatformMediaSession.h:
        (WTF::LogArgument<WebCore::PlatformMediaSession::RemoteControlCommandType>::toString):

2018-08-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: XHR content sometimes shows as error even though load succeeded
        https://bugs.webkit.org/show_bug.cgi?id=188385
        <rdar://problem/42646160>

        Reviewed by Devin Rousso.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveData):
        Avoid a double hash lookup in the common case.
        Allow synchronous XHR to have text data appended in the normal case.
        Allow synchronous XHR to set base64 encoded data right here for non-text data.

        * inspector/NetworkResourcesData.h:
        (WebCore::NetworkResourcesData::ResourceData::hasBufferedData const):
        Getter to see if data is buffered or not for this resource.

        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::maybeAddResourceData):
        Return the updated ResourceData to avoid clients having to do a lookup.

2018-08-08  Sihui Liu  <sihui_liu@apple.com>

        Assertion failed in Webcore::Process::setIdentifier()
        https://bugs.webkit.org/show_bug.cgi?id=188404
        <rdar://problem/43029137>

        Reviewed by Chris Dumez.

        App using both WebKit1 and WebKit may crash in WebKit initialization.

        * platform/Process.cpp:
        (WebCore::Process::setIdentifier):

2018-08-08  Charlie Turner  <cturner@igalia.com>

        Add CENC sanitization
        https://bugs.webkit.org/show_bug.cgi?id=188376

        Reviewed by Xabier Rodriguez-Calvar.

        This patch adds support for sanitizing the CENC initialization
        data, to ensure there are no obviously bogus values in the
        untrusted input from generateRequest, see
        https://www.w3.org/TR/encrypted-media/#dom-mediakeysession-generaterequest
        for more details on sanitization.

        Tested by imported/w3c/web-platform-tests/encrypted-media/clearkey-generate-request-disallowed-input.https.html

        * Modules/encryptedmedia/InitDataRegistry.cpp: The diff looks a
        bit wonky because I had to reorder extractKeyIDsCenc to come
        before sanitizeCenc.
        (WebCore::extractKeyIDsCenc): Added implementation, a nullopt
        return value here indicates the parsing found an error in the box
        values.
        (WebCore::sanitizeCenc): Added implementation, if the box can be
        parsed, return a copy of the buffer as before, otherwise an error
        value.
        * Sources.txt: Add the new PSSH box type.
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.cpp:
        Added, parsing methods come from ISO/IEC 23001-7-2016 Section
        8.1.1.
        (WebCore::ISOProtectionSystemSpecificHeaderBox::parse): Ditto.
        * platform/graphics/iso/ISOProtectionSystemSpecificHeaderBox.h: Ditto.
        (WebCore::ISOProtectionSystemSpecificHeaderBox::boxTypeName): Ditto.
        (WebCore::ISOProtectionSystemSpecificHeaderBox::systemID const): Ditto.
        (WebCore::ISOProtectionSystemSpecificHeaderBox::keyIDs const):
        Ditto.
        (WebCore::ISOProtectionSystemSpecificHeaderBox::data const): Ditto.

2018-08-08  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add the Nicosia-specific PlatformLayer type alias
        https://bugs.webkit.org/show_bug.cgi?id=188405

        Reviewed by Carlos Garcia Campos.

        Add a Nicosia-specific PlatformLayer type alias that points to the
        Nicosia::PlatformLayer type. This is guarded by the USE(NICOSIA) macro,
        which guards additional code in this patch but will be added to other
        Nicosia-specific classes later.

        To keep things buildable when USE(NICOSIA) is defined, additional
        changes are made to classes that operate with platform layers.
        Cairo-specific ImageBuffer implementation and the related
        ImageBufferData class are modified to work with a Nicosia::ContentLayer
        object. This object is using the TextureMapper-specific Impl class which
        internally keeps a TextureMapperPlatformLayerProxy object. This way
        we can reuse existing code that also works with an object of this type,
        only difference is where the proxy object is kept. Main difference is in
        the ImageBuffer::platformLayer() method, where pointer to the
        Nicosia::ContentLayer object is returned when USE(NICOSIA) is enabled.

        Similar approach is taked for the MediaPlayerPrivateGStreamerBase class.
        When USE(NICOSIA) is enabled, a Nicosia::ContentLayer object is
        constructed, and with the TextureMapper-specific Impl we again operate
        on the TextureMapperPlatformLayerProxy object like before, so all of
        the proxy-specific code is bundled into helper lambdas that operate on
        the given proxy object. In the platformLayer() method, we again return
        pointer to the Nicosia::ContentLayer object when USE(NICOSIA) is on.

        For the GraphicsContext3D integration, we have to provide a separate
        class that replicates most of the functionality currently present in the
        TextureMapperGC3DPlatformLayer class. Main difference is that in the new
        Nicosia::GC3DLayer class, a Nicosia::ContentLayer object is spawned with
        the TextureMapper-specific Impl. The proxy object held by that Impl is
        then again used to push new buffers into the rendering pipeline. As
        before, pointer to the Nicosia::ContentLayer is returned in the
        GraphicsContext3D::platformLayer() object.

        Integration of the GraphicsContext3D class into Nicosia layering needs
        further work in the future. Target should be providing a class that is
        not specific to the TextureMapper layer. Additionally, when USE(NICOSIA)
        is enabled, we remove the TextureMapperGC3DPlatformLayer class from
        compilation since it depends on a PlatformLayer type alias to the
        TextureMapperPlatformLayerProxyProvider class.

        This patch also doesn't address the abundance of macros that this code
        now uses. While USE(NICOSIA) is introduced, we have to work around
        four additional macros in this code: USE(TEXTURE_MAPPER),
        USE(TEXTURE_MAPPER_GL), USE(COORDINATED_GRAPHICS) and
        USE(COORDINATED_GRAPHICS_THREADED). In a lot of places these are used
        interchangeably, but they should be merged and simplified in use. I hope
        to approach this once the USE(NICOSIA) functionality lands and is turned
        on for ports that currently build with USE(COORDINATED_GRAPHICS).

        * platform/TextureMapper.cmake:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBufferData::~ImageBufferData):
        (WebCore::ImageBufferData::swapBuffersIfNeeded):
        (WebCore::ImageBuffer::platformLayer const):
        * platform/graphics/cairo/ImageBufferDataCairo.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformLayer const):
        (WebCore::MediaPlayerPrivateGStreamerBase::swapBuffersIfNeeded):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.cpp: Added.
        (Nicosia::GC3DLayer::GC3DLayer):
        (Nicosia::GC3DLayer::~GC3DLayer):
        (Nicosia::GC3DLayer::makeContextCurrent):
        (Nicosia::GC3DLayer::platformContext):
        (Nicosia::GC3DLayer::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaGC3DLayer.h: Added.
        (Nicosia::GC3DLayer::contentLayer const):
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformLayer const):
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.cpp:
        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsToPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::syncPlatformLayer):
        (WebCore::CoordinatedGraphicsLayer::updatePlatformLayer):

2018-08-08  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Update behavior of percentage row tracks and gutters
        https://bugs.webkit.org/show_bug.cgi?id=188403

        Reviewed by Sergio Villar Senin.

        The CSSWG decided to change how percentage row tracks and gutters
        in a grid container with indefinite height are resolved.

        The CSSWG issues are:
        - https://github.com/w3c/csswg-drafts/issues/1921
        - https://github.com/w3c/csswg-drafts/issues/509

        So far they were resolved as "auto", like it happens with
        percentage heights in regular blocks. But now they're going to behave
        similar to what happens in the columns axis, they would be ignored
        to compute the intrinsic height.
        This causes that we need to repeat the track sizing algorithm
        when we have a grid container with indefinite height
        that has some percentage rows using the intrinsic height
        calculated on the first pass. Then the percentages will be resolved
        against the intrinsic height.

        Tests: imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-alignment-second-pass-001.html
               imported/w3c/web-platform-tests/css/css-grid/alignment/grid-content-alignment-second-pass-002.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-001.html
               imported/w3c/web-platform-tests/css/css-grid/grid-definition/grid-percentage-rows-indefinite-height-002.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::gridTrackSize const):
        (WebCore::GridTrackSizingAlgorithm::initializeTrackSizes):
        (WebCore::GridTrackSizingAlgorithm::setup):
        (WebCore::GridTrackSizingAlgorithm::reset):
        * rendering/GridTrackSizingAlgorithm.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::availableSpaceForGutters const):
        (WebCore::RenderGrid::repeatTracksSizingIfNeeded):
        (WebCore::RenderGrid::layoutBlock):

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

        ResourceUsageOverlay should use physical footprint for its "Footprint" label
        https://bugs.webkit.org/show_bug.cgi?id=188395

        Reviewed by Simon Fraser.

        Let's use physical footprint on Cocoa for the number we say is "footprint".
        Before, we were just using the number of dirty pages multiplies by
        page size. This number was an upper bound on footprint since it
        doesn't take into account compressed memory.

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformDraw):

2018-08-05  Darin Adler  <darin@apple.com>

        [Cocoa] More tweaks and refactoring to prepare for ARC
        https://bugs.webkit.org/show_bug.cgi?id=188245

        Reviewed by Dan Bernstein.

        * bridge/objc/objc_instance.mm: Updated include for rename: FoundationSPI.h -> objcSPI.h.
        * platform/ios/wak/WebCoreThread.mm: Ditto.

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

        navigator.sendBeacon does not work in pagehide callbacks
        https://bugs.webkit.org/show_bug.cgi?id=188329

        Reviewed by Alex Christensen.

        Add support for sending beacons from pagehide event handlers. We normally do not allow loads because we're
        about to enter PageCache. However, in case of Beacon, this is fine since it uses PingLoad and does not
        WebCore to do the load.

        Test: http/wpt/beacon/sendBeacon-in-pagehide.html

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        - Allow Beacon loads to go through even if the document's pageCacheState is AboutToEnterPageCache (i.e.
        we're firing the 'pagehide' event)
        - Allow Becon loads to go though even if the FrameLoader's state is provisional (i.e. a load is pending)

2018-08-07  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Allow href attribute without xlink on SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=153854

        Reviewed by Dean Jackson.

        SVG 2 has moved the href attribute from xlink namespace to svg namespace.
        Instead of using xlink:href, svg:href should be used or simply use href 
        if the svg namespace is defined.

        See https://www.w3.org/TR/SVG2/linking.html#XLinkRefAttrs.

        For backward compatibility, xlink:href will be treated as an alias to href
        till it is acceptable to completely remove the support for the deprecated 
        xlink:href.

        Tests: svg/custom/href-svg-namespace-animate.svg
               svg/custom/href-svg-namespace-dynamic.svg
               svg/custom/href-svg-namespace-elements.html
               svg/custom/href-svg-namespace-expected.svg
               svg/custom/href-svg-namespace-static.svg

        * dom/Element.cpp:
        (WebCore::Element::absoluteLinkURL const):
        * dom/Element.h:
        (WebCore::Element::getAttribute const): This new template function with
        template pack parameter QualifiedNames is added to return the first none
        empty attribute value given a set of attributes' names. This should be
        useful for deprecated attributes. When we decide to remove the support 
        for the deprecated attribute, all we need is to remove it as a parameter
        to getAttribute(). In this case, the none template function will be called.
        * dom/VisitedLinkState.cpp:
        (WebCore::linkAttribute):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterScriptToken):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isURLAttribute const):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::hasValidGlyphElements const):
        * svg/SVGCursorElement.cpp:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::rebuildElements):
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::animatableAttributeForName):
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::srcValue const):
        (WebCore::SVGFontFaceUriElement::parseAttribute):
        (WebCore::SVGFontFaceUriElement::loadFont):
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::hasValidGlyphElement const):
        * svg/SVGGradientElement.cpp:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::imageSourceURL const):
        * svg/SVGMPathElement.cpp:
        * svg/SVGPatternElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::registerAttributes):
        (WebCore::SVGURIReference::parseAttribute):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::expandUseElementsInShadowTree const):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::isSupportedAttribute):
        (WebCore::SVGSMILElement::svgAttributeChanged):
        * svg/svgattrs.in:

2018-08-07  Ryosuke Niwa  <rniwa@webkit.org>

        document.open and document.write must throw while the HTML parser is synchronously constructing a custom element
        https://bugs.webkit.org/show_bug.cgi?id=187319
        <rdar://problem/42843012>

        Reviewed by Frédéric Wang.

        Make document.open, document.write, document.writeln, and document.close throw InvalidStateError during
        a synchronous custom element construction as specified:
        https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token
        https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#throw-on-dynamic-markup-insertion-counter

        Tests: fast/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html
               fast/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::openForBindings): Throw InvalidStateError when m_throwOnDynamicMarkupInsertionCount is non-zero.
        (WebCore::Document::closeForBindings): Ditto.
        (WebCore::Document::write): Ditto.
        (WebCore::Document::writeln): Ditto.
        * dom/Document.h: Re-ordered the related instance variables in the order they appear in the spec, and updated spec URLs.
        * dom/ThrowOnDynamicMarkupInsertionCountIncrementer.h: Added.
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer): Added.
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer::ThrowOnDynamicMarkupInsertionCountIncrementer):
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer::~ThrowOnDynamicMarkupInsertionCountIncrementer):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Instantiate ThrowOnDynamicMarkupInsertionCountIncrementer.

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

        Use 1-byte enum class for Document::StandaloneStatus
        https://bugs.webkit.org/show_bug.cgi?id=188352

        Reviewed by Chris Dumez.

        * dom/Document.cpp:
        (WebCore::Document::setXMLStandalone):
        * dom/Document.h:
        (WebCore::Document::xmlStandalone const):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendXMLDeclaration):

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

        fetch() with subresource integrity crashes on zero length body
        https://bugs.webkit.org/show_bug.cgi?id=184325

        Reviewed by Alex Christensen.

        Check that resourceBuffer() is non null before dereferencing.

        Tests: http/tests/subresource-integrity/sri-fetch.js
               http/tests/subresource-integrity/sri-fetch-worker.js

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFinishLoading):

2018-08-07  Justin Fan  <justin_fan@apple.com>

        Prevent querying for renderer info for disconnected or uninitialized displays
        https://bugs.webkit.org/show_bug.cgi?id=188387
        <rdar://problem/42588769>

        Reviewed by Simon Fraser.

        Calling CGL functions with a NULL displayMask crashes the process.

        No tests; requires multiple displays.

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

2018-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        document.open and document.write must throw while the HTML parser is synchronously constructing a custom element
        https://bugs.webkit.org/show_bug.cgi?id=187319
        <rdar://problem/42843012>

        Reviewed by Frédéric Wang.

        Make document.open, document.write, document.writeln, and document.close throw InvalidStateError during
        a synchronous custom element construction as specified:
        https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token
        https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#throw-on-dynamic-markup-insertion-counter

        Tests: fast/custom-elements/throw-on-dynamic-markup-insertion-counter-construct.html
               fast/custom-elements/throw-on-dynamic-markup-insertion-counter-reactions.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::openForBindings): Throw InvalidStateError when m_throwOnDynamicMarkupInsertionCount is non-zero.
        (WebCore::Document::closeForBindings): Ditto.
        (WebCore::Document::write): Ditto.
        (WebCore::Document::writeln): Ditto.
        * dom/Document.h: Re-ordered the related instance variables in the order they appear in the spec, and updated spec URLs.
        * dom/ThrowOnDynamicMarkupInsertionCountIncrementer.h: Added.
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer): Added.
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer::ThrowOnDynamicMarkupInsertionCountIncrementer):
        (WebCore::ThrowOnDynamicMarkupInsertionCountIncrementer::~ThrowOnDynamicMarkupInsertionCountIncrementer):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Instantiate ThrowOnDynamicMarkupInsertionCountIncrementer.

2018-08-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, suppress warnings to fix the build.

        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::getCommonCryptoDigestAlgorithm):

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

        Removed unused *AllInOne.cpp
        https://bugs.webkit.org/show_bug.cgi?id=188369

        Reviewed by Yusuke Suzuki.

        * accessibility/AccessibilityAllInOne.cpp: Removed.
        * bindings/js/JSBindingsAllInOne.cpp: Removed.
        * css/CSSAllInOne.cpp: Removed.
        * dom/DOMAllInOne.cpp: Removed.
        * editing/EditingAllInOne.cpp: Removed.
        * html/HTMLElementsAllInOne.cpp: Removed.
        * inspector/InspectorAllInOne.cpp: Removed.
        * loader/appcache/ApplicationCacheAllInOne.cpp: Removed.
        * mathml/MathMLAllInOne.cpp: Removed.
        * platform/text/TextAllInOne.cpp: Removed.
        * rendering/RenderingAllInOne.cpp: Removed.
        * rendering/style/StyleAllInOne.cpp: Removed.
        * rendering/svg/RenderSVGAllInOne.cpp: Removed.
        * svg/SVGAllInOne.cpp: Removed.

2018-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] Handle some virtual keys commonly used on TVs
        https://bugs.webkit.org/show_bug.cgi?id=188375

        Reviewed by Žan Doberšek.

        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForGdkKeyCode):
        * platform/wpe/PlatformKeyboardEventWPE.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForWPEKeyCode):

2018-08-07  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::CompositionLayerTextureMapperImpl
        https://bugs.webkit.org/show_bug.cgi?id=188348

        Reviewed by Carlos Garcia Campos.

        Add the Nicosia::CompositionLayerTextureMapperImpl class, the
        TextureMapper-specific implementation that will extend the
        CompositionLayer class.

        The important deatil of this implementation is the TextureMapperLayer
        object that's expected to be managed by the composition controller. As
        such, it is placed inside the CompositionState struct to clearly
        indicate its utility and expected place of management. In the current
        setup, this place would be the CoordinatedGraphicsScene class.

        The Nicosia::CompositionLayer object that's spawned for each
        CoordinatedGraphicsLayer instance is now switched to using the
        CompositionLayerTextureMapperImpl object, with the local temporary no-op
        CompositionLayer::Impl class removed.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/texmap/NicosiaCompositionLayerTextureMapperImpl.cpp: Added.
        (Nicosia::CompositionLayerTextureMapperImpl::createFactory):
        * platform/graphics/nicosia/texmap/NicosiaCompositionLayerTextureMapperImpl.h: Added.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (): Deleted.

2018-08-07  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add the TextureMapper-specific ContentLayer::Impl derivative
        https://bugs.webkit.org/show_bug.cgi?id=188344

        Reviewed by Carlos Garcia Campos.

        Add Nicosia::ContentLayerTextureMapperImpl class, providing the
        TextureMapper-specific implementation that derives from the
        ContentLayer::Impl class and which can be used by the
        Nicosia::ContentLayer instances.

        Internally a TextureMapperPlatformLayerProxy is created, and is
        accessible to others through a getter. This way the content producers
        can push new buffers into this proxy object, and the scene compositor
        can take these buffers for display purposes.

        Nicosia::ContentLayerTextureMapperImpl::swapBuffersIfNeeded() will be
        called during layer flushes, and the call will cause the content layer
        clients to take their texture, wrap it into a buffer, and push it into
        the TextureMapperPlatformLayerProxy object. At the moment this operation
        is required by the ImageBuffer and GraphicsContext3D producers.

        The Client object is managed under its own lock. While the producers
        will only live on the main thread, the thread-safe check in the
        destructor is necessary in case the ContentLayerTextureMapperImpl object
        ends up being destroyed on some other thread.

        The patch only adds the class implementation. It will be integrated into
        the layer tree later, once all the other pieces of the puzzle land.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.cpp: Added.
        (Nicosia::ContentLayerTextureMapperImpl::createFactory):
        (Nicosia::ContentLayerTextureMapperImpl::ContentLayerTextureMapperImpl):
        (Nicosia::ContentLayerTextureMapperImpl::~ContentLayerTextureMapperImpl):
        (Nicosia::ContentLayerTextureMapperImpl::invalidateClient):
        (Nicosia::ContentLayerTextureMapperImpl::swapBuffersIfNeeded):
        * platform/graphics/nicosia/texmap/NicosiaContentLayerTextureMapperImpl.h: Added.

2018-08-07  Frederic Wang  <fwang@igalia.com>

        Make DOMWindow::scrollBy rely on DOMWindow::scrollTo
        https://bugs.webkit.org/show_bug.cgi?id=188343

        Reviewed by Darin Adler.

        This patch makes DOMWindow::scrollBy rely on DOMWindow::scrollTo in order to perform actual
        scrolling of the view. In particular, this reduces the number of code path to modify in order
        to implement the ScrollBehavior option (bug 188043). The only change is an optimization when
        scrolling to position (0, 0) but it is not observable.

        No new tests, behavior unchanged and already tested.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollBy const): Add the current view position to the scrollBy offset in
        order to obtain the scrollTo offset.

2018-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Add CEReactions=NotNeeded for reactions only needed for customized builtins
        https://bugs.webkit.org/show_bug.cgi?id=187851

        Reviewed by Chris Dumez.

        Because WebKit doesn't and will not support customized builtin elements, there are many DOM APIs marked with
        [CEReactions] which don't actually need CustomElementReactionStack.

        To clarify and document this difference, this patch introduces WebKit extention: [CEReactions=NotNeeded].
        When this IDL attribute is specified, we generate CustomElementReactionDisallowedScope in the bindings code
        to assert that there are no custom elements reactions being enqueued within the DOM API.

        We suppress this assertion in CustomElementReactionStack since a DOM API with [CEReactions=NotNeeded] can
        synchronously fire an event and otherwise execute arbirary scripts, which in turn could invoke a DOM API
        with [CEReactions].

        This patch deployes this change to HTMLIFrameElement since "src" IDL attribute triggers this second scenario.

        Test: fast/custom-elements/custom-element-reaction-within-disallowed-scope.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut):
        (GeneratePutByIndex):
        (GenerateDefineOwnProperty):
        (GenerateDeletePropertyCommon):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateCustomElementReactionsStackIfNeeded): Added. Generate CustomElementReactionStack for [CEReactions]
        and CustomElementReactionDisallowedScope for [CEReactions=NotNeeded].
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/TestCEReactions.idl: Added test cases for [CEReactions=NotNeeded].
        * bindings/scripts/test/TestCEReactionsStringifier.idl: Ditto.
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueElementUpgrade): Added an assertion to catch cases where
        a DOM API with [CEReactions=NotNeeded] enqueues a custom element reaction; i.e. cases where [CEReactions]
        should have been used.
        (WebCore::CustomElementReactionQueue::enqueueElementUpgradeIfDefined): Ditto.
        (WebCore::CustomElementReactionQueue::enqueueConnectedCallbackIfNeeded): Ditto.
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded): Ditto.
        (WebCore::CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded): Ditto.
        (WebCore::CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded): Ditto.
        (WebCore::CustomElementReactionQueue::enqueuePostUpgradeReactions): Ditto.
        * dom/CustomElementReactionQueue.h:
        (WebCore::CustomElementReactionDisallowedScope): Added. Enables the assertion in enqueue* functions above.
        (WebCore::CustomElementReactionDisallowedScope::CustomElementReactionDisallowedScope): Added.
        (WebCore::CustomElementReactionDisallowedScope::~CustomElementReactionDisallowedScope): Added.
        (WebCore::CustomElementReactionDisallowedScope::isReactionAllowed): Added.
        (WebCore::CustomElementReactionDisallowedScope::AllowedScope): Added.
        (WebCore::CustomElementReactionDisallowedScope::AllowedScope::AllowedScope): Added.
        (WebCore::CustomElementReactionDisallowedScope::AllowedScope::~AllowedScope): Added.
        (WebCore::CustomElementReactionStack): Suppress the assertion. See above for why this is needed.
        * html/HTMLIFrameElement.idl:

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

        Clean up initialization of some RenderLayer members
        https://bugs.webkit.org/show_bug.cgi?id=188330

        Reviewed by Dean Jackson.

        Use initializers for the pointers. No need to initialize LayoutUnits, which initialize to zero.

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

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

        Remove the SVG elements' attributes macros
        https://bugs.webkit.org/show_bug.cgi?id=186751

        Reviewed by Simon Fraser.

        This is how the SVG attributes are implemented after removing the SVG macros:

        1) The SVG attribute is defined as a super class of SVGAttribute. The super
           classes of SVGAttribute are template classes. The type of these template
           are the property type or the TearOff type.

        2) To unify accessing attributes of the SVGElements and its super classes
           an SVGAttributeAccessor template class is added. It is inherited by other
           template classes. The types of these templates are the owner and the
           attributes types. The main functions of these classes is to synchronize 
           the new property value with the document attributes pool and to create
           and cache the TearOff objects.

        3) To make code shorter and more readable, attribute types and attribute
           accessors are defined for every SVG TearOff type, e.g. 
           -- SVGLength: 
                SVGAnimatedLengthAttribute and SVGAnimatedLengthAttributeAccessor
           -- SVGAnimatedNumber: 
                SVGAnimatedNumberAttribute and SVGAnimatedNumberAttributeAccessor

        4) A special accessor is defined for animated pair and optional attributes:
           SVGAnimatedPairAttributeAccessor, e.g.
           -- SVGMarkerElement:
                orient attribute: "angle" or "type"
           -- SVGFEGaussianBlurElement:
                stdDeviation attribute: "x" and "y"

        5) The SVG attributes have to be registered into an singleton SVGAttributeRegistry.
           The SVGAttributeRegistry is a template class. The types of this template
           class are the the type of the owner and the base classes of this owner.
           This registry holds a map from "attribute name" to  "attribute accessor".

        6) To make the code easier to read, the SVGAttributeRegistry implements
           registerAttribute() for different attribute types. The owner needs only
           to provide the attribute name and a pointer to the class member of this
           attribute to the same function "registerAttribute()". The compiler will
           pick the right function to call based on the type of the attribute.

        7) Given a reference to the owner element, SVGAttributeRegistry can loop
           through the attributes of this owner and through the attributes of its
           base classes as well to do operations like synchronizing all the attributes
           or creating the TearOff object of a certain attribute.

        8) To make the base class SVGElement have the ability to access the attributes
           of any of its super classes, SVGAttributeOwnerProxy will be used.
           SVGAttributeOwnerProxy is a base class which have all the functions that
           SVGElement needs as pure virtual functions.

        9) SVGAttributeOwnerProxyImpl is a template class which implements 
           SVGAttributeOwnerProxy and whose types are the owner and its base classes.
           SVGAttributeOwnerProxyImpl keeps a reference to the owner and the context
           SVGElement.

        10) All the SVG attribute owners have to implement the virtual function
            attributeOwnerProxy() which returns a reference to SVGAttributeOwnerProxy.
            The local attributeOwnerProxy() returns a reference to a local
            SVGAttributeOwnerProxyImpl. Its type and base types are the class
            hierarchy of this element.

        All the attributes of the non-SVGElement-based classes are moved as members
        of these classes instead of adding them to all the super classes. These
        classes are:
           -- SVGExternalResourcesRequired
           -- SVGURIReference
           -- SVGFitToViewBox
           -- SVGZoomAndPan
           -- SVGLangSpace

        The svgAttributeChanged() of all the SVGElement-based classes are now 
        simplified by distributing the responsibilities of changing an attribute
        to the base classes. One exception is the SVGURIReference since the action
        to be taken when changing the "href" is different for every super class.

        Other work will be done in separate patches.
           -- Shrinking the memory of the SVGElements.
           -- Making all the attributes RefCounted objects.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::draw):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        (WebCore::SVGAElement::registerAttributes):
        (WebCore::SVGAElement::parseAttribute):
        (WebCore::SVGAElement::svgAttributeChanged):
        * svg/SVGAElement.h:
        * svg/SVGAElement.idl:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::requiredFeatures): Deleted.
        (WebCore::SVGAnimationElement::requiredExtensions): Deleted.
        (WebCore::SVGAnimationElement::systemLanguage): Deleted.
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::attributeRegistry):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        (WebCore::SVGCircleElement::registerAttributes):
        (WebCore::SVGCircleElement::parseAttribute):
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        (WebCore::SVGClipPathElement::registerAttributes):
        (WebCore::SVGClipPathElement::parseAttribute):
        (WebCore::SVGClipPathElement::svgAttributeChanged):
        (WebCore::SVGClipPathElement::isSupportedAttribute): Deleted.
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::registerAttributes):
        (WebCore::SVGComponentTransferFunctionElement::parseAttribute):
        (WebCore::SVGComponentTransferFunctionElement::svgAttributeChanged):
        (WebCore::SVGComponentTransferFunctionElement::transferFunction const):
        (WebCore::SVGComponentTransferFunctionElement::isSupportedAttribute): Deleted.
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGComponentTransferFunctionElement::type const):
        (WebCore::SVGComponentTransferFunctionElement::tableValues const):
        (WebCore::SVGComponentTransferFunctionElement::slope const):
        (WebCore::SVGComponentTransferFunctionElement::intercept const):
        (WebCore::SVGComponentTransferFunctionElement::amplitude const):
        (WebCore::SVGComponentTransferFunctionElement::exponent const):
        (WebCore::SVGComponentTransferFunctionElement::offset const):
        (WebCore::SVGComponentTransferFunctionElement::typeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::tableValuesAnimated):
        (WebCore::SVGComponentTransferFunctionElement::slopeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::interceptAnimated):
        (WebCore::SVGComponentTransferFunctionElement::amplitudeAnimated):
        (WebCore::SVGComponentTransferFunctionElement::exponentAnimated):
        (WebCore::SVGComponentTransferFunctionElement::offsetAnimated):
        (WebCore::SVGComponentTransferFunctionElement::attributeRegistry):
        (WebCore::SVGComponentTransferFunctionElement::isKnownAttribute):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        (WebCore::SVGCursorElement::registerAttributes):
        (WebCore::SVGCursorElement::parseAttribute):
        (WebCore::SVGCursorElement::svgAttributeChanged):
        (WebCore::SVGCursorElement::isSupportedAttribute): Deleted.
        (WebCore::SVGCursorElement::requiredFeatures): Deleted.
        (WebCore::SVGCursorElement::requiredExtensions): Deleted.
        (WebCore::SVGCursorElement::systemLanguage): Deleted.
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDefsElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement):
        (WebCore::SVGElement::registerAttributes):
        (WebCore::SVGElement::parseAttribute):
        (WebCore::SVGElement::animatedPropertyTypesForAttribute):
        (WebCore::SVGElement::synchronizeAllAnimatedSVGAttribute):
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute const):
        (WebCore::SVGElement::isPresentationAttributeWithSVGDOM):
        (WebCore::SVGElement::svgAttributeChanged):
        (WebCore::SVGElement::synchronizeRequiredFeatures): Deleted.
        (WebCore::SVGElement::synchronizeRequiredExtensions): Deleted.
        (WebCore::SVGElement::synchronizeSystemLanguage): Deleted.
        (WebCore::SVGElement::isKnownAttribute): Deleted.
        * svg/SVGElement.h:
        (WebCore::SVGElement::attributeRegistry):
        (WebCore::SVGElement::isKnownAttribute):
        (WebCore::SVGElement::attributeOwnerProxy const):
        (WebCore::SVGElement::synchronizeAttribute):
        (WebCore::SVGElement::synchronizeAttributes):
        (WebCore::SVGElement::animatedTypes const):
        (WebCore::SVGElement::lookupAnimatedProperty const):
        (WebCore::SVGElement::lookupOrCreateAnimatedProperty):
        (WebCore::SVGElement::lookupOrCreateAnimatedProperties):
        (WebCore::SVGElement::className const):
        (WebCore::SVGElement::classNameAnimated):
        (WebCore::SVGElement::synchronizeRequiredFeatures): Deleted.
        (WebCore::SVGElement::synchronizeRequiredExtensions): Deleted.
        (WebCore::SVGElement::synchronizeSystemLanguage): Deleted.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        (WebCore::SVGEllipseElement::registerAttributes):
        (WebCore::SVGEllipseElement::parseAttribute):
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        (WebCore::SVGExternalResourcesRequired::SVGExternalResourcesRequired):
        (WebCore::SVGExternalResourcesRequired::registerAttributes):
        (WebCore::SVGExternalResourcesRequired::parseAttribute):
        (WebCore::SVGExternalResourcesRequired::svgAttributeChanged):
        (WebCore::SVGExternalResourcesRequired::addSupportedAttributes):
        (WebCore::SVGExternalResourcesRequired::dispatchLoadEvent):
        (WebCore::SVGExternalResourcesRequired::insertedIntoDocument):
        (WebCore::SVGExternalResourcesRequired::finishParsingChildren):
        (WebCore::SVGExternalResourcesRequired::haveLoadedRequiredResources const):
        (WebCore::SVGExternalResourcesRequired::isKnownAttribute): Deleted.
        (WebCore::SVGExternalResourcesRequired::handleAttributeChange): Deleted.
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::attributeRegistry):
        (WebCore::SVGExternalResourcesRequired::externalResourcesRequiredAnimated):
        (WebCore::SVGExternalResourcesRequired::externalResourcesRequired const):
        (WebCore::SVGExternalResourcesRequired::setExternalResourcesRequired):
        (WebCore::SVGExternalResourcesRequired::isKnownAttribute):
        (WebCore::SVGExternalResourcesRequired::attributeOwnerProxy):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::registerAttributes):
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::registerAttributes):
        (WebCore::SVGFEColorMatrixElement::parseAttribute):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        (WebCore::SVGFEComponentTransferElement::registerAttributes):
        (WebCore::SVGFEComponentTransferElement::parseAttribute):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        (WebCore::SVGFECompositeElement::registerAttributes):
        (WebCore::SVGFECompositeElement::parseAttribute):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::registerAttributes):
        (WebCore::SVGFEConvolveMatrixElement::parseAttribute):
        (WebCore::SVGFEConvolveMatrixElement::setFilterEffectAttribute):
        (WebCore::SVGFEConvolveMatrixElement::setOrder):
        (WebCore::SVGFEConvolveMatrixElement::setKernelUnitLength):
        * svg/SVGFEConvolveMatrixElement.h:
        (WebCore::SVGPropertyTraits<EdgeModeType>::initialValue):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        (WebCore::SVGFEDiffuseLightingElement::registerAttributes):
        (WebCore::SVGFEDiffuseLightingElement::parseAttribute):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        (WebCore::SVGFEDisplacementMapElement::registerAttributes):
        (WebCore::SVGFEDisplacementMapElement::parseAttribute):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::SVGFEDropShadowElement):
        (WebCore::SVGFEDropShadowElement::setStdDeviation):
        (WebCore::SVGFEDropShadowElement::registerAttributes):
        (WebCore::SVGFEDropShadowElement::parseAttribute):
        (WebCore::SVGFEDropShadowElement::svgAttributeChanged):
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        (WebCore::SVGFEGaussianBlurElement::setStdDeviation):
        (WebCore::SVGFEGaussianBlurElement::registerAttributes):
        (WebCore::SVGFEGaussianBlurElement::parseAttribute):
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        (WebCore::SVGFEImageElement::registerAttributes):
        (WebCore::SVGFEImageElement::parseAttribute):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        (WebCore::SVGFELightElement::registerAttributes):
        (WebCore::SVGFELightElement::parseAttribute):
        (WebCore::SVGFELightElement::svgAttributeChanged):
        * svg/SVGFELightElement.h:
        (WebCore::SVGFELightElement::azimuth const):
        (WebCore::SVGFELightElement::elevation const):
        (WebCore::SVGFELightElement::x const):
        (WebCore::SVGFELightElement::y const):
        (WebCore::SVGFELightElement::z const):
        (WebCore::SVGFELightElement::pointsAtX const):
        (WebCore::SVGFELightElement::pointsAtY const):
        (WebCore::SVGFELightElement::pointsAtZ const):
        (WebCore::SVGFELightElement::specularExponent const):
        (WebCore::SVGFELightElement::limitingConeAngle const):
        (WebCore::SVGFELightElement::azimuthAnimated):
        (WebCore::SVGFELightElement::elevationAnimated):
        (WebCore::SVGFELightElement::xAnimated):
        (WebCore::SVGFELightElement::yAnimated):
        (WebCore::SVGFELightElement::zAnimated):
        (WebCore::SVGFELightElement::pointsAtXAnimated):
        (WebCore::SVGFELightElement::pointsAtYAnimated):
        (WebCore::SVGFELightElement::pointsAtZAnimated):
        (WebCore::SVGFELightElement::specularExponentAnimated):
        (WebCore::SVGFELightElement::limitingConeAngleAnimated):
        (WebCore::SVGFELightElement::attributeRegistry):
        (WebCore::SVGFELightElement::isKnownAttribute):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        (WebCore::SVGFEMergeNodeElement::registerAttributes):
        (WebCore::SVGFEMergeNodeElement::parseAttribute):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        (WebCore::SVGFEMorphologyElement::setRadius):
        (WebCore::SVGFEMorphologyElement::registerAttributes):
        (WebCore::SVGFEMorphologyElement::parseAttribute):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        (WebCore::SVGFEOffsetElement::registerAttributes):
        (WebCore::SVGFEOffsetElement::parseAttribute):
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        (WebCore::SVGFESpecularLightingElement::registerAttributes):
        (WebCore::SVGFESpecularLightingElement::parseAttribute):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        (WebCore::SVGFETileElement::registerAttributes):
        (WebCore::SVGFETileElement::parseAttribute):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        (WebCore::SVGFETurbulenceElement::registerAttributes):
        (WebCore::SVGFETurbulenceElement::parseAttribute):
        (WebCore::SVGFETurbulenceElement::setFilterEffectAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        (WebCore::SVGFilterElement::setFilterRes):
        (WebCore::SVGFilterElement::registerAttributes):
        (WebCore::SVGFilterElement::parseAttribute):
        (WebCore::SVGFilterElement::svgAttributeChanged):
        (WebCore::SVGFilterElement::isSupportedAttribute): Deleted.
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::registerAttributes):
        (WebCore::SVGFilterPrimitiveStandardAttributes::parseAttribute):
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::isSupportedAttribute): Deleted.
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::attributeRegistry):
        (WebCore::SVGFilterPrimitiveStandardAttributes::x const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::y const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::width const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::height const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::result const):
        (WebCore::SVGFilterPrimitiveStandardAttributes::xAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::yAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::widthAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::heightAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::resultAnimated):
        (WebCore::SVGFilterPrimitiveStandardAttributes::isKnownAttribute):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::SVGFitToViewBox):
        (WebCore::SVGFitToViewBox::registerAttributes):
        (WebCore::SVGFitToViewBox::setViewBox):
        (WebCore::SVGFitToViewBox::resetViewBox):
        (WebCore::SVGFitToViewBox::reset):
        (WebCore::SVGFitToViewBox::parseAttribute):
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::isKnownAttribute): Deleted.
        (WebCore::SVGFitToViewBox::addSupportedAttributes): Deleted.
        * svg/SVGFitToViewBox.h:
        (WebCore::SVGFitToViewBox::attributeRegistry):
        (WebCore::SVGFitToViewBox::viewBox const):
        (WebCore::SVGFitToViewBox::preserveAspectRatio const):
        (WebCore::SVGFitToViewBox::viewBoxAnimated):
        (WebCore::SVGFitToViewBox::preserveAspectRatioAnimated):
        (WebCore::SVGFitToViewBox::setPreserveAspectRatio):
        (WebCore::SVGFitToViewBox::resetPreserveAspectRatio):
        (WebCore::SVGFitToViewBox::viewBoxString const):
        (WebCore::SVGFitToViewBox::preserveAspectRatioString const):
        (WebCore::SVGFitToViewBox::hasValidViewBox const):
        (WebCore::SVGFitToViewBox::hasEmptyViewBox const):
        (WebCore::SVGFitToViewBox::isKnownAttribute):
        (WebCore::SVGFitToViewBox::parseAttribute): Deleted.
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        (WebCore::SVGForeignObjectElement::registerAttributes):
        (WebCore::SVGForeignObjectElement::parseAttribute):
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        (WebCore::SVGForeignObjectElement::isSupportedAttribute): Deleted.
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        (WebCore::SVGGElement::svgAttributeChanged):
        (WebCore::SVGGElement::isSupportedAttribute): Deleted.
        * svg/SVGGElement.h:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::SVGGeometryElement):
        (WebCore::SVGGeometryElement::registerAttributes):
        (WebCore::SVGGeometryElement::parseAttribute):
        (WebCore::SVGGeometryElement::svgAttributeChanged):
        (WebCore::SVGGeometryElement::isSupportedAttribute): Deleted.
        * svg/SVGGeometryElement.h:
        (WebCore::SVGGeometryElement::attributeRegistry):
        (WebCore::SVGGeometryElement::pathLengthAnimated):
        (WebCore::SVGGeometryElement::isKnownAttribute):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::SVGGlyphRefElement):
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::registerAttributes):
        (WebCore::SVGGradientElement::parseAttribute):
        (WebCore::SVGGradientElement::svgAttributeChanged):
        (WebCore::SVGGradientElement::isSupportedAttribute): Deleted.
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::attributeRegistry):
        (WebCore::SVGGradientElement::spreadMethod const):
        (WebCore::SVGGradientElement::gradientUnits const):
        (WebCore::SVGGradientElement::gradientTransform const):
        (WebCore::SVGGradientElement::spreadMethodAnimated):
        (WebCore::SVGGradientElement::gradientUnitsAnimated):
        (WebCore::SVGGradientElement::gradientTransformAnimated):
        (WebCore::SVGGradientElement::isKnownAttribute):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::SVGGraphicsElement):
        (WebCore::SVGGraphicsElement::registerAttributes):
        (WebCore::SVGGraphicsElement::parseAttribute):
        (WebCore::SVGGraphicsElement::svgAttributeChanged):
        (WebCore::SVGGraphicsElement::isSupportedAttribute): Deleted.
        (WebCore::SVGGraphicsElement::requiredFeatures): Deleted.
        (WebCore::SVGGraphicsElement::requiredExtensions): Deleted.
        (WebCore::SVGGraphicsElement::systemLanguage): Deleted.
        * svg/SVGGraphicsElement.h:
        (WebCore::SVGGraphicsElement::attributeRegistry):
        (WebCore::SVGGraphicsElement::transform const):
        (WebCore::SVGGraphicsElement::transformAnimated):
        (WebCore::SVGGraphicsElement::isKnownAttribute):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        (WebCore::SVGImageElement::registerAttributes):
        (WebCore::SVGImageElement::parseAttribute):
        (WebCore::SVGImageElement::svgAttributeChanged):
        (WebCore::SVGImageElement::haveLoadedRequiredResources):
        (WebCore::SVGImageElement::isSupportedAttribute): Deleted.
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        * svg/SVGLangSpace.cpp:
        (WebCore::SVGLangSpace::SVGLangSpace):
        (WebCore::SVGLangSpace::registerAttributes):
        (WebCore::SVGLangSpace::xmlspace const):
        (WebCore::SVGLangSpace::svgAttributeChanged):
        (WebCore::SVGLangSpace::setXmllang): Deleted.
        (WebCore::SVGLangSpace::setXmlspace): Deleted.
        (WebCore::SVGLangSpace::isKnownAttribute): Deleted.
        (WebCore::addWithAndWithoutXMLPrefix): Deleted.
        (WebCore::SVGLangSpace::addSupportedAttributes): Deleted.
        * svg/SVGLangSpace.h:
        (WebCore::SVGLangSpace::xmllang const):
        (WebCore::SVGLangSpace::setXmllang):
        (WebCore::SVGLangSpace::setXmlspace):
        (WebCore::SVGLangSpace::attributeRegistry):
        (WebCore::SVGLangSpace::isKnownAttribute):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        (WebCore::SVGLineElement::registerAttributes):
        (WebCore::SVGLineElement::parseAttribute):
        (WebCore::SVGLineElement::svgAttributeChanged):
        (WebCore::SVGLineElement::isSupportedAttribute): Deleted.
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        (WebCore::SVGLinearGradientElement::registerAttributes):
        (WebCore::SVGLinearGradientElement::parseAttribute):
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        (WebCore::SVGLinearGradientElement::isSupportedAttribute): Deleted.
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        (WebCore::SVGMPathElement::svgAttributeChanged):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        (WebCore::SVGMarkerElement::registerAttributes):
        (WebCore::SVGMarkerElement::parseAttribute):
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::setOrient):
        (WebCore::SVGMarkerElement::orientTypePropertyInfo): Deleted.
        (WebCore::SVGMarkerElement::isSupportedAttribute): Deleted.
        (WebCore::SVGMarkerElement::synchronizeOrientType): Deleted.
        (WebCore::SVGMarkerElement::lookupOrCreateOrientTypeWrapper): Deleted.
        (WebCore::SVGMarkerElement::orientType const): Deleted.
        (WebCore::SVGMarkerElement::orientTypeAnimated): Deleted.
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::registerAttributes):
        (WebCore::SVGMaskElement::parseAttribute):
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::isSupportedAttribute): Deleted.
        (WebCore::SVGMaskElement::requiredFeatures): Deleted.
        (WebCore::SVGMaskElement::requiredExtensions): Deleted.
        (WebCore::SVGMaskElement::systemLanguage): Deleted.
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::registerAttributes):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::pathByteStream const):
        (WebCore::SVGPathElement::lookupOrCreateDWrapper):
        (WebCore::SVGPathElement::animatedPropertyWillBeDeleted):
        (WebCore::SVGPathElement::pathSegList):
        (WebCore::SVGPathElement::animatedPathSegList):
        (WebCore::SVGPathElement::pathSegListChanged):
        (WebCore::SVGPathElement::dPropertyInfo): Deleted.
        (WebCore::SVGPathElement::isSupportedAttribute): Deleted.
        (WebCore::SVGPathElement::synchronizeD): Deleted.
        * svg/SVGPathElement.h:
        * svg/SVGPathSegListValues.h:
        (WebCore::SVGPropertyTraits<SVGPathSegListValues>::toString):
        * svg/SVGPathSegWithContext.h:
        (WebCore::SVGPathSegWithContext::animatedProperty const):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::registerAttributes):
        (WebCore::SVGPatternElement::parseAttribute):
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::collectPatternAttributes const):
        (WebCore::SVGPatternElement::isSupportedAttribute): Deleted.
        (WebCore::SVGPatternElement::requiredFeatures): Deleted.
        (WebCore::SVGPatternElement::requiredExtensions): Deleted.
        (WebCore::SVGPatternElement::systemLanguage): Deleted.
        * svg/SVGPatternElement.h:
        * svg/SVGPointListValues.h:
        (WebCore::SVGPropertyTraits<SVGPointListValues>::toString):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        (WebCore::SVGPolyElement::registerAttributes):
        (WebCore::SVGPolyElement::parseAttribute):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        (WebCore::SVGPolyElement::pointsPropertyInfo): Deleted.
        (WebCore::SVGPolyElement::synchronizePoints): Deleted.
        (WebCore::SVGPolyElement::lookupOrCreatePointsWrapper): Deleted.
        * svg/SVGPolyElement.h:
        (WebCore::SVGPolyElement::pointList const):
        (WebCore::SVGPolyElement::attributeRegistry):
        (WebCore::SVGPolyElement::isKnownAttribute):
        * svg/SVGPreserveAspectRatioValue.cpp:
        (WebCore::SVGPreserveAspectRatioValue::transformRect const):
        (WebCore::SVGPreserveAspectRatioValue::transformRect): Deleted.
        * svg/SVGPreserveAspectRatioValue.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::registerAttributes):
        (WebCore::SVGRadialGradientElement::parseAttribute):
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::isSupportedAttribute): Deleted.
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        (WebCore::SVGRectElement::registerAttributes):
        (WebCore::SVGRectElement::parseAttribute):
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::registerAttributes):
        (WebCore::SVGSVGElement::parseAttribute):
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::viewBoxToViewTransform const):
        (WebCore::SVGSVGElement::resetScrollAnchor):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::useCurrentView const): Deleted.
        (WebCore::SVGSVGElement::currentTranslateValue): Deleted.
        (WebCore::SVGSVGElement::zoomAndPan const): Deleted.
        (WebCore::SVGSVGElement::setZoomAndPan): Deleted.
        (WebCore::SVGSVGElement::timeContainer): Deleted.
        (WebCore::SVGSVGElement::hasEmptyViewBox const): Deleted.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::insertedIntoAncestor):
        (WebCore::SVGScriptElement::addSubresourceAttributeURLs const):
        (WebCore::SVGScriptElement::isURLAttribute const): Deleted.
        (WebCore::SVGScriptElement::sourceAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::charsetAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::typeAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::languageAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::forAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::eventAttributeValue const): Deleted.
        (WebCore::SVGScriptElement::hasAsyncAttribute const): Deleted.
        (WebCore::SVGScriptElement::hasDeferAttribute const): Deleted.
        (WebCore::SVGScriptElement::hasNoModuleAttribute const): Deleted.
        (WebCore::SVGScriptElement::hasSourceAttribute const): Deleted.
        (WebCore::SVGScriptElement::filterOutAnimatableAttribute const): Deleted.
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        (WebCore::SVGStopElement::registerAttributes):
        (WebCore::SVGStopElement::parseAttribute):
        * svg/SVGStopElement.h:
        * svg/SVGStringListValues.h:
        (WebCore::SVGPropertyTraits<SVGStringListValues>::toString):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        (WebCore::SVGSymbolElement::parseAttribute):
        (WebCore::SVGSymbolElement::svgAttributeChanged):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTRefElement.h:
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::SVGTests):
        (WebCore::SVGTests::registerAttributes):
        (WebCore::SVGTests::attributeRegistry):
        (WebCore::SVGTests::isKnownAttribute):
        (WebCore::SVGTests::isValid const):
        (WebCore::SVGTests::parseAttribute):
        (WebCore::SVGTests::svgAttributeChanged):
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        (WebCore::createSVGTestPropertyInfo): Deleted.
        (WebCore::createSVGTextAttributeToPropertyMap): Deleted.
        (WebCore::SVGTests::attributeToPropertyMap): Deleted.
        (WebCore::SVGTests::handleAttributeChange): Deleted.
        (WebCore::SVGTests::synchronizeAttribute): Deleted.
        (WebCore::SVGTests::synchronizeRequiredFeatures): Deleted.
        (WebCore::SVGTests::synchronizeRequiredExtensions): Deleted.
        (WebCore::SVGTests::synchronizeSystemLanguage): Deleted.
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        (WebCore::SVGTextContentElement::registerAttributes):
        (WebCore::SVGTextContentElement::parseAttribute):
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        (WebCore::SVGTextContentElement::textLengthPropertyInfo): Deleted.
        (WebCore::SVGTextContentElement::synchronizeTextLength): Deleted.
        (WebCore::SVGTextContentElement::lookupOrCreateTextLengthWrapper): Deleted.
        (WebCore::SVGTextContentElement::textLengthAnimated): Deleted.
        (WebCore::SVGTextContentElement::isSupportedAttribute): Deleted.
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::specifiedTextLength):
        (WebCore::SVGTextContentElement::attributeRegistry):
        (WebCore::SVGTextContentElement::textLength const):
        (WebCore::SVGTextContentElement::lengthAdjust const):
        (WebCore::SVGTextContentElement::textLengthAnimated):
        (WebCore::SVGTextContentElement::lengthAdjustAnimated):
        (WebCore::SVGTextContentElement::isKnownAttribute):
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::SVGAnimatedCustomLengthAttribute):
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::synchronize):
        (WebCore::SVGTextContentElement::SVGAnimatedCustomLengthAttribute::animatedProperty):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        (WebCore::SVGTextPathElement::registerAttributes):
        (WebCore::SVGTextPathElement::parseAttribute):
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        (WebCore::SVGTextPathElement::isSupportedAttribute): Deleted.
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::registerAttributes):
        (WebCore::SVGTextPositioningElement::parseAttribute):
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.h:
        (WebCore::SVGTextPositioningElement::attributeRegistry):
        (WebCore::SVGTextPositioningElement::x const):
        (WebCore::SVGTextPositioningElement::y const):
        (WebCore::SVGTextPositioningElement::dx const):
        (WebCore::SVGTextPositioningElement::dy const):
        (WebCore::SVGTextPositioningElement::rotate const):
        (WebCore::SVGTextPositioningElement::xAnimated):
        (WebCore::SVGTextPositioningElement::yAnimated):
        (WebCore::SVGTextPositioningElement::dxAnimated):
        (WebCore::SVGTextPositioningElement::dyAnimated):
        (WebCore::SVGTextPositioningElement::rotateAnimated):
        (WebCore::SVGTextPositioningElement::isKnownAttribute):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::SVGURIReference):
        (WebCore::SVGURIReference::registerAttributes):
        (WebCore::SVGURIReference::attributeRegistry):
        (WebCore::SVGURIReference::isKnownAttribute):
        (WebCore::SVGURIReference::parseAttribute):
        (WebCore::SVGURIReference::href const):
        (WebCore::SVGURIReference::hrefAnimated):
        (WebCore::SVGURIReference::addSupportedAttributes): Deleted.
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::registerAttributes):
        (WebCore::SVGUseElement::parseAttribute):
        (WebCore::SVGUseElement::insertedIntoAncestor):
        (WebCore::SVGUseElement::transferSizeAttributesToTargetClone const):
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::notifyFinished):
        * svg/SVGUseElement.h:
        * svg/SVGValue.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::parseAttribute):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::registerAttributes):
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::reset):
        (WebCore::SVGViewSpec::parseViewSpec):
        (WebCore::SVGViewSpec::viewBoxPropertyInfo): Deleted.
        (WebCore::SVGViewSpec::preserveAspectRatioPropertyInfo): Deleted.
        (WebCore::SVGViewSpec::transformPropertyInfo): Deleted.
        (WebCore::SVGViewSpec::viewBoxIdentifier): Deleted.
        (WebCore::SVGViewSpec::preserveAspectRatioIdentifier): Deleted.
        (WebCore::SVGViewSpec::transformIdentifier): Deleted.
        (WebCore::SVGViewSpec::setZoomAndPan): Deleted.
        (WebCore::SVGViewSpec::transformString const): Deleted.
        (WebCore::SVGViewSpec::viewBoxString const): Deleted.
        (WebCore::SVGViewSpec::preserveAspectRatioString const): Deleted.
        (WebCore::SVGViewSpec::viewBoxAnimated): Deleted.
        (WebCore::SVGViewSpec::preserveAspectRatioAnimated): Deleted.
        (WebCore::SVGViewSpec::lookupOrCreateViewBoxWrapper): Deleted.
        (WebCore::SVGViewSpec::lookupOrCreatePreserveAspectRatioWrapper): Deleted.
        (WebCore::SVGViewSpec::lookupOrCreateTransformWrapper): Deleted.
        * svg/SVGViewSpec.h:
        * svg/SVGViewSpec.idl:
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::SVGZoomAndPan):
        (WebCore::SVGZoomAndPan::registerAttributes):
        (WebCore::SVGZoomAndPan::parseZoomAndPan):
        (WebCore::SVGZoomAndPan::parseAttribute):
        (WebCore::SVGZoomAndPan::parse): Deleted.
        (WebCore::SVGZoomAndPan::parseAttributeValue): Deleted.
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::zoomAndPan const):
        (WebCore::SVGZoomAndPan::setZoomAndPan):
        (WebCore::SVGZoomAndPan::reset):
        (WebCore::SVGZoomAndPan::attributeRegistry):
        (WebCore::SVGZoomAndPan::isKnownAttribute):
        (WebCore::SVGZoomAndPan::parseFromNumber): Deleted.
        (WebCore::SVGZoomAndPan::parseAttribute): Deleted.
        * svg/SVGZoomAndPanType.h: Copied from Source/WebCore/svg/SVGValue.h.
        (WebCore::SVGPropertyTraits<SVGZoomAndPanType>::initialValue):
        (WebCore::SVGPropertyTraits<SVGZoomAndPanType>::toString):
        (WebCore::SVGPropertyTraits<SVGZoomAndPanType>::fromString):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.cpp: Copied from Source/WebCore/svg/SVGValue.h.
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::~SVGAnimatedPathSegListPropertyTearOff):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animValDidChange):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedProperty.cpp:
        (WebCore::SVGAnimatedProperty::SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        (WebCore::SVGAnimatedProperty::animatedPropertyCache): Deleted.
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::isAnimating const):
        (WebCore::SVGAnimatedProperty::isAnimatedListTearOff const):
        (WebCore::SVGAnimatedProperty::lookupOrCreateAnimatedProperty):
        (WebCore::SVGAnimatedProperty::lookupAnimatedProperty):
        (WebCore::SVGAnimatedProperty::animatedPropertyCache):
        (WebCore::SVGAnimatedProperty::lookupOrCreateWrapper): Deleted.
        (WebCore::SVGAnimatedProperty::lookupWrapper): Deleted.
        * svg/properties/SVGAnimatedPropertyMacros.h: Removed.
        * svg/properties/SVGAnimatedPropertyType.h: Copied from Source/WebCore/svg/SVGAElement.idl.
        * svg/properties/SVGAttribute.h: Added.
        (WebCore::SVGPropertyAttribute::SVGPropertyAttribute):
        (WebCore::SVGPropertyAttribute::value):
        (WebCore::SVGPropertyAttribute::value const):
        (WebCore::SVGPropertyAttribute::setValue):
        (WebCore::SVGPropertyAttribute::resetValue):
        (WebCore::SVGPropertyAttribute::toString const):
        (WebCore::SVGPropertyAttribute::setShouldSynchronize):
        (WebCore::SVGPropertyAttribute::shouldSynchronize const):
        (WebCore::SVGPropertyAttribute::synchronize):
        (WebCore::SVGAnimatedAttribute::SVGAnimatedAttribute):
        (WebCore::SVGAnimatedAttribute::currentValue const):
        (WebCore::SVGAnimatedAttribute::animatedProperty):
        (WebCore::SVGAnimatedAttributeList::SVGAnimatedAttributeList):
        (WebCore::SVGAnimatedAttributeList::detachAnimatedListWrappers):
        * svg/properties/SVGAttributeAccessor.h: Added.
        (WebCore::SVGAttributeAccessor::SVGAttributeAccessor):
        (WebCore::SVGAttributeAccessor::attributeName const):
        (WebCore::SVGAttributeAccessor::isAnimatedLengthAttribute const):
        (WebCore::SVGAttributeAccessor::animatedType const):
        (WebCore::SVGAttributeAccessor::animatedTypes const):
        (WebCore::SVGAttributeAccessor::lookupOrCreateAnimatedProperty const):
        (WebCore::SVGAttributeAccessor::lookupAnimatedProperty const):
        (WebCore::SVGAttributeAccessor::lookupOrCreateAnimatedProperties const):
        (WebCore::SVGPropertyAttributeAccessor::singleton):
        (WebCore::SVGPropertyAttributeAccessor::SVGPropertyAttributeAccessor):
        (WebCore::SVGPropertyAttributeAccessor::attribute const):
        (WebCore::SVGAnimatedAttributeAccessor::singleton):
        (WebCore::SVGAnimatedAttributeAccessor::SVGAnimatedAttributeAccessor):
        (WebCore::SVGAnimatedAttributeAccessor::lookupOrCreateAnimatedProperty):
        (WebCore::SVGAnimatedAttributeAccessor::lookupAnimatedProperty):
        (WebCore::SVGAnimatedPairAttributeAccessor::SVGAnimatedPairAttributeAccessor):
        (WebCore::SVGAnimatedPairAttributeAccessor::secondAttribute const):
        * svg/properties/SVGAttributeOwnerProxy.h: Copied from Source/WebCore/svg/SVGValue.h.
        (WebCore::SVGAttributeOwnerProxy::SVGAttributeOwnerProxy):
        (WebCore::SVGAttributeOwnerProxy::element const):
        * svg/properties/SVGAttributeOwnerProxyImpl.h: Added.
        (WebCore::SVGAttributeOwnerProxyImpl::SVGAttributeOwnerProxyImpl):
        (WebCore::SVGAttributeOwnerProxyImpl::attributeRegistry):
        (WebCore::SVGAttributeOwnerProxyImpl::isKnownAttribute):
        (WebCore::SVGAttributeOwnerProxyImpl::isAnimatedLengthAttribute):
        * svg/properties/SVGAttributeRegistry.h: Added.
        (WebCore::SVGAttributeRegistry::registerAttribute):
        (WebCore::SVGAttributeRegistry::isEmpty const):
        (WebCore::SVGAttributeRegistry::isKnownAttribute const):
        (WebCore::SVGAttributeRegistry::isAnimatedLengthAttribute const):
        (WebCore::SVGAttributeRegistry::animatedTypes const):
        (WebCore::SVGAttributeRegistry::synchronizeAttributes const):
        (WebCore::SVGAttributeRegistry::synchronizeAttribute const):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedProperty const):
        (WebCore::SVGAttributeRegistry::lookupAnimatedProperty const):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedProperties const):
        (WebCore::SVGAttributeRegistry::animatedTypesBaseTypes):
        (WebCore::SVGAttributeRegistry::synchronizeAttributesBaseTypes):
        (WebCore::SVGAttributeRegistry::synchronizeAttributeBaseTypes):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedPropertyBaseTypes):
        (WebCore::SVGAttributeRegistry::lookupAnimatedPropertyBaseTypes):
        (WebCore::SVGAttributeRegistry::lookupOrCreateAnimatedPropertiesBaseTypes):
        (WebCore::SVGAttributeRegistry::findAttributeAccessor const):
        * svg/properties/SVGAttributeToPropertyMap.cpp: Removed.
        * svg/properties/SVGAttributeToPropertyMap.h: Removed.
        * svg/properties/SVGPropertyInfo.cpp: Removed.
        * svg/properties/SVGPropertyInfo.h: Removed.

2018-08-06  Alex Christensen  <achristensen@webkit.org>

        Use enum classes and OptionSets for PaintPhase and PaintBehavior
        https://bugs.webkit.org/show_bug.cgi?id=188323

        Reviewed by Simon Fraser.

        No change in behaviour.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRectWithClip):
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::setPaintBehavior):
        (WebCore::FrameView::paintBehavior const):
        (WebCore::FrameView::paintContentsForSnapshot):
        * page/FrameView.h:
        * rendering/InlineElementBox.cpp:
        (WebCore::InlineElementBox::paint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::forceBlackText const):
        (WebCore::PaintInfo::forceWhiteText const):
        (WebCore::PaintInfo::skipRootBackground const):
        (WebCore::PaintInfo::paintRootBackgroundOnly const):
        * rendering/PaintPhase.h:
        (): Deleted.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintContents):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::paintFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintClippingMask):
        (WebCore::RenderBox::paintMaskImages):
        (WebCore::RenderBox::pushContentsClip):
        (WebCore::RenderBox::popContentsClip):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::decodingModeForImageDraw const):
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::fixedBackgroundPaintsInLocalCoordinates const):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintAsInlineBlock):
        (WebCore::RenderElement::selectionColor const):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paint):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::renderableTransform const):
        (WebCore::transparencyClipBox):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::paintingExtent):
        (WebCore::RenderLayer::paint):
        (WebCore::RenderLayer::paintOverlayScrollbars):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::paintBackgroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::paintForegroundForFragmentsWithPhase):
        (WebCore::RenderLayer::paintOutlineForFragments):
        (WebCore::RenderLayer::paintMaskForFragments):
        (WebCore::RenderLayer::paintChildClippingMaskForFragments):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::paint):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintMask):
        (WebCore::RenderTable::overflowClipRect):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintMask):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::paintOutlineForRowIfNeeded):
        (WebCore::RenderTableRow::paint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::paintCell):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::RenderThemeMac::paintImageControlsButton):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paintContents):
        (WebCore::RenderWidget::paint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paint):
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::paint):
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paintSelectionBackground):
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::isRenderingMaskImage):
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):

2018-08-06  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234569.

        Breaks internal builds.

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234569

2018-08-06  Alex Christensen  <achristensen@webkit.org>

        Make BlendMode an enum class
        https://bugs.webkit.org/show_bug.cgi?id=188325

        Reviewed by Darin Adler.

        No change in behavior.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator BlendMode const):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::State::State):
        (WebCore::CanvasRenderingContext2DBase::setGlobalCompositeOperation):
        (WebCore::CanvasRenderingContext2DBase::drawImageFromRect):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.h:
        (WebCore::ImagePaintingOptions::ImagePaintingOptions):
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::parseBlendMode):
        (WebCore::parseCompositeAndBlendOperator):
        (WebCore::compositeOperatorName):
        (WebCore::blendModeName):
        (WebCore::operator<<):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::selectCGBlendMode):
        * platform/graphics/cpu/arm/filters/FEBlendNEON.h:
        (WebCore::FEBlend::platformApplyNEON):
        * platform/graphics/displaylists/DisplayListItems.h:
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::externalRepresentation const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintFillLayers):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateBlendMode):
        (WebCore::RenderLayer::beginTransparencyLayers):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateBlendMode):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::FillLayer::hasOpaqueImage const):
        * rendering/style/FillLayer.h:
        (WebCore::FillLayer::initialFillBlendMode):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setBlendMode):
        (WebCore::RenderStyle::hasBlendMode const):
        (WebCore::RenderStyle::blendMode const):
        (WebCore::RenderStyle::initialBlendMode):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::enumerationValueForTargetAttribute):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        (WebCore::SVGFEBlendElement::parseAttribute):
        * svg/SVGFEBlendElement.h:
        (WebCore::SVGPropertyTraits<BlendMode>::highestEnumValue):
        (WebCore::SVGPropertyTraits<BlendMode>::toString):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::nativeImage):
        (WebCore::SVGImage::drawPatternForContainer):
        (WebCore::SVGImage::draw):

2018-08-06  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Indeterminate checkboxes appear unchecked
        https://bugs.webkit.org/show_bug.cgi?id=160484
        <rdar://problem/31143185>

        Reviewed by Wenson Hsieh.

        Add support for rendering indeterminate checkboxes on iOS.

        We now paint the unchecked appearance only if the checkbox is not checked and is
        not indeterminate. Otherwise, we draw a checkmark if the checkbox is in the
        checked state and a dash if the checkbox is in the indeterminate state. Both of
        these states share the same dark background.

        Test: fast/forms/ios/render-indeterminate-checkbox.html

        * css/html.css:
        (input[type="checkbox"]:indeterminate):
        (input[type="checkbox"]:indeterminate:disabled):
        * rendering/RenderThemeIOS.mm:
        (WebCore::drawJoinedLines):
        (WebCore::RenderThemeIOS::paintCheckboxDecorations):

2018-08-06  Ryosuke Niwa  <rniwa@webkit.org>

        HTML parser should execute custom element reactions for setting attributes immediately after creating a custom element
        https://bugs.webkit.org/show_bug.cgi?id=188336

        Reviewed by Frédéric Wang.

        Push and pop an element queue from the custom element reactions stack when constructing a custom element:
        https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token

        To do this, we instantiate CustomElementReactionStack in HTMLDocumentParser::runScriptsForPausedTreeBuilder
        where we synchronously construct a custom element. We don't have to worry about whether *will execute script*
        is set or not since the presence of an element queue should not be observable in the case where we're constructing
        a fallback element (since it would not enqueue any new custom element reaction).

        Tests: imported/w3c/web-platform-tests/custom-elements/parser/parser-sets-attributes-and-children.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder): Instantiate CustomElementReactionStack. Note that we
        don't insert the custom element into the parser until we finish processing the custom element reactions.

2018-08-06  Charlie Turner  <cturner@igalia.com>

        Return extracted key ids as an optional
        https://bugs.webkit.org/show_bug.cgi?id=188303

        Reviewed by Darin Adler.

        An empty list of extracted key ids was being considered a failure
        case before this patch. In the PSSH boxes from the CENC standard,
        it's not uncommon for the box to be version 0, meaning it has no
        embedded key ids, so the case when there's an empty list should
        not be treated as an error. Given this, the interface should be
        more general and allow for a sentinel value indicating a parsing
        error rather than an absence of key ids.

        Covered by existing tests.

        * Modules/encryptedmedia/InitDataRegistry.cpp:
        (WebCore::extractKeyIDsKeyids): Change return type to be wrapped
        in an optional, and make parsing errors return a nullopt rather
        than an empty vector.
        (WebCore::sanitizeKeyids): Use the new optional interface, return
        a null RefPtr in the case of a parsing error, this method may now
        return an empty vector.
        (WebCore::extractKeyIDsCenc): Not implemented, so return an error
        value rather than an empty vector.
        (WebCore::extractKeyIDsWebM): Ditto.
        (WebCore::InitDataRegistry::extractKeyIDs): Ditto.
        * Modules/encryptedmedia/InitDataRegistry.h: Update the interface
        to use an optional return type.
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsSinf): Update
        to use the new interface.
        (WebCore::CDMPrivateFairPlayStreaming::extractKeyIDsSkd): Ditto.
        * platform/graphics/avfoundation/CDMFairPlayStreaming.h: Ditto.
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keyIDs): Convert
        the optional value into a vector, since it is assumed you can not
        have an empty vector of key ids in the init datas FPS supports.
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMInstance::requestLicense): Only return an error
        if there really was a parsing error, rather than the case of there
        being zero key ids in the init data payload.

2018-08-06  Frederic Wang  <fwang@igalia.com>

        Make two-arguments versions of scrollBy/scrollTo depend on the one-argument versions
        https://bugs.webkit.org/show_bug.cgi?id=188300

        Reviewed by Darin Adler.

        This patch refactors a bit the scrollBy/scrollTo code, so that the two-arguments versions
        share the same code path as the more generic one-argument versions. In particular, this
        helps to implement the ScrollBehavior option (bug 188043) since the one-argument versions
        will require to distinguish between smooth and instant scrolling. The logic to normalize
        non finite left/right values or to use a fallback when they are absent is also factored out
        into ScrollToOptions.

        References:
        https://drafts.csswg.org/cssom-view/#dom-element-scroll
        https://drafts.csswg.org/cssom-view/#dom-element-scrollby
        https://drafts.csswg.org/cssom-view/#dom-window-scroll
        https://drafts.csswg.org/cssom-view/#dom-window-scrollby

        No new tests, behavior is unchanged.

        * dom/Element.cpp:
        (WebCore::Element::scrollBy): Make two-parameter version depends on one-parameter version
        and rewrite the normalize / fallback logic.
        (WebCore::Element::scrollTo): Rewrite the normalize / fallback logic.
        (WebCore::normalizeNonFiniteValue): Deleted. The logic is moved to ScrollToOptions.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::scrollBy const): Make two-parameter version depends on one-parameter
        version and rewrite the normalize / fallback logic.
        (WebCore::DOMWindow::scrollTo const): Make two-parameter version depends on one-parameter
        version and rewrite the normalize / fallback logic.
        * page/ScrollToOptions.h: Add <cmath> to use std::isfinite
        (WebCore::ScrollToOptions::normalizeNonFiniteCoordinatesOrFallBackTo): New function to
        normalize left/right values or fallback to the specified value if it is missing.

2018-08-06  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r234594.

        Add missing constructor and destructor definitions for the bunch of new
        classes that were added in that revision.

        * platform/graphics/nicosia/NicosiaPlatformLayer.cpp:
        (Nicosia::ContentLayer::ContentLayer):
        (Nicosia::BackingStore::BackingStore):
        (Nicosia::ImageBacking::ImageBacking):

2018-08-06  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add additional layer state classes, use impl-based approach to make them extendable
        https://bugs.webkit.org/show_bug.cgi?id=188341

        Reviewed by Carlos Garcia Campos.

        Add the ContentLayer, BackingStore and ImageBacking classes in the
        Nicosia namespace. State objects of CompositionLayer instances keep
        references to objects of these classes depending on the content that's
        presented in the associated GraphicsLayer.

        ContentLayer derives from the PlatformLayer class. It's used for layers
        that display things like WebGL and HTML5 canvas and media content in a
        platform-specific way. In case of TextureMapper the hardware-accelerated
        content is piped into that rendering pipeline.

        BackingStore is meant to represent the painted contents of a layer. The
        equivalent current functionality is using a tiled backing store that
        has its contents copied into the CoordinatedBackingStore instance.

        ImageBacking is used for a layer whose content is a simple Image object.
        Image's pixel data is rasterized and again managed through
        CoordinatedBackingStore for rendering.

        All these classes, along with the CompositionLayer class, should now be
        constructed with a factory function that returns an object that derives
        the class-specific Impl interface. This will allow for simpler
        implementation of different approaches in parallel. The TextureMapper
        variants will be the first ones, replicating the current behavior as it
        is implemented across classes in the CoordinatedGraphics and
        TextureMapper layers.

        * platform/graphics/nicosia/NicosiaPlatformLayer.cpp:
        (Nicosia::CompositionLayer::CompositionLayer):
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        (Nicosia::PlatformLayer::isContentLayer const):
        (Nicosia::CompositionLayer::Impl::isTextureMapperImpl const):
        (Nicosia::CompositionLayer::create):
        (Nicosia::CompositionLayer::impl const):
        (Nicosia::ContentLayer::Impl::isTextureMapperImpl const):
        (Nicosia::ContentLayer::create):
        (Nicosia::ContentLayer::impl const):
        (Nicosia::BackingStore::Impl::isTextureMapperImpl const):
        (Nicosia::BackingStore::create):
        (Nicosia::BackingStore::impl const):
        (Nicosia::ImageBacking::Impl::isTextureMapperImpl const):
        (Nicosia::ImageBacking::create):
        (Nicosia::ImageBacking::impl const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):

2018-08-06  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::Scene
        https://bugs.webkit.org/show_bug.cgi?id=188340

        Reviewed by Carlos Garcia Campos.

        Add the Nicosia::Scene class that controls the scene's state and enables
        thread-safe updates to that state.

        The State struct itself holds a set of all the layers in the scene, and
        separates out the root layer specifically. An ID counter is also present
        there, allowing consumers of this state to easily check for any updates.

        A reference to the Nicosia::Scene object now replaces the
        HashSet-and-root-layer pair in the CoordinatedGraphicsState struct.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaScene.cpp: Added.
        * platform/graphics/nicosia/NicosiaScene.h: Added.
        (Nicosia::Scene::create):
        (Nicosia::Scene::accessState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2018-08-06  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GTK] Buttons are drawn too large, text not centered
        https://bugs.webkit.org/show_bug.cgi?id=185854

        Reviewed by Carlos Garcia Campos.

        Some pages require small buttons and the GTK theme was
        drawing only down to a minimum size.

        No new tests required. Current layout tests and ManualTests/gtk/theme.html
        already cover it.

        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::RenderThemeGadget::create):
        (WebCore::RenderThemeButtonGadget::RenderThemeButtonGadget): Added
        (WebCore::RenderThemeButtonGadget::minimumSize const):
        Allow sizes smaller than the minimum size.
        * platform/gtk/RenderThemeGadget.h:
        * platform/gtk/RenderThemeWidget.cpp:
        (WebCore::RenderThemeButton::RenderThemeButton):

2018-08-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Implement self.queueMicrotask in Workers
        https://bugs.webkit.org/show_bug.cgi?id=188247

        Reviewed by Ryosuke Niwa.

        This patch adds support for self.queueMicrotask to workers.

        Tests: http/wpt/workers/queue-microtask.any.html
               http/wpt/workers/queue-microtask.any.worker.html

        * bindings/js/JSWorkerGlobalScopeCustom.cpp:
        (WebCore::JSWorkerGlobalScope::queueMicrotask):
        * page/DOMWindow.idl:
        Move queueMicrotask declaration to WindowOrWorkerGlobalScope.idl.
        * page/WindowOrWorkerGlobalScope.idl:

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

        [GTK][WPE] Fetch tests assert in SubresourceLoader::didReceiveResponse()
        https://bugs.webkit.org/show_bug.cgi?id=188163

        Reviewed by Frédéric Wang.

        Fetch in manual redirect mode uses didReceiveResponse instead of
        willSendRequestInternal, so update the ASSERT.

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

2018-08-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add support for microtasks in workers
        https://bugs.webkit.org/show_bug.cgi?id=188246

        Reviewed by Darin Adler.

        This patch adds the microtask mechanism to workers. To adopt the existing microtask mechanism from the main thread,
        we extend JSMainThreadExecState for non-main-threads. We rename it to JSExecState, and store stacked
        ExecState* data in thread local storage in ThreadGlobalData instead of a static variable s_mainThreadState.

        We add MicrotaskQueue to WorkerGlobalScope since each worker has its own thread and it should have its
        own microtask queue.

        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * 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/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        Queue a microtask to MicrotaskQueue instead of posting a macrotask.

        (WebCore::JSDOMWindowMicrotaskCallback::create): Deleted.
        (WebCore::JSDOMWindowMicrotaskCallback::call): Deleted.
        (WebCore::JSDOMWindowMicrotaskCallback::JSDOMWindowMicrotaskCallback): Deleted.
        (): Deleted.
        Extract JSDOMWindowMicrotaskCallback as JSMicrotaskCallback and create a new file for it.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSExecState.cpp: Renamed from Source/WebCore/bindings/js/JSMainThreadExecState.cpp.
        (WebCore::JSExecState::didLeaveScriptContext):
        If we are in a main thread, we consume main thread microtask queue. If we are in worker thread,
        we consume a microtask queue per worker.

        (WebCore::functionCallHandlerFromAnyThread):
        (WebCore::evaluateHandlerFromAnyThread):
        * bindings/js/JSExecState.h: Renamed from Source/WebCore/bindings/js/JSMainThreadExecState.h.
        (WebCore::JSExecState::currentState):
        (WebCore::JSExecState::call):
        (WebCore::JSExecState::evaluate):
        (WebCore::JSExecState::profiledCall):
        (WebCore::JSExecState::profiledEvaluate):
        (WebCore::JSExecState::runTask):
        (WebCore::JSExecState::loadModule):
        (WebCore::JSExecState::linkAndEvaluateModule):
        (WebCore::JSExecState::JSExecState):
        (WebCore::JSExecState::~JSExecState):
        (WebCore::JSExecState::setCurrentState):
        Store and load ExecState in thread local storage, ThreadGlobalData. This allows us to use it for workers.

        (WebCore::JSMainThreadNullState::JSMainThreadNullState):
        (WebCore::JSMainThreadNullState::~JSMainThreadNullState):
        We keep this name "JSMainThreadNullState" since CustomElementReactionStack should be stick to the main thread.
        And this class is only used in the main thread.

        * bindings/js/JSExecStateInstrumentation.h: Renamed from Source/WebCore/bindings/js/JSMainThreadExecStateInstrumentation.h.
        (WebCore::JSExecState::instrumentFunctionInternal):
        (WebCore::JSExecState::instrumentFunctionCall):
        (WebCore::JSExecState::instrumentFunctionConstruct):
        * bindings/js/JSMicrotaskCallback.h: Copied from Source/WebKitLegacy/mac/DOM/DOMHTMLBaseElement.mm.
        (WebCore::JSMicrotaskCallback::create):
        (WebCore::JSMicrotaskCallback::call):
        (WebCore::JSMicrotaskCallback::JSMicrotaskCallback):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::canAccessFromCurrentOrigin):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        (-[WebScriptObject evaluateWebScript:]):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::compileShader):
        (WebCore::WebGLRenderingContextBase::printToConsole):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::buildAction):
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/WorkerInspectorController.cpp:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::buildInitiatorObject):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::addMessage):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::ThreadGlobalData::currentState const):
        (WebCore::ThreadGlobalData::ThreadGlobalData::setCurrentState):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        (WebCore::WorkerGlobalScope::removeMicrotaskQueue):
        * workers/WorkerGlobalScope.h:
        (WebCore::WorkerGlobalScope::microtaskQueue const):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::addExtendLifetimePromise):
        When dispatching an "install" event from service worker, we first create an event,
        dispatch it, and set a handler which is called when a pending promise count becomes zero.
        However, the old code checked pending promise count in a queued microtask. It worked
        previously because microtask is actually a macrotask in the service worker. So this check
        is done after a handler is set. But this patch introduces real microtask, and this check
        happens before a handler is set because dispatching an event can exhaust microtask queue.
        According to the spec, this check should not be done in microtask[1]. We make this checking
        part as a macrotask. We note that algorithm noted as FIXMEs should be done in this
        microtask while the checking part should not be done.

        [1]: https://w3c.github.io/ServiceWorker/#installation-algorithm

2018-08-05  Ryosuke Niwa  <rniwa@webkit.org>

        Properties set on window.customElements can disappear due to GC
        https://bugs.webkit.org/show_bug.cgi?id=172575

        Lexicologically sort the IDL attributes per Darin's comment.

        * dom/CustomElementRegistry.idl:

2018-08-05  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] contentHeightForFormattingContextRoot uses the wrong coordinate system to compute the height.
        https://bugs.webkit.org/show_bug.cgi?id=188319

        Reviewed by Antti Koivisto.

        Display::Box::marginBox() is in the coordinate system of the box itself (8px top margin translates to y = -8px).
        What we need instead to compute the content height is the top/bottom position in the containing block's coordinate system (rect and rectWithMargin).

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):

2018-08-05  Ms2ger  <Ms2ger@igalia.com>

        [GStreamer] Remove unsound assertions in MediaPlayerPrivateGStreamerBase.
        https://bugs.webkit.org/show_bug.cgi?id=188162

        Reviewed by Philippe Normand.

        These assertions sometimes fail, and there's a runtime check right
        after them anyway.

        Tests: fast/canvas/webgl/texImage2D-video-flipY-false.html
               fast/canvas/webgl/texImage2D-video-flipY-true.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):

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

        [MediaCapabilities] Platform integration
        https://bugs.webkit.org/show_bug.cgi?id=187850

        Reviewed by Eric Carlson.

        Mock platform support for the MediaCapabilities specification.

        Test: media/mediacapabilities/mock-decodingInfo.html
              media/mediacapabilities/mock-encodingInfo.html

        * Modules/mediacapabilities/MediaCapabilities.cpp:
        (WebCore::MediaCapabilities::decodingInfo):
        (WebCore::MediaCapabilities::encodingInfo):
        * Modules/mediacapabilities/MediaCapabilitiesInfo.h:
        (WebCore::MediaCapabilitiesInfo::create):
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediacapabilities/MediaEngineConfiguration.cpp: Added.
        (WebCore::MediaEngineVideoConfiguration::MediaEngineVideoConfiguration):
        (WebCore::MediaEngineAudioConfiguration::MediaEngineAudioConfiguration):
        (WebCore::MediaEngineConfiguration::MediaEngineConfiguration):
        * platform/mediacapabilities/MediaEngineConfiguration.h: Added.
        (WebCore::MediaEngineVideoConfiguration::create):
        (WebCore::MediaEngineVideoConfiguration::contentType const):
        (WebCore::MediaEngineVideoConfiguration::size const):
        (WebCore::MediaEngineVideoConfiguration::bitrate const):
        (WebCore::MediaEngineVideoConfiguration::framerate const):
        (WebCore::MediaEngineAudioConfiguration::create):
        (WebCore::MediaEngineAudioConfiguration::contentType const):
        (WebCore::MediaEngineAudioConfiguration::channels const):
        (WebCore::MediaEngineAudioConfiguration::bitrate const):
        (WebCore::MediaEngineAudioConfiguration::samplerate const):
        (WebCore::MediaEngineConfiguration::audioConfiguration const):
        (WebCore::MediaEngineConfiguration::videoConfiguration const):
        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp: Added.
        (WebCore::mockEnabled):
        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
        (WebCore::MediaEngineConfigurationFactory::enableMock):
        (WebCore::MediaEngineConfigurationFactory::disableMock):
        * platform/mediacapabilities/MediaEngineConfigurationFactory.h: Added.
        * platform/mediacapabilities/MediaEngineDecodingConfiguration.h: Added.
        (WebCore::MediaEngineDecodingConfiguration::MediaEngineDecodingConfiguration):
        (WebCore::MediaEngineDecodingConfiguration::canDecodeMedia):
        (WebCore::MediaEngineDecodingConfiguration::canSmoothlyDecodeMedia):
        (WebCore::MediaEngineDecodingConfiguration::canPowerEfficientlyDecodeMedia):
        (WebCore::MediaEngineDecodingConfiguration::decodingType const):
        * platform/mediacapabilities/MediaEngineEncodingConfiguration.h: Added.
        (WebCore::MediaEngineEncodingConfiguration::MediaEngineEncodingConfiguration):
        (WebCore::MediaEngineEncodingConfiguration::canEncodeMedia):
        (WebCore::MediaEngineEncodingConfiguration::canSmoothlyEncodeMedia):
        (WebCore::MediaEngineEncodingConfiguration::canPowerEfficientlyEncodeMedia):
        (WebCore::MediaEngineEncodingConfiguration::encodingType const):
        * platform/mock/MediaEngineDecodingConfigurationMock.cpp: Added.
        (WebCore::MediaEngineDecodingConfigurationMock::canDecodeMedia):
        (WebCore::MediaEngineDecodingConfigurationMock::canSmoothlyDecodeMedia):
        (WebCore::MediaEngineDecodingConfigurationMock::canPowerEfficientlyDecodeMedia):
        * platform/mock/MediaEngineDecodingConfigurationMock.h: Added.
        * platform/mock/MediaEngineEncodingConfigurationMock.cpp: Added.
        (WebCore::MediaEngineEncodingConfigurationMock::canEncodeMedia):
        (WebCore::MediaEngineEncodingConfigurationMock::canSmoothlyEncodeMedia):
        (WebCore::MediaEngineEncodingConfigurationMock::canPowerEfficientlyEncodeMedia):
        * platform/mock/MediaEngineEncodingConfigurationMock.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::enableMockMediaCapabilities):
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Make WebCore::Timer more space-efficient
        https://bugs.webkit.org/show_bug.cgi?id=187455

        Reviewed by Brent Fulgham.

        Steal a bit from m_heapIndex for m_wasDeleted to eliminate padding in Timer.
        This reduces the size of Document, which has 8 Timers, from 3360 to 3296 bytes (saving 64 bytes).

        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase):
        * platform/Timer.h:

2018-08-04  Ryosuke Niwa  <rniwa@webkit.org>

        Properties set on window.customElements can disappear due to GC
        https://bugs.webkit.org/show_bug.cgi?id=172575
        <rdar://problem/32440668>

        Reviewed by Saam Barati.

        Fixed the bug that JS wrapper of CustomElementsRegistry can erroneously get collected during GC
        by keeping it alive as long as the global object is alive.

        Test: fast/custom-elements/custom-element-registry-wrapper-should-stay-alive.html

        * dom/CustomElementRegistry.cpp:
        (WebCore::CustomElementRegistry::create):
        (WebCore::CustomElementRegistry::CustomElementRegistry):
        * dom/CustomElementRegistry.h:
        (WebCore::CustomElementRegistry): Make this inherited from ContextDestructionObserver.
        * dom/CustomElementRegistry.idl: Set GenerateIsReachable=ImplScriptExecutionContext in IDL. This will
        make CustomElementRegistry reachable from the global object.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::ensureCustomElementRegistry):

2018-08-03  Ryosuke Niwa  <rniwa@webkit.org>

        innerHTML should not synchronously create a custom element
        https://bugs.webkit.org/show_bug.cgi?id=188327
        <rdar://problem/42923114>

        Reviewed by Daniel Bates.

        Fixed the bug that the fragment parsing algorithm was synchronously constructing a custom element instead of
        enqueuing an element to upgrade.

        The fragment parsing algorithm creates an element for a token with *will execute script* flag set to false:
        https://html.spec.whatwg.org/multipage/parsing.html#create-an-element-for-the-token
        which results in creating an element with synchronous custom elements flag *not* set:
        https://dom.spec.whatwg.org/#concept-create-element

        When synchronous custom elements flag is false, we're supposed to create an element and enqueue a custom element
        upgrade reaction. createHTMLElementOrFindCustomElementInterface was missing this last logic. 

        Also fixed a bug that Element::enqueueToUpgrade would hit a debug assertion when a custom element which has been
        enqueued to upgrade is enqueued to upgrade for the second time. In this case, we need to put the element into the
        current element queue (https://html.spec.whatwg.org/multipage/custom-elements.html#current-element-queue) again.

        While the specification simply enqueues another upgrade reaction and bails out immediately in the first step of
        the upgrade, WebKit's implementation simply avoids this redundancy in the first place:
        https://html.spec.whatwg.org/multipage/custom-elements.html#concept-upgrade-an-element

        Existing tests such as imported/w3c/web-platform-tests/custom-elements/reactions/Document.html exercises this
        code path after the fragment parsing algorithm fix.

        Tests: imported/w3c/web-platform-tests/custom-elements/connected-callbacks-html-fragment-parsing.html

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueueItem::type const): Added for an assertion.
        (WebCore::CustomElementReactionQueue::enqueueElementUpgrade): Enqueue this element to the current element queue
        by calling ensureCurrentQueue and avoid inserting a redundant upgrade reaction.
        * dom/CustomElementReactionQueue.h:
        * dom/Element.cpp:
        (WebCore::Element::enqueueToUpgrade): Handle the case when a custom element is enqueued to upgrade for the second
        time while it had been waiting in some element queue. In this case, the reaction queue for this element has
        already been created and we simply need to put this element back into the current element queue (i.e. this element
        now belongs to both element queues).
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::findCustomElementInterface): Extracted out of createHTMLElementOrFindCustomElementInterface.
        (WebCore::HTMLConstructionSite::createHTMLElementOrFindCustomElementInterface): Fixed the bug that the HTML parser
        was synchronously constructing a custom element even for the fragment parsing algorithm.

2018-08-03  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        Added functionality to FileHandle so that it can lock a file while open.
        Added a function to FileSystem to delete non empty directories.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::close):
        * platform/FileHandle.h:
        * platform/FileSystem.h:
        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::FileSystem::deleteNonEmptyDirectory):

2018-08-03  Justin Fan  <justin_fan@apple.com>

        WebGL 2 conformance: vertex_arrays/vertex_array_object.html
        https://bugs.webkit.org/show_bug.cgi?id=188291
        <rdar://problem/42792709>

        Reviewed by Dean Jackson.

        Get https://www.khronos.org/registry/webgl/conformance-suites/2.0.0/conformance2/vertex_arrays/vertex-array-object.html 
        working on Mac OS and iOS, and check in the new test expectations.

        Existing test: webgl/2.0.0/conformance2/vertex_arrays/vertex-array-object.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):
        (WebCore::WebGL2RenderingContext::deleteVertexArray):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::deleteObject):
        * html/canvas/WebGLVertexArrayObject.cpp:
        (WebCore::WebGLVertexArrayObject::WebGLVertexArrayObject):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking const):
        (WebCore::GraphicsContext3D::createVertexArray):
        (WebCore::GraphicsContext3D::deleteVertexArray):
        (WebCore::GraphicsContext3D::isVertexArray):
        (WebCore::GraphicsContext3D::bindVertexArray):

2018-08-03  Sam Weinig  <sam@webkit.org>

        Remove WebGPUObject
        https://bugs.webkit.org/show_bug.cgi?id=188114

        Reviewed by Darin Adler.

        This removes the unecessary WebGPUObject base class and updates the classes
        that were inheriting from it to instead inherit directly from RefCounted. This
        shrinks the size of all the classes that were inheriting from it, as they no
        longer store a RefPtr<WebGPURenderingContext> member, which is unused. Most
        of the classes also shrink because they can be devirtualized.

        This also updates most of the create functions and constructors for the classes
        that were inheriting from WebGPUObject to no longer require the WebGPURenderingContext
        to be passed in. 
        - For WebGPUBuffer, WebGPUCommandQueue, WebGPUComputeCommandEncoder, WebGPUComputePipelineState, 
        WebGPUDepthStencilState, WebGPUDrawable, WebGPUFunction, WebGPULibrary, WebGPURenderCommandEncoder, 
        WebGPURenderPassDepthAttachmentDescriptor, WebGPURenderPipelineColorAttachmentDescriptor, 
        WebGPURenderPipelineState, and WebGPUTexture the WebGPURenderingContext and any other additional 
        parameters needed for initialization were replaced with the underlying type (e.g. WebGPUBuffer 
        now gets passed a GPUBuffer).
        - WebGPUCommandBuffer is passed a GPUCommandQueue, since it needs to construct the underlying
        GPUCommandBuffer itself so it can pass in the completion handler.
        - For WebGPUDepthStencilDescriptor, WebGPURenderPassAttachmentDescriptor, 
        WebGPURenderPassColorAttachmentDescriptor, WebGPURenderPassDescriptor and WebGPURenderPipelineDescriptor
        the create and constructor functions are empty.        

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Remove WebGPUObject.h/cpp

        * html/canvas/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::WebGPUBuffer):
        * html/canvas/WebGPUBuffer.h:
        * html/canvas/WebGPUBuffer.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPUBuffer>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create 
        and constructor to take a GPUBuffer directly, rather than the context.

        * html/canvas/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create):
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer):
        Update create and constructor to no longer require a context, as it would
        now be unused, as it no longer inherits from WebGPUObject nor needs to hold
        onto the context for any reason.

        (WebCore::WebGPUCommandBuffer::createRenderCommandEncoderWithDescriptor):
        Update to call the new WebGPURenderCommandEncoder::create, which no longer
        requires a context.

        (WebCore::WebGPUCommandBuffer::createComputeCommandEncoder):
        Update to call the new WebGPUComputeCommandEncoder::create, which no longer
        requires a context.

        * html/canvas/WebGPUCommandBuffer.h:
        * html/canvas/WebGPUCommandBuffer.idl:
        Switch from inheriting from GPUObject to directly inheriting from 
        RefCounted<WebGPUCommandBuffer>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and constructor 
        to no longer take a context, and just take a GPUCommandQueue. We can't directly
        pass a GPUCommandBuffer as WebGPUCommandBuffer needs to pass in a completion handler
        on construction of the underlying GPUCommandBuffer.
        
        * html/canvas/WebGPUCommandQueue.cpp:
        (WebCore::WebGPUCommandQueue::WebGPUCommandQueue):
        (WebCore::WebGPUCommandQueue::createCommandBuffer):
        Update to call the new WebGPUCommandBuffer::create, which no longer
        requires a context.
    
        * html/canvas/WebGPUCommandQueue.h:
        * html/canvas/WebGPUCommandQueue.idl:
        Switch from inheriting from GPUObject to directly inheriting from 
        RefCounted<WebGPUCommandQueue>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUCommandQueue directly.

        * html/canvas/WebGPUComputeCommandEncoder.cpp:
        (WebCore::WebGPUComputeCommandEncoder::create):
        (WebCore::WebGPUComputeCommandEncoder::WebGPUComputeCommandEncoder):
        * html/canvas/WebGPUComputeCommandEncoder.h:
        * html/canvas/WebGPUComputeCommandEncoder.idl:
        Switch from inheriting from GPUObject to directly inheriting from 
        RefCounted<WebGPUComputeCommandEncoder>. Since this de-virtualizes it, 
        also add ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUComputeCommandEncoder directly

        * html/canvas/WebGPUComputePipelineState.cpp:
        (WebCore::WebGPUComputePipelineState::WebGPUComputePipelineState):
        * html/canvas/WebGPUComputePipelineState.h:
        * html/canvas/WebGPUComputePipelineState.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPUComputePipelineState>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUComputePipelineState directly.

        * html/canvas/WebGPUDepthStencilDescriptor.cpp:
        Remove unneeded include of include "WebGPURenderingContext.h".

        * html/canvas/WebGPUDepthStencilDescriptor.h:
        * html/canvas/WebGPUDepthStencilDescriptor.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPUDepthStencilDescriptor>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file.

        * html/canvas/WebGPUDepthStencilState.cpp:
        (WebCore::WebGPUDepthStencilState::WebGPUDepthStencilState):
        * html/canvas/WebGPUDepthStencilState.h:
        * html/canvas/WebGPUDepthStencilState.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPUDepthStencilState>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUDepthStencilState directly.

        * html/canvas/WebGPUDrawable.cpp:
        (WebCore::WebGPUDrawable::WebGPUDrawable):
        * html/canvas/WebGPUDrawable.h:
        * html/canvas/WebGPUDrawable.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPUDrawable>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUDrawable directly.

        * html/canvas/WebGPUFunction.cpp:
        (WebCore::WebGPUFunction::create):
        (WebCore::WebGPUFunction::WebGPUFunction):
        * html/canvas/WebGPUFunction.h:
        * html/canvas/WebGPUFunction.idl:
        Switch from inheriting from GPUObject to directly inheriting from 
        RefCounted<WebGPUFunction>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPUFunction directly.

        * html/canvas/WebGPULibrary.cpp:
        (WebCore::WebGPULibrary::WebGPULibrary):
        (WebCore::WebGPULibrary::functionWithName const):
        Update for new WebGPUFunction::create, which no longer requires a
        context.

        * html/canvas/WebGPULibrary.h:
        * html/canvas/WebGPULibrary.idl:
        Switch from inheriting from WebGPUObject to directly inheriting from 
        RefCounted<WebGPULibrary>. Since this de-virtualizes it, also add 
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPULibrary directly, rather than the context.
        Unlike the other create functions that take their underlying type, this
        one also continues to need the sourceCode String to be passed, as that
        is not available from the underlying GPULibrary and must be stored
        seperately.

        * html/canvas/WebGPUObject.cpp: Removed.
        * html/canvas/WebGPUObject.h: Removed.
        Deleted.

        * html/canvas/WebGPURenderCommandEncoder.cpp:
        (WebCore::WebGPURenderCommandEncoder::create):
        (WebCore::WebGPURenderCommandEncoder::WebGPURenderCommandEncoder):
        * html/canvas/WebGPURenderCommandEncoder.h:
        * html/canvas/WebGPURenderCommandEncoder.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPURenderCommandEncoder>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPURenderCommandEncoder directly.

        * html/canvas/WebGPURenderPassAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassAttachmentDescriptor::WebGPURenderPassAttachmentDescriptor):
        * html/canvas/WebGPURenderPassAttachmentDescriptor.h:
        Switch from inheriting from GPUObject to directly inheriting from 
        RefCounted<WebGPURenderPassAttachmentDescriptor>. Also update create and 
        constructor to no longer take a context, as it is now not used. This remains virtual
        as it is inherited from by WebGPURenderPassColorAttachmentDescriptor and WebGPURenderPassDepthAttachmentDescriptor.

        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::create):
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::WebGPURenderPassColorAttachmentDescriptor):
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.h:
        Update create and constructor to no longer take a context, as it is now not used. Declare final
        as this is not inherited by anything.

        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::create):
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::WebGPURenderPassDepthAttachmentDescriptor):
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.h:
        Update create and constructor to no longer take a context, as it is now not used. Declare final
        as this is not inherited by anything.

        * html/canvas/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::depthAttachment):
        Update for new WebGPURenderPassDepthAttachmentDescriptor::create function which no longer requires
        a context. 
        
        Semi-interesting note: This function was previously calling "*context()" to pass a WebGPURenderingContext&
        to WebGPURenderPassDepthAttachmentDescriptor::create. However, "context()" was always returning null, as
        the constructor of WebGPURenderPassDescriptor was not initializing the WebGPUObject with a WebGPURenderingContext.
        Now, one might think that this would cause a null-deref, but, because it was being assigned into a 
        WebGPURenderingContext&, no dereference happens right away (it essentially just passes a pointer) and since
        the function it is being passed to does not use it, it never actually gets dereferenced.

        (WebCore::WebGPURenderPassDescriptor::colorAttachments):
        Update for new WebGPURenderPassColorAttachmentDescriptor::create function which no longer requires
        a context. 

        * html/canvas/WebGPURenderPassDescriptor.h:
        * html/canvas/WebGPURenderPassDescriptor.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPURenderPassDescriptor>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file.

        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::create):
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::WebGPURenderPipelineColorAttachmentDescriptor):
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.h:
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPURenderPipelineColorAttachmentDescriptor>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file. Also update create and constructor to
        no longer take a context, as it is now not used.

        * html/canvas/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPURenderPipelineDescriptor::colorAttachments):
        Update for new WebGPURenderPipelineColorAttachmentDescriptor::create which no longer requires
        a context.

        * html/canvas/WebGPURenderPipelineDescriptor.h:
        * html/canvas/WebGPURenderPipelineDescriptor.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPURenderPipelineDescriptor>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file.

        * html/canvas/WebGPURenderPipelineState.cpp:
        (WebCore::WebGPURenderPipelineState::WebGPURenderPipelineState):
        * html/canvas/WebGPURenderPipelineState.h:
        * html/canvas/WebGPURenderPipelineState.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPURenderPipelineState>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file. Also update create and
        constructor to take a GPURenderPipelineState directly.

        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::createLibrary):
        (WebCore::WebGPURenderingContext::createRenderPipelineState):
        (WebCore::WebGPURenderingContext::createDepthStencilState):
        (WebCore::WebGPURenderingContext::createComputePipelineState):
        (WebCore::WebGPURenderingContext::createCommandQueue):
        (WebCore::WebGPURenderingContext::nextDrawable):
        (WebCore::WebGPURenderingContext::createBuffer):
        (WebCore::WebGPURenderingContext::createTexture):
        Update for new create functions which require the caller to pass
        the underlying type.

        * html/canvas/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::createFromDrawableTexture):
        Renamed to create.

        (WebCore::WebGPUTexture::create): Deleted
        All callers now pass a GPUTexture directly.

        * html/canvas/WebGPUTexture.h:
        * html/canvas/WebGPUTexture.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPUTexture>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file. 

        * html/canvas/WebGPUTextureDescriptor.h:
        * html/canvas/WebGPUTextureDescriptor.idl:
        Switch from inheriting from GPUObject to directly inheriting from
        RefCounted<WebGPUTextureDescriptor>. Since this de-virtualizes it, also add
        ImplementationLacksVTable to the IDL file.

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Fix spelling of "overridden"
        https://bugs.webkit.org/show_bug.cgi?id=188315

        Reviewed by Darin Adler.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        (-[WebAccessibilityObjectWrapper accessibilityValue]):
        * contentextensions/ContentExtensionsBackend.h:
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):
        * inspector/CommandLineAPIModuleSource.js:
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * platform/mediasession/MediaSessionInterruptionProvider.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::adjustedPositionRelativeToOffsetParent const):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::localCoordinateSpaceTransform const):
        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::SVGLengthContext):
        (WebCore::SVGLengthContext::convertValueToUserUnits const):
        (WebCore::SVGLengthContext::determineViewport const):
        * svg/SVGLengthContext.h:

2018-08-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Special case the document renderer when computing the height and margin
        https://bugs.webkit.org/show_bug.cgi?id=188313

        Reviewed by Antti Koivisto.

        The document renderer is certainly special and its geometry is likely to be computed as part of "10.6.6 Complicated cases" (spec is unclear) but probably not by
        making the it a formatting root. Let's just special case it at contentHeightForFormattingContextRoot(), since having the document renderer as a context root has unwanted side effect. 

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesBlockFormattingContext const):

2018-08-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Layout out-of-flow descendants only on the formatting context root.
        https://bugs.webkit.org/show_bug.cgi?id=188312

        Reviewed by Antti Koivisto.

        Collect out-of-flow descendants on the formatting root container instead of the containing block and run layout on them on the root level. It's more efficient this way.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-08-03  Andy Estes  <aestes@apple.com>

        ContentFilterUnblockHandler's constructors access moved-from variables
        https://bugs.webkit.org/show_bug.cgi?id=188308
        <rdar://problem/42882758>

        Reviewed by Alex Christensen.

        * platform/cocoa/ContentFilterUnblockHandlerCocoa.mm:

2018-08-03  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Now that the document renderer belongs to "complicated cases", adjust viewport stretching.
        https://bugs.webkit.org/show_bug.cgi?id=188306

        Reviewed by Antti Koivisto.

        And add passing cases for floats.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::initialContainingBlock):
        (WebCore::Layout::isStretchedToInitialContainingBlock):
        (WebCore::Layout::stretchHeightToInitialContainingBlock):
        (WebCore::Layout::stretchWidthToInitialContainingBlock):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::isStretchedToViewport): Deleted.

2018-08-03  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not check margin box while validating geometry.
        https://bugs.webkit.org/show_bug.cgi?id=188297

        Reviewed by Antti Koivisto.

        The current RenderBox::marginBox implementation is not spec compliant. Ignore it for now.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):

2018-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE] Use WPE key symbols and new API instead of xkbcommon and the key mapper
        https://bugs.webkit.org/show_bug.cgi?id=188093

        Reviewed by Žan Doberšek.

        Add helper functions to get key code, hardware key code, key identifier and windows key code from a WPE key symbol.

        * platform/PlatformKeyboardEvent.h:
        * platform/wpe/PlatformKeyboardEventWPE.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::keyCodeForHardwareKeyCode):
        (WebCore::PlatformKeyboardEvent::keyIdentifierForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::windowsKeyCodeForWPEKeyCode):
        (WebCore::PlatformKeyboardEvent::singleCharacterString):

2018-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert when throwing exceptions in custom element reactions
        https://bugs.webkit.org/show_bug.cgi?id=187805
        <rdar://problem/42432714>

        Reviewed by Saam Barati.

        The release assertion was hit because we were not catching & re-throwing the exception thrown by DOM API
        before trying to execute custom elements reactions in ~CustomElementReactionStack as specified here:
        https://html.spec.whatwg.org/multipage/custom-elements.html#cereactions
        Fixed the bug by capturing the exception and re-throwing the exception as specified.

        Tests: imported/w3c/web-platform-tests/custom-elements/reactions/with-exceptions.html

        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadNullState::JSMainThreadNullState): Use the previous JS state.
        * bindings/scripts/CodeGeneratorJS.pm:
        (GeneratePut): Pass in the exec state to CustomElementReactionStack.
        (GeneratePutByIndex): Ditto.
        (GenerateDefineOwnProperty): Ditto.
        (GenerateDeletePropertyCommon): Ditto.
        (GenerateAttributeSetterBodyDefinition): Ditto.
        (GenerateOperationBodyDefinition): Ditto.
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::setJSTestCEReactionsAttributeWithCEReactionsSetter):
        (WebCore::setJSTestCEReactionsReflectAttributeWithCEReactionsSetter):
        (WebCore::jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsBody):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::setJSTestCEReactionsStringifierValueSetter):
        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::ElementQueue::processQueue): Added. If there is a script running
        in the stack (i.e. ExecState is not null), catch any exception before executing custom element reactions,
        then re-throw the exception afterwards. ExecState is null when DOM API is invoked via Objective-C bindings
        or when custom element reactions are executed in the backup queue (e.g. for editing operations).
        (WebCore::CustomElementReactionStack::processQueue):
        (WebCore::CustomElementReactionQueue::processBackupQueue):
        * dom/CustomElementReactionQueue.h:
        (WebCore::CustomElementReactionStack::CustomElementReactionStack):
        (WebCore::CustomElementReactionStack::~CustomElementReactionStack):

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Apply the "10.6.6 Complicated cases" when computing height and margin for the document renderer
        https://bugs.webkit.org/show_bug.cgi?id=188296

        Reviewed by Simon Fraser.

        The spec is not clear about what to do with the document renderer. It behaves as if it was a formatting context root when
        it comes to computing the content height. Let's apply "10.6.6 Complicated cases" for now.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::complicatedCases):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesBlockFormattingContext const):
        * layout/layouttree/LayoutBox.h:

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Add FloatingState::bottom() to enable content height computation for formatting roots.
        https://bugs.webkit.org/show_bug.cgi?id=188294

        Reviewed by Simon Fraser.

        "10.6.7 'Auto' heights for block formatting context roots
        ...
        In addition, if the element has any floating descendants whose bottom margin edge is below the element's bottom content edge,
        then the height is increased to include those edges. Only floats that participate in this block formatting context are taken into
        account, e.g., floats inside absolutely positioned descendants or other floats are not..."

        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::bottom const):
        * layout/FloatingState.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):

2018-08-02  Jer Noble  <jer.noble@apple.com>

        Control center controls disappear when pausing, locking device.
        https://bugs.webkit.org/show_bug.cgi?id=188282
        <rdar://problem/42497809>

        Reviewed by Eric Carlson.

        Test: platform/mac/media/audio-session-category-video-paused.html

        MediaRemote will set any app whose audio session category changes from MediaPlayback to
        Ambient as not eligable for being the "now playing" app. Previously, due to the ordering of
        events, we never moved from MediaPlayback to Ambient when pausing <video>, even though that
        was the intention. Now that that bug is fixed, it exposed this new issue with MediaRemote.

        To solve the new issue, make our audio session category policy more explicit: once we are in
        MediaPlayback category, we will remain so as long as the media element in queston stays
        loaded, has played, and is never interrupted by the system.

        Make MediaSessionManagerCocoa a proper subclass of PlatformMediaSessionManager, and make
        MediaSessionManageriOS and -Mac subclasses of the -Cocoa class. Add a new
        m_hasPlayedSinceLastInterruption ivar to PlatformMediaSession, set when the state() changes
        to Playing, and cleared during an interruption. Check this flag when deciding what audio 
        sessino category to set in MediaSessionManagerCocoa.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::setState):
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSession::hasPlayedSinceLastInterruption const):
        (WebCore::PlatformMediaSession::clearHasPlayedSinceLastInterruption):
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::updateSessionState): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::audioHardwareListener):
        (WebCore::PlatformMediaSessionManager::updateSessionState):
        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (MediaSessionManagerCocoa::updateSessionState):
        (MediaSessionManagerCocoa::beginInterruption):
        (PlatformMediaSessionManager::updateSessionState): Deleted.
        * platform/audio/cocoa/MediaSessionManagerCocoa.h: Added.
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::MediaSessionManageriOS):
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::MediaSessionManagerMac):

2018-08-02  Nan Wang  <n_wang@apple.com>

        AX: [iOS] add support to return the attributed string under the element
        https://bugs.webkit.org/show_bug.cgi?id=188276
        <rdar://problem/42872357>

        Reviewed by Chris Fleizach.

        Provided a way on iOS to return the attributed string under the element for 
        better performance.

        Test: accessibility/ios-simulator/attributed-string-for-element.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _stringFromStartMarker:toEndMarker:attributed:]):
        (-[WebAccessibilityObjectWrapper _stringForRange:attributed:]):
        (-[WebAccessibilityObjectWrapper attributedStringForElement]):

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Remove redundant LayoutContext member variable.
        https://bugs.webkit.org/show_bug.cgi?id=188286

        Reviewed by Simon Fraser.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::begin):
        (WebCore::Layout::end):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::FloatingPair):
        (WebCore::Layout::Iterator::Iterator):

2018-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        Move queue processing logic from CustomElementReactionStack to CustomElementReactionQueue
        https://bugs.webkit.org/show_bug.cgi?id=188277

        Reviewed by Wenson Hsieh.

        Moved ensureCurrentQueue, processBackupQueue, ElementQueue, ensureBackupQueue, and backupElementQueue
        from CustomElementReactionStack to CustomElementReactionQueue to simplify CustomElementReactionStack.

        No new tests since there is no behavior change.

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueElementUpgrade):
        (WebCore::CustomElementReactionQueue::enqueueConnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueDisconnectedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAdoptedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::enqueueAttributeChangedCallbackIfNeeded):
        (WebCore::CustomElementReactionQueue::ElementQueue::add): Moved from CustomElementReactionStack.
        (WebCore::CustomElementReactionQueue::ElementQueue::invokeAll): Ditto.
        (WebCore::CustomElementReactionQueue::ensureCurrentQueue): Ditto.
        (WebCore::CustomElementReactionQueue::ensureBackupQueue): Ditto.
        (WebCore::CustomElementReactionQueue::processBackupQueue): Ditto.
        (WebCore::CustomElementReactionQueue::backupElementQueue): Ditto.
        * dom/CustomElementReactionQueue.h:
        (WebCore::CustomElementReactionStack::hasCurrentProcessingStack): Deleted. It was never called.

2018-08-02  Timothy Hatcher  <timothy@apple.com>

        Text selection color is hard to see in dark mode web views.
        https://bugs.webkit.org/show_bug.cgi?id=188260
        rdar://problem/42721294

        Reviewed by Simon Fraser.

        Stop using blendWithWhite() to transform the AppKit selection color in dark mode.
        Using an alpha of 80% gives good contrast, and still works good for selections over images.

        * platform/graphics/Color.cpp:
        (WebCore::Color::blendWithWhite const): Mark new colors as semantic if the original is.
        (WebCore::Color::colorWithAlpha const): Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionBackgroundColor const): Use transformSelectionBackgroundColor.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor const): Use transformSelectionBackgroundColor.
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor const): Ditto.
        (WebCore::RenderTheme::transformSelectionBackgroundColor const): Added. Just blend with white.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::transformSelectionBackgroundColor const): Added. Use an alpha with the color
        in dark mode, otherwise fallback to RenderTheme.
        (WebCore::RenderThemeMac::systemColor const): Use activeListBoxSelectionBackgroundColor()
        and activeSelectionBackgroundColor() instead of caching the colors again. Update hardcoded color.

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Use displayBox.rectWithMargin().bottom instead of displayBox.bottom() to where applicable.
        https://bugs.webkit.org/show_bug.cgi?id=188274

        Reviewed by Antti Koivisto.

        Float placement uses the margin box.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::bottom const):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Right aligned float's horizontal candidate position is miscomputed.
        https://bugs.webkit.org/show_bug.cgi?id=188273

        Reviewed by Antti Koivisto.

        rightAlignedBoxLeft is already shifted with the size of the margin box.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::alignWithFloatings const):

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Display:Box::rectWithMargin()'s width and height don't include margin left/top.
        https://bugs.webkit.org/show_bug.cgi?id=188272

        Reviewed by Antti Koivisto.

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::rectWithMargin const):

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Containing block of a float could push the candidate position beyond the current float.
        https://bugs.webkit.org/show_bug.cgi?id=188264

        Reviewed by Antti Koivisto.

        <div id=first style="float: left; width: 100px; height: 10px;"></div>
        <div id=second style="float: left; width: 10px; height: 10px;"></div>
        <div style="width: 50px; height: 50px;>
            <div id=third style="float: left; width: 10px; height: 10px;"></div>
        </div>
        In the example above by the time the "third" float comes in, we are already at 110px horizontally. However the containing block of the "third" float forces
        the candidate position at 0px. In such cases intersecting won't work since the candidate position is beyond the last(second) float (horizontally).
        We could either keep going back to the previous floats on this vertical position and eventually intersect with "first" or just compare the horizontal
        positions and ensure that the left/right float is not going to be placed to the left/right of the last float on the current vertical position.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::intersects const):

2018-08-01  Ryosuke Niwa  <rniwa@webkit.org>

        Implement customElements.upgrade()
        https://bugs.webkit.org/show_bug.cgi?id=183397

        Reviewed by Frédéric Wang.

        Added the support to upgrade custom elements directly. Ordinarily, custom elements get upgraded as they are
        inserted / connected into a document but some script libraries and authors want to be able to upgrade them before that.
        Also see https://github.com/w3c/webcomponents/issues/710

        Implemented the method as specified at:
        https://html.spec.whatwg.org/multipage/custom-elements.html#dom-customelementregistry-upgrade

            When invoked, the upgrade(root) method must run these steps:
            1. Let candidates be a list of all of root's shadow-including inclusive descendant elements,
               in shadow-including tree order.
            2. For each candidate of candidates, try to upgrade candidate.

        Tests: imported/w3c/web-platform-tests/custom-elements/custom-element-registry/upgrade.html

        * dom/CustomElementReactionQueue.cpp:
        (WebCore::CustomElementReactionQueue::enqueueElementUpgradeIfDefined): Removed the assertion that the upgraded element
        is connected since the whole point of this API is to upgrade a disconnected element.
        * dom/CustomElementRegistry.cpp:
        (WebCore::upgradeElementsInShadowIncludingdescendants): Added.
        (WebCore::CustomElementRegistry::upgrade): Added.
        * dom/CustomElementRegistry.h: Forward declare DeferredPromise instead of unnecessarily including JSDOMPromiseDeferred.h.
        * dom/CustomElementRegistry.idl:
        * dom/Element.cpp:
        (WebCore::Element::insertedIntoAncestor): Moved the assertion here.

2018-08-02  Simon Fraser  <simon.fraser@apple.com>

        Convert calc-related enums to 8-bit enum classes
        https://bugs.webkit.org/show_bug.cgi?id=188215

        Reviewed by Zalan Bujtas.

        This shrinks CSSCalcOperation from 48 to 32 bytes.

        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::determineCategory):
        (WebCore::resolvedTypeForMinOrMax):
        (WebCore::isIntegerResult):
        (WebCore::CSSCalcExpressionNodeParser::parseValue):
        (WebCore::CSSCalcExpressionNodeParser::parseValueMultiplicativeExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseAdditiveValueExpression):
        (WebCore::CSSCalcExpressionNodeParser::parseMinMaxExpression):
        (WebCore::createBlendHalf):
        (WebCore::createCSS):
        * css/CSSCalculationValue.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::primitiveType const):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTo100PercentMinusLength):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::CalcParser::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeInteger):
        (WebCore::CSSPropertyParserHelpers::consumePositiveIntegerRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumberRaw):
        (WebCore::CSSPropertyParserHelpers::consumeNumber):
        (WebCore::CSSPropertyParserHelpers::consumeFontWeightNumber):
        (WebCore::CSSPropertyParserHelpers::consumeLength):
        (WebCore::CSSPropertyParserHelpers::consumePercent):
        (WebCore::CSSPropertyParserHelpers::canConsumeCalcValue):
        (WebCore::CSSPropertyParserHelpers::consumeLengthOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeAngle):
        (WebCore::CSSPropertyParserHelpers::consumeAngleOrPercent):
        (WebCore::CSSPropertyParserHelpers::consumeTime):
        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionNumber::operator== const):
        (WebCore::CalcExpressionOperation::evaluate const):
        (WebCore::CalcExpressionOperation::operator== const):
        (WebCore::CalcExpressionOperation::dump const):
        (WebCore::CalcExpressionLength::operator== const):
        (WebCore::CalcExpressionBlendLength::CalcExpressionBlendLength):
        (WebCore::CalcExpressionBlendLength::operator== const):
        (WebCore::operator<<):
        * platform/CalculationValue.h:
        (WebCore::CalcExpressionNumber::CalcExpressionNumber):
        (WebCore::toCalcExpressionNumber):
        (WebCore::CalcExpressionLength::CalcExpressionLength):
        (WebCore::toCalcExpressionLength):
        (WebCore::CalcExpressionOperation::CalcExpressionOperation):
        (WebCore::toCalcExpressionOperation):
        (WebCore::toCalcExpressionBlendLength):
        * platform/Length.cpp:
        (WebCore::convertTo100PercentMinusLength):

2018-08-02  Charlie Turner  <cturner@igalia.com>

        Handle zero-sized ISOMP4 boxes appropriately
        https://bugs.webkit.org/show_bug.cgi?id=188256

        Reviewed by Jer Noble.

        According to ISO/IEC 14496-12:2012(E), when the Box classes' size
        field is zero, the implied size of the box extends to the end of
        the file. If this detail is not taken into account, CENC
        sanitization can incorrectly report an invalid box size, since 0
        != the number of bytes in this box, specifically, the data layout
        of Box is as follows,

        aligned(8) class Box (unsigned int(32) boxtype,
              optional unsigned int(8)[16] extended_type) {
           unsigned int(32) size;
           unsigned int(32) type = boxtype;
           if (size==1) {
             unsigned int(64) largesize;
           } else if (size==0) { // This is the case now handled.
             // box extends to end of file
           }
           if (boxtype==‘uuid’) {
             unsigned int(8)[16] usertype = extended_type;
           }
        }

        Tested by imported/w3c/web-platform-tests/encrypted-media/clearkey-generate-request-disallowed-input.https.html

        * platform/graphics/iso/ISOBox.cpp:
        (WebCore::ISOBox::peekBox): Check if the parsed size is zero, and
        if it is, the size is calculated as the total number of bytes in
        the incoming DataView.
        (WebCore::ISOBox::parse): Ditto.

2018-08-01  Dan Bernstein  <mitz@apple.com>

        Optionally expose Attr::style to JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=188226
        <rdar://problem/42818113>

        Reviewed by Darin Adler.

        Test: TestWebKitAPI/Tests/WebKitCocoa/AttrStyle.mm

        * dom/Attr.cpp: Update comment.
        * dom/Attr.idl: Define the style attribute, enabled at runtime by the AttrStyle feature.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAttrStyleEnabled): Added this accessor.
        (WebCore::RuntimeEnabledFeatures::attrStyleEnabled const): Ditto.

2018-08-02  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r234489.

        Caused 50+ crashes and 60+ API failures on iOS

        Reverted changeset:

        "[WTF] Rename String::format to String::deprecatedFormat"
        https://bugs.webkit.org/show_bug.cgi?id=188191
        https://trac.webkit.org/changeset/234489

2018-08-02  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Do not pass formatting root to FloatingContext
        https://bugs.webkit.org/show_bug.cgi?id=188257

        Reviewed by Antti Koivisto.

        If we ever need it, we can get it from FloatingState.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::FloatingContext):
        * layout/FloatingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Convert all coordinates relative to the formatting context root.
        https://bugs.webkit.org/show_bug.cgi?id=188249

        Reviewed by Antti Koivisto.

        The idea here is that all the float related computation should be happening in the same coordinate system.
        FloatItem holds the transformed Display::Box for both the layout box and its containing block. 

        * layout/FloatingContext.cpp:
        (WebCore::Layout::begin):
        (WebCore::Layout::end):
        (WebCore::Layout::FloatingContext::computePosition const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingContext::initialVerticalPosition const):
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const):
        (WebCore::Layout::FloatingContext::alignWithFloatings const):
        (WebCore::Layout::FloatingContext::toContainingBlock const):
        (WebCore::Layout::FloatingPair::FloatingPair):
        (WebCore::Layout::FloatingPair::left const):
        (WebCore::Layout::FloatingPair::right const):
        (WebCore::Layout::Iterator::Iterator):
        (WebCore::Layout::previousFloatingIndex):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        * layout/FloatingContext.h:
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatItem::FloatItem):
        (WebCore::Layout::FloatingState::remove):
        (WebCore::Layout::FloatingState::append):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::isEmpty const):
        (WebCore::Layout::FloatingState::FloatItem::layoutBox const):
        (WebCore::Layout::FloatingState::FloatItem::containingBlock const):
        (WebCore::Layout::FloatingState::FloatItem::displayBox const):
        (WebCore::Layout::FloatingState::FloatItem::containingBlockDisplayBox const):
        (WebCore::Layout::FloatingState::floats const):
        (WebCore::Layout::FloatingState::last const):
        (WebCore::Layout::FloatingState::root const):
        (WebCore::Layout::FloatingState::floatings const): Deleted.
        * layout/displaytree/DisplayBox.h:

2018-08-02  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Dynamically adjust blocksize
        https://bugs.webkit.org/show_bug.cgi?id=188194

        Reviewed by Xabier Rodriguez-Calvar.

        Update the blocksize depending on how much is obtained from a read
        of the input stream. This avoids doing too many reads in small
        chunks when larger amounts of data are available and also prevents
        using a very large memory area to read a small chunk of data.

        Adapted from https://bugzilla.gnome.org/show_bug.cgi?id=767833

        No tests new tests since no change in functionality.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init):
        (CachedResourceStreamingClient::checkUpdateBlocksize):
        (CachedResourceStreamingClient::dataReceived):

2018-08-02  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Stop pushing buffers when seeking status changes
        https://bugs.webkit.org/show_bug.cgi?id=188193

        Reviewed by Xabier Rodriguez-Calvar.

        After switching to splitting buffers into smaller block sizes in

            https://bugs.webkit.org/show_bug.cgi?id=182829

        It was found that during the individual buffer pushes, the seeking
        status could change behind our backs from another thread. When
        this happens, buffers from incorrect offsets would find their way
        into appsrc and eventually the demuxer itself, which would start
        parsing from a random place and at best give a confusing error
        message.

        The solution here is break from pushing buffers when the seeking
        status has been has changed. Flushes will clear out what we've
        already delivered into the appsrc, then we must make sure to not
        continue sending buffers in there after the flush.

        No new tests since this is a timing bug.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::dataReceived):

2018-08-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, revert TransformationMatrix::operator== change
        https://bugs.webkit.org/show_bug.cgi?id=188197

        This change partially revert cleaning up of TransformationMatrix since memcmp does not
        follow double comparison algorithm. So semantics was accidentally changed.

        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::operator== const):

2018-08-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, rename TransformationMatrix::Identity to TransformationMatrix::identity
        https://bugs.webkit.org/show_bug.cgi?id=188204

        Follow the coding style.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::transform const):
        (WebCore::GraphicsLayer::childrenTransform const):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:

2018-08-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add self.queueMicrotask(f) on DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=188212

        Reviewed by Ryosuke Niwa.

        This patch adds self.queueMicrotask(f) in DOMWindow, which takes a function and enqueue it into microtask queue.
        We do not add this to Worker's global scope since our worker does not support microtasks correctly.

        Tests: js/dom/queue-microtask-window.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::queueMicrotask):
        Post a microtask to JSC's microtask mechanism. This will eventually go to WebCore's MicrotaskQueue code.

        * page/DOMWindow.idl:

2018-08-01  Tomas Popela  <tpopela@redhat.com>

        [WTF] Rename String::format to String::deprecatedFormat
        https://bugs.webkit.org/show_bug.cgi?id=188191

        Reviewed by Darin Adler.

        It should be replaced with string concatenation.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString const):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        * Modules/indexeddb/shared/IDBCursorInfo.cpp:
        (WebCore::IDBCursorInfo::loggingString const):
        * Modules/indexeddb/shared/IDBGetAllRecordsData.cpp:
        (WebCore::IDBGetAllRecordsData::loggingString const):
        * Modules/indexeddb/shared/IDBGetRecordData.cpp:
        (WebCore::IDBGetRecordData::loggingString const):
        * Modules/indexeddb/shared/IDBIndexInfo.cpp:
        (WebCore::IDBIndexInfo::loggingString const):
        (WebCore::IDBIndexInfo::condensedLoggingString const):
        * Modules/indexeddb/shared/IDBIterateCursorData.cpp:
        (WebCore::IDBIterateCursorData::loggingString const):
        * Modules/indexeddb/shared/IDBObjectStoreInfo.cpp:
        (WebCore::IDBObjectStoreInfo::condensedLoggingString const):
        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
        (WebCore::IDBResourceIdentifier::loggingString const):
        * Modules/webdatabase/Database.cpp:
        (WebCore::formatErrorMessage):
        * Modules/webdatabase/SQLError.h:
        (WebCore::SQLError::create):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::encodeProtocolString):
        * accessibility/win/AccessibilityObjectWrapperWin.cpp:
        (WebCore::AccessibilityObjectWrapper::accessibilityAttributeValue):
        * css/CSSUnicodeRangeValue.cpp:
        (WebCore::CSSUnicodeRangeValue::customCSSText const):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::aspectRatioValueAsString):
        * css/parser/CSSParserToken.cpp:
        (WebCore::CSSParserToken::serialize const):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHexColor):
        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString):
        (WebCore::processFileDateString):
        * html/HTMLMediaElement.h:
        (WTF::ValueToString<WebCore::TextTrackCue::string):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::imageUpdated):
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCueBox::applyCSSProperties):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setDockingUnavailable):
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        (WebCore::InspectorFrontendClientLocal::setDebuggingEnabled):
        (WebCore::InspectorFrontendClientLocal::setTimelineProfilingEnabled):
        (WebCore::InspectorFrontendClientLocal::showMainResourceForFrame):
        * inspector/agents/InspectorCSSAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS const):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/MemoryRelease.cpp:
        (WebCore::logMemoryStatisticsAtTimeOfDeath):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::formatByteNumber):
        (WebCore::gcTimerString):
        (WebCore::ResourceUsageOverlay::platformDraw):
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::logFootprintComparison):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::cpuUsageString):
        (WebCore::formatByteNumber):
        (WebCore::gcTimerString):
        * page/scrolling/AxisScrollSnapOffsets.cpp:
        (WebCore::snapOffsetsToString):
        (WebCore::snapOffsetRangesToString):
        (WebCore::snapPortOrAreaToString):
        * platform/DateComponents.cpp:
        (WebCore::DateComponents::toStringForTime const):
        (WebCore::DateComponents::toString const):
        * platform/LocalizedStrings.cpp:
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::cssText const):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyIdentifierForCharCode):
        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::HIDGamepad):
        * platform/glib/UserAgentGLib.cpp:
        (WebCore::platformVersionForUAString):
        * platform/graphics/Color.cpp:
        (WebCore::Color::nameForRenderTreeAsText const):
        * platform/graphics/FloatPolygon.h:
        (WTF::ValueToString<WebCore::FloatPolygonEdge::string):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::id const):
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::simpleBusMessageCallback):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::handleStateChangeMessage):
        (WebCore::AppendPipeline::resetPipeline):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::load):
        (WebCore::MediaPlayerPrivateGStreamerMSE::doSeek):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyIdentifierForGdkKeyCode):
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::GStreamerAudioCaptureSource::create):
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcAddPad):
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        (WebCore::GStreamerVideoCaptureSource::create):
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::makeElement):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/network/ParsedContentRange.cpp:
        (WebCore::ParsedContentRange::headerValue const):
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::unauthorizedSQLFunction):
        * platform/text/PlatformLocale.cpp:
        (WebCore::DateTimeStringBuilder::visitField):
        * platform/win/GDIObjectCounter.cpp:
        (WebCore::GDIObjectCounter::GDIObjectCounter):
        * platform/win/KeyEventWin.cpp:
        (WebCore::keyIdentifierForWindowsKeyCode):
        * rendering/FloatingObjects.h:
        (WTF::ValueToString<WebCore::FloatingObject::string):
        * rendering/RenderFragmentedFlow.h:
        (WTF::ValueToString<WebCore::RenderFragmentContainer::string):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logLayerInfo):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::formatMediaControlsTime const):
        * testing/Internals.cpp:
        (WebCore::Internals::address):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::ensureValidRecordsTable):
        (WebCore::RegistrationDatabase::importRecords):

2018-08-01  Alex Christensen  <achristensen@webkit.org>

        Move all calls to ResourceLoader::start to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=184946

        Reviewed by Andy Estes.

        This is in preparation for moving ResourceLoader::start to WebKitLegacy along with all ResourceHandle code.
        I move the code that moves m_deferredRequest into m_request into WebKitLegacy, which won't change behavior for
        modern WebKit because modern WebKit never calls ResourceLoader::start, the only place where m_deferredRequest
        is ever set.  This won't change behavior for WebKitLegacy because the same operations happen in the same order.

        * loader/LoaderStrategy.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::setDefersLoading):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setRequest):
        (WebCore::ResourceLoader::deferredRequest const):
        (WebCore::ResourceLoader::takeDeferredRequest):

2018-08-01  Nan Wang  <n_wang@apple.com>

        AX: AOM: Add ARIA IDL Attribute Reflection
        https://bugs.webkit.org/show_bug.cgi?id=184676
        <rdar://problem/39476882>

        Reviewed by Chris Fleizach.

        Test: accessibility/ARIA-reflection.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRole.idl: Added.
        * accessibility/AriaAttributes.idl: Added.
        * dom/Element.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setAriaReflectionEnabled):
        (WebCore::RuntimeEnabledFeatures::ariaReflectionEnabled const):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Revert back to only one list for the all the floatings.
        https://bugs.webkit.org/show_bug.cgi?id=188232

        Reviewed by Antti Koivisto.

        If the combined floating list turns out to be a performance bottleneck, we can still split it into left and right. However at this point
        having 2 dedicated lists just makes the implementation more complicated.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::begin):
        (WebCore::Layout::end):
        (WebCore::Layout::FloatingPair::FloatingPair):
        (WebCore::Layout::FloatingPair::left const):
        (WebCore::Layout::FloatingPair::right const):
        (WebCore::Layout::Iterator::Iterator):
        (WebCore::Layout::previousFloatingIndex):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        (WebCore::Layout::floatingDisplayBox): Deleted.
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::remove):
        (WebCore::Layout::FloatingState::append):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::isEmpty const):
        (WebCore::Layout::FloatingState::floatings const):
        (WebCore::Layout::FloatingState::last const):

2018-08-01  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Change synchronous request logic using MessageQueue to match with Mac port.
        https://bugs.webkit.org/show_bug.cgi?id=188206

        Reviewed by Alex Christensen.

        Port synchronous request logic from ResourceHandleMac to use MessageQueue for
        client callback invocation. This makes simplify the logic of CurlRequest because
        now every requests are handled in Curl thread and there's no difference between
        sync and async requests.

        Test: Covered by these tests:
        - http\tests\xmlhttprequest\simple-sync.html
        - http\tests\xmlhttprequest\xmlhttprequest-unsafe-redirect.html

        * platform/network/ResourceHandleInternal.h:
        * platform/network/curl/CurlRequest.cpp: Remove synchronous request logics.
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::invalidateClient):
        (WebCore::CurlRequest::start):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::runOnMainThread): Added message queue handling.
        (WebCore::CurlRequest::runOnWorkerThreadIfRequired):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::updateHandlePauseState):
        (WebCore::CurlRequest::isHandlePaused const):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        (WebCore::CurlRequest::resourceRequest const):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::restartRequestWithCredential):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse):
        (WebCore::ResourceHandle::continueAfterDidReceiveResponse):
        (WebCore::ResourceHandle::continueAfterWillSendRequest):
        (WebCore::ResourceHandle::handleDataURL):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Use margin box consistently while placing a floating.
        https://bugs.webkit.org/show_bug.cgi?id=188222

        Reviewed by Antti Koivisto.

        The floating box fits when its margin box fits.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::computePosition const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingContext::initialVerticalPosition const):
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const):
        (WebCore::Layout::FloatingContext::alignWithFloatings const):
        (WebCore::Layout::FloatingPair::intersects const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::rectWithMargin const):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add FormattingContext::mapToAncestor geometry mapping function
        https://bugs.webkit.org/show_bug.cgi?id=188188

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::mapToAncestor):
        * layout/FormattingContext.h:
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::clone const):
        * layout/displaytree/DisplayBox.h:

2018-08-01  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bugfix on ResourceHandle::cancel()
        https://bugs.webkit.org/show_bug.cgi?id=188234

        Reviewed by Darin Adler.
        Trivial bug. The actual request was not cancelled correctly.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::cancel):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] FloatingState should take the formatting root box.
        https://bugs.webkit.org/show_bug.cgi?id=188214

        Reviewed by Antti Koivisto.

        This will be taken into use when FormattingContext takes all boxes in the coordinate system of the formatting root.

        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatingState):
        (WebCore::Layout::belongsToThisFloatingContext):
        (WebCore::Layout::FloatingState::append):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::create):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::establishedFormattingState):

2018-08-01  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Align new floating with the bottom of the existing floatings.
        https://bugs.webkit.org/show_bug.cgi?id=188213

        Reviewed by Antti Koivisto.

        When the incoming floating does not fit at all, align its top with the bottom of the existing floatings.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingPair::bottom const):

2018-08-01  Eric Carlson  <eric.carlson@apple.com>

        Always use MediaPlayback audio category when playing to AppleTV
        https://bugs.webkit.org/show_bug.cgi?id=188230
        <rdar://problem/42497809>

        Reviewed by Jer Noble.

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState): Check session.isPlayingToWirelessPlaybackTarget().

2018-08-01  Timothy Hatcher  <timothy@apple.com>

        Hardcode some system colors to avoid fingerprinting exposure.
        https://bugs.webkit.org/show_bug.cgi?id=188203
        rdar://problem/42781630

        Reviewed by Tim Horton.

        Passes existing tests with the hardcoded blue system appearance.

        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):
        Adds special handling for some system colors. Fixes -apple-system-selected-text-background
        to match the real selection color by using blendWithWhite().

2018-08-01  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Remove the delay before setting audio session category added in r233535
        https://bugs.webkit.org/show_bug.cgi?id=188225

        Reviewed by Jer Noble.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::beginInterruption): scheduleUpdateSessionState -> updateSessionState.
        (WebCore::PlatformMediaSessionManager::addSession): Ditto.
        (WebCore::PlatformMediaSessionManager::removeSession): Ditto.
        (WebCore::PlatformMediaSessionManager::sessionStateChanged): Ditto.
        (WebCore::PlatformMediaSessionManager::sessionCanProduceAudioChanged): Ditto.
        (WebCore::PlatformMediaSessionManager::updateSessionState): Ditto.
        (WebCore::PlatformMediaSessionManager::audioOutputDeviceChanged): Ditto.
        (WebCore::PlatformMediaSessionManager::scheduleUpdateSessionState): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):
        (PlatformMediaSessionManager::scheduleUpdateSessionState): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateClipRects):

2018-08-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Add TransformationMatrix::Identity
        https://bugs.webkit.org/show_bug.cgi?id=188204

        Reviewed by Simon Fraser.

        This patch adds TransformationMatrix::Identity, which is a static const variable holding an identity matrix.

        No behavior change.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::transform const):
        (WebCore::GraphicsLayer::childrenTransform const):
        (): Deleted.
        * platform/graphics/transforms/TransformationMatrix.cpp:
        * platform/graphics/transforms/TransformationMatrix.h:

2018-08-01  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Make sure that first buffer running time is 0 in GStreamerMediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=188210

        This is a live source and the first frame is the beginning of the stream,
        but that doesn't mean that the incoming stream from the camera didn't start
        before. We need to set a pad offset on each srcpad of the source to compensate
        for that. This is the exact same logic as in webrtc GStreamerVideo/Enc/Dec/oder.

        Reviewed by Alejandro G. Castro.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkit_media_stream_src_init):
        (WebCore::webkitMediaStreamSrcPushVideoSample):
        (WebCore::webkitMediaStreamSrcPushAudioSample):

2018-08-01  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Move CoordinatedBackingStore to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=188158

        Reviewed by Carlos Garcia Campos.

        Move the CoordinatedBackingStore class from WebKit to WebCore. It has no
        dependency on anything in the WebKit layer, and it's more suitable to
        future needs to keep it in the WebCore layer.

        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp: Renamed from Source/WebKit/Shared/CoordinatedGraphics/CoordinatedBackingStore.cpp.
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h: Renamed from Source/WebKit/Shared/CoordinatedGraphics/CoordinatedBackingStore.h.
        (WebCore::CoordinatedBackingStoreTile::CoordinatedBackingStoreTile):
        (WebCore::CoordinatedBackingStore::rect const):

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

        [WIN] Fix tests for text with initial advances
        https://bugs.webkit.org/show_bug.cgi?id=188099

        Reviewed by Darin Adler.

        Fixup after r234318.

        Tests: fast/text/complex-first-glyph-with-initial-advance.html
               fast/text/initial-advance-in-intermediate-run-complex.html

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

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

        REGRESSION (r231107): MoviStar+ launches to a blank black screen
        https://bugs.webkit.org/show_bug.cgi?id=188139

        Reviewed by Brent Fulgham.

        For this app, revert behavior to how it was before r231107 with a linked-on-or-before check.
        r231107 increased our fetch spec conformance, which we intend to keep.  This makes a low-risk
        targeted fix that will fix the affected app until they update.  

        I manually verified this fixes the app.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::applicationSDKVersionOverride):
        (WebCore::setApplicationSDKVersion):
        (WebCore::applicationSDKVersion):
        (WebCore::IOSApplication::isMoviStarPlus):

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

        [Cocoa] Addressing post-review comments on r234158
        https://bugs.webkit.org/show_bug.cgi?id=188202

        Reviewed by Darin Adler.

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

2018-07-31  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Remove partitioned cookies for reduced complexity, lower memory footprint, and ability to support more platforms
        https://bugs.webkit.org/show_bug.cgi?id=188109
        <rdar://problem/42664391>

        Reviewed by Brent Fulgham, Chris Dumez, and Alex Christensen.

        Tests: http/tests/resourceLoadStatistics/cookie-deletion.html
               http/tests/resourceLoadStatistics/cookies-with-and-without-user-interaction.html
               http/tests/storageAccess/has-storage-access-from-prevalent-domain-with-user-interaction.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-non-sandboxed-iframe-pop-window.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-non-sandboxed-iframe.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-user-interaction-and-access-from-right-frame.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-user-interaction-but-access-from-wrong-frame.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-user-interaction.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-without-user-interaction.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe.html
               http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-nested-iframe.html

        This patch removes cookie partitioning which reduces the model to just
        blocked cookies (in third-party contexts) and first-party cookie access.

        Several of the changes are renaming to reflect that there are no more
        cookie partitions. However, the compile-time check remains for now since
        this change is not ready to ship.

        The test cases mentioned about are not new. They are just renamed to
        reflect the code changes and to shorten their names (as requested by
        non-Cocoa platforms).

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
            Removed the use of isMarkedForCookiePartitioning.
        * loader/ResourceLoadStatistics.h:
            Removed isMarkedForCookiePartitioning.
        * platform/network/NetworkStorageSession.h:
        * platform/network/ResourceHandle.h:
            Renamed applySniffingPoliciesAndStoragePartitionIfNeeded() to
            applySniffingPoliciesIfNeeded().
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::getPartitioningDomain):
        (WebCore::NetworkStorageSession::shouldBlockCookies const):
            Now takes a frame ID and a page ID to be able to support
            the Storage Access API. This was previously handled by
            shouldPartitionCookies() which is now deleted.
        (WebCore::NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor):
            Renamed from setPrevalentDomainsToPartitionOrBlockCookies().
        (WebCore::NetworkStorageSession::removePrevalentDomains):
            No longer needs to clear the member variable for partitioned cookie domains.
        (WebCore::NetworkStorageSession::setCookieStoragePartitioningEnabled): Deleted.
        (WebCore::NetworkStorageSession::cookieStoragePartition const): Deleted.
        (WebCore::NetworkStorageSession::shouldPartitionCookies const): Deleted.
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies): Deleted.
            Renamed to setPrevalentDomainsToBlockCookiesFor().
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForURL):
            Now calls session.shouldBlockCookies() instead of the
            wrapper cookiesAreBlockedForURL().
        (WebCore::setCookiesFromDOM):
            No longer checks for partition.
        (WebCore::applyPartitionToCookies): Deleted.
        (WebCore::cookiesAreBlockedForURL): Deleted.
            This was just a wrapper for session.shouldBlockCookies().
        (WebCore::cookiesInPartitionForURL): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesIfNeeded):
            Renamed from applySniffingPoliciesAndStoragePartitionIfNeeded().
        (WebCore::ResourceHandle::createNSURLConnection):
            Consequence of function name change.
        (WebCore::ResourceHandle::applySniffingPoliciesAndStoragePartitionIfNeeded): Deleted.
            Renamed to applySniffingPoliciesIfNeeded().

2018-07-31  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Spelling suggestions cannot be selected in focused form controls when zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=188107
        <rdar://problem/42354250>

        Reviewed by Tim Horton.

        After r232040, the synthetic click gesture recognizer was enabled when tapping inside of the focused element,
        which allows the page to handle click events inside editable content. However, this means that codepaths in
        EventHandler that are responsible for changing selection due to default click event behaviors on macOS are now
        active on iOS; this conflicts with selection changes due to text interaction gestures, which are the existing
        mechanism for modifying the selection on iOS.

        To address this, we defer selection changes when clicking to text interaction gestures on iOS by tweaking the
        default behavior of a click on iOS to /not/ change selection when moving within the same editable root. This is
        similar to r233311, but in a different codepath that specifically handles selection changes when clicking on
        content that is already selected.

        Test: fast/forms/ios/click-should-not-suppress-misspelling.html

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

2018-07-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Clean up TransformationMatrix implementation
        https://bugs.webkit.org/show_bug.cgi?id=188197

        Reviewed by Simon Fraser.

        We perform cleaning up of TransformationMatrix.

        1. We drop user-defined operator= and copy constructor. Default ones works well for TransformationMatrix.
        2. Remove unused setMatrix. We explicitly use memcpy in TransformationMatrix.cpp (only one place).
        3. Use memcmp for implementing operator==.

        In (2) and (3), we use `memcpy(&matrix[0][0], &tmp[0][0], sizeof(Matrix4))` instead of `memcpy(matrix, tmp, sizeof(Matrix4))`,
        since they both are non nullptr and the former is easier to understand.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::setMatrix):
        (WebCore::TransformationMatrix::operator== const):
        (WebCore::TransformationMatrix::operator =): Deleted.

2018-07-31  Timothy Hatcher  <timothy@apple.com>

        Don't call RenderTheme::platformColorsDidChange() during printing.
        https://bugs.webkit.org/show_bug.cgi?id=188181
        rdar://problem/42360070

        Reviewed by Tim Horton.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia): Call m_page.updateStyleAfterChangeInEnvironment()
        instead of going to styleStope() and remove call to RenderTheme::platformColorsDidChange().
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustMediaTypeForPrinting): Remove call RenderTheme::platformColorsDidChange().

2018-07-31  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use static const global variable for TransformationMatrix instead of NeverDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=188195

        Reviewed by Darin Adler.

        Since TransformationMatrix does not have a non-trivial destructor, we can put it
        as static const global variable if its constructor is constexpr. This patch makes
        some of constructors constexpr and makes identityTransform static const global variable
        instead of NeverDestroyed<> + static function. This removes unnecessary static function
        and lazy initialization.

        No behavior change.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::transform const):
        (WebCore::GraphicsLayer::childrenTransform const):
        (WebCore::identityTransform): Deleted.
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::TransformationMatrix::TransformationMatrix):

2018-07-31  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Add basic left/right floating positioning.
        https://bugs.webkit.org/show_bug.cgi?id=188148

        Reviewed by Antti Koivisto.

        This patch implements simple floating positioning.
        (Floatings with different containing blocks do not work yet.)

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingPair::isEmpty const):
        (WebCore::Layout::Iterator::current const):
        (WebCore::Layout::Iterator::verticalPosition const):
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::computePosition const):
        (WebCore::Layout::FloatingContext::floatingPosition const):
        (WebCore::Layout::FloatingContext::initialVerticalPosition const):
        (WebCore::Layout::FloatingContext::alignWithContainingBlock const):
        (WebCore::Layout::FloatingContext::alignWithFloatings const):
        (WebCore::Layout::floatingDisplayBox):
        (WebCore::Layout::FloatingPair::FloatingPair):
        (WebCore::Layout::FloatingPair::left const):
        (WebCore::Layout::FloatingPair::right const):
        (WebCore::Layout::FloatingPair::intersects const):
        (WebCore::Layout::Iterator::Iterator):
        (WebCore::Layout::Iterator::operator++):
        (WebCore::Layout::Iterator::set):
        (WebCore::Layout::FloatingContext::computePosition): Deleted.
        * layout/FloatingContext.h:
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::append):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::floatings const):
        (WebCore::Layout::FloatingState::last const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Rect::Rect):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::Rect::intersects const):
        (WebCore::Display::Box::rect const):

2018-07-31  Rob Buis  <rbuis@igalia.com>

        Remove ResourceResponse::cacheBodyKey API
        https://bugs.webkit.org/show_bug.cgi?id=188192

        Reviewed by Frédéric Wang.

        Removed unused API.

        No new tests needed since this API is not used.

        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::encode const):
        (WebCore::ResourceResponseBase::decode):
        (WebCore::ResourceResponseBase::cacheBodyKey const): Deleted.
        (WebCore::ResourceResponseBase::setCacheBodyKey): Deleted.

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

        Shrink GraphicsLayerCA
        https://bugs.webkit.org/show_bug.cgi?id=188141

        Reviewed by Zalan Bujtas.
        
        Shrink GraphicsLayerCA from 1040 to 880 bytes by:
        * moving all the clone-related stuff into the lazily-allocated m_layerClones
        * moving all the animation-related stuff into the lazily-allocated m_animations
        * making enums be 8-bit
        * re-ordering data members

        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::ResourceUsageOverlay::platformInitialize):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        (WebCore::operator<<):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/WindRule.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::addProcessingActionForAnimation):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::setContentsToPlatformLayer):
        (WebCore::GraphicsLayerCA::contentsLayerForMedia const):
        (WebCore::GraphicsLayerCA::layerDidDisplay):
        (WebCore::layerTypeForCustomBackdropAppearance):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateMasksToBounds):
        (WebCore::GraphicsLayerCA::updateContentsVisibility):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::updateBackfaceVisibility):
        (WebCore::GraphicsLayerCA::updateFilters):
        (WebCore::GraphicsLayerCA::updateBackdropFilters):
        (WebCore::GraphicsLayerCA::updateBackdropFiltersRect):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateDrawsContent):
        (WebCore::GraphicsLayerCA::updateCoverage):
        (WebCore::GraphicsLayerCA::updateDebugIndicators):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsPlatformLayer):
        (WebCore::GraphicsLayerCA::updateContentsColorLayer):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::updateMasksToBoundsRect):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        (WebCore::GraphicsLayerCA::updateAnimations):
        (WebCore::GraphicsLayerCA::isRunningTransformAnimation const):
        (WebCore::GraphicsLayerCA::ensureLayerAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::animationIsRunning const):
        (WebCore::GraphicsLayerCA::primaryLayerClones const): Deleted.
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerContentsOrientation const):
        * platform/graphics/ca/TileCoverageMap.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::PlatformCALayerCocoa):
        (PlatformCALayerCocoa::requiresCustomAppearanceUpdateOnBoundsChange const):
        (PlatformCALayerCocoa::updateCustomAppearance):
        (PlatformCALayer::drawLayerContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCustomAppearance):
        (WebCore::RenderLayerBacking::updateConfiguration):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

2018-07-30  Justin Fan  <justin_fan@apple.com>

        [WebGL2] Support compilation of GLSL ES version 300 shaders
        https://bugs.webkit.org/show_bug.cgi?id=187982
        <rdar://problem/42564229>

        Reviewed by Dean Jackson.

        Test: fast/canvas/webgl/webgl2-glsl3-compile.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create): Rename 'useGLES3' to 'isWebGL2' (everywhere) to make more sense.
        * platform/graphics/GraphicsContext3DAttributes.h: Rename 'useGLES3' to 'isWebGL2'.
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::setPixelFormat): Back WebGL2 contexts with OpenGL 4 for full OpenGL ES 3 support. 
        (WebCore::GraphicsContext3D::GraphicsContext3D): Request correct GLSL output version and WebGL 2 for ANGLE shader compilation.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking const): MAX_VARYING_FLOATS is deprecated in OpenGL 3+.
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp: Rename 'useGLES3' to 'isWebGL2'.
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2018-07-30  Justin Fan  <justin_fan@apple.com>

        Match GraphicsContext3D with correct virtual screen using registryID
        https://bugs.webkit.org/show_bug.cgi?id=188072
        <rdar://problem/42634940>

        Reviewed by Dean Jackson.

        Follow up to https://bugs.webkit.org/show_bug.cgi?id=187750. Rather than matching rendererIDs, 
        which can vary between processes, match GPU to display using registryID that is unique to a GPU, 
        which was added to CGL in MacOS 10.13. 

        No new tests. Manually tested on MacBookPro13,3 and iMacPro1,1 with Apple DisplayPort Cinema Display
        and RX 580 external GPU. 

        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::setGPUByRegistryID):
        (WebCore::setGPUByDisplayMask):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::screenDidChange):
        (WebCore::identifyAndSetCurrentGPU): Deleted.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::collectScreenProperties):
        (WebCore::primaryRegistryID):
        (WebCore::registryIDForDisplay):
        (WebCore::registryIDForDisplayMask):
        (WebCore::rendererIDForDisplayMask): Deleted.
        (WebCore::rendererIDForDisplay): Deleted.
        (WebCore::primaryRendererID): Deleted.

2018-07-30  Rob Buis  <rbuis@igalia.com>

        Merge PlatformCookieJar functions into NetworkStorageSession
        https://bugs.webkit.org/show_bug.cgi?id=188137

        Reviewed by Alex Christensen.

        No new tests -- no change in WebKit functionality.

        * PlatformMac.cmake: Remove CookieJarMac.mm reference
        * SourcesCocoa.txt: Remove CookieJarMac.mm reference
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CookieJar.cpp: Remove PlatformCookieJar.h reference.
        * platform/Curl.cmake: Remove CookieJarCurl.cpp reference.
        * platform/SourcesSoup.txt: Remove CookieJarSoup.cpp reference.
        * platform/network/CacheValidation.cpp: Adapt callsites to use
        NetworkStorageSession instead of CookieJar functions.

        (WebCore::headerValueForVary):
        * platform/network/NetworkStorageSession.h: Add PlatformCookieJar
        functions.

        * platform/network/PlatformCookieJar.h: Removed.
        * platform/network/SocketStreamHandleImpl.cpp: Adapt callsites to
        use NetworkStorageSession instead of CookieJar functions.
        (WebCore::cookieDataForHandshake):
        * platform/network/cf/CookieJarCFNet.cpp: Removed.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Move functions
        from CookieJarCFNet.cpp.
        (WebCore::cookieDomain):
        (WebCore::canonicalCookieTime):
        (WebCore::cookieCreatedTime):
        (WebCore::cookieExpirationTime):
        (WebCore::cookieName):
        (WebCore::cookiePath):
        (WebCore::cookieValue):
        (WebCore::filterCookies):
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::createCookies):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::containsSecureCookies):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::cookiesEnabled const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::deleteAllCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm: Move functions
        from CookieJarMac.mm.
        (WebCore::httpCookies):
        (WebCore::deleteHTTPCookie):
        (WebCore::policyProperties):
        (WebCore::cookiesForURL):
        (WebCore::setHTTPCookiesForURL):
        (WebCore::httpCookiesForURL):
        (WebCore::filterCookies):
        (WebCore::applyPartitionToCookies):
        (WebCore::cookiesAreBlockedForURL):
        (WebCore::cookiesInPartitionForURL):
        (WebCore::cookiesForSession):
        (WebCore::deleteAllHTTPCookies):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::httpCookieAcceptPolicy):
        (WebCore::NetworkStorageSession::cookiesEnabled const):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::deleteAllCookies):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):
        * platform/network/curl/CookieJarCurl.cpp: Removed.
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp: Merge functions
        from CookieJarCurl.cpp.
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::cookiesEnabled const):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::deleteAllCookies):
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):
        * platform/network/mac/CookieJarMac.mm: Removed.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        * platform/network/soup/CookieJarSoup.cpp: Removed.
        * platform/network/soup/NetworkStorageSessionSoup.cpp: Merge functions
        from CookieJarSoup.cpp.
        (WebCore::NetworkStorageSession::cookiesEnabled const):
        (WebCore::httpOnlyCookieExists):
        (WebCore::NetworkStorageSession::setCookiesFromDOM const):
        (WebCore::NetworkStorageSession::deleteCookie const):
        (WebCore::NetworkStorageSession::deleteAllCookies):
        (WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):
        (WebCore::NetworkStorageSession::deleteCookiesForHostnames):
        (WebCore::NetworkStorageSession::getHostnamesWithCookies):
        (WebCore::NetworkStorageSession::getRawCookies const):
        (WebCore::cookiesForSession):
        (WebCore::NetworkStorageSession::cookiesForDOM const):
        (WebCore::NetworkStorageSession::cookieRequestHeaderFieldValue const):

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

        Nullptr crash accessing Document in GenericEventQueue::dispatchOneEvent()
        https://bugs.webkit.org/show_bug.cgi?id=187284

        Unreviewed, roll r233496 and r233571 now that all known issues have been fixed via
        dependency bugs.

        Test: media/track/video-track-addition-and-frame-removal.html

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::suspend):
        (WebCore::WebKitMediaKeySession::resume):
        (WebCore::WebKitMediaKeySession::stop):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        (WebCore::MediaSource::suspend):
        (WebCore::MediaSource::resume):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::suspend):
        (WebCore::SourceBuffer::resume):
        (WebCore::SourceBuffer::stop):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::SourceBufferList):
        (WebCore::SourceBufferList::canSuspendForDocumentSuspension const):
        (WebCore::SourceBufferList::suspend):
        (WebCore::SourceBufferList::resume):
        (WebCore::SourceBufferList::stop):
        (WebCore::SourceBufferList::activeDOMObjectName const):
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediasource/SourceBufferList.idl:
        * dom/Document.h:
        (WebCore::Document::hasBrowsingContext const):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::dispatchOneEvent):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::prepareToPlay):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        * html/track/AudioTrackList.cpp:
        (AudioTrackList::activeDOMObjectName const):
        * html/track/AudioTrackList.h:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrackList.cpp:
        (TextTrackList::activeDOMObjectName const):
        * html/track/TextTrackList.h:
        * html/track/TextTrackList.idl:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::TrackListBase):
        (WebCore::TrackListBase::canSuspendForDocumentSuspension const):
        (WebCore::TrackListBase::suspend):
        (WebCore::TrackListBase::resume):
        (WebCore::TrackListBase::stop):
        * html/track/TrackListBase.h:
        * html/track/VideoTrackList.cpp:
        (VideoTrackList::activeDOMObjectName const):
        * html/track/VideoTrackList.h:
        * html/track/VideoTrackList.idl:

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

        Unreviewed internal build fix after r234347.

        * html/StepRange.cpp:
        (WebCore::StepRange::StepRange):

2018-07-29  Simon Fraser  <simon.fraser@apple.com>

        Shrink GraphicsLayer by making m_transform and m_childrenTransform be unique_ptrs
        https://bugs.webkit.org/show_bug.cgi?id=188143

        Reviewed by Zalan Bujtas.

        m_transform and m_childrenTransform are usually identity; save space by making
        these unique_ptrs. The getters still return references by returning a reference
        to a NeverDestroyed<TransformationMatrix> if necessary.
        
        Shrinks GraphicsLayerCA from 840 to 640 bytes.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::identityTransform):
        (WebCore::GraphicsLayer::transform const):
        (WebCore::GraphicsLayer::setTransform):
        (WebCore::GraphicsLayer::childrenTransform const):
        (WebCore::GraphicsLayer::setChildrenTransform):
        (WebCore::GraphicsLayer::dumpProperties const):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::hasNonIdentityTransform const):
        (WebCore::GraphicsLayer::hasNonIdentityChildrenTransform const):
        (WebCore::GraphicsLayer::transform const): Deleted.
        (WebCore::GraphicsLayer::setTransform): Deleted.
        (WebCore::GraphicsLayer::childrenTransform const): Deleted.
        (WebCore::GraphicsLayer::setChildrenTransform): Deleted.
        (WebCore::GraphicsLayer::hasFlattenedPerspectiveTransform): Deleted. It was unused.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setTransform):
        (WebCore::GraphicsLayerCA::setChildrenTransform):
        (WebCore::GraphicsLayerCA::layerTransform const):
        (WebCore::GraphicsLayerCA::updateTransform):
        (WebCore::GraphicsLayerCA::updateChildrenTransform):
        (WebCore::GraphicsLayerCA::removeCAAnimationFromLayer):

2018-07-30  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Make codecparsers optionnal
        https://bugs.webkit.org/show_bug.cgi?id=188010

        And avoid building libWebRTC if it won't be used. While there is no other
        WebRTC backend, it makes no sense to expose an option.

        Error out when WEBRTC or MEDIA_STREAM is enabled but GStreamer < 1.10

        Reviewed by Alejandro G. Castro.

        * platform/GStreamer.cmake:

2018-07-28  Darin Adler  <darin@apple.com>

        [Cocoa] Update more WebCore Objective-C code to be ARC compatible
        https://bugs.webkit.org/show_bug.cgi?id=188140

        Reviewed by Sam Weinig.

        This make sure we don't put any Objective-C objects into HashMap/Set
        data structures, which doesn't work under ARC at this time. We could
        fix that some day, but it's pretty simple to change code not to rely
        on it, for now, and not as simple to support it in HashMap/Set.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase updateObjectBackingStore]):
        Use CFRetain/CFAutorelease instead of retain/autorelease.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap): Use CFStringRef in a HashMap rather than
        NSString * for string constants.
        (roleValueToNSString): Updated for above change.

        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject stringRepresentation]): Updated since objectValue
        is now CFTypeRef rather than NSObject *.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::create): Use CFTypeRef instead of id for the key types
        in a HashMap.
        (ObjcInstance::~ObjcInstance): Updated for the above change.
        (ObjcInstance::invokeObjcMethod): Updated since objectValue is now
        CFTypeRef.
        (ObjcInstance::invokeDefaultMethod): Ditto.
        (ObjcInstance::setValueOfUndefinedField): Ditto.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcArray::setValueAt const): Ditto.

        * bridge/objc/objc_utility.h: Use #pragma once. Use CFTypeRef instead
        of NSObject * for objectValue, since it's in a union and ARC does not
        support strong Objective-C object pointers in a union.

        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue): Updated since objectValue is
        now CFTypeRef.

        * editing/cocoa/HTMLConverter.mm:
        (HTMLConverter::_processElement): Use CFTypeRef rather than NSTextTable
        for a HashMap.
        (HTMLConverter::_exitElement): Ditto.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::attributesForAttributedStringConversion): Use CFRetain rather
        than -[NSObject retain] in a workaround for an overrelease.

        * editing/mac/DictionaryLookup.h: Removed code to make this usable from
        non-Objective-C source files. Use tuples rather than out arguments
        for the results of the various functions.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::DictionaryLookup::rangeForSelection): Return a tuple rather
        than using an out argument for options.
        (WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.
        (WebCore::DictionaryLookup::stringForPDFSelection): Ditto.
        (WebCore::showPopupOrCreateAnimationController): Removed use of typedef
        PlatformAnimationController.
        (WebCore::DictionaryLookup::animationControllerForPopup): Ditto.

        * html/HTMLMediaElement.h: Put the videoFullscreenLayer function inside
        an __OBJC__ ifdef since we can't do the type conversion without the
        full Objective-C type.

        * page/mac/EventHandlerMac.mm:
        (WebCore::selfRetainingNSScrollViewScrollWheel): Use CFRetain/CFRelease
        instead of retain/release.
        (WebCore::EventHandler::selectClosestWordFromHitTestResultBasedOnLookup):
        Updated to use tuple return value from DictionaryLookup.

        * page/scrolling/ScrollingStateNode.h: Replaced direct use of PlatformLayer*
        in a union with use of a "typless" void* pointer and added helper functions
        to convert in both directions.
        * page/scrolling/cocoa/ScrollingStateNode.mm:
        (WebCore::LayerRepresentation::retainPlatformLayer): Use CFRetain instead
        of retain.
        (WebCore::LayerRepresentation::releasePlatformLayer): Use CFRelease instead
        of release.
        (WebCore::LayerRepresentation::makePlatformLayerTyped): Added.
        (WebCore::LayerRepresentation::makePlatformLayerTypeless): Ditto.
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp:
        (WebCore::LayerRepresentation::retainPlatformLayer): Updated argument type.
        (WebCore::LayerRepresentation::releasePlatformLayer): Ditto.
        (WebCore::LayerRepresentation::makePlatformLayerTyped): Added.
        (WebCore::LayerRepresentation::makePlatformLayerTypeless): Ditto.

        * platform/gamepad/cocoa/GameControllerGamepadProvider.h: Use CFTypeRef
        instad of GCController * for key type of HashMap.
        * platform/gamepad/cocoa/GameControllerGamepadProvider.mm:
        (WebCore::GameControllerGamepadProvider::controllerDidConnect): Updated
        for the above change.
        (WebCore::GameControllerGamepadProvider::controllerDidDisconnect): Ditto.

        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        Use SOFT_LINK_CONSTANT_MAY_FAIL instead of SOFT_LINK_POINTER_OPTIONAL for
        strings, since SOFT_LINK_POINTER_OPTIONAL does not work for Objective-C
        types under ARC.
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind const): Added checks
        for the constants.
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind const): Ditto.
        (WebCore::AVTrackPrivateAVFObjCImpl::label const): Ditto.

        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h:
        Use #pragma once and use CFTypeRef instead of AVMediaSelectionOption *
        in the key to a HashMap.
        * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm:
        (WebCore::MediaSelectionGroupAVFObjC::updateOptions): Updated for
        the above change.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        Use SOFT_LINK_CONSTANT_MAY_FAIL instead of SOFT_LINK_POINTER_OPTIONAL for
        strings, since SOFT_LINK_POINTER_OPTIONAL does not work for Objective-C
        types under ARC.
        (WebCore::customSchemeURL): Removed unnecessary use of
        NeverDestroyed<RetainPtr>. Can just use a straight pointer without calling
        release, and that works with or without ARC.
        (WebCore::imageDecoderAssetOptions): Ditto. Here, had to add a retain,
        which we'll remove when we turn on ARC. Added canLoad checks, needed
        because of SOFT_LINK_CONSTANT_MAY_FAIL.
        (WebCore::ImageDecoderAVFObjC::firstEnabledTrack): Added canLoad check,
        needed because of SOFT_LINK_CONSTANT_MAY_FAIL.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        Use CFTypeRef instead of AVAssetResourceLoadingRequest in HashMap.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        Updated for above.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didCancelLoadingRequest): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::didStopLoadingRequest): Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        Use CFTypeRef instead of AVSampleBufferAudioRenderer in HashMap.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume): Updated for above.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setPreservesPitch): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setHasAvailableAudioSample): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer): Ditto.

        * platform/graphics/metal/GPUDrawableMetal.mm: Updated include; under ARC, it's
        not safe to call a method on a class without seeing its interface.

        * platform/mac/VideoFullscreenInterfaceMac.mm: Added an explicit
        __unsafe_unretained for a delegate. Could consider moving to weak, but for now
        this preserves the current behavior and compiles under ARC.

        * platform/mac/WebCoreFullScreenPlaceholderView.h: Use strong for the contents,
        weak for the target, and changed the action to be hard-coded instead of an
        arbitrary selector. If we find we need the flexibility again later, we can do
        it with a block, which is more ARC-friendly than calling an arbitrary selector.
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]): Call function directly
        instead of taking advantage of "using".
        (-[WebCoreFullScreenPlaceholderView mouseDown:]): Call cancelOperation: on the
        target rather than performing an arbitrary selector.

        * platform/mac/WebCoreObjCExtras.mm:
        (WebCoreObjCScheduleDeallocateOnMainThread): Use sel_registerName instead of
        @selector, since @selector is not supported under ARC.

        * platform/network/ResourceHandle.h: Use a return value rather than using an
        inout argument in applySniffingPoliciesAndStoragePartitionIfNeeded.

        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::startObserving): Removed unnecessary
        assertion of repondsToSelector since we are about to dispatch it immediately
        after. Call the selector in the conventional way instead of using performSelector.

        * platform/network/cocoa/WebCoreNSURLSession.h: Use #pragma once and use
        CFTypeRef instead of an Objective-C type. Also use an explicit __unsafe_unretained
        for the session in the data task.
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession dealloc]): Updated for the above.
        (-[WebCoreNSURLSession taskCompleted:]): Ditto.
        (-[WebCoreNSURLSession invalidateAndCancel]): Ditto.
        (-[WebCoreNSURLSession getTasksWithCompletionHandler:]): Ditto.
        (-[WebCoreNSURLSession getAllTasksWithCompletionHandler:]): Ditto.
        (-[WebCoreNSURLSession dataTaskWithRequest:]): Ditto.
        (-[WebCoreNSURLSession dataTaskWithURL:]): Ditto.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::applySniffingPoliciesAndStoragePartitionIfNeeded):
        Use a return value instead of an inout argument. Also use bridging casts.
        (WebCore::ResourceHandle::createNSURLConnection): Updated for the change above.
        Also use a bridging cast.
        (WebCore::ResourceHandle::schedule): Use a bridging cast.
        (WebCore::ResourceHandle::unschedule): Ditto.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary): Use a bridging cast.

        * testing/Internals.cpp:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation): Moved the macOS
        version of this function out of this file ...
        * testing/Internals.mm:
        (WebCore::Internals::rangeForDictionaryLookupAtLocation): ... to here.

2018-07-29  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use static global variables instead of static NeverDestroyed inside function if possible
        https://bugs.webkit.org/show_bug.cgi?id=188146

        Reviewed by Darin Adler.

        This patch leverages constexpr constructors / trivial destructors more to remove unnecessary `static NeverDestroyed`
        inside a function. It simplifies the code, removes the unnecessary function, and ensures the initialization at
        a program loader phase.

        We make StepRange::StepDescription constructor constexpr to remove bunch of `static NeverDestroyed<const StepRange::StepDescription>`.
        And we use `static Lock` since WTF::Lock has constexpr constructor.

        No behavior change.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::deref const):
        (WebCore::MessagePort::isExistingMessagePortLocallyReachable):
        (WebCore::MessagePort::notifyMessageAvailable):
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::allMessagePortsLock): Deleted.
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::contextIdentifier const):
        (WebCore::ScriptExecutionContext::removeFromContextsMap):
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::postTaskTo):
        (WebCore::allScriptExecutionContextsMapLock): Deleted.
        * html/DateInputType.cpp:
        (WebCore::DateInputType::createStepRange const):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::createStepRange const):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::createStepRange const):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::createStepRange const):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createStepRange const):
        * html/StepRange.h:
        (WebCore::StepRange::StepDescription::StepDescription):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::createStepRange const):
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::createStepRange const):
        * page/SecurityPolicy.cpp:
        (WebCore::originAccessMap):
        (WebCore::SecurityPolicy::isAccessWhiteListed):
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists):
        (WebCore::originAccessMapLock): Deleted.
        * platform/SchemeRegistry.cpp:
        (WebCore::allBuiltinSchemes):
        (WebCore::builtinLocalURLSchemes):
        (WebCore::localURLSchemes):
        (WebCore::displayIsolatedURLSchemes):
        (WebCore::builtinSecureSchemes):
        (WebCore::secureSchemes):
        (WebCore::builtinSchemesWithUniqueOrigins):
        (WebCore::schemesWithUniqueOrigins):
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes):
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::ContentSecurityPolicyBypassingSchemes):
        (WebCore::cachePartitioningSchemes):
        (WebCore::serviceWorkerSchemes):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
        (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest):
        (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
        (WebCore::SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy):
        (WebCore::SchemeRegistry::schemeShouldBypassContentSecurityPolicy):
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme):
        (WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle):
        (WebCore::SchemeRegistry::canServiceWorkersHandleURLScheme):
        (WebCore::SchemeRegistry::isServiceWorkerContainerCustomScheme):
        (WebCore::schemeRegistryLock): Deleted.

2018-07-29  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix the bug when client reject the redirect on WebKitLegacy.
        https://bugs.webkit.org/show_bug.cgi?id=188130

        Reviewed by Darin Adler.

        ResourceHandle for Curl port has a bug when a client returns en empty request which
        indicates the redirecti is rejected by the client. It should be quit the task immediately,
        but it kept doing the job. Fixed.
        NetworkDataTask implementation did the right thing and there's no bug for them. 

        Test: http/tests/xmlhttprequest/xmlhttprequest-unsafe-redirect-expected.txt

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::continueAfterWillSendRequest):

2018-07-28  Simon Fraser  <simon.fraser@apple.com>

        Reset CompositingPolicyOverride between tests
        https://bugs.webkit.org/show_bug.cgi?id=188138

        Reviewed by Zalan Bujtas.

        WK1 tests were failing after r234330 because the compositing policy override optional
        was left set on the Page (WK1 has injected bundle SPI to clear it). Fix by having 
        Internals::resetToConsistentState clear this state.

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

2018-07-24  Simon Fraser  <simon.fraser@apple.com>

        Animation stops with object-fit:contain on an animated 2d canvas
        https://bugs.webkit.org/show_bug.cgi?id=187840

        Reviewed by Zalan Bujtas.
        
        If a canvas has object-fit: cover or contain, repaints need to mapped through
        the rect that is used to position the canvas in the element bounds, which is replacedContentRect().
        
        Add a version of replacedContentRect() that doesn't require passing the intrinsicSize() since
        all but RenderVideo just pass the RenderReplaced's intrinsicSize.

        Test: fast/repaint/canvas-object-fit.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsBox const):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::replacedContentRect const):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage const):

2018-07-27  Simon Fraser  <simon.fraser@apple.com>

        Adjust the color matrix for the inverse apple-invert-lightness() transformation
        https://bugs.webkit.org/show_bug.cgi?id=188131
        rdar://problem/42673070

        Reviewed by Zalan Bujtas.

        Use the correct inverse matrix values.

        Test: editing/style/inverse-color-filter.html

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):

2018-07-27  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Don't deactivate audio session
        https://bugs.webkit.org/show_bug.cgi?id=188127
        <rdar://problem/42544143>

        Reviewed by Jon Lee.
        
        r233435 includes a change that deactivates the shared audio session when there are no more
        active media sessions. This is a good in WK2 because it allows other applications to resume
        playing audio when WebKit stops playing, but it is potentially bad in WK1 where the host
        app may also be playing audio.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::removeSession): Don't deactivate the audio session.

2018-07-27  Chris Dumez  <cdumez@apple.com>

        Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=188097
        <rdar://problem/42558823>

        Reviewed by Eric Carlson.

        Fix thread-safety issues related to RealtimeMediaSource::audioSamplesAvailable(). RealtimeMediaSource::audioSamplesAvailable()
        is called on a background thread but iterates over observers that may get destroyed concurrently on the main thread.

        To address the issue:
        - Introduce a Lock to protect m_observer accesses
        - Copy observers to a Vector before iterating over them

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::forEachObserver const):
        (WebCore::MediaStreamTrackPrivate::addObserver):
        (WebCore::MediaStreamTrackPrivate::removeObserver):
        (WebCore::MediaStreamTrackPrivate::setEnabled):
        (WebCore::MediaStreamTrackPrivate::endTrack):
        (WebCore::MediaStreamTrackPrivate::sourceStarted):
        (WebCore::MediaStreamTrackPrivate::sourceStopped):
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged):
        (WebCore::MediaStreamTrackPrivate::sourceSettingsChanged):
        (WebCore::MediaStreamTrackPrivate::videoSampleAvailable):
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        (WebCore::MediaStreamTrackPrivate::updateReadyState):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::Observer::sampleBufferUpdated):
        (WebCore::MediaStreamTrackPrivate::Observer::audioSamplesAvailable):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::addObserver):
        (WebCore::RealtimeMediaSource::removeObserver):
        (WebCore::RealtimeMediaSource::forEachObserver const):
        (WebCore::RealtimeMediaSource::notifyMutedObservers const):
        (WebCore::RealtimeMediaSource::settingsDidChange):
        (WebCore::RealtimeMediaSource::videoSampleAvailable):
        (WebCore::RealtimeMediaSource::audioSamplesAvailable):
        (WebCore::RealtimeMediaSource::start):
        (WebCore::RealtimeMediaSource::requestStop):
        (WebCore::RealtimeMediaSource::captureFailed):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Don't include WebPageProxy.h just for UndoOrRedo
        https://bugs.webkit.org/show_bug.cgi?id=188086

        Reviewed by Saam Barati.

        * platform/DragItem.h:

2018-07-27  Alex Christensen  <achristensen@webkit.org>

        Make CompletionHandler more const correct
        https://bugs.webkit.org/show_bug.cgi?id=186543

        Reviewed by Saam Barati.

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::checkRemotePortForActivity):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::pushChanges):
        (WebCore::RegistrationDatabase::clearAll):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::matchAll):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::matchAll):
        * workers/service/server/SWServerWorker.h:

2018-07-27  Simon Fraser  <simon.fraser@apple.com>

        Be more conservative with compositing layer creation when memory is low
        https://bugs.webkit.org/show_bug.cgi?id=187866
        rdar://problem/42366345

        Reviewed by Zalan Bujtas.
        
        When process physical footprint is above a fraction of the jetsam limit, be more conservative in making
        compositing layers. We avoid compositing for these situations:
        1. Layers with 3D transforms which are affine (like translateZ(0)).
        2. Layers with will-change
        3. Layers for canvases (other than WebGL/WebGPU)
        
        We reuse some macOS code in MemoryPressureHandler() but choose different thresholds for iOS,
        falling into "conservative mode" at 50% of jetsam limit, and "strict mode" at 65%.
        Compositing chooses to be more conservative in either "conservative" or "strict" memory modes.
        
        Plumb through a "compositingPolicyOverride" both so that on-device testing isn't
        flakily falling into a different mode, and so that we can impose the conservative
        mode for testing.

        Test: compositing/layer-creation/compositing-policy.html

        * page/Page.h:
        (WebCore::Page::compositingPolicyOverride const):
        (WebCore::Page::setCompositingPolicyOverride):
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        (WebCore::Matrix3DTransformOperation::isRepresentableIn2D const):
        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        * platform/graphics/transforms/RotateTransformOperation.h:
        * platform/graphics/transforms/ScaleTransformOperation.h:
        * platform/graphics/transforms/TransformOperation.h:
        (WebCore::TransformOperation::isRepresentableIn2D const):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::has3DOperation const):
        (WebCore::TransformOperations::isRepresentableIn2D const):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::updateCompositingPolicy):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform const):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo const):
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
        (WebCore::RenderLayerCompositor::requiresCompositingForWillChange const):
        (WebCore::RenderLayerCompositor::needsFixedRootBackgroundLayer const):
        (WebCore::operator<<):
        * rendering/RenderLayerCompositor.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setCompositingPolicyOverride):
        (WebCore::Internals::compositingPolicyOverride const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-27  Zalan Bujtas  <zalan@apple.com>

        [WK1] ASSERTION FAILED: renderer().repaintLayoutRects().m_repaintRect == renderer().clippedOverflowRectForRepaint(renderer().containerForRepaint()) in WebCore::RenderLayer::updateLayerPositionsAfterScroll
        https://bugs.webkit.org/show_bug.cgi?id=188122
        <rdar://problem/42584790>

        Reviewed by Simon Fraser.

        When ScrollView's m_paintsEntireContents flag flips due to layer backing changes, the repaint area transitions from
        visual to layout overflow. When this happens the cached repaint rects become invalid and they need to be recomputed.
        Currently there's no mechanism to trigger repaint cache invalidation from ScrollView.
        Skip assertion for now on WK1 (see webkit.org/b/188121)

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

2018-07-27  Myles C. Maxfield  <mmaxfield@apple.com>

        [WIN] Crash when trying to access store pages
        https://bugs.webkit.org/show_bug.cgi?id=188032
        <rdar://problem/42467016>

        Reviewed by Brent Fulgham.

        The Windows implementation of GlyphBuffer has an additional member, m_offsets, which represents
        an additional offset to the position to paint each glyph. It also has two add() functions, one
        which appends to this vector, and one which doesn't. The one that doesn't append to the vector
        should never be called on Windows (because Windows requires this vector to be full).

        There were two situations where it was getting called:
        1) Inside ComplexTextController
        2) Inside display list playback

        Windows shouldn't be using ComplexTextController because the Windows implementation of this 
        class isn't ready yet; instead it should be using UniscribeController. The display list playback
        code should be used on Windows.

        Rather than fix the function to append an offset, we actually don't need the m_offsets vector
        in the first place. Instead, we can do it the same way that the Cocoa ports do it, which is to
        bake the offsets into the glyph advances. This is possible because the GlyphBuffer doesn't need
        to distinguish between layout advances and paint advances, so we can bake them together and
        just put paint advances in the GlyphBuffer. This should be a small (probably within-the-noise)
        performance and memory improvement.

        * platform/graphics/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController): Make sure that ComplexTextController
        isn't used on Windows.
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::widthOfTextRange const): Switch from ComplexTextController to
        UniscribeController on Windows.
        (WebCore::FontCascade::drawGlyphBuffer const): After deleting the m_offsets vector, there's
        no reason to consult it when drawing.
        * platform/graphics/GlyphBuffer.h: Remove m_offsets
        (WebCore::GlyphBuffer::clear):
        (WebCore::GlyphBuffer::advanceAt const):
        (WebCore::GlyphBuffer::add):
        (WebCore::GlyphBuffer::expandLastAdvance):
        (WebCore::GlyphBuffer::shrink):
        (WebCore::GlyphBuffer::swap):
        (WebCore::GlyphBuffer::offsetAt const): Deleted.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs): After deleting the m_offsets vector, there's no reason
        to consult it when drawing.
        * platform/graphics/win/FontCascadeDirect2D.cpp:
        (WebCore::FontCascade::drawGlyphs): Ditto.
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): Bake in the offsets into the glyph advances.

2018-07-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Crash on synchronous request via ResourceHandle.
        https://bugs.webkit.org/show_bug.cgi?id=188033

        Reviewed by Alex Christensen.

        The timing of instantiation of delegate was wrong. Move it inside `delegate` getter().
        This bug was introduced at r228577.

        Test: http/tests/xmlhttprequest/simple-sync.html

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::delegate):

2018-07-03  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r233461.

        assertions triggered on ios11 Debug wk2

        Reverted changeset:

        "[iOS] Add assert to catch improper use of WebCore::Timer in
        UI Process"
        https://bugs.webkit.org/show_bug.cgi?id=185330
        https://trac.webkit.org/changeset/233461

2018-07-27  Chris Dumez  <cdumez@apple.com>

        [Media] Avoid unnecessarily constructing *TrackList objects
        https://bugs.webkit.org/show_bug.cgi?id=188094

        Reviewed by Eric Carlson.

        Avoid unnecessarily constructing *TrackList objects as this is preventing us from making them
        ActiveDOMObjects.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addAudioTrack):
        (WebCore::HTMLMediaElement::addTextTrack):
        (WebCore::HTMLMediaElement::addVideoTrack):
        (WebCore::HTMLMediaElement::ensureAudioTracks):
        (WebCore::HTMLMediaElement::ensureTextTracks):
        (WebCore::HTMLMediaElement::ensureVideoTracks):
        (WebCore::HTMLMediaElement::setSelectedTextTrack):
        (WebCore::HTMLMediaElement::audioTracks): Deleted.
        (WebCore::HTMLMediaElement::textTracks): Deleted.
        (WebCore::HTMLMediaElement::videoTracks): Deleted.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::audioTracks const):
        (WebCore::HTMLMediaElement::textTracks const):
        (WebCore::HTMLMediaElement::videoTracks const):
        * html/HTMLMediaElement.idl:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateTextStrokeStyle):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::trackIndex):
        (WebCore::TextTrack::trackIndexRelativeToRenderedTracks):
        (WebCore::TextTrack::setLanguage):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setKind):
        (WebCore::VideoTrack::setLanguage):
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::setMediaElement):
        (WebCore::PlaybackSessionModelMediaElement::updateMediaSelectionOptions):

2018-07-27  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Set correct source info to ResourceResponse.
        https://bugs.webkit.org/show_bug.cgi?id=188069

        Reviewed by Fujii Hironori.

        ResourceResponseBase::Source::Network must be set by each ports. Curl port
        didn't set this.

        Test: http/tests/cache/disk-cache/disk-cache-302-status-code.html

        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::ResourceResponse):

2018-07-26  Andy VanWagoner  <andy@vanwagoner.family>

        [INTL] Remove INTL sub-feature compile flags
        https://bugs.webkit.org/show_bug.cgi?id=188081

        Reviewed by Michael Catanzaro.

        Compile time feature flags for INTL sub features were removed, and are covered by existing tests.

        * Configurations/FeatureDefines.xcconfig:

2018-07-26  Zalan Bujtas  <zalan@apple.com>

        [Fullscreen] Do not create composited layers for renderers unless they are part of the fullscreen subtree.
        https://bugs.webkit.org/show_bug.cgi?id=188087
        <rdar://problem/42632124>

        Reviewed by Simon Fraser.

        Sibling composited layers prevent battery lifetime optimizations when in fullscreen.

        Test: compositing/no-compositing-when-fulll-screen-is-present.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isDescendantOf const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::isDescendantOfFullScreenLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForWillChange const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):

2018-07-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234281.

        Broke internal builds.

        Reverted changeset:

        "[Datalist] Add button to TextFieldInputs with a datalist"
        https://bugs.webkit.org/show_bug.cgi?id=187741
        https://trac.webkit.org/changeset/234281

2018-07-26  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        TextFieldInputs that have an associated datalist element should be drawn as
        combo boxes. However, we cannot use NSComboBox for this control, as NSComboBox
        is not height-resizable. Furthermore, the input should also be able to contain
        additional elements, such as the stepper for type=number and the cancel button
        for type=search. For these reasons, we draw a button at the end of the input,
        mimicking appearance of a combo box.

        The list-button -webkit-appearance value was added to display the new button.

        Tests: fast/forms/datalist/datalist-searchinput-appearance.html
               fast/forms/datalist/datalist-textinput-appearance.html

        * Resources/ListButtonArrow.png: Added.
        * Resources/ListButtonArrow@2x.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSProperties.json:
        * css/CSSValueKeywords.in:
        * css/html.css:
        (input::-webkit-list-button):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataListButtonElement const):
        (WebCore::HTMLInputElement::isShowingList const):
        * html/HTMLInputElement.h:
        * html/InputType.h:
        (WebCore::InputType::dataListButtonElement const):
        (WebCore::InputType::isShowingList const):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::needsContainer const):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::destroyShadowSubtree):
        (WebCore::TextFieldInputType::listAttributeTargetChanged):
        (WebCore::TextFieldInputType::dataListButtonElement const):
        (WebCore::TextFieldInputType::dataListButtonElementWasClicked):
        (WebCore::TextFieldInputType::didCloseSuggestions):
        (WebCore::TextFieldInputType::isShowingList const):
        * html/TextFieldInputType.h:
        * html/shadow/DataListButtonElement.cpp: Added.
        (WebCore::DataListButtonElement::create):
        (WebCore::DataListButtonElement::DataListButtonElement):
        (WebCore::DataListButtonElement::~DataListButtonElement):
        (WebCore::DataListButtonElement::defaultEventHandler):
        * html/shadow/DataListButtonElement.h: Added.
        * platform/ThemeTypes.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::adjustListButtonStyle const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (-[WebListButtonCell drawWithFrame:inView:]):
        (WebCore::RenderThemeMac::paintListButtonForInput):
        (WebCore::RenderThemeMac::adjustListButtonStyle const):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::listButton const):

2018-07-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Accelerated animations don't respect a positive delay value
        https://bugs.webkit.org/show_bug.cgi?id=186930
        <rdar://problem/41393393>

        Reviewed by Dean Jackson.

        Test: webanimations/accelerated-animation-with-delay.html

        We would mistakenly clear the list of pending accelerated actions in KeyframeEffectReadOnly::applyPendingAcceleratedActions()
        even if we failed to proceed because of the target element's renderer not being composited yet. Now, we clear the list after
        we've established we can apply them, and if we can't we inform the animation with a call to acceleratedStateDidChange() which
        will in turn call into the document timeline so that we may consider these animations on the next tick.

        For this to work correctly we must make a change to DocumentTimeline::applyPendingAcceleratedAnimations() which only cleared
        its list of pending accelerated animations _after_ iterating through them, which would be problematic since we would now add
        animations to this list. That list is now copied and cleared prior to iterating through its members.

        We also fix the naming of the m_pendingAcceleratedActions copy in KeyframeEffectReadOnly::applyPendingAcceleratedActions()
        to have a more similar name.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::applyPendingAcceleratedAnimations):
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions):

2018-07-26  Ross Kirsling  <ross.kirsling@sony.com>

        String(View) should have a splitAllowingEmptyEntries function instead of a flag parameter
        https://bugs.webkit.org/show_bug.cgi?id=187963

        Reviewed by Alex Christensen.

        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):
        * Modules/cache/DOMCache.cpp:
        (WebCore::hasResponseVaryStarHeaderValue):
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::queryCacheMatch):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::filterICECandidate):
        (WebCore::PeerConnectionBackend::filterSDP const):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::determineARIADropEffects):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineARIADropEffects):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * editing/cocoa/DataDetection.mm:
        (WebCore::DataDetection::shouldCancelDefaultAction):
        * editing/markup.cpp:
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::typeMismatchFor const):
        (WebCore::EmailInputType::sanitizeValue const):
        * html/HTMLInputElement.cpp:
        (WebCore::parseAcceptAttribute):
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::compileShader):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForPath):
        * loader/FormSubmission.cpp:
        (WebCore::encodingFromAcceptCharset):
        * loader/ResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):
        * page/WindowFeatures.cpp:
        (WebCore::parseDisabledAdaptations):
        (WebCore::parseDialogFeaturesMap):
        * platform/URL.cpp:
        (WebCore::isIPv4Address):
        (WebCore::isIPv6Address):
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::version):
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::patternToFamilies):
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::extractGStreamerOptionsFromCommandLine):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):
        * platform/gtk/SelectionData.cpp:
        (WebCore::SelectionData::setURIList):
        * platform/network/CacheValidation.cpp:
        (WebCore::collectVaryingRequestHeaders):
        * platform/network/HTTPParsers.cpp:
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::parseXFrameOptionsHeader):
        (WebCore::parseAccessControlExposeHeadersAllowList):
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::parseCookieHeader):
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::loadIndex):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::parseAttribute):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendOS2Table):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseBeginOrEnd):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeResponse const):
        (WebCore::MockCDMInstance::updateLicense):
        Update split/splitAllowingEmptyEntries usage.

2018-07-26  Nan Wang  <n_wang@apple.com>

        AX: nothing returned for various previous text marker APIs from one div/p node to another
        https://bugs.webkit.org/show_bug.cgi?id=188071

        Reviewed by Chris Fleizach.

        TextIterator is emitting an extra '\n' at the end of the <p> node and there's no
        corresponding text node in the DOM tree, so we are not able to handle that for 
        text markers. Fixed it by ignoring the extra '\n' and anchor the text marker to 
        the previous child text node.

        Test: accessibility/mac/text-marker-p-tags.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::traverseToOffsetInRange):

2018-07-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r234181 and r234189.
        https://bugs.webkit.org/show_bug.cgi?id=188075

        These are not needed right now (Requested by thorton on
        #webkit).

        Reverted changesets:

        "Enable Web Content Filtering on watchOS"
        https://bugs.webkit.org/show_bug.cgi?id=187979
        https://trac.webkit.org/changeset/234181

        "HAVE(PARENTAL_CONTROLS) should be true on watchOS"
        https://bugs.webkit.org/show_bug.cgi?id=187985
        https://trac.webkit.org/changeset/234189

2018-07-26  Timothy Hatcher  <timothy@apple.com>

        Use the Page's appearance when converting pasteboard attributed strings.
        https://bugs.webkit.org/show_bug.cgi?id=188067
        rdar://problem/42632246

        Reviewed by Wenson Hsieh.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragment): Create a LocalDefaultSystemAppearance based on the Page.

2018-07-26  Eric Carlson  <eric.carlson@apple.com>

        Switching tabs should not close PiP window
        https://bugs.webkit.org/show_bug.cgi?id=188054
        <rdar://problem/41212379>

        Reviewed by Jon Lee.

        No new tests, fixes an existing test.
        
        Prior to r233926, calling VideoFullscreenInterfaceMac::requestHideAndExitFullscreen was a noop.
        In r233926 it was updated to close the PiP window and was called from the PIPViewControllerDelegate
        selectors to close the PiP window. requestHideAndExitFullscreen is also called from 
        WebPageProxy::viewDidLeaveWindow when the web view is removed from it window, so switching
        tabs also closed the PiP window. Revert the changes to requestHideAndExitFullscreen, and add
        a new method that is only used by the delegate to exit PiP.

        * platform/mac/VideoFullscreenInterfaceMac.h:
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitFullscreen): Make this an empty,
        do-nothing method.
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC pipShouldClose:]): Call requestHideAndExitPiP.
        (-[WebVideoFullscreenInterfaceMacObjC pipActionStop:]): Ditto.
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitPiP): Renamed from requestHideAndExitFullscreen.
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitFullscreen): Deleted.

2018-07-04  Darin Adler  <darin@apple.com>

        Improve WebGPU implementation, including using Metal Objective-C protocols more simply and correctly
        https://bugs.webkit.org/show_bug.cgi?id=187333

        Reviewed by Sam Weinig.

        - Used a new OBJC_PROTOCOL macro to handle things in the Metal API that are protocols.
          The code previously had used OBJC_CLASS, but that created unrelated classes.
          Fixing this allows removing many typecasts that were in the existing code, makes it
          ARC-compatible, and also allowed the compiler to detect a couple mistakes where we
          were calling methods that don't exist.

        - Eliminated use of separate heap-allocated, reference-counted objects to
          hold pointers to Metal objects.

        - Reduced the use of the WebGPU wrappers to pass around arguments inside the code.
          They are now used only as part of the DOM binding; the inner GPU objects are used
          whenever possible. This cuts down the number of separate functions needed a bit,
          since we don't always need accessors for the things inside the wrappers.

        - Used references rather than pointers in many cases.

        - Took out three kinds of null checks: 1) Unneeded ones since Objective-C has the
          "do nothing and return 0" behavior for methods without return values and that return
          integer scalars. 2) Checks that aren't needed because the code has clear, invariant
          guarantees that the pointer won't be null. 3) The simplest variant of (2), checks
          that can be obviated by using reference types instead of pointer types.

        - For Metal-specific functions and data members, used the function name metal() and
          the data member name m_metal rather than longer wordier names with the word "platform"
          in them. We could use "platform" if these objects were platform-specific objects used
          in a cross-platform way that needed a common name. But in this case it's clearer to
          call them "metal" since we are dropping down to the metal with Metal API, and
          shared platform-independent code will not be accessing these.

        - Fixed the common mistake of using "unsigned long" in our C++ code to match IDL.
          The "unsigned long" type in IDL correponds to the "unsigned" type in WebKit code.

        - Used "const" more in the GPU functions that are wrappers around Metal objects to
          reflect the fact that these have semantics of smart pointers; most operations can be
          done without changing which object is pointed to. This allows us to use const
          references to pass things around without reference count churn.

        - Reduced includes.

        - Added "explicit" keywords where appropriate.

        - Removed unused functions. In particular, removed non-Metal stub versions of the
          functions in the GPU classes: the right way to start a new port is to clone the
          Metal-specific files and turn the into stubs if needed, it does not make it
          significantly more convenient to have stubs in the platform independent files,
          especially ones that are not compiled for any platform.

        - Removed most the WEBCORE_EXPORT in the GPU headers; left only what's needed to
          support testing with TestWebKitAPI.

        - Fixed two storage leaks in GPUDevice by adding missing adoptNS.

        * PlatformMac.cmake: Moved files from platform/graphics/cocoa to platform/graphics/metal.
        * SourcesCocoa.txt: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto. Fixed paths on some files and groups/directories.
        Made the platform files that abstract GPU all be "project" visible, not "private", since
        they don't need to be visible outside WebCore. Removed reference to FontSelectionKeywordValues.h,
        which does not seem to be a source file, a derived source file, or mentioned in any change log.

        * bindings/js/JSWebGPURenderPassAttachmentDescriptorCustom.cpp:
        (WebCore::toJSNewlyCreated): Create the correct wrapper for a
        WebGPURenderPassDepthAttachmentDescriptor. The old code would instead
        create a WebGPURenderPassAttachmentDescriptor wrapper, which can't be
        used to access the clearDepth attribute.

        * html/canvas/WebGPUBuffer.cpp:
        (WebCore::WebGPUBuffer::create): Use more references rather than pointers for things
        that are never null. Added comment about possibly returning null on failure in future.
        (WebCore::WebGPUBuffer::WebGPUBuffer): Updated to store the GPUBuffer inside the class
        instead of in a separate reference counted object.
        * html/canvas/WebGPUBuffer.h: Ditto.

        * html/canvas/WebGPUCommandBuffer.cpp:
        (WebCore::WebGPUCommandBuffer::create): Use references and lower level types.
        (WebCore::WebGPUCommandBuffer::WebGPUCommandBuffer): Store the GPUCommandBuffer
        inside the class.
        (WebCore::WebGPUCommandBuffer::commit): Removed unneeded null checks.
        (WebCore::WebGPUCommandBuffer::presentDrawable): Ditto.
        (WebCore::WebGPUCommandBuffer::createRenderCommandEncoderWithDescriptor):
        Removed unneeded local variable.
        (WebCore::WebGPUCommandBuffer::createComputeCommandEncoder): Ditto.
        (WebCore::WebGPUCommandBuffer::completed): Store the DOMPromiseProxy in this
        class, not in GPUCommandBuffer.
        * html/canvas/WebGPUCommandBuffer.h: Ditto.

        * html/canvas/WebGPUCommandQueue.cpp:
        (WebCore::WebGPUCommandQueue::create): Use references and lower level types.
        (WebCore::WebGPUCommandQueue::WebGPUCommandQueue): Store the GPUCommandQueue
        inside the class.
        (WebCore::WebGPUCommandQueue::createCommandBuffer): Ditto.
        * html/canvas/WebGPUCommandQueue.h: Ditto.
        * html/canvas/WebGPUCommandQueue.idl: The return value of createCommandBuffer
        is no longer nullable.

        * html/canvas/WebGPUComputeCommandEncoder.cpp:
        (WebCore::WebGPUComputeCommandEncoder::create): More of the same.
        (WebCore::WebGPUComputeCommandEncoder::WebGPUComputeCommandEncoder): Ditto.
        (WebCore::WebGPUComputeCommandEncoder::setComputePipelineState): Ditto.
        (WebCore::WebGPUComputeCommandEncoder::setBuffer): Ditto.
        (WebCore::WebGPUComputeCommandEncoder::dispatch): Ditto.
        (WebCore::WebGPUComputeCommandEncoder::endEncoding): Ditto.
        * html/canvas/WebGPUComputeCommandEncoder.h: Ditto.

        * html/canvas/WebGPUComputePipelineState.cpp:
        (WebCore::WebGPUComputePipelineState::create): More of the same.
        (WebCore::WebGPUComputePipelineState::WebGPUComputePipelineState): Ditto.
        * html/canvas/WebGPUComputePipelineState.h: Ditto.

        * html/canvas/WebGPUDepthStencilDescriptor.cpp:
        (WebCore::WebGPUDepthStencilDescriptor::create): More of the same.
        (WebCore::WebGPUDepthStencilDescriptor::depthWriteEnabled const): Ditto.
        (WebCore::WebGPUDepthStencilDescriptor::setDepthWriteEnabled): Ditto.
        (WebCore::WebGPUDepthStencilDescriptor::depthCompareFunction const): Ditto.
        (WebCore::WebGPUDepthStencilDescriptor::setDepthCompareFunction): Ditto.
        * html/canvas/WebGPUDepthStencilDescriptor.h: Ditto. Also fixed a bug
        where m_depthCompareFunction was uninitialized in newly created objects.

        * html/canvas/WebGPUDepthStencilState.cpp:
        (WebCore::WebGPUDepthStencilState::create): More of the same.
        (WebCore::WebGPUDepthStencilState::WebGPUDepthStencilState): Ditto.
        (WebCore::WebGPUDepthStencilState::label const): Ditto.
        (WebCore::WebGPUDepthStencilState::setLabel): Ditto.
        * html/canvas/WebGPUDepthStencilState.h: Ditto.

        * html/canvas/WebGPUDrawable.cpp:
        (WebCore::WebGPUDrawable::create): More of the same.
        (WebCore::WebGPUDrawable::WebGPUDrawable): Ditto.
        * html/canvas/WebGPUDrawable.h: Ditto.

        * html/canvas/WebGPUEnums.cpp: Removed some stray const.
        * html/canvas/WebGPUEnums.h: Ditto.

        * html/canvas/WebGPUFunction.cpp:
        (WebCore::WebGPUFunction::create): More of the same.
        (WebCore::WebGPUFunction::WebGPUFunction): Ditto.
        * html/canvas/WebGPUFunction.h: Ditto.

        * html/canvas/WebGPULibrary.cpp:
        (WebCore::WebGPULibrary::create): More of the same.
        (WebCore::WebGPULibrary::WebGPULibrary): Ditto.
        (WebCore::WebGPULibrary::functionNames const): Ditto.
        (WebCore::WebGPULibrary::functionWithName const): Ditto.
        * html/canvas/WebGPULibrary.h: Ditto.

        * html/canvas/WebGPUObject.cpp:
        (WebCore::WebGPUObject::WebGPUObject):
        (WebCore::WebGPUObject::deleteObject): Deleted this unused function.
        We can bring it back later if we find we need it the way we did with the
        WebGL implementation, but currently it's a never-called stub. Also
        deleted the isDeleted and m_deleted for the same reason.
        * html/canvas/WebGPUObject.h: Ditto.

        * html/canvas/WebGPURenderCommandEncoder.cpp:
        (WebCore::WebGPURenderCommandEncoder::create): More of the same.
        (WebCore::WebGPURenderCommandEncoder::WebGPURenderCommandEncoder): Ditto.
        (WebCore::WebGPURenderCommandEncoder::setRenderPipelineState): Ditto.
        (WebCore::WebGPURenderCommandEncoder::setDepthStencilState): Ditto.
        (WebCore::WebGPURenderCommandEncoder::setVertexBuffer): Ditto.
        (WebCore::WebGPURenderCommandEncoder::setFragmentBuffer): Ditto.
        (WebCore::WebGPURenderCommandEncoder::drawPrimitives): Ditto.
        (WebCore::WebGPURenderCommandEncoder::endEncoding): Ditto.
        * html/canvas/WebGPURenderCommandEncoder.h: Ditto.

        * html/canvas/WebGPURenderPassAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassAttachmentDescriptor::WebGPURenderPassAttachmentDescriptor):
        More of the same.
        (WebCore::WebGPURenderPassAttachmentDescriptor::loadAction const): Ditto.
        (WebCore::WebGPURenderPassAttachmentDescriptor::setLoadAction): Ditto.
        (WebCore::WebGPURenderPassAttachmentDescriptor::storeAction const): Ditto.
        (WebCore::WebGPURenderPassAttachmentDescriptor::setStoreAction): Ditto.
        (WebCore::WebGPURenderPassAttachmentDescriptor::texture const): Ditto.
        (WebCore::WebGPURenderPassAttachmentDescriptor::setTexture): Ditto.
        * html/canvas/WebGPURenderPassAttachmentDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::create): More of the same.
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::WebGPURenderPassColorAttachmentDescriptor): Ditto.
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::descriptor const): Ditto.
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::clearColor const): Ditto.
        (WebCore::WebGPURenderPassColorAttachmentDescriptor::setClearColor): Ditto.
        * html/canvas/WebGPURenderPassColorAttachmentDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::create): More of the same.
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::WebGPURenderPassDepthAttachmentDescriptor): Ditto.
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::clearDepth const): Ditto.
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::setClearDepth): Ditto.
        (WebCore::WebGPURenderPassDepthAttachmentDescriptor::descriptor const): Ditto.
        * html/canvas/WebGPURenderPassDepthAttachmentDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPassDescriptor.cpp:
        (WebCore::WebGPURenderPassDescriptor::create): More of the same.
        (WebCore::WebGPURenderPassDescriptor::depthAttachment): Ditto.
        (WebCore::WebGPURenderPassDescriptor::colorAttachments): Ditto.
        * html/canvas/WebGPURenderPassDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.cpp:
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::create): More of the same.
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::WebGPURenderPipelineColorAttachmentDescriptor): Ditto.
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::pixelFormat const): Ditto.
        (WebCore::WebGPURenderPipelineColorAttachmentDescriptor::setPixelFormat): Ditto.
        * html/canvas/WebGPURenderPipelineColorAttachmentDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPipelineDescriptor.cpp:
        (WebCore::WebGPURenderPipelineDescriptor::create): More of the same.
        (WebCore::WebGPURenderPipelineDescriptor::vertexFunction const): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::setVertexFunction): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::fragmentFunction const): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::setFragmentFunction): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::colorAttachments): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::depthAttachmentPixelFormat const): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::setDepthAttachmentPixelFormat): Ditto.
        (WebCore::WebGPURenderPipelineDescriptor::reset): Ditto.
        * html/canvas/WebGPURenderPipelineDescriptor.h: Ditto.

        * html/canvas/WebGPURenderPipelineState.cpp:
        (WebCore::WebGPURenderPipelineState::create): More of the same.
        (WebCore::WebGPURenderPipelineState::WebGPURenderPipelineState): Ditto.
        (WebCore::WebGPURenderPipelineState::label const): Ditto.
        (WebCore::WebGPURenderPipelineState::setLabel): Ditto.
        * html/canvas/WebGPURenderPipelineState.h: Ditto.

        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create): More of the same.
        (WebCore::WebGPURenderingContext::WebGPURenderingContext): Ditto.
        (WebCore::WebGPURenderingContext::initializeNewContext): Ditto.
        (WebCore::WebGPURenderingContext::platformLayer const): Ditto.
        (WebCore::WebGPURenderingContext::markLayerComposited): Ditto.
        (WebCore::WebGPURenderingContext::reshape): Ditto.
        (WebCore::WebGPURenderingContext::createLibrary): Ditto.
        (WebCore::WebGPURenderingContext::createRenderPipelineState): Ditto.
        (WebCore::WebGPURenderingContext::createDepthStencilState): Ditto.
        (WebCore::WebGPURenderingContext::createComputePipelineState): Ditto.
        (WebCore::WebGPURenderingContext::createCommandQueue): Ditto.
        (WebCore::WebGPURenderingContext::nextDrawable): Ditto.
        (WebCore::WebGPURenderingContext::createBuffer): Ditto.
        (WebCore::WebGPURenderingContext::createTexture): Ditto.
        * html/canvas/WebGPURenderingContext.h: Made many functions final and
        private.
        * html/canvas/WebGPURenderingContext.idl: The return value of most of
        the create functions are no longer nullable.

        * html/canvas/WebGPUSize.h: Use "unsigned" instead of "unsigned long".

        * html/canvas/WebGPUTexture.cpp:
        (WebCore::WebGPUTexture::createFromDrawableTexture): More of the same.
        (WebCore::WebGPUTexture::create): Ditto.
        (WebCore::WebGPUTexture::WebGPUTexture): Ditto.
        * html/canvas/WebGPUTexture.h: Ditto.

        * html/canvas/WebGPUTextureDescriptor.cpp:
        (WebCore::WebGPUTextureDescriptor::create): More of the same.
        (WebCore::WebGPUTextureDescriptor::WebGPUTextureDescriptor): Ditto.
        (WebCore::WebGPUTextureDescriptor::width const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setWidth): Ditto.
        (WebCore::WebGPUTextureDescriptor::height const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setHeight): Ditto.
        (WebCore::WebGPUTextureDescriptor::sampleCount const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setSampleCount): Ditto.
        (WebCore::WebGPUTextureDescriptor::textureType const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setTextureType): Ditto.
        (WebCore::WebGPUTextureDescriptor::storageMode const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setStorageMode): Ditto.
        (WebCore::WebGPUTextureDescriptor::usage const): Ditto.
        (WebCore::WebGPUTextureDescriptor::setUsage): Ditto.
        * html/canvas/WebGPUTextureDescriptor.h: Ditto.

        * platform/graphics/metal/GPUBufferMetal.mm: Moved from "cocoa" directory.
        (WebCore::GPUBuffer::GPUBuffer): Simplify code using references and the
        "metal" naming.

        * platform/graphics/metal/GPUCommandBufferMetal.mm:
        (WebCore::GPUCommandBuffer::GPUCommandBuffer): Take a function to be called as the
        completed handler and set it up.
        (WebCore::GPUCommandBuffer::presentDrawable const): Ditto.
        (WebCore::GPUCommandBuffer::commit const): Ditto.
        (WebCore::GPUCommandBuffer::addCompletedHandler): Deleted.

        * platform/graphics/metal/GPUCommandQueueMetal.mm:
        (WebCore::GPUCommandQueue::GPUCommandQueue): Ditto. Also rewrote label handling a bit.
        (WebCore::GPUCommandQueue::label const): Ditto.
        (WebCore::GPUCommandQueue::setLabel const): Ditto.

        * platform/graphics/metal/GPUComputeCommandEncoderMetal.mm:
        (WebCore::GPUComputeCommandEncoder::GPUComputeCommandEncoder): Ditto.
        (WebCore::GPUComputeCommandEncoder::setComputePipelineState const): Ditto.
        (WebCore::GPUComputeCommandEncoder::setBuffer const): Ditto.
        (WebCore::GPUComputeCommandEncoder::dispatch const): Ditto.
        (WebCore::GPUComputeCommandEncoder::endEncoding const): Ditto.

        * platform/graphics/metal/GPUComputePipelineStateMetal.mm:
        (WebCore::GPUComputePipelineState::GPUComputePipelineState): Ditto.

        * platform/graphics/metal/GPUDepthStencilDescriptorMetal.mm:
        (WebCore::GPUDepthStencilDescriptor::GPUDepthStencilDescriptor): Ditto.
        (WebCore::GPUDepthStencilDescriptor::depthWriteEnabled const): Ditto.
        (WebCore::GPUDepthStencilDescriptor::setDepthWriteEnabled const): Ditto.
        (WebCore::GPUDepthStencilDescriptor::depthCompareFunction const): Ditto.
        (WebCore::GPUDepthStencilDescriptor::setDepthCompareFunction const): Ditto.

        * platform/graphics/metal/GPUDepthStencilStateMetal.mm:
        (WebCore::GPUDepthStencilState::GPUDepthStencilState): Ditto.
        (WebCore::GPUDepthStencilState::label const): Ditto.
        (WebCore::GPUDepthStencilState::setLabel const): Ditto. This is one of the
        functions that was calling a method that does not exist. Added a comment.

        * platform/graphics/metal/GPUDeviceMetal.mm:
        (WebCore::GPUDevice::GPUDevice): Ditto. Also fixed two storage leaks where
        we neglected to do adoptNS on the result of MTLCreateSystemDefaultDevice and
        on the result of -[[WebGPULayer alloc] initWithGPUDevice:].
        (WebCore::GPUDevice::reshape const): Ditto.
        (WebCore::GPUDevice::platformLayer const): Ditto.
        (WebCore::GPUDevice::operator! const): Ditto.

        * platform/graphics/metal/GPUDrawableMetal.mm:
        (WebCore::GPUDrawable::GPUDrawable): Ditto.
        (WebCore::GPUDrawable::release): Ditto.
        (WebCore::GPUDrawable::metal const): Ditto.
        (WebCore::GPUDrawable::texture const): Ditto.

        * platform/graphics/metal/GPUFunctionMetal.mm:
        (WebCore::GPUFunction::GPUFunction): Ditto.
        (WebCore::GPUFunction::name const): Ditto.
        (WebCore::GPUFunction::metal const): Ditto.
        (WebCore::GPUFunction::operator! const): Ditto.

        * platform/graphics/metal/GPULibraryMetal.mm:
        (WebCore::GPULibrary::GPULibrary): Ditto.
        (WebCore::GPULibrary::label const): Ditto.
        (WebCore::GPULibrary::setLabel const): Ditto.
        (WebCore::GPULibrary::functionNames const): Ditto.
        (WebCore::GPULibrary::metal const): Ditto.

        * platform/graphics/metal/GPURenderCommandEncoderMetal.mm:
        (WebCore::GPURenderCommandEncoder::GPURenderCommandEncoder): Ditto.
        (WebCore::GPURenderCommandEncoder::setRenderPipelineState const): Ditto.
        (WebCore::GPURenderCommandEncoder::setDepthStencilState const): Ditto.
        (WebCore::GPURenderCommandEncoder::setVertexBuffer const): Ditto.
        (WebCore::GPURenderCommandEncoder::setFragmentBuffer const): Ditto.
        (WebCore::GPURenderCommandEncoder::drawPrimitives const): Ditto.
        (WebCore::GPURenderCommandEncoder::endEncoding const): Ditto.

        * platform/graphics/metal/GPURenderPassAttachmentDescriptorMetal.mm:
        (WebCore::GPURenderPassAttachmentDescriptor::GPURenderPassAttachmentDescriptor): Ditto.
        (WebCore::GPURenderPassAttachmentDescriptor::loadAction const): Ditto.
        (WebCore::GPURenderPassAttachmentDescriptor::setLoadAction const): Ditto.
        (WebCore::GPURenderPassAttachmentDescriptor::storeAction const): Ditto.
        (WebCore::GPURenderPassAttachmentDescriptor::setStoreAction const): Ditto.
        (WebCore::GPURenderPassAttachmentDescriptor::setTexture const): Ditto.

        * platform/graphics/metal/GPURenderPassColorAttachmentDescriptorMetal.mm:
        (WebCore::GPURenderPassColorAttachmentDescriptor::GPURenderPassColorAttachmentDescriptor): Ditto.
        (WebCore::GPURenderPassColorAttachmentDescriptor::clearColor const): Ditto.
        (WebCore::GPURenderPassColorAttachmentDescriptor::setClearColor const): Ditto.
        (WebCore::GPURenderPassColorAttachmentDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPURenderPassDepthAttachmentDescriptorMetal.mm:
        (WebCore::GPURenderPassDepthAttachmentDescriptor::GPURenderPassDepthAttachmentDescriptor): Ditto.
        (WebCore::GPURenderPassDepthAttachmentDescriptor::clearDepth const): Ditto.
        (WebCore::GPURenderPassDepthAttachmentDescriptor::setClearDepth const): Ditto.
        (WebCore::GPURenderPassDepthAttachmentDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPURenderPassDescriptorMetal.mm:
        (WebCore::GPURenderPassDescriptor::GPURenderPassDescriptor): Ditto.
        (WebCore::GPURenderPassDescriptor::colorAttachments const): Ditto.
        (WebCore::GPURenderPassDescriptor::depthAttachment const): Ditto.
        (WebCore::GPURenderPassDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPURenderPipelineColorAttachmentDescriptorMetal.mm:
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::GPURenderPipelineColorAttachmentDescriptor): Ditto.
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::pixelFormat const): Ditto.
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::setPixelFormat const): Ditto.
        (WebCore::GPURenderPipelineColorAttachmentDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPURenderPipelineDescriptorMetal.mm:
        (WebCore::GPURenderPipelineDescriptor::GPURenderPipelineDescriptor): Ditto.
        (WebCore::GPURenderPipelineDescriptor::depthAttachmentPixelFormat const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::setDepthAttachmentPixelFormat const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::setVertexFunction const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::setFragmentFunction const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::colorAttachments const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::reset const): Ditto.
        (WebCore::GPURenderPipelineDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPURenderPipelineStateMetal.mm:
        (WebCore::GPURenderPipelineState::GPURenderPipelineState): Ditto.
        (WebCore::GPURenderPipelineState::label const): Ditto.
        (WebCore::GPURenderPipelineState::setLabel const): Ditto. This is one of the
        functions that was calling a method that does not exist. Added a comment.
        (WebCore::GPURenderPipelineState::metal const): Ditto.

        * platform/graphics/metal/GPUTextureDescriptorMetal.mm:
        (WebCore::GPUTextureDescriptor::GPUTextureDescriptor): Ditto.
        (WebCore::GPUTextureDescriptor::width const): Ditto.
        (WebCore::GPUTextureDescriptor::setWidth const): Ditto.
        (WebCore::GPUTextureDescriptor::height const): Ditto.
        (WebCore::GPUTextureDescriptor::setHeight const): Ditto.
        (WebCore::GPUTextureDescriptor::sampleCount const): Ditto.
        (WebCore::GPUTextureDescriptor::setSampleCount const): Ditto.
        (WebCore::GPUTextureDescriptor::textureType const): Ditto.
        (WebCore::GPUTextureDescriptor::setTextureType const): Ditto.
        (WebCore::GPUTextureDescriptor::storageMode const): Ditto.
        (WebCore::GPUTextureDescriptor::setStorageMode const): Ditto.
        (WebCore::GPUTextureDescriptor::usage const): Ditto.
        (WebCore::GPUTextureDescriptor::setUsage const): Ditto.
        (WebCore::GPUTextureDescriptor::metal const): Ditto.

        * platform/graphics/metal/GPUTextureMetal.mm:
        (WebCore::GPUTexture::GPUTexture): Ditto.
        (WebCore::GPUTexture::width const): Ditto.
        (WebCore::GPUTexture::height const): Ditto.
        (WebCore::GPUTexture::metal const): Ditto.

        * platform/graphics/gpu/GPUBuffer.cpp: Removed unused stubs.
        (WebCore::GPUBuffer::length const): Moved this function here since it has
        a useful platform-independent implementation.

        * platform/graphics/gpu/GPUBuffer.h: Use OBJC_PROTOCOL for MTLBuffer.
        Did the other thigs mentioned above: USE(METAL), remove WEBCORE_EXPORT,
        no longer be RefCounted, etc.

        * platform/graphics/gpu/GPUCommandBuffer.cpp: Ditto.
        * platform/graphics/gpu/GPUCommandBuffer.h: Ditto. Use OBJC_PROTOCOL
        for MTLCommandBuffer.

        * platform/graphics/gpu/GPUCommandQueue.cpp: Ditto.
        * platform/graphics/gpu/GPUCommandQueue.h: Ditto. Use OBJC_PROTOCOL for
        MTLCommandQueue.

        * platform/graphics/gpu/GPUComputeCommandEncoder.cpp: Ditto.
        * platform/graphics/gpu/GPUComputeCommandEncoder.h: Ditto. Use OBJC_PROTOCOL for
        MTLComputeCommandEncoder.

        * platform/graphics/gpu/GPUComputePipelineState.cpp: Ditto.
        * platform/graphics/gpu/GPUComputePipelineState.h: Ditto. Use OBJC_PROTOCOL for
        MTLComputePipelineState.

        * platform/graphics/gpu/GPUDepthStencilDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPUDepthStencilDescriptor.h: Ditto.

        * platform/graphics/gpu/GPUDepthStencilState.cpp: Ditto.
        * platform/graphics/gpu/GPUDepthStencilState.h: Ditto. Use OBJC_PROTOCOL for
        MTLDepthStencilState.

        * platform/graphics/gpu/GPUDevice.cpp: Ditto.
        * platform/graphics/gpu/GPUDevice.h: Ditto. Use OBJC_PROTOCOL for MTLDevice.

        * platform/graphics/gpu/GPUDrawable.cpp: Ditto.
        * platform/graphics/gpu/GPUDrawable.h: Ditto. Use OBJC_PROTOCOL for
        MTLDrawable and MTLTexture.

        * platform/graphics/gpu/GPUEnums.h: Tweaked formatting.

        * platform/graphics/gpu/GPUFunction.cpp: Ditto.
        * platform/graphics/gpu/GPUFunction.h: Ditto. Use OBJC_PROTOCOL for
        MTLFunction.

        * platform/graphics/gpu/GPULibrary.cpp: Ditto.
        * platform/graphics/gpu/GPULibrary.h: Ditto. Use OBJC_PROTOCOL for
        MTLLibrary.

        * platform/graphics/gpu/GPURenderCommandEncoder.cpp: Ditto.
        * platform/graphics/gpu/GPURenderCommandEncoder.h: Ditto.
        Use OBJC_PROTOCOL for MTLRenderCommandEncoder.

        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPassAttachmentDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPassColorAttachmentDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPassDepthAttachmentDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPassDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPassDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPipelineColorAttachmentDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPipelineDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPipelineDescriptor.h: Ditto.

        * platform/graphics/gpu/GPURenderPipelineState.cpp: Ditto.
        * platform/graphics/gpu/GPURenderPipelineState.h: Ditto. Use OBJC_PROTOCOL
        for MTLRenderPipelineState.

        * platform/graphics/gpu/GPUSize.h: Use "unsigned" instead of "unsigned long".

        * platform/graphics/gpu/GPUTexture.cpp: Ditto.
        * platform/graphics/gpu/GPUTexture.h: Ditto. Use OBJC_PROTOCOL for
        MTLTexture.

        * platform/graphics/gpu/GPUTextureDescriptor.cpp: Ditto.
        * platform/graphics/gpu/GPUTextureDescriptor.h: Ditto.

2018-07-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][Floating] Add skeleton for basic positioning.
        https://bugs.webkit.org/show_bug.cgi?id=187974

        Reviewed by Antti Koivisto.

        Add floating boxes to an empty floating context.

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::computePosition):
        * layout/FloatingContext.h:
        (WebCore::Layout::FloatingContext::floatingState const):
        (WebCore::Layout::FloatingContext::layoutContext const):
        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatingState):
        (WebCore::Layout::FloatingState::append):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::create):
        (WebCore::Layout::FloatingState::isEmpty const):
        (WebCore::Layout::FloatingState::layoutContext const):
        * layout/FormattingState.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::establishedFormattingState):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::computeFloatingPosition const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockInvalidation.cpp:
        (WebCore::Layout::invalidationStopsAtFormattingContextBoundary):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isLeftFloatingPositioned const):
        (WebCore::Layout::Box::isRightFloatingPositioned const):
        * layout/layouttree/LayoutBox.h:

2018-07-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Do not try to access containing block's height during descendant height computation
        https://bugs.webkit.org/show_bug.cgi?id=187970

        Reviewed by Antti Koivisto.

        Mostly becasue in BFC, we compute the descendents' height first so the containing block's height is probably not computed yet.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):

2018-07-26  Frederic Wang  <fwang@igalia.com>

        Unreviewed, add bug references into FIXME comments for CSSOM View API

        * dom/Element.idl:
        * page/ScrollToOptions.idl:

2018-07-26  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] assert-not-implemented-yet on inflow non-replaced height when style is not fixed/auto.
        https://bugs.webkit.org/show_bug.cgi?id=187969

        Reviewed by Antti Koivisto.

        Assert on unsupported height types when computing inflow non-replaced height.

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

2018-07-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] REGRESSION: transition added immediately after element creation doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=187942

        Reviewed by Dean Jackson.

        Tests: webanimations/accelerated-transition-by-removing-property.html
               webanimations/partly-accelerated-transition-by-removing-property.html

        The Style::TreeResolver::createAnimatedElementUpdate() function expected a flag to be set that indicates that
        running animations on an element should yield a change in composited state for that element's layer. We did not
        have code accounting for this flag in the Web Animations engine. We now have a resolveAnimationsForElement()
        method on DocumentTimeline which looks at all animations resolved on the element and see if all of them are
        running accelerated and whether at least one of them is pending. In that case, we set the shouldRecompositeLayer
        flag in createAnimatedElementUpdate() to true which guarantees the element's layer will have a backing when
        we attempt to start the animation in KeyframeEffectReadOnly::applyPendingAcceleratedActions() where we would
        have previously failed to have layer-backed renderer to perform an accelerated animation on (under certain
        circumstances, see test).

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::resolveAnimationsForElement):
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.h:
        (WebCore::KeyframeEffectReadOnly::hasPendingAcceleratedAction const):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):

2018-07-25  Chris Dumez  <cdumez@apple.com>

        Allow ActiveDOMObject's canSuspend / suspend / resume overrides to destroy ActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=188025

        Reviewed by Alex Christensen.

        Apply the same logic as in ScriptExecutionContext::stopActiveDOMObjects() to support destruction of
        ActiveDOMObjects while we're calling ActiveDOMObject's canSuspend / suspend / resume overrides.

        We copy m_activeDOMObjects into a Vector and iterate over the copy instead of m_activeDOMObjects.
        Since ActiveDOMObject is not RefCounted or CanMakeWeakPtr, we verify that the raw pointer is still
        valid by checking if m_activeDOMObjects still contains it, as we iterate. This is safe as the
        ActiveDOMObject destructor removes the object from ScriptExecutionContext::m_activeDOMObjects.
        New ActiveDOMObjects with the same pointer value cannot be created while we iterate as we already
        prevent the construction of new ActiveDOMObjects while we iterate via RELEASE_ASSERT().

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForDocumentSuspension):
        (WebCore::ScriptExecutionContext::forEachActiveDOMObject const):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::willDestroyActiveDOMObject):
        * dom/ScriptExecutionContext.h:

2018-07-25  Justin Fan  <justin_fan@apple.com>

        Systems with no NSScreens hitting assertion in rendererIDForDisplay when creating WebGL context
        https://bugs.webkit.org/show_bug.cgi?id=188023
        <rdar://problem/42476622>

        Reviewed by Simon Fraser.

        On systems with no NSScreens, PlatformScreenMac's screenData map is not populated; rendererIDForDisplay
        will thus hit an assertion rather than returning 0. Removing the assertion for now. 

        Covered by existing tests.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::rendererIDForDisplay):

2018-07-25  Zalan Bujtas  <zalan@apple.com>

        Build fix after r234215. Unreviewed.

        * rendering/RenderTheme.cpp:

2018-07-25  Zalan Bujtas  <zalan@apple.com>

        REGRESSION(r227577) Text on TV & Movies page doesn't wrap properly in iTunes
        https://bugs.webkit.org/show_bug.cgi?id=188018
        <rdar://problem/42517520>

        Reviewed by Dean Jackson.

        Manual rollout of r227577.

        Test: fast/overflow/line-clamp-with-text-shadow.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLinesClamp): Deleted.
        * css/parser/CSSParserContext.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/parser/CSSParserContext.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeLinesClamp): Deleted.
        * page/Settings.yaml:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::heightForLineCount):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        (WebCore::RenderBlockFlow::logicalHeightForLineCount): Deleted.
        (WebCore::RenderBlockFlow::logicalHeightExcludingLineCount): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::pageLogicalHeightForOffset const): Deleted.
        * rendering/RenderFragmentContainer.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::validateFragments):
        (WebCore::RenderFragmentedFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderFragmentedFlow::pageRemainingLogicalHeightForOffset const):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderLinesClampFlow.cpp: Removed.
        * rendering/RenderLinesClampFlow.h: Removed.
        * rendering/RenderLinesClampSet.cpp: Removed.
        * rendering/RenderLinesClampSet.h: Removed.
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::isColumnSpanningDescendant const): Deleted.
        (WebCore::RenderMultiColumnFlow::createMultiColumnSet): Deleted.
        * rendering/RenderMultiColumnFlow.h:
        (WebCore::RenderMultiColumnFlow::multiColumnBlockFlow const): Deleted.
        (WebCore::RenderMultiColumnFlow::hasColumnSpanner const): Deleted.
        (WebCore::RenderMultiColumnFlow::findColumnSpannerPlaceholder const): Deleted.
        (WebCore::RenderMultiColumnFlow::columnCount const): Deleted.
        (WebCore::RenderMultiColumnFlow::columnWidth const): Deleted.
        (WebCore::RenderMultiColumnFlow::columnHeightAvailable const): Deleted.
        (WebCore::RenderMultiColumnFlow::setColumnHeightAvailable): Deleted.
        (WebCore::RenderMultiColumnFlow::inBalancingPass const): Deleted.
        (WebCore::RenderMultiColumnFlow::setInBalancingPass): Deleted.
        (WebCore::RenderMultiColumnFlow::needsHeightsRecalculation const): Deleted.
        (WebCore::RenderMultiColumnFlow::setNeedsHeightsRecalculation): Deleted.
        (WebCore::RenderMultiColumnFlow::shouldRelayoutForPagination const): Deleted.
        (WebCore::RenderMultiColumnFlow::setColumnCountAndWidth): Deleted.
        (WebCore::RenderMultiColumnFlow::progressionIsInline const): Deleted.
        (WebCore::RenderMultiColumnFlow::setProgressionIsInline): Deleted.
        (WebCore::RenderMultiColumnFlow::progressionIsReversed const): Deleted.
        (WebCore::RenderMultiColumnFlow::setProgressionIsReversed): Deleted.
        (WebCore::RenderMultiColumnFlow::spannerMap): Deleted.
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset const):
        * rendering/RenderMultiColumnSet.h:
        (WebCore::RenderMultiColumnSet::multiColumnBlockFlow const): Deleted.
        (WebCore::RenderMultiColumnSet::multiColumnFlow const): Deleted.
        (WebCore::RenderMultiColumnSet::logicalTopInFragmentedFlow const): Deleted.
        (WebCore::RenderMultiColumnSet::logicalBottomInFragmentedFlow const): Deleted.
        (WebCore::RenderMultiColumnSet::logicalHeightInFragmentedFlow const): Deleted.
        (WebCore::RenderMultiColumnSet::computedColumnCount const): Deleted.
        (WebCore::RenderMultiColumnSet::computedColumnWidth const): Deleted.
        (WebCore::RenderMultiColumnSet::computedColumnHeight const): Deleted.
        (WebCore::RenderMultiColumnSet::columnHeightComputed const): Deleted.
        (WebCore::RenderMultiColumnSet::setComputedColumnWidthAndCount): Deleted.
        (WebCore::RenderMultiColumnSet::updateMinimumColumnHeight): Deleted.
        (WebCore::RenderMultiColumnSet::minimumColumnHeight const): Deleted.
        (WebCore::RenderMultiColumnSet::forcedBreaksCount const): Deleted.
        (WebCore::RenderMultiColumnSet::hasBeenFlowed const): Deleted.
        (WebCore::RenderMultiColumnSet::skipLayerFragmentCollectionForColumn const): Deleted.
        (WebCore::RenderMultiColumnSet::customBlockProgressionAdjustmentForColumn const): Deleted.
        (WebCore::RenderMultiColumnSet::ContentRun::ContentRun): Deleted.
        (WebCore::RenderMultiColumnSet::ContentRun::assumedImplicitBreaks const): Deleted.
        (WebCore::RenderMultiColumnSet::ContentRun::assumeAnotherImplicitBreak): Deleted.
        (WebCore::RenderMultiColumnSet::ContentRun::breakOffset const): Deleted.
        (WebCore::RenderMultiColumnSet::ContentRun::columnLogicalHeight const): Deleted.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderLinesClampFlow const): Deleted.
        (WebCore::RenderObject::isRenderLinesClampSet const): Deleted.
        * rendering/style/LineClampValue.h:
        (WebCore::LinesClampValue::LinesClampValue): Deleted.
        (WebCore::LinesClampValue::isNone const): Deleted.
        (WebCore::LinesClampValue::operator== const): Deleted.
        (WebCore::LinesClampValue::operator!= const): Deleted.
        (WebCore::LinesClampValue::start const): Deleted.
        (WebCore::LinesClampValue::end const): Deleted.
        (WebCore::LinesClampValue::center const): Deleted.
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::lineClamp const):
        (WebCore::RenderStyle::setLineClamp):
        (WebCore::RenderStyle::initialLineClamp):
        (WebCore::RenderStyle::hasInlineColumnAxis const):
        (WebCore::RenderStyle::linesClamp const): Deleted.
        (WebCore::RenderStyle::hasLinesClamp const): Deleted.
        (WebCore::RenderStyle::setLinesClamp): Deleted.
        (WebCore::RenderStyle::initialLinesClamp): Deleted.
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):

2018-07-25  Chris Dumez  <cdumez@apple.com>

        navigator.userAgent may return outdated value after webView.customUserAgent is set
        https://bugs.webkit.org/show_bug.cgi?id=188009
        <rdar://problem/42566456>

        Reviewed by Alex Christensen.

        Invalidate the navigator.userAgent cache whenever the user agent gets changed to avoid exposing
        outdated values to JavaScript.

        * page/Navigator.cpp:
        (WebCore::Navigator::userAgentChanged):
        * page/Navigator.h:
        * page/NavigatorID.idl:
        * page/Page.cpp:
        (WebCore::Page::userAgentChanged):
        * page/Page.h:

2018-07-25  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r234187.

        the layout test added with this change is flaky on the bots

        Reverted changeset:

        "Animation stops with object-fit:contain on an animated 2d
        canvas"
        https://bugs.webkit.org/show_bug.cgi?id=187840
        https://trac.webkit.org/changeset/234187

2018-07-25  Chris Dumez  <cdumez@apple.com>

        Turn assertion preventing removal of ActiveDOMObjects while we iterate over them into a RELEASE_ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=187978

        Reviewed by Eric Carlson.

        Turn assertion preventing removal of ActiveDOMObjects while we iterate over them into a RELEASE_ASSERT.
        If code does this, this leads to hard to investigate crashes such as rdar://problem/42160890. With a
        release assertion, we would find the culprits right away. The assertion guarding against addition of
        ActiveDOMObjects while we iterate is already a RELEASE_ASSERT.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjectsForDocumentSuspension):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::willDestroyActiveDOMObject):
        * dom/ScriptExecutionContext.h:

2018-07-24  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r219757): Accessing response getter of XHR instance from IFRAME sets constructor to Object from the IFRAME
        https://bugs.webkit.org/show_bug.cgi?id=187411
        <rdar://problem/41920593>

        Reviewed by Sam Weinig.

        Update JSXMLHttpRequest::response() to use the XMLHttpRequest's global object exec when constructing a JSONObject
        for the response instead of the caller's exec.

        Test: http/tests/xmlhttprequest/xhr-response-constructor-subframe.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response const):

2018-07-24  Simon Fraser  <simon.fraser@apple.com>

        Animation stops with object-fit:contain on an animated 2d canvas
        https://bugs.webkit.org/show_bug.cgi?id=187840

        Reviewed by Zalan Bujtas.
        
        If a canvas has object-fit: cover or contain, repaints need to mapped through
        the rect that is used to position the canvas in the element bounds, which is replacedContentRect().
        
        Add a version of replacedContentRect() that doesn't require passing the intrinsicSize() since
        all but RenderVideo just pass the RenderReplaced's intrinsicSize.

        Test: fast/repaint/canvas-object-fit.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::paintReplaced):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsBox const):
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::replacedContentRect const):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::createShapeForImage const):

2018-07-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Add support for wss:// websockets
        https://bugs.webkit.org/show_bug.cgi?id=172630

        Reviewed by Fujii Hironori.

        To support secure WebSocket connection, it is almost rewritten by using existing
        backend for CurlHandle to handle TLS connection and proxy support.

        Test: http/tests/websocket/tests/hybi/simple-wss.html

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlSocketHandle::CurlSocketHandle):
        (WebCore::CurlSocketHandle::connect):
        (WebCore::CurlSocketHandle::send):
        (WebCore::CurlSocketHandle::receive):
        (WebCore::CurlSocketHandle::wait):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::SocketData::SocketData): Deleted.
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::SocketStreamHandleImpl):
        (WebCore::SocketStreamHandleImpl::~SocketStreamHandleImpl):
        (WebCore::SocketStreamHandleImpl::platformSendInternal):
        (WebCore::SocketStreamHandleImpl::platformClose):
        (WebCore::SocketStreamHandleImpl::threadEntryPoint):
        (WebCore::SocketStreamHandleImpl::handleError):
        (WebCore::SocketStreamHandleImpl::stopThread):
        (WebCore::createCopy): Deleted.
        (WebCore::SocketStreamHandleImpl::readData): Deleted.
        (WebCore::SocketStreamHandleImpl::sendData): Deleted.
        (WebCore::SocketStreamHandleImpl::waitForAvailableData): Deleted.
        (WebCore::SocketStreamHandleImpl::startThread): Deleted.
        (WebCore::SocketStreamHandleImpl::didReceiveData): Deleted.
        (WebCore::SocketStreamHandleImpl::didOpenSocket): Deleted.

2018-07-24  Tim Horton  <timothy_horton@apple.com>

        Enable Web Content Filtering on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=187979
        <rdar://problem/42559346>

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2018-07-24  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r233496 and r233571.

        Likely cause of <rdar://problem/42160890> and
        <rdar://problem/42329658> as ActiveDOMObjects can now be
        constructed / destroyed while we are iterating over them.

        Reverted changesets:

        "Nullptr crash accessing Document in
        GenericEventQueue::dispatchOneEvent()"
        https://bugs.webkit.org/show_bug.cgi?id=187284
        https://trac.webkit.org/changeset/233496

        "REGRESSION(r233496): macOS Sierra hits debug assertions in
        TrackListBase::suspend"
        https://bugs.webkit.org/show_bug.cgi?id=187378
        https://trac.webkit.org/changeset/233571

2018-07-24  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][macOS] Display suggestions for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=187794

        Reviewed by Tim Horton.

        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::shouldRespectListAttribute):

2018-07-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234121.

        Caused perf test failures.

        Reverted changeset:

        "We should cache the compiled sandbox profile in a data vault"
        https://bugs.webkit.org/show_bug.cgi?id=184991
        https://trac.webkit.org/changeset/234121

2018-07-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add an ASSERT() to check the contract that a CSSTransition has a valid effect in setTimingProperties()
        https://bugs.webkit.org/show_bug.cgi?id=187954

        Reviewed by Dean Jackson.

        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::setTimingProperties):

2018-07-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Crash when setting an animation style on an existing animation that had its effect set to null
        https://bugs.webkit.org/show_bug.cgi?id=187953

        Reviewed by Dean Jackson.

        Test: webanimations/setting-css-animation-timing-property-via-style-after-clearing-effect.html

        Ensure that we have a valid effect before proceeding to update its timing. 

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):

2018-07-24  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Restructure getDisplayMedia classes
        https://bugs.webkit.org/show_bug.cgi?id=187905
        <rdar://problem/42500215>

        Unreviewed build fix.

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp: 

2018-07-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Crash when setting "animation: none" after clearing an animation's effect
        https://bugs.webkit.org/show_bug.cgi?id=187952

        Reviewed by Dean Jackson.

        Test: webanimations/setting-css-animation-none-after-clearing-effect.html

        We need to ensure that the animation we're trying to remove has not had its effect cleared via the
        Web Animations API since its creation before trying to check its phase.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation):

2018-07-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Crash accessing CSSAnimation::bindingsCurrentTime when effect has been set to null
        https://bugs.webkit.org/show_bug.cgi?id=187950
        <rdar://problem/42515747>

        Reviewed by Dean Jackson.

        Test: webanimations/accessing-current-time-after-clearing-css-animation-effect.html

        While a CSSAnimation has an effect created for it by the implementation, the developer may yet manipulate
        its effect via the Web Animations API and set it to null. As such, we must not assume it's always non-null.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::bindingsCurrentTime const):

2018-07-24  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] BlockContainer::establishesInlineFormattingContext should only check the first inflow child.
        https://bugs.webkit.org/show_bug.cgi?id=187965

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBlockContainer.cpp:
        (WebCore::Layout::BlockContainer::establishesInlineFormattingContext const):

2018-07-24  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Stop crashing in lastResortFallbackFont()
        https://bugs.webkit.org/show_bug.cgi?id=187936

        Reviewed by Jon Lee.

        CoreText can get into a state where both Times and Lucida Grande are inaccessible.
        Instead of crashing, we should use the real LastResort, which is backed by a section
        in the .rodata of the CoreText dylib, and as such should always exist.

        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::fontForFamily):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::lastResortFallbackFont):

2018-07-24  Daniel Bates  <dabates@apple.com>

        Cannot view PDF's on my.gov.au: "Refused to load https://my.gov.au/attachment/viewAttachment because it
        appears in neither the object-src directive nor the default-src directive of the Content Security Policy"
        https://bugs.webkit.org/show_bug.cgi?id=187870
        <rdar://problem/41190880>

        Reviewed by Dean Jackson.

        Fixes an issue where opening attachments on my.gov.au would show a "Blocked Plug-in" message.

        Opening an attachment on my.gov.au opens a same-origin plugin document in a child window. Currently
        same-origin plugin documents inherit their CSP policy from their opener. If the opener's CSP policy
        disallows embedding plugins then the plugin document would be blocked from loading a plugin. For now
        we relax the inheritance model such that we only inherit the plugin-types and report-uri directives
        from the opener.

        Developers that want to block plugin content from being loaded in a same-origin child window must now
        serve such plugin content with a CSP policy that includes "object-src 'none'". This matches the behavior
        described in the second Note in section object-src of the CSP 3 spec: <https://w3c.github.io/webappsec-csp/#directive-object-src>
        (Editor's Draft, 10 July 2018). It also makes the behavior in WebKit more closely aligned with the
        behavior of Chrome and Firefox.

        Tests: http/tests/security/contentSecurityPolicy/same-origin-plugin-document-allowed-in-child-window.html
               http/tests/security/contentSecurityPolicy/same-origin-plugin-document-blocked-in-child-window-report.php
               http/tests/security/contentSecurityPolicy/same-origin-plugin-document-with-csp-blocked-in-child-window.html

        * dom/Document.cpp:
        (WebCore::Document::initContentSecurityPolicy): For plugin documents that have an opener call ContentSecurityPolicy::createPolicyForPluginDocumentFrom()
        to only inherit the plugin-types and report-uri directives from its opener's CSP policy. Otherwise, call ContentSecurityPolicy::copyStateFrom()
        to inherit all directives from the owner frame as we do now.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::createPolicyForPluginDocumentFrom): Create a new policy from the specified policy
        inheriting only the plugin-types and report-uri directives.
        * page/csp/ContentSecurityPolicy.h: Define a new PolicyFrom enumerator, InheritedForPluginDocument, for plugin documents
        loaded in a child window.
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::ContentSecurityPolicyDirectiveList::parse): When policyFrom is InheritedForPluginDocument then only
        recognize the plugin-types and report-uri directives when parsing the policy.

2018-07-24  Daniel Bates  <dabates@apple.com>

        Rename Document::firstPartyForSameSiteCookies() to siteForCookies()
        https://bugs.webkit.org/show_bug.cgi?id=187892

        Reviewed by Dean Jackson.

        Standardize on the spec. language "site for cookies" for the names of the setter and getter
        on Document. The latest description of Same-Site cookies is in <https://httpwg.org/http-extensions/rfc6265bis.html>.

        No functionality changed. So, no new tests.

        * dom/Document.h:
        (WebCore::Document::siteForCookies const):
        (WebCore::Document::setSiteForCookies):
        (WebCore::Document::firstPartyForSameSiteCookies const): Deleted.
        (WebCore::Document::setFirstPartyForSameSiteCookies): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFirstPartyForCookies):
        (WebCore::FrameLoader::addSameSiteInfoToRequestIfNeeded):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2018-07-24  Ross Kirsling  <ross.kirsling@sony.com>

        WebCore::URL::hostIsIPAddress needs a Windows implementation
        https://bugs.webkit.org/show_bug.cgi?id=187859

        Reviewed by Fujii Hironori.

        * platform/URL.cpp:
        (WebCore::isIPv4Address): Added.
        (WebCore::isIPv6Address): Added.
        (WebCore::URL::hostIsIPAddress):
        Turn this stub into a platform-agnostic default implementation.

2018-07-24  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Restructure getDisplayMedia classes
        https://bugs.webkit.org/show_bug.cgi?id=187905

        Reviewed by Dean Jackson.

        No new tests, no functional changes.

        * platform/mediastream/CaptureDeviceManager.h:
        (WebCore::CaptureDeviceManager::refreshCaptureDevices): Deleted, no need for it to be a 
        virtual method.
        * platform/mediastream/mac/AVCaptureDeviceManager.h:

        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h: refreshCaptureDevices is
        no longer virtual.

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::captureDevices):
        (WebCore::DisplayCaptureManagerCocoa::updateDisplayCaptureDevices): Moved functionality 
        to ScreenDisplayCaptureSourceMac.
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID): Ditto.
        (WebCore::displayReconfigurationCallBack): Deleted, moved to ScreenDisplayCaptureSourceMac.
        (WebCore::DisplayCaptureManagerCocoa::~DisplayCaptureManagerCocoa): Deleted.
        (WebCore::DisplayCaptureManagerCocoa::refreshCaptureDevices): Deleted.
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::roundUpToMacroblockMultiple): Moved from ScreenDisplayCaptureSourceMac.
        (WebCore::DisplayCaptureSourceCocoa::applySize): Ditto.
        (WebCore::DisplayCaptureSourceCocoa::sampleBufferFromPixelBuffer): Ditto.
        (WebCore::DisplayCaptureSourceCocoa::pixelBufferFromIOSurface): Ditto.
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::updateDisplayID):
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Fix log message.
        (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::applySize): Update for base class changes.
        (WebCore::ScreenDisplayCaptureSourceMac::applyFrameRate): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::screenCaptureDeviceWithPersistentID): Moved from
        DisplayCaptureManagerCocoa.
        (WebCore::ScreenDisplayCaptureSourceMac::screenCaptureDevices): Ditto.
        (WebCore::roundUpToMacroblockMultiple): Moved to DisplayCaptureSourceCocoa.
        (WebCore::ScreenDisplayCaptureSourceMac::updateDisplayID): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::sampleBufferFromPixelBuffer): Ditto.
        (WebCore::ScreenDisplayCaptureSourceMac::pixelBufferFromIOSurface): Ditto.

2018-07-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move geometry data structures to a dedicated file
        https://bugs.webkit.org/show_bug.cgi?id=187939

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::Position::operator LayoutPoint const): Deleted.
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHorizontalMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::setVerticalNonCollapsedMargin):
        (WebCore::Display::Box::setBorder):
        (WebCore::Display::Box::setPadding):

2018-07-24  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Implement bitrate modulation support in GStreamer based libwebrtc Encoders
        https://bugs.webkit.org/show_bug.cgi?id=187643

        Reviewed by Philippe Normand.

        Problem being that we do not have a proper unified encoder API in GStreamer, some work
        started at https://bugzilla.gnome.org/show_bug.cgi?id=796716 but it is quite controversial
        and meanwhile we should just move forward working around that limitation.

        Source/WebCore:
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp:
        (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder):
        (WebCore::GStreamerVideoEncoder::InitEncode):
        (WebCore::GStreamerVideoEncoder::getBitrateSetter):
        (WebCore::GStreamerVideoEncoder::createEncoder):
        (WebCore::GStreamerVideoEncoder::AddCodecIfSupported):
        (WebCore::GStreamerVideoEncoder::SetRestrictionCaps):
        (WebCore::GStreamerVideoEncoder::CreateEncoder): Deleted.

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r234055): inverted return values in MediaPlayer::wouldTaintOrigin()
        https://bugs.webkit.org/show_bug.cgi?id=187944

        Reviewed by Carlos Garcia Campos.

        The MediaPlayer::wouldTaintOrigin(), as introduced in r234055, should
        return false when the URL protocol is `data:`, and should return true
        when the given SecurityOrigin cannot access the media URL.

        This matches behavior of CanvasRenderingContext::wouldTaintOrigin()
        which the new method falls back to when the MediaPlayerPrivate
        implementation doesn't or can't determine the would-taint result.

        This fixes a bunch of failing and timing-out WebGL test cases on ports
        using GStreamer (on which the MediaPlayerPrivate derivate doesn't
        implement the wouldTaintOrigin() method).

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::wouldTaintOrigin const):

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [TextureMapper] Separate repaint counter state from debug visuals
        https://bugs.webkit.org/show_bug.cgi?id=187946

        Reviewed by Carlos Garcia Campos.

        Instead of managing the repaint counter visibility along with the
        debug border visuals, do that together with the repaint count value.

        TextureMapperLayer::setRepaintCount() is renamed to setRepaintCounter()
        and now also sets the repaint counter visibility state instead of the
        setDebugVisuals() method.

        GraphicsLayerTextureMapper implementation is adjusted appropriately.
        The unused setRepaintCount() method is also removed.

        CoordinatedGraphicsLayerState now holds repaint counter state (both
        visibility and count value) in a struct that's separate from debug
        border state. CoordinatedGraphicsLayer implementation now updates
        that state accordingly.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setShowRepaintCounter):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::setRepaintCount): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setDebugVisuals):
        (WebCore::TextureMapperLayer::setRepaintCounter):
        (WebCore::TextureMapperLayer::setRepaintCount): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didUpdateTileBuffers):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):
        (WebCore::DebugVisuals::DebugVisuals): Deleted.

2018-07-24  Thibault Saunier  <tsaunier@igalia.com>

        [WPE][GTK] Implement PeerConnection API on top of libwebrtc
        https://bugs.webkit.org/show_bug.cgi?id=186932

        Reviewed by Philippe Normand.

        Enabled many webrtc tests.

        * platform/GStreamer.cmake: Build new files
        * platform/graphics/gstreamer/GStreamerCommon.cpp: Fix minor style issues
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Add a way to give precise name to pipelines
        and give useful names to pipelines with sources comming from a PeerConnection
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.cpp: Added. Implement a subclass of webrtc::VideoFrame
        to represent a kNative GStreamer video frame.
        * platform/mediastream/gstreamer/GStreamerVideoFrameLibWebRTC.h: Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp: Handle incoming audio samples from libwebrtc.
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.h: Ditto.
        * platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp: Handle incoming video frames from libwebrtc.
        * platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.h: Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp: Handle passing locally captured audio sample to libwebrtc.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h: Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp: Handle passing locally captured vidoe frames to libwebrtc.
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp: Added. Implement a video decoder factory and LibWebRTC Video decoders based on GStreamer.
        * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.h: Added. Ditto.
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp: Added. Implement a video encoder factory and LibWebRTC H264/VP8 Video encoders based on GStreamer.
        * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.h: Added. Ditto.
        * platform/mediastream/libwebrtc/LibWebRTCAudioFormat.h: Add information about signness of the LibWebRTC audio format.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp: Add support for newly added Encoder/Decoder factories.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.h: Ditto.

2018-07-24  Dirk Schulze  <krit@webkit.org>

        [css-masking] Black backdrop on -webkit-clip-path on SVG root
        https://bugs.webkit.org/show_bug.cgi?id=187880

        Reviewed by Simon Fraser.

        For SVG document root elements, we currently clip twice:
        In RenderLayer and SVGRenderSupport.
        Avoid clipping in RenderLayer which currently clips before we established a
        backdrop for an SVG document.

        Tests: svg/clip-path/clip-path-on-svg-005-expected.svg
               svg/clip-path/clip-path-on-svg-005.svg

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Skip actual clipping.

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add TextureMapperAnimations member to CompositingLayer::LayerState
        https://bugs.webkit.org/show_bug.cgi?id=187941

        Reviewed by Carlos Garcia Campos.

        Nicosia::CompositingLayer::LayerState gains a TextureMapperAnimations
        member that will be assigned a list of all active animations during each
        layer flush. Despite the name, TextureMapperAnimations doesn't depend on
        any other TextureMapper class. It might be renamed and moved in the
        future, but for now it's used as-is.

        In CoordinatedGraphicsLayer, the syncAnimations() method now flips on
        the animationsChanged flag in the LayerState::Delta struct. This causes
        all the active animations to be copied over into the layer state in
        flushCompositingStateForThisLayerOnly().

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncAnimations):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add FilterOperations member to CompositionLayer::LayerState
        https://bugs.webkit.org/show_bug.cgi?id=187901

        Reviewed by Carlos Garcia Campos.

        Nicosia::CompositionLayer::LayerState gains a FilterOperations member
        that can be assigned the list of filter operations for a given layer.
        The corresponding filtersChanged boolean is added to LayerState::Delta.

        CoordinatedGraphicsLayer::syncFilters() flips on that delta member,
        which in turn causes the FilterOperations value to be updated during
        the layer flush, in flushCompositingStateForThisLayerOnly().

        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncFilters):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):

2018-07-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Use adjusted position, anchor point, size values for Nicosia::CompositionLayer state
        https://bugs.webkit.org/show_bug.cgi?id=187899

        Reviewed by Carlos Garcia Campos.

        As is done for the CoordinatedGraphicsLayerState, the scale-adjusted
        position, anchor point and size values should be used when updating the
        corresponding Nicosia::CompositionLayer::LayerState members.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):

2018-07-23  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Add support for calc() in gutter properties
        https://bugs.webkit.org/show_bug.cgi?id=187902

        Reviewed by Simon Fraser.

        The parsing was already accepting calc() in grid row and column gaps,
        however the code was not taking that into account properly.
        If the calc() had a percentage it was ignored and that's wrong.

        The fix is just a change in the ceck at RenderGrid::availableSpaceForGutters().

        Tests: imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-002-rtl.html
               imported/w3c/web-platform-tests/css/css-grid/abspos/grid-positioned-items-gaps-002.html
               imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-011.html
               imported/w3c/web-platform-tests/css/css-grid/alignment/grid-gutters-012.html

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

2018-07-23  Aditya Keerthi  <akeerthi@apple.com>

        Remove extraneous #endif in html.css
        https://bugs.webkit.org/show_bug.cgi?id=187934

        Reviewed by Tim Horton.

        * css/html.css: Remove extraneous #endif.

2018-07-23  Sihui Liu  <sihui_liu@apple.com>

        CrashTracer: com.apple.WebKit.Storage at WebCore: WebCore::encodeKey
        https://bugs.webkit.org/show_bug.cgi?id=187927

        Reviewed by Chris Dumez.

        IDBKeyData is valid only when each key of it is valid.

        Test: LayoutTests/storage/indexeddb/index-multientry.html

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::isValid const):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::isValid const): Deleted.

2018-07-23  Ben Richards  <benton_richards@apple.com>

        We should cache the compiled sandbox profile in a data vault
        https://bugs.webkit.org/show_bug.cgi?id=184991

        Reviewed by Ryosuke Niwa.

        Added functionality to FileHandle so that it can lock a file while open.
        Added a function to FileSystem to delete non empty directories.

        * platform/FileHandle.cpp:
        (WebCore::FileHandle::FileHandle):
        (WebCore::FileHandle::open):
        (WebCore::FileHandle::close):
        * platform/FileHandle.h:
        * platform/FileSystem.h:
        * platform/cocoa/FileSystemCocoa.mm:
        (WebCore::FileSystem::deleteNonEmptyDirectory):

2018-07-23  Justin Fan  <justin_fan@apple.com>

        [macOS] Ensure that WebGL contexts are always set to an accelerated virtual screen
        https://bugs.webkit.org/show_bug.cgi?id=187923

        Reviewed by Dean Jackson.

        On eGPU displays, it is possible that CGL does not match the preferred renderer. 
        In this case, and when the web process is blocked from accessing the window server, 
        3D contexts *may* default to the software renderer. Ensure that even if this occurs,
        we set the context to use a hardware-accelerated renderer/virtual screen.

        No new tests. Existing behavior covered by existing tests.
        Requires multiple screens, at least one attached to an eGPU, to stress. 

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::identifyAndSetCurrentGPU):

2018-07-23  Sam Weinig  <sam@webkit.org>

        Convert some obvious never-null pointers to references in the editing code
        https://bugs.webkit.org/show_bug.cgi?id=187914

        Reviewed by Dean Jackson.

        Fixup trivial cases of never-null pointers that really should be references.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::shouldApplyInlineStyleToRun):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        (WebCore::ApplyStyleCommand::removeCSSStyle):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):
        (WebCore::ApplyStyleCommand::applyInlineStyleChange):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::overrideWithStyle):
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement const):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement const):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes const):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes const):
        (WebCore::EditingStyle::styleIsPresentInComputedStyleOfNode const):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineStyleOfElement):
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        (WebCore::EditingStyle::legacyFontSize const):
        (WebCore::StyleChange::StyleChange):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::legacyFontSizeFromCSSValue):
        * editing/EditingStyle.h:
        (WebCore::EditingStyle::conflictsWithInlineStyleOfElement const):
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        (WebCore::isInlineNodeWithStyle):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::StyledMarkupAccumulator::serializeNodes):

2018-07-23  Per Arne Vollan  <pvollan@apple.com>

        WebCore::primaryScreenDisplayID() always return 0
        https://bugs.webkit.org/show_bug.cgi?id=187922
        <rdar://problem/42286933>

        Reviewed by Geoffrey Garen.

        This function should return a valid display ID.

        No new tests. Testing this requires a dual monitor setup.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::primaryScreenDisplayID):

2018-07-23  Nan Wang  <n_wang@apple.com>

        AX: Press tab to highlight items on a webpage is not working with voiceover enabled
        https://bugs.webkit.org/show_bug.cgi?id=187824

        Reviewed by Zalan Bujtas.

        We are deferring posting focused element change notification when the document needs a
        style recalculation. However, we only perform the cache update after a layout is completed.
        Added a timer to perform the cache update in the next runloop when non-layout type of mutation
        happens.
        
        Test: accessibility/mac/tab-focus-post-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::deferFocusedUIElementChangeIfNeeded):
        (WebCore::AXObjectCache::performCacheUpdateTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        (WebCore::AXObjectCache::performCacheUpdateTimerFired):

2018-07-23  Chris Dumez  <cdumez@apple.com>

        WebResourceLoadStatisticsStore fails to unregister itself as a MessageReceiver in its destructor
        https://bugs.webkit.org/show_bug.cgi?id=187910
        <rdar://problem/42356526>

        Reviewed by Brent Fulgham.

        Add internals API that causes the ResourceLoadObserver to notify its observer, and avoid waiting
        for the 5 second delay.

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

2018-07-23  Zalan Bujtas  <zalan@apple.com>

        [LCF][IFC] Add support for hyphenation.
        https://bugs.webkit.org/show_bug.cgi?id=187913

        Reviewed by Antti Koivisto.

        Move the hyphenation logic over from SimpleLineLayout::TextFragmentIterator.

        * layout/inlineformatting/textlayout/Runs.h:
        (WebCore::Layout::TextRun::hasHyphen const):
        (WebCore::Layout::LayoutRun::setHasHyphen):
        (WebCore::Layout::LayoutRun::hasHyphen const):
        (WebCore::Layout::LayoutRun::LayoutRun):
        (WebCore::Layout::TextRun::createNonWhitespaceRunWithHyphen):
        (WebCore::Layout::TextRun::TextRun):
        * layout/inlineformatting/textlayout/TextContentProvider.cpp:
        (WebCore::Layout::TextContentProvider::findTextItemSlow const):
        (WebCore::Layout::TextContentProvider::width const):
        (WebCore::Layout::TextContentProvider::hyphenPositionBefore const):
        * layout/inlineformatting/textlayout/TextContentProvider.h:
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.cpp:
        (WebCore::Layout::SimpleLineBreaker::Line::setTextAlign):
        (WebCore::Layout::SimpleLineBreaker::Line::justifyRuns):
        (WebCore::Layout::SimpleLineBreaker::Line::adjustRunsForTextAlign):
        (WebCore::Layout::SimpleLineBreaker::Line::collectExpansionOpportunities):
        (WebCore::Layout::SimpleLineBreaker::Line::closeLastRun):
        (WebCore::Layout::SimpleLineBreaker::Line::append):
        (WebCore::Layout::SimpleLineBreaker::Line::reset):
        (WebCore::Layout::SimpleLineBreaker::Style::Style):
        (WebCore::Layout::SimpleLineBreaker::handleLineEnd):
        (WebCore::Layout::SimpleLineBreaker::createRunsForLine):
        (WebCore::Layout::SimpleLineBreaker::hyphenPositionBefore const):
        (WebCore::Layout::SimpleLineBreaker::adjustSplitPositionWithHyphenation const):
        (WebCore::Layout::SimpleLineBreaker::split const):
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.h:

2018-07-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Querying the current time of a finished CSSAnimation after removing its target leads to a crash
        https://bugs.webkit.org/show_bug.cgi?id=187906

        Reviewed by Dean Jackson.

        Test: webanimations/accessing-current-time-after-finished-css-animation-target-removal.html

        Because we carelessly look at a CSSAnimation's effect's timing in DeclarativeAnimation::bindingsCurrentTime
        without checking that the effect is non-null, we can crash in the case where the animation is finished and
        its target element has been removed, which caused the effect to be set to null.

        We do not actually fix the lack of a null check, which will be the scope of a different patch, but instead
        ensure that we do _not_ set the animation's effect to null when its target is removed, which used to be
        performed via a call to WebAnimation::remove(). Instead, we introduce AnimationTimeline::elementWasRemoved()
        which notifies the timeline of an element being removed such that we may stop referencing any animation
        targeting this element from the various data structures holding strong references to the animation in question,
        and we then cancel the animation silently, which is a new option that ensures promises aren't resolved or
        rejected as a result.

        Finally, the WebAnimation and AnimationEffectReadOnly classes established a ref-cycle as WebAnimation has
        `RefPtr<AnimationEffectReadOnly> m_effect` and AnimationEffectReadOnly has `RefPtr<WebAnimation> m_animation`.
        While it is correct that WebAnimation owns its effect, which is established by the DOM API, the
        reverse is not correct since we only hold the reverse internally for the benefit of our implementation.
        As such, we change AnimationEffectReadOnly's m_animation to be a WeakPtr<WebAnimation>. This means not
        calling WebAnimation::remove() and simply removing the animation from the animation maps on the timeline
        is sufficient to guarantee that the document timeline will not leak (and with it the document).

        * animation/AnimationEffectReadOnly.h:
        (WebCore::AnimationEffectReadOnly::setAnimation):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::elementWasRemoved):
        * animation/AnimationTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::cancel):
        (WebCore::WebAnimation::resetPendingTasks):
        * animation/WebAnimation.h:
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-07-23  Aditya Keerthi  <akeerthi@apple.com>

        [iOS] Add support for input[type=color]
        https://bugs.webkit.org/show_bug.cgi?id=187871

        Reviewed by Tim Horton.

        * css/html.css: Remove unwanted styling for color inputs with a list attribute.
        * html/ColorInputType.cpp: Make the element focusable.
        (WebCore::ColorInputType::isMouseFocusable const):
        (WebCore::ColorInputType::isKeyboardFocusable const):
        * html/ColorInputType.h:
        * html/HTMLInputElement.h: Expose isColorControl() to WebKit.
        * page/Chrome.cpp:
        (WebCore::Chrome::createColorChooser):

2018-07-22  Dean Jackson  <dino@apple.com>

        fullscreen env() variables should have initial values
        https://bugs.webkit.org/show_bug.cgi?id=187897
        <rdar://problem/42485682>

        Reviewed by Sam Weinig.

        The env() values for fullscreen properties need to be
        initialized, rather than wait for values to be set from WebKit.
        Without this, feature detection doesn't work, and properties
        won't parse correctly.

        Test: fullscreen/fullscreen-env-initial.html

        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::buildValues): Initialize the fullscreen values.
        (WebCore::ConstantPropertyMap::updateConstantsForFullscreen): Renamed function, because it
        also updates the duration value.
        (WebCore::ConstantPropertyMap::didChangeFullscreenInsets): Call new name.
        (WebCore::ConstantPropertyMap::updateConstantsForFullscreenInsets): Deleted.
        * dom/ConstantPropertyMap.h:
        * page/Page.cpp:
        (WebCore::Page::setFullscreenAutoHideDuration): Don't change the value if it doesn't need it.
        * page/Page.h: Add accessor for fullscreenAutoHideDuration. Also add a member variable.
        (WebCore::Page::fullscreenAutoHideDuration const):

2018-07-22  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add center/right/justify line alignment support.
        https://bugs.webkit.org/show_bug.cgi?id=187890

        Reviewed by Antti Koivisto.

        Move over some more code from simple line layout.
        (though text-align: justify is more preformant as now expansion opportunities are added as we process the text runs
        -as opposed to iterting through the runs again when we reach the end of the line.) 

        * layout/inlineformatting/textlayout/Runs.h:
        (WebCore::Layout::LayoutRun::setLeft):
        (WebCore::Layout::LayoutRun::setExpansion):
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.cpp:
        (WebCore::Layout::SimpleLineBreaker::Line::Line):
        (WebCore::Layout::SimpleLineBreaker::Line::setTextAlign):
        (WebCore::Layout::SimpleLineBreaker::Line::adjustedLeftForTextAlign const):
        (WebCore::Layout::SimpleLineBreaker::Line::justifyRuns):
        (WebCore::Layout::SimpleLineBreaker::Line::adjustRunsForTextAlign):
        (WebCore::Layout::expansionOpportunity):
        (WebCore::Layout::expansionBehavior):
        (WebCore::Layout::SimpleLineBreaker::Line::collectExpansionOpportunities):
        (WebCore::Layout::SimpleLineBreaker::Line::closeLastRun):
        (WebCore::Layout::SimpleLineBreaker::Line::append):
        (WebCore::Layout::SimpleLineBreaker::Line::collapseTrailingWhitespace):
        (WebCore::Layout::SimpleLineBreaker::Line::reset):
        (WebCore::Layout::SimpleLineBreaker::Style::Style):
        (WebCore::Layout::SimpleLineBreaker::handleLineEnd):
        (WebCore::Layout::SimpleLineBreaker::handleLineStart):
        (WebCore::Layout::isTextAlignRight):
        (WebCore::Layout::SimpleLineBreaker::createRunsForLine):
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.h:
        (WebCore::Layout::SimpleLineBreaker::Line::setAvailableWidth):
        (WebCore::Layout::SimpleLineBreaker::Line::setCollapseWhitespace):

2018-07-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][IFC] Add verification for inline text runs.
        https://bugs.webkit.org/show_bug.cgi?id=187879

        Reviewed by Antti Koivisto.

        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingSimpleLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingComplexLineInformationIfNeeded):
        (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
        (WebCore::Layout::verifyAndOutputSubtree):
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        * layout/inlineformatting/InlineFormattingState.h:
        (WebCore::Layout::InlineFormattingState::addLayoutRuns):
        (WebCore::Layout::InlineFormattingState::layoutRuns const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutBox):
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::TreeBuilder::showLayoutTree):

2018-07-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not use virtual methods to construct floating/formatting states.
        https://bugs.webkit.org/show_bug.cgi?id=187875

        Reviewed by Antti Koivisto.

        LayoutContext::establishedFormattingState() does not require FormattingContext anymore only the root of the context.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        (WebCore::Layout::LayoutContext::formattingStateForBox const):
        (WebCore::Layout::LayoutContext::establishedFormattingState):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        (WebCore::Layout::BlockFormattingContext::instrinsicWidthConstraints const):
        (WebCore::Layout::BlockFormattingContext::createFormattingState const): Deleted.
        (WebCore::Layout::BlockFormattingContext::createOrFindFloatingState const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::createFormattingState const): Deleted.
        (WebCore::Layout::InlineFormattingContext::createOrFindFloatingState const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-07-21  Zalan Bujtas  <zalan@apple.com>

        [LFC][BFC] Do not collapse top/bottom margin with first/last inflow child from a non-block formatting context.
        https://bugs.webkit.org/show_bug.cgi?id=187867

        Reviewed by Antti Koivisto.

        The box's top/bottom margin never collapses with a non-block inflow child.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithSibling):
        (WebCore::Layout::isMarginBottomCollapsedWithSibling):
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBottom):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::establishesBlockFormattingContextOnly const): <div style="overflow: hidden">foobar</div> establishes both inline and block formatting context (inline wins though).
        * layout/layouttree/LayoutBox.h: establishesBlockFormattingContext() does not need to be virtual since we can determine it by looking at the box's style. -while in case
        of inline formatting context, it is about the content.

2018-07-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r233974): Cannot close pip'd video; pops back into PiP.
        https://bugs.webkit.org/show_bug.cgi?id=187873

        Reviewed by Jon Lee.

        When the PIP machinery on Mac wants to close the PIP window (due to the close button being clicked), it does
        not consult our -shouldClosePiP handler; it just tells us that we're going to close. So we never setup the 
        necessary state on the WebProcess side and still think that our "targetIsFullscreen". When we get the "stop"
        action, just request exit fullscreen, but set up the _pipState to think we're already exiting (because we are).

        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC pipActionStop:]):

2018-07-20  Justin Fan  <justin_fan@apple.com>

        Safari WebGL does not consistently provide correct GPU context on eGPU systems
        https://bugs.webkit.org/show_bug.cgi?id=187750
        <rdar://problem/39531436>

        Reviewed by Dean Jackson.

        Move GraphicsContext3DManager into its own class, and notify it when page/Chrome receives a 
        windowScreenDidChange message. Add a private data struct to track which hostWindow created each context.
        Upon notification, Manager updates the contexts that match the hostWindow with the
        provided displayID. Each context matches displayID to rendererID (set during process creation 
        if window server is blocked), which is matched to a virtual screen, and updates its GPU accordingly.

        No new tests. This requires multiple GPUs or eGPUs, each with attached display(s), to test.

        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.cpp:
        (WebCore::Chrome::windowScreenDidChange): Now calls GraphicsContext3DManager::screenDidChange().
        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h: Add rendererID to struct.
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DManager.cpp: Added (copied out of GraphicsContext3DCocoa.mm).
        (WebCore::attachToAppleGraphicsControl):
        (WebCore::hasMuxCapability):
        (WebCore::hasMuxableGPU):
        (WebCore::GraphicsContext3DManager::sharedManager):
        (WebCore::displayWasReconfigured):
        (WebCore::GraphicsContext3DManager::updateAllContexts):
        (WebCore::GraphicsContext3DManager::screenDidChange):
        (WebCore::GraphicsContext3DManager::addContext):
        (WebCore::GraphicsContext3DManager::removeContext):
        (WebCore::GraphicsContext3DManager::hostWindowForContext const):
        (WebCore::GraphicsContext3DManager::addContextRequiringHighPerformance):
        (WebCore::GraphicsContext3DManager::removeContextRequiringHighPerformance):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired):
        (WebCore::GraphicsContext3DManager::recycleContextIfNecessary):
        * platform/graphics/GraphicsContext3DManager.h: Added (copied out of GraphicsContext3DCocoa.mm).
        (WebCore::GraphicsContext3DManager::hasTooManyContexts const):
        (WebCore::GraphicsContext3DManager::GraphicsContext3DManager):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::createShared):
        (WebCore::identifyAndSetCurrentGPU): Now matches rendererIDs to determine virtual screen. 
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextVisibility):
        (WebCore::GraphicsContext3D::simulateContextChanged):
        (WebCore::GraphicsContext3D::screenDidChange):
        (WebCore::attachToAppleGraphicsControl): Deleted.
        (WebCore::hasMuxCapability): Deleted.
        (WebCore::hasMuxableGPU): Deleted.
        (WebCore::GraphicsContext3DManager::GraphicsContext3DManager): Deleted.
        (WebCore::GraphicsContext3DManager::hasTooManyContexts const): Deleted.
        (WebCore::manager): Deleted.
        (WebCore::displayWasReconfigured): Deleted.
        (WebCore::GraphicsContext3DManager::updateAllContexts): Deleted.
        (WebCore::GraphicsContext3DManager::addContext): Deleted.
        (WebCore::GraphicsContext3DManager::removeContext): Deleted.
        (WebCore::GraphicsContext3DManager::addContextRequiringHighPerformance): Deleted.
        (WebCore::GraphicsContext3DManager::removeContextRequiringHighPerformance): Deleted.
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState): Deleted.
        (WebCore::GraphicsContext3DManager::disableHighPerformanceGPUTimerFired): Deleted.
        (WebCore::GraphicsContext3DManager::recycleContextIfNecessary): Deleted.
        * platform/mac/PlatformScreenMac.mm: Provide a display's rendererID.
        (WebCore::rendererIDForDisplayMask):
        (WebCore::collectScreenProperties):
        (WebCore::rendererIDForDisplay):
        (WebCore::primaryRendererID):

2018-07-19  Simon Fraser  <simon.fraser@apple.com>

        Remove completed animations from GraphicsLayer, thus avoiding excessive backing store allocation
        https://bugs.webkit.org/show_bug.cgi?id=187844
        rdar://problem/40387294

        Reviewed by Dean Jackson.
        
        A keyframe animation which animates 3D transforms, and is fill-forwards, currently
        leaves the GraphicsLayer in a state where it has a "running" animation. However, the
        logic that computes animation extent in RenderLayerBacking::updateGeometry() only does
        so for running or paused animations. GraphicsLayer then thinks that it has an active
        transform animation with unknown extent, and refuses to detach its backing store.
        
        This triggers excessive layer creation on some sites (e.g. https://www.kqed.org).
        
        Fix by always removing animations from the GraphicsLayer when they finish, whether
        or not they fill forwards. This is done by having KeyframeAnimation::onAnimationEnd()
        always call endAnimation().
        
        This change only fixes the non-Web Animation code path. webkit.org/b/187845 exists
        to fix the other code path.
        
        Also improve some logging that would have revealed this problem sooner.

        Test: compositing/backing/backing-store-attachment-fill-forwards-animation.html

        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::endAnimation):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::endAnimation):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::onAnimationEnd):
        * page/animation/KeyframeAnimation.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::updateCoverage):

2018-07-20  Ryosuke Niwa  <rniwa@apple.com>

        Picking a color from the color panel for typing attributes needs to inverse transform through color-filter
        https://bugs.webkit.org/show_bug.cgi?id=187846

        Reviewed by Simon Fraser.

        This patch refines the color inversion for editing introduced in r234005 so that font panels and WebKit embedders
        can get and set inverted colors using attributed strings for a selected text in an editable region.

        More specifically, when font panels or WebKit embedders set a font color or a background color via WebView's
        _applyStyleToSelection and _applyEditingStyleToSelection, WebKit would automatically invert the color before inserting
        into DOM so that the color visible to the user matches that's given to WebKit. Conversely,
        [WebView attributedSubstringFromRange:nsRange] now return the color visible to the user, i.e. the color after
        the color filter had been applied, so that some WebKit embedders can present the visually identical color to the user.

        Because DOM never sees the color filter's effect in the computed style, etc... this patch reverts the change made to
        StyleChange in r234005 to avoid inverting the color passed to execCommand. This makes editing apps which is unaware
        of the dark mode or -apple-color-filter continue to function (because the color picker implemented in DOM will be
        applied of the same color filter before being presented to the user).

        Finally, this patch introduces a testing hook in applyCommandToFrame so that executing foreColor or backColor with
        the soruce of CommandFromMenuOrKeyBinding would trigger the same code path as the one taken by Objective-C 

        Tests: editing/execCommand/set-backColor-with-color-filter-from-scripts.html
               editing/execCommand/set-foreColor-with-color-filter-from-scripts.html
               editing/mac/attributed-string/attribute-string-for-copy-with-color-filter.html
               editing/style/set-backColor-with-color-filter.html
               editing/style/set-foreColor-with-color-filter.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::inverseTransformColorIfNeeded): Added.
        (WebCore::StyleChange::StyleChange): Revert the change made in r234005 since this code is also used by execCommand
        which is not desirable, and won't work for background color.
        (WebCore::StyleChange::extractTextStyles): Ditto.
        * editing/EditingStyle.h:
        * editing/Editor.cpp:
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyStyleToSelection): Call EditingStyle::inverseTransformColorIfNeeded when ColorFilterMode is
        set to InvertColor.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame): Added the aforementioned testing hook.
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange): Take the color filtr into account. Some WebKit embedders use this
        function to compute the font color in the selected text. Note that this function is mostly used for input methods
        so the color doesn't really matter, and its implementation is distinct from that of HTMLConverter.

2018-07-19  Jer Noble  <jer.noble@apple.com>

        HLS resources with remote subresources will not taint canvasses.
        https://bugs.webkit.org/show_bug.cgi?id=187731
        <rdar://problem/42290703>

        Reviewed by Brady Eidson.

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

        Most media sources are single-resource; they are accessed from a single origin. HLS manifests can contain many
        subresources from arbitrary origins, and canvases should be tainted when painted from media elements whose
        subresources were retrieved from tainting origins.

        Add a new method to HTMLMediaElement, wouldTaintOrigin(), taking a SecurityOrigin, and returning whether the
        media element would taint that origin. This gets piped all the way down to MediaPlayerPrivateAVFoundationObjC
        which uses WebCoreNSURLSession to track all the origins of all the responses which resulted from the media
        element's load.

        Drive-by fix: also fix this issue for media elements which render to an AudioContext.

        Drive-by fix #2: CanvasRenderingContext2DBase::createPattern() needs to check the return value of
        ImageBuffer::create() before using it.

        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::wouldTaintOrigin):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::didAttachRenderers):
        (WebCore::HTMLMediaElement::didDetachRenderers):
        (WebCore::HTMLMediaElement::scheduleUpdateShouldAutoplay):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::wouldTaintOrigin const):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::wouldTaintOrigin const):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::hasSingleSecurityOrigin const):
        (WebCore::MediaPlayerPrivateInterface::wouldTaintOrigin const):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::update):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::wouldTaintOrigin const):
        * platform/network/cocoa/WebCoreNSURLSession.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSession task:didReceiveResponseFromOrigin:]):
        (-[WebCoreNSURLSession wouldTaintOrigin:]):
        (-[WebCoreNSURLSessionDataTask resource:receivedResponse:]):

2018-07-20  Zalan Bujtas  <zalan@apple.com>

        Update FrameView::paintContents to use release logging.
        https://bugs.webkit.org/show_bug.cgi?id=187854
        <rdar://problem/42432371>

        Reviewed by Simon Fraser.

        Adding release logging helps identifying blank content cases. 

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2018-07-20  Jer Noble  <jer.noble@apple.com>

        First Auto-PiP from Fullscreen too small & animation blocks
        https://bugs.webkit.org/show_bug.cgi?id=187745
        <rdar://problem/42316583>

        Reviewed by Jon Lee.

        1) When Auto-PiPing, we don't have the luxury of setting up the fullscreen state
        ahead of time; we get notified that PiP has already started. The area of the code
        which does this just-in-time setup needs to set the video layer's frame so that the
        transform within the PiP window is correct.

        2) We generate a placeholder image when going into fullscreen, but we need to do
        so synchronously. Create the AVPlayerItemVideoOutput up front at AVPlayerItem creation
        time wherever AVPIVO is available.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::doSetup):

2018-07-20  Antoine Quint  <graouts@apple.com>

        DeclarativeAnimation should suspend, resume, & stop m_eventQueue
        https://bugs.webkit.org/show_bug.cgi?id=187216
        <rdar://problem/41669739>

        Reviewed by Ryosuke Niwa.

        Suspend, resume and close the GenericEventQueue for DeclarativeAnimation as instructed through the DOMActiveObject protocol.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::stop):
        (WebCore::DeclarativeAnimation::suspend):
        (WebCore::DeclarativeAnimation::resume):
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.h:

2018-07-20  Zalan Bujtas  <zalan@apple.com>

        [LFC][Inline formatting context] Add basic text content handling.
        https://bugs.webkit.org/show_bug.cgi?id=187860

        Reviewed by Antti Koivisto.

        InlineFormattingContext::layout() walks through the formatting root's descendant list in a post-order fashion and
        feeds the TextContentProvider.
        Eventually this would turn into a more generic loop where we stop and process the text content when finding a non-text content box (float, inline-box etc), but right now
        this is about text content only.

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::contentBoxBottom const):
        (WebCore::Display::Box::contentBoxRight const):
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        * layout/inlineformatting/textlayout/TextContentProvider.cpp:
        (WebCore::Layout::TextContentProvider::textRuns): Add a helper function to support the case when all we need is just the run list in one go.
        * layout/inlineformatting/textlayout/TextContentProvider.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDescendantOf const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutInlineBox.h:
        (WebCore::Layout::InlineBox::textContent const):

2018-07-20  Youenn Fablet  <youenn@apple.com>

        FetchResponse should close its stream when loading finishes
        https://bugs.webkit.org/show_bug.cgi?id=187790

        Reviewed by Chris Dumez.

        It simplifies for a FetchResponse to push all its data into its stream if already created at end of load time.
        Did some refactoring in FetchBodyOwner to have a cleaner relationship with the stream source.
        Did a minor refactoring to expose the error description when loading fails as part of the rejected promise.
        This is consistent to errors sent back through callbacks.

        Covered by existing tests.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::~FetchBodyOwner):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::FetchBodySource):
        (WebCore::FetchBodySource::setActive):
        (WebCore::FetchBodySource::setInactive):
        (WebCore::FetchBodySource::doStart):
        (WebCore::FetchBodySource::doPull):
        (WebCore::FetchBodySource::doCancel):
        (WebCore::FetchBodySource::cleanBodyOwner):
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):

2018-07-20  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r233969): ASSERT in -[WebAVPlayerLayer setVideoGravity:]
        https://bugs.webkit.org/show_bug.cgi?id=187814
        <rdar://problem/42391869>

        Reviewed by Eric Carlson.

        After r233969 caused models to disassociate themselves from interfaces, it is now possible that an
        VideoFullscreenInterfaceAVKit can have a nil model. We should null-check, not ASSERT, now that the
        assertion no longer holds true.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):

2018-07-19  Antoine Quint  <graouts@apple.com>

        Flaky crash in AnimationTimeline::cancelOrRemoveDeclarativeAnimation
        https://bugs.webkit.org/show_bug.cgi?id=187530
        <rdar://problem/42095186>

        Reviewed by Dean Jackson.

        We would crash in cancelOrRemoveDeclarativeAnimation() because updateCSSAnimationsForElement() would pass
        nullptr values due to the return value of cssAnimationsByName.take(nameOfAnimationToRemove). This is because
        we would create animations for animation names that may be empty or not match an existing @keyframes rule.
        Not only was that wasteful, but it was also non-compliant, and as a result of fixing this we're actually
        seeing a progression in the CSS Animations WPT tests.

        * animation/AnimationTimeline.cpp:
        (WebCore::shouldConsiderAnimation): New function that performs all required steps to see if a provided animation
        is valid and has a name that is not "none", not the empty string and matches the name of a @keyframes rule.
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::computeCSSAnimationBlendingKeyframes): We no longer need to check whether we have
        an empty animation name since we're no longer creating CSSAnimation objects in that circumstance.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::isAnimationNameValid): Add a new method that checks whether the provided animation name
        a known @keyframes rule.
        * css/StyleResolver.h:

2018-07-19  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::DocumentWriter::addData()
        https://bugs.webkit.org/show_bug.cgi?id=187819
        <rdar://problem/41328743>

        Reviewed by Brady Eidson.

        When AppCache is used a DocumentLoader may start a NetworkLoad even though it has substitute data.
        In DocumentLoader::continueAfterContentPolicy(), if we have substitute data we commit this data
        and call finishLoad(). However, if the case where there was a NetworkLoad started, we'll send the
        ContinueDidReceiveResponse IPC back to the network process and it will start sending us data for
        the load. This could lead to crashes such as <rdar://problem/41328743> since the DocumentLoader
        has already committed data and finished loading when it gets the data from the network process.

        To address the issue, we now call clearMainResource() in continueAfterContentPolicy(), after we've
        decided to commit the substitute data. This effectively removes the DocumentLoader as a client of
        the CachedResource so that its will not be notified of following load progress. We do not cancel
        the load as other CachedResourceClients may be interested in the load (ApplicationCacheResourceLoader
        in particular, in order to update its cached data).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):

2018-07-19  Dean Jackson  <dino@apple.com>

        CrashTracer: com.apple.WebKit.WebContent.Development at com.apple.WebCore: std::optional<WTF::Vector<WebCore::PluginInfo, 0ul, WTF::CrashOnOverflow, 16ul> >::operator* & + 73
        https://bugs.webkit.org/show_bug.cgi?id=187820
        <rdar://problem/42017759>

        Reviewed by Antoine Quint.

        Speculative fix for this crash, which is accessing an optional without checking
        if it exists. The crash logs didn't point to a reproducible test case.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::supportsWebVisibleMimeTypeForURL const): Return false if
        the optional doesn't exist.

2018-07-19  Antoine Quint  <graouts@apple.com>

        Ensure DocumentTimeline is kept alive until the VM::whenIdle callback is called
        https://bugs.webkit.org/show_bug.cgi?id=187692

        Reviewed by Ryosuke Niwa.

        Ensure we keep the DocumentTimeline alive until the VM::whenIdle callback is called.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime):

2018-07-18  Simon Fraser  <simon.fraser@apple.com>

        Setting foreground color when editing should take color-filter into account, and report the correct foreground color for collapsed selections
        https://bugs.webkit.org/show_bug.cgi?id=187778

        Reviewed by Ryosuke Niwa.
        
        Fix two aspects of editing with color-filter:

        1. When setting foreground color, inverse-transform the color through -apple-color-filter so that the user gets the color
           they chose when in Dark Mode. Tested by editing/style/exec-command-foreColor-with-color-filter.html.

        2. When retrieving the style of the collapsed selection, take color filter into account so that color picker
           reflects the color the users sees, instead of the content color. Tested by editing/mac/attributed-string/attributed-string-for-typing-with-color-filter.html

        Add two additional tests that ensure that -apple-color-filter does not impact the NSAttributedString code
        path, since -apple-color-filter should not affect the behavior of Copy.

        Tests: editing/mac/attributed-string/attrib-string-colors-with-color-filter.html
               editing/mac/attributed-string/attrib-string-range-with-color-filter.html
               editing/mac/attributed-string/attributed-string-for-typing-with-color-filter.html
               editing/style/exec-command-foreColor-with-color-filter.html

        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::StyleChange):
        (WebCore::StyleChange::extractTextStyles):
        * editing/EditingStyle.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::fontAttributesForSelectionStart const):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::InvertLightnessFilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        (WebCore::FilterOperations::inverseTransformColor const):
        * platform/graphics/filters/FilterOperations.h:

2018-07-19  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r233994.

        Caused EWS and bot failures due to assertions added

        Reverted changeset:

        "FetchResponse should close its stream when loading finishes"
        https://bugs.webkit.org/show_bug.cgi?id=187790
        https://trac.webkit.org/changeset/233994

2018-07-19  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r233926): media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-pip-to-inline.html is a TIMEOUT failure
        https://bugs.webkit.org/show_bug.cgi?id=187813

        Reviewed by Jon Lee.

        In r233926, we changed the behavior of entering PiP to exit fullscreen only after entering PiP completes. The
        test in question will immediately request "inline" presentation mode once the PiP animation begins, and thus
        it's asking to "exit fullscreen" when both in standard fullscreen and also in PiP. The fix is not to bail out
        early if we're in standard (element) fullscreen, but to allow the remaining steps to complete and exit PiP as
        well.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::exitFullscreen):

2018-07-19  Zalan Bujtas  <zalan@apple.com>

        [LFC] Introduce simple line breaker.
        https://bugs.webkit.org/show_bug.cgi?id=187688

        Reviewed by Antti Koivisto.

        This patch takes the simple line layout implementation and refactors it in a way it is no longer requires a RenderBlockFlow object to run on.
        Also this patch decouples text run generation and line breaking (and this implementation is going to replace the current simple line layout codebase)

        TextContentProvider: Acts both as the container for all the text content (including hard line breaks) and as an iterator for the generated text runs.
        SimpleTextRunGenerator: TextContentProvider uses it as the text run generator for simple content (in the future we'll have a ComplexTextRunGenerator).
        SimpleLineBreaker: Input -> text runs + line constraints; Output -> layout runs after line breaking.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/inlineformatting/textlayout/ContentProvider.cpp: Added.
        (WebCore::Layout::TextContentProvider::TextItem::Style::Style):
        (WebCore::Layout::TextContentProvider::ContentProvider):
        (WebCore::Layout::TextContentProvider::~ContentProvider):
        (WebCore::Layout::TextContentProvider::appendText):
        (WebCore::Layout::TextContentProvider::appendLineBreak):
        (WebCore::Layout::TextContentProvider::width const):
        (WebCore::Layout::TextContentProvider::textWidth const):
        (WebCore::Layout::TextContentProvider::fixedPitchWidth const):
        (WebCore::Layout::TextContentProvider::toTextItemIndex const):
        (WebCore::Layout::TextContentProvider::length const):
        (WebCore::Layout::TextContentProvider::iterator):
        (WebCore::Layout::TextContentProvider::findNextRun):
        (WebCore::Layout::TextContentProvider::current const):
        * layout/inlineformatting/textlayout/ContentProvider.h: Added.
        (WebCore::Layout::TextContentProvider::textContent const):
        (WebCore::Layout::TextContentProvider::hardLineBreaks const):
        (WebCore::Layout::TextContentProvider::Iterator::current const):
        (WebCore::Layout::TextContentProvider::contains const):
        (WebCore::Layout::TextContentProvider::Iterator::Iterator):
        (WebCore::Layout::TextContentProvider::Iterator::operator++):
        * layout/inlineformatting/textlayout/Runs.h: Added.
        (WebCore::Layout::TextRun::isWhitespace const):
        (WebCore::Layout::TextRun::isNonWhitespace const):
        (WebCore::Layout::TextRun::isLineBreak const):
        (WebCore::Layout::TextRun::isSoftLineBreak const):
        (WebCore::Layout::TextRun::isHardLineBreak const):
        (WebCore::Layout::TextRun::isValid const):
        (WebCore::Layout::TextRun::isCollapsed const):
        (WebCore::Layout::TextRun::type const):
        (WebCore::Layout::TextRun::setIsCollapsed):
        (WebCore::Layout::TextRun::setWidth):
        (WebCore::Layout::LayoutRun::start const):
        (WebCore::Layout::LayoutRun::end const):
        (WebCore::Layout::LayoutRun::length const):
        (WebCore::Layout::LayoutRun::left const):
        (WebCore::Layout::LayoutRun::right const):
        (WebCore::Layout::LayoutRun::width const):
        (WebCore::Layout::LayoutRun::isEndOfLine const):
        (WebCore::Layout::LayoutRun::setEnd):
        (WebCore::Layout::LayoutRun::setRight):
        (WebCore::Layout::LayoutRun::setIsEndOfLine):
        (WebCore::Layout::LayoutRun::LayoutRun):
        (WebCore::Layout::TextRun::createWhitespaceRun):
        (WebCore::Layout::TextRun::createNonWhitespaceRun):
        (WebCore::Layout::TextRun::createSoftLineBreakRun):
        (WebCore::Layout::TextRun::createHardLineBreakRun):
        (WebCore::Layout::TextRun::TextRun):
        (WebCore::Layout::TextRun::start const):
        (WebCore::Layout::TextRun::end const):
        (WebCore::Layout::TextRun::length const):
        (WebCore::Layout::TextRun::width const):
        * layout/inlineformatting/textlayout/simple/SimpleContentProvider.cpp: Added.
        (WebCore::Layout::SimpleContentProvider::SimpleContentProvider):
        (WebCore::Layout::SimpleContentProvider::current const):
        (WebCore::Layout::SimpleContentProvider::reset):
        (WebCore::Layout::SimpleContentProvider::findNextRun):
        (WebCore::Layout::SimpleContentProvider::moveToNextBreakablePosition):
        (WebCore::Layout::SimpleContentProvider::moveToNextNonWhitespacePosition):
        (WebCore::Layout::SimpleContentProvider::isAtLineBreak const):
        (WebCore::Layout::SimpleContentProvider::isAtSoftLineBreak const):
        * layout/inlineformatting/textlayout/simple/SimpleContentProvider.h: Added.
        (WebCore::Layout::SimpleContentProvider::Iterator::reset):
        (WebCore::Layout::SimpleContentProvider::Position::operator== const):
        (WebCore::Layout::SimpleContentProvider::Position::operator< const):
        (WebCore::Layout::SimpleContentProvider::Position::operator ContentPosition const):
        (WebCore::Layout::SimpleContentProvider::Position::resetItemPosition):
        (WebCore::Layout::SimpleContentProvider::Position::contentPosition const):
        (WebCore::Layout::SimpleContentProvider::Position::itemPosition const):
        (WebCore::Layout::SimpleContentProvider::Iterator<T>::Iterator):
        (WebCore::Layout::SimpleContentProvider::Iterator<T>::current const):
        (WebCore::Layout::SimpleContentProvider::Iterator<T>::operator):
        (WebCore::Layout::SimpleContentProvider::Position::operator++):
        (WebCore::Layout::SimpleContentProvider::Position::operator+=):
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.cpp: Added.
        (WebCore::Layout::SimpleLineBreaker::TextRunList::TextRunList):
        (WebCore::Layout::SimpleLineBreaker::Line::Line):
        (WebCore::Layout::adjustedEndPosition):
        (WebCore::Layout::SimpleLineBreaker::Line::append):
        (WebCore::Layout::SimpleLineBreaker::Line::collapseTrailingWhitespace):
        (WebCore::Layout::SimpleLineBreaker::Line::reset):
        (WebCore::Layout::SimpleLineBreaker::Style::Style):
        (WebCore::Layout::SimpleLineBreaker::SimpleLineBreaker):
        (WebCore::Layout::SimpleLineBreaker::runs):
        (WebCore::Layout::SimpleLineBreaker::createRunsForLine):
        (WebCore::Layout::SimpleLineBreaker::handleOverflownRun):
        (WebCore::Layout::SimpleLineBreaker::collapseLeadingWhitespace):
        (WebCore::Layout::SimpleLineBreaker::collapseTrailingWhitespace):
        (WebCore::Layout::SimpleLineBreaker::splitTextRun):
        (WebCore::Layout::SimpleLineBreaker::split const):
        (WebCore::Layout::SimpleLineBreaker::availableWidth const):
        (WebCore::Layout::SimpleLineBreaker::verticalPosition const):
        * layout/inlineformatting/textlayout/simple/SimpleLineBreaker.h: Added.
        (WebCore::Layout::SimpleLineBreaker::TextRunList::overrideCurrent):
        (WebCore::Layout::SimpleLineBreaker::TextRunList::isCurrentOverridden const):
        (WebCore::Layout::SimpleLineBreaker::Line::availableWidth const):
        (WebCore::Layout::SimpleLineBreaker::Line::hasContent const):
        (WebCore::Layout::SimpleLineBreaker::Line::setAvailableWidth):
        (WebCore::Layout::SimpleLineBreaker::Line::hasTrailingWhitespace const):
        (WebCore::Layout::SimpleLineBreaker::Line::isWhitespaceOnly const):
        (WebCore::Layout::SimpleLineBreaker::wrapContentOnOverflow const):
        (WebCore::Layout::SimpleLineBreaker::TextRunList::current const):
        (WebCore::Layout::SimpleLineBreaker::TextRunList::operator++):

2018-07-19  Keith Rollin  <krollin@apple.com>

        Remove duplicate compilation of WebKitNSImageExtras.mm
        https://bugs.webkit.org/show_bug.cgi?id=187782

        Reviewed by Alex Christensen.

        WebKitNSImageExtras.mm gets compiled twice, once because it's in
        WebCore.xcodeproj/project.pbxproj and once because it's in
        Webcore/SourcesCocoa.txt. This can lead to duplicate definition
        errors, particularly when building with LTO enabled. Fix this by
        removing the entry from the Xcode project.

        No new tests -- no change in WebKit functionality.

        * WebCore.xcodeproj/project.pbxproj:

2018-07-19  Youenn Fablet  <youenn@apple.com>

        FetchResponse should close its stream when loading finishes
        https://bugs.webkit.org/show_bug.cgi?id=187790

        Reviewed by Chris Dumez.

        It simplifies for a FetchResponse to push all its data into its stream if already created at end of load time.
        Did some refactoring in FetchBodyOwner to have a cleaner relationship with the stream source.
        Did a minor refactoring to expose the error description when loading fails as part of the rejected promise.
        This is consistent to errors sent back through callbacks.

        Covered by existing tests.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::~FetchBodyOwner):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchBodySource.cpp:
        (WebCore::FetchBodySource::FetchBodySource):
        (WebCore::FetchBodySource::setActive):
        (WebCore::FetchBodySource::setInactive):
        (WebCore::FetchBodySource::doStart):
        (WebCore::FetchBodySource::doPull):
        (WebCore::FetchBodySource::doCancel):
        (WebCore::FetchBodySource::cleanBodyOwner):
        * Modules/fetch/FetchBodySource.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didFail):

2018-07-19  Jon Lee  <jonlee@apple.com>

        Update iOS fullscreen alert text again
        https://bugs.webkit.org/show_bug.cgi?id=187797
        rdar://problem/42373783

        Reviewed by Jer Noble.

        * English.lproj/Localizable.strings:

2018-07-19  Keith Rollin  <krollin@apple.com>

        Adjust WEBCORE_EXPORT annotations for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187781
        <rdar://problem/42351124>

        Reviewed by Alex Christensen.

        Continuation of Bug 186944. This bug addresses issues not caught
        during the first pass of adjustments. The initial work focussed on
        macOS; this one addresses issues found when building for iOS. From
        186944:

        Adjust a number of places that result in WebKit's
        'check-for-weak-vtables-and-externals' script reporting weak external
        symbols:

            ERROR: WebCore has a weak external symbol in it (/Volumes/Data/dev/webkit/OpenSource/WebKitBuild/Release/WebCore.framework/Versions/A/WebCore)
            ERROR: A weak external symbol is generated when a symbol is defined in multiple compilation units and is also marked as being exported from the library.
            ERROR: A common cause of weak external symbols is when an inline function is listed in the linker export file.
            ...

        These cases are caused by inline methods being marked with WTF_EXPORT
        (or related macro) or with an inline function being in a class marked
        as such, and when enabling LTO builds.

        For the most part, address these by removing the WEBCORE_EXPORT
        annotation from inline methods. In some cases, move the implementation
        out-of-line because it's the class that has the WEBCORE_EXPORT on it
        and removing the annotation from the class would be too disruptive.
        Finally, in other cases, move the implementation out-of-line because
        check-for-weak-vtables-and-externals still complains when keeping the
        implementation inline and removing the annotation; this seems to
        typically (but not always) happen with destructors.

        No new tests. There is no changed functionality. Only the annotation
        and treatment of inline methods are altered.

        * platform/graphics/FourCC.h:
        (WebCore::FourCC::FourCC):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::IntPoint):
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::Observer::~Observer):
        (WebCore::RealtimeMediaSource::AudioCaptureFactory::~AudioCaptureFactory):
        (WebCore::RealtimeMediaSource::VideoCaptureFactory::~VideoCaptureFactory):
        * platform/mediastream/RealtimeMediaSource.h:
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::~ServiceWorkerProvider):
        * workers/service/ServiceWorkerProvider.h:

2018-07-19  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Return a valid time values in unprerolled states
        https://bugs.webkit.org/show_bug.cgi?id=187111

        Reviewed by Xabier Rodriguez-Calvar.

        After r230584 in bug 180253, asserts were added in
        PlatformTimeRanges::add to check that both ends of the range were
        valid times. In the non-MSE GStreamer player, this assert was
        firing on https://www.w3.org/2010/05/video/mediaevents.html due to
        seekable being called in nonprerolled states. In this case
        MediaPlayerPrivateInterface::seekable was calling GStreamer's
        maxTimeSeekable, which calls in durationMediaTime. The guard
        against calling gst_element_query_duration when not prerolled was
        returning a different time value than when the duration query
        itself failed. Hence the assert firing.

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

2018-07-19  Antoine Quint  <graouts@apple.com>

        Hitting RELEASE_ASSERT(!m_activeDOMObjectAdditionForbidden) under HTMLMediaElement::resume()
        https://bugs.webkit.org/show_bug.cgi?id=187793
        <rdar://problem/42308469>

        Reviewed by Chris Dumez.

        Ensure we do not call JS under resume(), which would happen as a result of calling configureMediaControls() in prepareForLoad().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::contextDestroyed):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        * html/HTMLMediaElement.h:

2018-07-19  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MSE] imported/w3c/web-platform-tests/media-source/mediasource-is-type-supported.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=187469

        Reviewed by Žan Doberšek.

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcFreeStream): Fix critical warning. The appsrc
        element is created only when a valid sourcebuffer is in use.

2018-07-19  Frederic Wang  <fwang@igalia.com>

        Fix message of NotSupportedError exception thrown during custom element creation
        https://bugs.webkit.org/show_bug.cgi?id=187757

        Reviewed by Yusuke Suzuki.

        In bug 161528, some new exceptions were introduced for custom element creation [1] but the
        actual text has some issues. This patch fixes one typo and one wrong message.

        [1] https://dom.spec.whatwg.org/#concept-create-element

        Test: fast/custom-elements/exceptions-for-synchronous-custom-element-creation.html

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        Unreviewed API Test fix; restored a line inadventantly removed in r233926.

        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):

2018-07-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Interpolation between font-styles with a keyword value should be discrete
        https://bugs.webkit.org/show_bug.cgi?id=187722

        Reviewed by Myles Maxfield.

        Animating between "font-style: normal" or "font-style: oblique" and any another value should yield a discrete
        interpolation where the from-value is used from 0 and up to (but excluding) 0.5, and the to-value from 0.5 to 1.

        In order to be able to detect the "normal" value, we make the "slope" of a FontSelectionRequest an optional type
        where the std::nullopt value indicates "normal" and other values an "oblique" value. Since we also need to
        distinguish the "italic" value from an "oblique" value, we implement a custom PropertyWrapper for the "font-style"
        property where we ensure the fontStyleAxis property of the font description matches the value we're blending to.
        Indeed, in the case where we may animate from "normal" to "italic", the fontStyleAxis on the blended style would
        remain "slnt" since it is the base value for "normal".

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::hasPlainText const):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::fontStyleFromStyleValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFace.cpp:
        (WebCore::calculateItalicRange):
        * css/CSSFontFaceSet.cpp:
        (WebCore::computeFontSelectionRequest):
        * css/FontSelectionValueInlines.h:
        (WebCore::fontStyleKeyword):
        (WebCore::fontStyleValue): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertFontStyleFromValue):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperFontStyle::PropertyWrapperFontStyle):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::computeHash const):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::italic const):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::italic const):
        (WebCore::FontDescription::setItalic):
        (WebCore::FontDescription::setIsItalic):
        (WebCore::FontCascadeDescription::initialItalic):
        * platform/graphics/FontSelectionAlgorithm.cpp:
        (WebCore::FontSelectionAlgorithm::styleDistance const):
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::isItalic):
        (WebCore::FontSelectionRequest::tied const):
        (WebCore::operator<<): Implement the required stream operator.
        (WebCore::operator==): Mark this function as inline instead of constexpr since tied() is no longer constexpr
        due to taking an std::optional<>.
        (WebCore::operator!=):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::createFontPlatformData):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontItalic):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fontItalic const):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix after r233926; BOOL !== bool.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::pictureInPictureWasStartedWhenEnteringBackground const):

2018-07-18  Jer Noble  <jer.noble@apple.com>

        PiP from Element Fullscreen should match AVKit's behavior
        https://bugs.webkit.org/show_bug.cgi?id=187623

        Reviewed by Jon Lee.

        PiP behavior should be defined at the WebKit2 level, and not in HTMLMediaElement:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):

        Add an accessor for pictureInPictureWasStartedWhenEnteringBackground():

        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenInterfaceAVKit::pictureInPictureWasStartedWhenEnteringBackground const):

        Add VideoFullscreenModelClient virutal methods for PiP change notifications:

        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModelClient::hasVideoChanged):
        (WebCore::VideoFullscreenModelClient::videoDimensionsChanged):
        (WebCore::VideoFullscreenModelClient::willEnterPictureInPicture):
        (WebCore::VideoFullscreenModelClient::didEnterPictureInPicture):
        (WebCore::VideoFullscreenModelClient::failedToEnterPictureInPicture):
        (WebCore::VideoFullscreenModelClient::willExitPictureInPicture):
        (WebCore::VideoFullscreenModelClient::didExitPictureInPicture):
        (WebCore::VideoFullscreenModelClient::failedToExitPictureInPicture):
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::willEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::didEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::failedToEnterPictureInPicture):
        (VideoFullscreenModelVideoElement::willExitPictureInPicture):
        (VideoFullscreenModelVideoElement::didExitPictureInPicture):
        (VideoFullscreenModelVideoElement::failedToExitPictureInPicture):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerLayer layoutSublayers]):
        (-[WebAVPlayerLayer resolveBounds]):
        (-[WebAVPlayerLayer setVideoGravity:]):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::presentingViewController):
        (VideoFullscreenInterfaceAVKit::willStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::failedToStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::willStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::didStopPictureInPicture):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::willEnterPictureInPicture):
        (VideoFullscreenControllerContext::didEnterPictureInPicture):
        (VideoFullscreenControllerContext::failedToEnterPictureInPicture):
        (VideoFullscreenControllerContext::willExitPictureInPicture):
        (VideoFullscreenControllerContext::didExitPictureInPicture):
        (VideoFullscreenControllerContext::failedToExitPictureInPicture):
        * platform/mac/VideoFullscreenInterfaceMac.h:
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitFullscreen): Deleted.
        * platform/mac/VideoFullscreenInterfaceMac.mm:
        (-[WebVideoFullscreenInterfaceMacObjC invalidateFullscreenState]):
        (-[WebVideoFullscreenInterfaceMacObjC exitPIP]):
        (-[WebVideoFullscreenInterfaceMacObjC exitPIPAnimatingToRect:inWindow:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipShouldClose:]):
        (-[WebVideoFullscreenInterfaceMacObjC pipDidClose:]):
        (WebCore::VideoFullscreenInterfaceMac::enterFullscreen):
        (WebCore::VideoFullscreenInterfaceMac::exitFullscreen):
        (WebCore::VideoFullscreenInterfaceMac::exitFullscreenWithoutAnimationToMode):
        (WebCore::VideoFullscreenInterfaceMac::requestHideAndExitFullscreen):

2018-07-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Disable CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST specified by setAllowsAnyHTTPSCertificate.
        https://bugs.webkit.org/show_bug.cgi?id=187611

        Reviewed by Fujii Hironori.

        Current interface for TLS certificate validation for Curl port are as follows:

        - WEBCORE_EXPORT void setHostAllowsAnyHTTPSCertificate(const String&);
        - bool isAllowedHTTPSCertificateHost(const String&);
        - bool canIgnoredHTTPSCertificate(const String&, const Vector<CertificateInfo::Certificate>&);

        First one registers a host to be ignored for any certificate check. Once it is registered, no
        further certificate validation check is executed.
        Second one checks the host is registered in the list above.
        Third one is weird. The method signature implies it checks the certificate for the host and detect
        whether we can ignore this certificate for the host, but actually it  just check only the host and
        register the certificate into the vector. Then in the next request for the host, the certificate
        will be checked with the previously stored certificate.

        It's hard to understand, but in short,
        - We can register a host as an exception for any TLS certificate validation.
        - But only certificate arrived first is ignored, not any certificates for the host
          (which is rare, but possible for mis configured web cluster).

        This behavior is incomplete. To ignore any certificates of the host, these two methods are enough:

        - void allowAnyHTTPSCertificatesForHost(const String&)
        - bool canIgnoreAnyHTTPSCertificatesForHost(const String&)

        No new tests. Covered by existing tests.

        * platform/network/curl/CertificateInfo.h:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableSSLForHost): Ignore TLS verification for registered host.
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::allowAnyHTTPSCertificatesForHost): Added.
        (WebCore::CurlSSLHandle::canIgnoreAnyHTTPSCertificatesForHost const): Ditto.
        (WebCore::CurlSSLHandle::setClientCertificateInfo): Separate lock.
        (WebCore::CurlSSLHandle::getSSLClientCertificate const): Ditto and add const.
        (WebCore::CurlSSLHandle::setHostAllowsAnyHTTPSCertificate): Deleted.
        (WebCore::CurlSSLHandle::isAllowedHTTPSCertificateHost): Deleted.
        (WebCore::CurlSSLHandle::canIgnoredHTTPSCertificate): Deleted.
        (WebCore::CurlSSLHandle::getSSLClientCertificate): Deleted.
        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        (WebCore::CurlSSLVerifier::collectInfo): Renamed from verify.
        (WebCore::CurlSSLVerifier::verifyCallback):
        (WebCore::CurlSSLVerifier::verify): Renamed to collectInfo.
        * platform/network/curl/CurlSSLVerifier.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate): Rename calling method.

2018-07-18  Myles C. Maxfield  <mmaxfield@apple.com>

        Rename WordBreak::Break to WordBreak::BreakWord
        https://bugs.webkit.org/show_bug.cgi?id=187767

        Reviewed by Simon Fraser.

        These breaking properties are very confusing. There are:

        1. word-break: break-all, a standard value that allows breaking after every
        character.
        2. word-break: break-word, a non-standard value which allows for breaking after
        every character, but only if the word is too long for the available width (otherwise
        it works the same as word-break: normal). This affects the min-content-size of the
        text (and makes it equal to what it would be if word-break: break-all was
        specified).
        3. word-wrap: break-word, which is the same as word-break: break-word, but doesn't
        affect the min-content-size of the text.
        4. overflow-wrap: break-word, which is the same as word-wrap: break-word.

        Because this is so confusing it's valuable for our internal enums to match the names
        of the official CSS properties/values.

        No new tests because there is no behavior change.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator WordBreak const):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::breakWords const):
        * rendering/style/RenderStyleConstants.h:

2018-07-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add SPI to defer running async script until after document load
        https://bugs.webkit.org/show_bug.cgi?id=187748
        <rdar://problem/42317378>

        Reviewed by Ryosuke Niwa and Tim Horton.

        On watchOS, we currently observe that time-consuming async scripts can block the first paint of Reader, leaving
        the user with a blank screen for tens of seconds. One way to mitigate this is to defer async script execution
        until after document load (i.e. the same timing as DOMContentLoaded).

        This patch introduces an SPI configuration allowing internal clients to defer execution of asynchronous script
        until after document load; this, in combination with the parser yielding token introduced in r233891, allows
        Safari on watchOS to avoid being blocked on slow script execution before the first paint of the Reader page on
        most article-like pages. See below for more details.

        Test: RunScriptAfterDocumentLoad.ExecutionOrderOfScriptsInDocument

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

        Notify ScriptRunner when the Document has finished parsing, and is about to fire DOMContentLoaded.

        * dom/Document.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::documentFinishedParsing):

        When the document is finished parsing, kick off the script execution timer if needed to run any async script
        that has been deferred.

        (WebCore::ScriptRunner::notifyFinished):
        (WebCore::ScriptRunner::timerFired):

        Instead of always taking from the list of async scripts to execute, check our document to see whether we should
        defer this until after document load. If so, ignore `m_scriptsToExecuteSoon`.

        * dom/ScriptRunner.h:
        * page/Settings.yaml:

        Add a WebCore setting for this behavior.

2018-07-18  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add debug border, repaint counter state tracking to Nicosia::CompositionLayer
        https://bugs.webkit.org/show_bug.cgi?id=187749

        Reviewed by Carlos Garcia Campos.

        Add the RepaintCounter and DebugBorder structs to
        Nicosia::CompositionLayer::LayerState, tracking visibility as well as
        repaint count or debug color and width.

        Instances of RepaintCounter and DebugBorder types are kept in each
        CoordinatedGraphicsLayer object, updating the relevant data as it is
        changed (since the GraphicsLayer object isn't tracking these values on
        its own). During layer flush these values (if changed) are then copied
        over into the CompositionLayer state.

        * platform/graphics/nicosia/NicosiaPlatformLayer.cpp:
        Also fix the year in the license header.
        * platform/graphics/nicosia/NicosiaPlatformLayer.h:
        Also fix the year in the license header.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::didUpdateTileBuffers):
        (WebCore::CoordinatedGraphicsLayer::setShowDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::setShowRepaintCounter):
        (WebCore::CoordinatedGraphicsLayer::setDebugBorder):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-07-18  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Start tracking Nicosia layers in CoordinatedGraphicsState
        https://bugs.webkit.org/show_bug.cgi?id=187751

        Reviewed by Carlos Garcia Campos.

        Start including the Nicosia::CompositionLayer objects in the
        CoordinatedGraphicsState struct, under a separate NicosiaState struct.
        References to all the layers in a given scene are kept in a HashSet,
        and a separate reference to the root layer kept in a separate member
        variable.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::compositionLayer const):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        Add the getter method that returns internal Nicosia::CompositionLayer
        object. This can't be defined in the class definition because of
        WEBCORE_EXPORT used on the CoordinatedGraphicsLayer class.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2018-07-18  Simon Fraser  <simon.fraser@apple.com>

        Shrink CompositeAnimation and AnimationBase
        https://bugs.webkit.org/show_bug.cgi?id=187683

        Reviewed by Daniel Bates.

        Reduce the size of CompositeAnimation and AnimationBase.

        * page/animation/AnimationBase.h:
        * page/animation/CompositeAnimation.h:

2018-07-17  Antoine Quint  <graouts@apple.com>

        Ensure timingFunctionForKeyframeAtIndex() can be used from setAnimatedPropertiesInStyle().
        https://bugs.webkit.org/show_bug.cgi?id=187637
        <rdar://problem/42157915>

        Reviewed by Dean Jackson.

        Test: webanimations/empty-keyframes-crash.html

        Unlike what we assumed, it is possible to have a non-declarative animation without any parsed keyframes.
        This can happen as a result of calling `Element.animate({}, …)`. In this case, we want to return a null
        value in timingFunctionForKeyframeAtIndex() so we update the call site in setAnimatedPropertiesInStyle()
        which is the only place where we didn't check for a null value and didn't know for sure that there would
        be parsed keyframes to rely on in the case of a WebAnimation instance.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffectReadOnly::timingFunctionForKeyframeAtIndex):

2018-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Crypto operations should copy their parameters before hoping to another thread
        https://bugs.webkit.org/show_bug.cgi?id=187501
        <rdar://problem/41438160>

        Reviewed by Youenn Fablet.

        This patch aims at making all captured variables in all crypto lambdas that need to be passed
        to a worker thread thread safe, which includes:
        1) changing ref counted objects to thread safe ref counted object.
        2) adding isolatedCopy methods to non ref counted classes, so they can be called by CrossThreadCopy().

        In addition to above changes, this patch also does the following things:
        1) change the name CryptoAlgorithm::dispatchOperation => CryptoAlgorithm::dispatchOperationInWorkQueue
        to make it clear that lambdas will be passed to a secondary thread.
        2) make CryptoAlgorithmParameters as const parameters for all methods.
        3) add null checks on BufferSource.length() and .data().

        Tests: crypto/subtle/aes-gcm-import-key-unwrap-ec-raw-key.html
               http/wpt/crypto/aes-cbc-crash.any.html
               http/wpt/crypto/aes-cbc-crash.any.worker.html
               http/wpt/crypto/aes-ctr-crash.any.html
               http/wpt/crypto/aes-ctr-crash.any.worker.html
               http/wpt/crypto/aes-gcm-crash.any.html
               http/wpt/crypto/aes-gcm-crash.any.worker.html
               http/wpt/crypto/derive-hmac-key-crash.any.html
               http/wpt/crypto/derive-hmac-key-crash.any.worker.html
               http/wpt/crypto/ecdsa-crash.any.html
               http/wpt/crypto/ecdsa-crash.any.worker.html
               http/wpt/crypto/hkdf-crash.any.html
               http/wpt/crypto/hkdf-crash.any.worker.html
               http/wpt/crypto/pbkdf2-crash.any.html
               http/wpt/crypto/pbkdf2-crash.any.worker.html
               http/wpt/crypto/rsa-oaep-crash.any.html
               http/wpt/crypto/rsa-oaep-crash.any.worker.html
               http/wpt/crypto/rsa-pss-crash.any.html
               http/wpt/crypto/rsa-pss-crash.any.worker.html
               http/wpt/crypto/unwrap-ec-key-crash.any.html
               http/wpt/crypto/unwrap-ec-key-crash.any.worker.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.worker.html

        * bindings/js/BufferSource.h:
        (WebCore::BufferSource::data const):
        (WebCore::BufferSource::length const):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        (WebCore::dispatchAlgorithmOperation):
        (WebCore::CryptoAlgorithm::dispatchOperationInWorkQueue):
        (WebCore::CryptoAlgorithm::dispatchOperation): Deleted.
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.cpp:
        (WebCore::crossThreadCopyImportParams):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        (WebCore::CryptoAlgorithmECDH::importKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        (WebCore::CryptoAlgorithmHKDF::importKey):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h:
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h:
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h:
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h:

2018-07-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Interpolation between lengths with an "auto" value should be discrete
        https://bugs.webkit.org/show_bug.cgi?id=187721

        Reviewed by Dean Jackson.

        When interpolating between two Length values, if one is "auto", we should use the from-value
        from 0 and up to (but excluding) 0.5, and use the to-value from 0.5 to 1.

        This change caused a regression in the legacy animation engine since it would create a CSS
        transition even when the underlying and target values were non-interpolable. As such, the
        underlying value would be used until the transition's mid-point and the tests at 
        legacy-animation-engine/imported/blink/transitions/transition-not-interpolable.html and
        legacy-animation-engine/fast/animation/height-auto-transition-computed-value.html would fail
        expecting the target value to be used immediately. We now ensure that no transition is actually
        started if two values for a given property cannot be interpolated.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * platform/Length.cpp:
        (WebCore::blend):

2018-07-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an SPI hook to allow clients to yield document parsing and script execution
        https://bugs.webkit.org/show_bug.cgi?id=187682
        <rdar://problem/42207453>

        Reviewed by Ryosuke Niwa.

        Using a single web process for both the Reader page and original web page on watchOS has multiple benefits,
        including: (1) allowing the user to bail out of Reader and view the original web page without having to load it
        again, and (2) improving the bringup time of the Reader page, since subresources are already cached in process
        and we don't eat the additional cost of a web process launch if prewarming fails.

        However, this has some drawbacks as well, one of which is that main thread work being done on behalf of the
        original page may contend with work being done to load and render the Reader page. This is especially bad when
        the page is in the middle of executing heavy script after Safari has already detected that the Reader version of
        the page is available, but before it has finished loading the Reader page. The result is that script on the
        original page may block the first paint of the Reader page (on New York Times articles, this often leads to an
        apparent page load time of 25-35 seconds before the user sees anything besides a blank screen).

        To mitigate this, we introduce a way for injected bundle clients to yield parsing and async script execution on
        a document. This capability is surfaced in the form of an opaque token which clients may request from a
        WKDOMDocument. Construction of the token causes the document to begin yielding and defer execution of previously
        scheduled scripts, only if there were no active tokens on the document already. Similarly, destruction of all
        active tokens on the document causes it to stop yielding and resume execution of scripts if needed.

        Tests:  ParserYieldTokenTests.PreventDocumentLoadByTakingParserYieldToken
                ParserYieldTokenTests.TakeMultipleParserYieldTokens
                ParserYieldTokenTests.DeferredScriptExecutesBeforeDocumentLoadWhenTakingParserYieldToken
                ParserYieldTokenTests.AsyncScriptRunsWhenFetched

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

        If the parser yield token was taken before the document's parser was created, tell the parser's scheduler to
        start yielding immediately after creation.

        (WebCore::DocumentParserYieldToken::DocumentParserYieldToken):
        (WebCore::DocumentParserYieldToken::~DocumentParserYieldToken):
        * dom/Document.h:

        Introduce a parser yield count to Document; as long as this count is greater than 0, we consider the Document to
        have active yield tokens. When constructing or destroying a ParserYieldToken, we increment and decrement the
        parser yield count (respectively).

        (WebCore::Document::createParserYieldToken):
        (WebCore::Document::hasActiveParserYieldToken const):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::didBeginYieldingParser):
        (WebCore::DocumentParser::didEndYieldingParser):

        Hooks for Document to tell its parser that we've started or finished yielding. This updates a flag on the
        parser's scheduler which is consulted when we determine whether to yield before a pumping token or executing
        script.

        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::resume):
        (WebCore::ScriptRunner::notifyFinished):
        * dom/ScriptRunner.h:
        (WebCore::ScriptRunner::didBeginYieldingParser):
        (WebCore::ScriptRunner::didEndYieldingParser):

        Hooks for Document to tell its ScriptRunner that we've started or finished yielding. These wrap calls to suspend
        and resume.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didBeginYieldingParser):
        (WebCore::HTMLDocumentParser::didEndYieldingParser):

        Plumb to didBegin/didEnd calls to the HTMLParserScheduler.

        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeExecutingScript):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::shouldYieldBeforeToken):

        Consult a flag when determining whether to yield. This flag is set to true only while the document has an active
        parser yield token.

        (WebCore::HTMLParserScheduler::isScheduledForResume const):

        Consider the parser scheduler to be scheduled for resume if there are active tokens. Without this change, we
        incorrectly consider the document to be finished loading when we have yield tokens, since it appears that the
        parser is no longer scheduled to pump its tokenizer.

        (WebCore::HTMLParserScheduler::didBeginYieldingParser):
        (WebCore::HTMLParserScheduler::didEndYieldingParser):

        When the Document begins yielding due to the documet having active tokens or ends yielding after the document
        loses all of its yield tokens, update a flag on the parser scheduler. After we finish yielding, additionally
        reschedule the parser if needed to ensure that we continue parsing the document; without this additional change
        to resume, we'll never get the document load or load events after relinquishing the yield token.

2018-07-17  Dirk Schulze  <krit@webkit.org>

        [clip-path] Implement support for margin-box as reference box and box shape
        https://bugs.webkit.org/show_bug.cgi?id=127984

        Reviewed by Simon Fraser.

        Compute the margin-box rectangle as needed for clip-path based on the actual
        computed values for the margin-top, *-left, *-bottom, *-right properties.

        Test: css3/masking/clip-path-margin-box.html

        * rendering/RenderBox.h:
        (WebCore::RenderBox::marginBoxRect const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):

2018-07-17  Javier Fernandez  <jfernandez@igalia.com>

        Delete content of a single cell table should not delete the whole table
        https://bugs.webkit.org/show_bug.cgi?id=173117

        Reviewed by Ryosuke Niwa.

        We should not extend selection looking for special elements if the
        delete operation has been triggered by a caret based selection.

        This change is based on a recent [1] resolution of the Editing TF,
        which acknowledges that behavior of single-cell tables must be the
        same that multi-cell tables and even if the last character is
        deleted, we should not delete the whole table structure.

        A different case would be when the user actively selects the whole
        content of a table; in this case, as we do in multi-cell tables,
        the structure of single-cell tables should be deleted together
        with the content.

        [1] https://github.com/w3c/editing/issues/163

        Tests: editing/deleting/backspace-delete-last-char-in-table.html
               editing/deleting/forward-delete-last-char-in-table.html
               editing/deleting/select-and-delete-last-char-in-table.html

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):

2018-07-16  Megan Gardner  <megan_gardner@apple.com>

        Correctly adjust scroll offsets when a page is zoomed
        https://bugs.webkit.org/show_bug.cgi?id=187673
        <rdar://problem/41712829>

        Reviewed by Wenson Hsieh.

        Will add test later.

        Make sure that distance is scaled by the pageScaleFactor, to 
        make sure that we scroll correctly when we are zoomed in.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::autoscrollAdjustmentFactorForScreenBoundaries):
        
2018-07-16  Simon Fraser  <simon.fraser@apple.com>

        Roll out r233873 and r233875 since they caused 8 new layout test crashes.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        (WebCore::dispatchAlgorithmOperation):
        (WebCore::CryptoAlgorithm::dispatchOperation):
        (WebCore::CryptoAlgorithm::dispatchOperationInWorkQueue): Deleted.
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        (WebCore::crossThreadCopyImportParams): Deleted.
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        (WebCore::CryptoAlgorithmECDH::importKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        (WebCore::CryptoAlgorithmHKDF::importKey):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h:
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h:
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h:
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h:

2018-07-16  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in ~TimerBase is getting hit in WK1 apps which uses JSC API directly
        https://bugs.webkit.org/show_bug.cgi?id=187713
        <rdar://problem/41759548>

        Reviewed by Simon Fraser.

        Turn this into a debug assertion in WebKit1 on iOS since JSC API doesn't grab the web thread lock,
        which means that Timer can get destroyed without the web thread lock in the main thread.

        * platform/Timer.cpp:
        (WebCore::TimerBase::~TimerBase):
        (WebCore::TimerBase::setNextFireTime):

2018-07-16  Simon Fraser  <simon.fraser@apple.com>

        Add color filter for transforming colors in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=187717
        rdar://problem/41146650

        Reviewed by Dean Jackson.
        
        Add a new filter function for use in -apple-color-filter for transforming colors
        when in Dark Mode. The filter is called apple-invert-lightness(), and takes no parameters.
        It's based on a lightness invert in HSL space, with some adjustments to improve the contrast
        of some colors on dark backgrounds, so does a much better job that using invert() with hue-rotate().

        Test: css3/color-filters/color-filter-apple-invert-lightness.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::filterOperationForType):
        (WebCore::StyleResolver::createFilterOperations):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeFilterImage):
        (WebCore::CSSPropertyParserHelpers::isPixelFilterFunction):
        (WebCore::CSSPropertyParserHelpers::isColorFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilter):
        (WebCore::CSSPropertyParserHelpers::isValidPrimitiveFilterFunction): Deleted.
        * css/parser/CSSPropertyParserHelpers.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * platform/graphics/Color.cpp:
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::sRGBToLinearComponents):
        (WebCore::linearToSRGBComponents):
        (WebCore::sRGBToLinearColorComponentForLuminance):
        (WebCore::luminance):
        (WebCore::sRGBToHSL):
        (WebCore::calcHue):
        (WebCore::HSLToSRGB):
        (WebCore::ColorMatrix::ColorMatrix):
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/ca/cocoa/PlatformCAFiltersCocoa.mm:
        (PlatformCAFilters::filterValueForOperation):
        (PlatformCAFilters::colorMatrixValueForFilter):
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::InvertLightnessFilterOperation::operator== const):
        (WebCore::InvertLightnessFilterOperation::blend):
        (WebCore::InvertLightnessFilterOperation::transformColor const):
        (WebCore::operator<<):
        * platform/graphics/filters/FilterOperation.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::build):

2018-07-16  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, build fix for r233873.

        * crypto/SubtleCrypto.cpp:
        (WebCore::crossThreadCopyImportParams):

2018-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Crypto operations should copy their parameters before hoping to another thread
        https://bugs.webkit.org/show_bug.cgi?id=187501
        <rdar://problem/41438160>

        Reviewed by Youenn Fablet.

        This patch aims at making all captured variables in all crypto lambdas that need to be passed
        to a worker thread thread safe, which includes:
        1) changing ref counted objects to thread safe ref counted object.
        2) adding isolatedCopy methods to non ref counted classes, so they can be called by CrossThreadCopy().

        In addition to above changes, this patch also does the following things:
        1) change the name CryptoAlgorithm::dispatchOperation => CryptoAlgorithm::dispatchOperationInWorkQueue
        to make it clear that lambdas will be passed to a secondary thread.
        2) make CryptoAlgorithmParameters as const parameters for all methods.

        Tests: crypto/subtle/aes-gcm-import-key-unwrap-ec-raw-key.html
               http/wpt/crypto/aes-cbc-crash.any.html
               http/wpt/crypto/aes-cbc-crash.any.worker.html
               http/wpt/crypto/aes-ctr-crash.any.html
               http/wpt/crypto/aes-ctr-crash.any.worker.html
               http/wpt/crypto/aes-gcm-crash.any.html
               http/wpt/crypto/aes-gcm-crash.any.worker.html
               http/wpt/crypto/derive-hmac-key-crash.any.html
               http/wpt/crypto/derive-hmac-key-crash.any.worker.html
               http/wpt/crypto/ecdsa-crash.any.html
               http/wpt/crypto/ecdsa-crash.any.worker.html
               http/wpt/crypto/hkdf-crash.any.html
               http/wpt/crypto/hkdf-crash.any.worker.html
               http/wpt/crypto/pbkdf2-crash.any.html
               http/wpt/crypto/pbkdf2-crash.any.worker.html
               http/wpt/crypto/rsa-oaep-crash.any.html
               http/wpt/crypto/rsa-oaep-crash.any.worker.html
               http/wpt/crypto/rsa-pss-crash.any.html
               http/wpt/crypto/rsa-pss-crash.any.worker.html
               http/wpt/crypto/unwrap-ec-key-crash.any.html
               http/wpt/crypto/unwrap-ec-key-crash.any.worker.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.worker.html

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        (WebCore::dispatchAlgorithmOperation):
        (WebCore::CryptoAlgorithm::dispatchOperationInWorkQueue):
        (WebCore::CryptoAlgorithm::dispatchOperation): Deleted.
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.cpp:
        (WebCore::crossThreadCopyImportParams):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        (WebCore::CryptoAlgorithmECDH::importKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        (WebCore::CryptoAlgorithmHKDF::importKey):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h:
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h:
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h:
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h:

2018-07-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        [iOS] When bringing MobileSafari to the foreground, images, which are pending decoding, won't be drawn into the flush immediate transaction
        https://bugs.webkit.org/show_bug.cgi?id=187375

        Reviewed by Simon Fraser.

        An immediate-paint transaction should force all the images which are pending
        decoding to be repainted.

        To do that, FrameView::paintControlTints() will be re-factored to a new
        generic function such that it takes PaintInvalidationReasons. The new function
        which is named 'traverseForPaintInvalidation' will traverse the render tree
        for a specific PaintInvalidationReasons.

        invalidateImagesWithAsyncDecodes() will stop the asynchronous decoding for
        the underlying image and repaint all the clients which are waiting for the
        decoding to finish.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::isClientWaitingForAsyncDecoding const):
        (WebCore::CachedImage::addClientWaitingForAsyncDecoding):
        (WebCore::CachedImage::removeAllClientsWaitingForAsyncDecoding):
        (WebCore::CachedImage::allClientsRemoved):
        (WebCore::CachedImage::clear):
        (WebCore::CachedImage::createImage):
        (WebCore::CachedImage::imageFrameAvailable):
        (WebCore::CachedImage::addPendingImageDrawingClient): Deleted.
        * loader/cache/CachedImage.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintScrollCorner):
        (WebCore::FrameView::updateControlTints):
        (WebCore::FrameView::traverseForPaintInvalidation):
        (WebCore::FrameView::adjustPageHeightDeprecated):
        (WebCore::FrameView::paintControlTints): Deleted.
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::paint):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::performingPaintInvalidation const):
        (WebCore::GraphicsContext::invalidatingControlTints const):
        (WebCore::GraphicsContext::invalidatingImagesWithAsyncDecodes const):
        (WebCore::GraphicsContext::updatingControlTints const): Deleted.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::paint):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * testing/Internals.cpp:
        (WebCore::Internals::invalidateControlTints):
        (WebCore::Internals::paintControlTints): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed attempt to fix the build.

        * rendering/RenderThemeMac.mm:

2018-07-11  Dean Jackson  <dino@apple.com>

        Allow removal of white backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=187574
        <rdar://problem/41146792>

        Reviewed by Simon Fraser.

        Add a drawing mode that turns white backgrounds into transparent
        regions, such that a hosting app can see through to its window.

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

        * page/Settings.yaml: New Setting.

        * rendering/InlineFlowBox.cpp: Draw with a destination out blend mode
        if the background is white and we are punching out backgrounds, which means
        that it will erase the destination.
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paintBackgroundsBehindCell): Ditto.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended): Save and restore
        the composition mode if necessary.

2018-07-16  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r233867.

        caused build failures on High Sierra, Sierra and iOS

        Reverted changeset:

        "[WebCrypto] Crypto operations should copy their parameters
        before hoping to another thread"
        https://bugs.webkit.org/show_bug.cgi?id=187501
        https://trac.webkit.org/changeset/233867

2018-07-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebCrypto] Crypto operations should copy their parameters before hoping to another thread
        https://bugs.webkit.org/show_bug.cgi?id=187501
        <rdar://problem/41438160>

        Reviewed by Youenn Fablet.

        This patch aims at making all captured variables in all crypto lambdas that need to be passed
        to a worker thread thread safe, which includes:
        1) changing ref counted objects to thread safe ref counted object.
        2) adding isolatedCopy methods to non ref counted classes, so they can be called by CrossThreadCopy().

        In addition to above changes, this patch also does the following things:
        1) change the name CryptoAlgorithm::dispatchOperation => CryptoAlgorithm::dispatchOperationInWorkQueue
        to make it clear that lambdas will be passed to a secondary thread.
        2) make CryptoAlgorithmParameters as const parameters for all methods.

        Tests: crypto/subtle/aes-gcm-import-key-unwrap-ec-raw-key.html
               http/wpt/crypto/aes-cbc-crash.any.html
               http/wpt/crypto/aes-cbc-crash.any.worker.html
               http/wpt/crypto/aes-ctr-crash.any.html
               http/wpt/crypto/aes-ctr-crash.any.worker.html
               http/wpt/crypto/aes-gcm-crash.any.html
               http/wpt/crypto/aes-gcm-crash.any.worker.html
               http/wpt/crypto/derive-hmac-key-crash.any.html
               http/wpt/crypto/derive-hmac-key-crash.any.worker.html
               http/wpt/crypto/ecdsa-crash.any.html
               http/wpt/crypto/ecdsa-crash.any.worker.html
               http/wpt/crypto/hkdf-crash.any.html
               http/wpt/crypto/hkdf-crash.any.worker.html
               http/wpt/crypto/pbkdf2-crash.any.html
               http/wpt/crypto/pbkdf2-crash.any.worker.html
               http/wpt/crypto/rsa-oaep-crash.any.html
               http/wpt/crypto/rsa-oaep-crash.any.worker.html
               http/wpt/crypto/rsa-pss-crash.any.html
               http/wpt/crypto/rsa-pss-crash.any.worker.html
               http/wpt/crypto/unwrap-ec-key-crash.any.html
               http/wpt/crypto/unwrap-ec-key-crash.any.worker.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.html
               http/wpt/crypto/unwrap-rsa-key-crash.any.worker.html

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        (WebCore::dispatchAlgorithmOperation):
        (WebCore::CryptoAlgorithm::dispatchOperationInWorkQueue):
        (WebCore::CryptoAlgorithm::dispatchOperation): Deleted.
        * crypto/CryptoAlgorithm.h:
        * crypto/SubtleCrypto.cpp:
        (WebCore::crossThreadCopyImportParams):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_CFB.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::encrypt):
        (WebCore::CryptoAlgorithmAES_CFB::decrypt):
        (WebCore::CryptoAlgorithmAES_CFB::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CFB.h:
        * crypto/algorithms/CryptoAlgorithmAES_CTR.cpp:
        (WebCore::parametersAreValid):
        (WebCore::CryptoAlgorithmAES_CTR::encrypt):
        (WebCore::CryptoAlgorithmAES_CTR::decrypt):
        (WebCore::CryptoAlgorithmAES_CTR::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CTR.h:
        * crypto/algorithms/CryptoAlgorithmAES_GCM.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::encrypt):
        (WebCore::CryptoAlgorithmAES_GCM::decrypt):
        (WebCore::CryptoAlgorithmAES_GCM::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_GCM.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        (WebCore::CryptoAlgorithmAES_KW::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        (WebCore::CryptoAlgorithmECDH::importKey):
        * crypto/algorithms/CryptoAlgorithmECDH.h:
        * crypto/algorithms/CryptoAlgorithmECDSA.cpp:
        (WebCore::CryptoAlgorithmECDSA::sign):
        (WebCore::CryptoAlgorithmECDSA::verify):
        (WebCore::CryptoAlgorithmECDSA::importKey):
        * crypto/algorithms/CryptoAlgorithmECDSA.h:
        * crypto/algorithms/CryptoAlgorithmHKDF.cpp:
        (WebCore::CryptoAlgorithmHKDF::deriveBits):
        (WebCore::CryptoAlgorithmHKDF::importKey):
        * crypto/algorithms/CryptoAlgorithmHKDF.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmPBKDF2.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::deriveBits):
        (WebCore::CryptoAlgorithmPBKDF2::importKey):
        * crypto/algorithms/CryptoAlgorithmPBKDF2.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::encrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::decrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::sign):
        (WebCore::CryptoAlgorithmRSA_PSS::verify):
        (WebCore::CryptoAlgorithmRSA_PSS::importKey):
        * crypto/algorithms/CryptoAlgorithmRSA_PSS.h:
        * crypto/gcrypt/CryptoAlgorithmAES_CBCGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CFBGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_CTRGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmAES_GCMGCrypt.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmHKDFGCrypt.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmPBKDF2GCrypt.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CFBMac.cpp:
        (WebCore::CryptoAlgorithmAES_CFB::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CFB::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_CTRMac.cpp:
        (WebCore::CryptoAlgorithmAES_CTR::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CTR::platformDecrypt):
        * crypto/mac/CryptoAlgorithmAES_GCMMac.cpp:
        (WebCore::CryptoAlgorithmAES_GCM::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_GCM::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHKDFMac.cpp:
        (WebCore::CryptoAlgorithmHKDF::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmPBKDF2Mac.cpp:
        (WebCore::CryptoAlgorithmPBKDF2::platformDeriveBits):
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp:
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRSA_PSSMac.cpp:
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformVerify):
        * crypto/parameters/CryptoAlgorithmAesCbcCfbParams.h:
        * crypto/parameters/CryptoAlgorithmAesCtrParams.h:
        * crypto/parameters/CryptoAlgorithmAesGcmParams.h:
        * crypto/parameters/CryptoAlgorithmEcKeyParams.h:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaPssParams.h:

2018-07-16  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist][macOS] Add suggestions UI for TextFieldInputTypes
        https://bugs.webkit.org/show_bug.cgi?id=186531

        Reviewed by Tim Horton.

        Tests: fast/forms/datalist/datalist-show-hide.html
               fast/forms/datalist/datalist-textinput-keydown.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEvent):
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton): The suggestions view takes precedence when handling arrow key events.

2018-07-16  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen requires active document.
        https://bugs.webkit.org/show_bug.cgi?id=186226
        rdar://problem/36187413

        Reviewed by Jer Noble.

        Test: media/no-fullscreen-when-hidden.html

        This change guarantees the document to be visible for both element fullscreen and video fullscreen.

        User gesture is not enough to guarantee that the document is visible when fullscreen is initiated
        because JavaScript can spin wait before initiating fullscreen. During that spin the page or window might
        be hidden.

        Document::hidden() can't be relied upon because it won't update while JavaScript spins.

        This change adds a sync call to the UI process to get the current UI visibility state.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::enterFullscreen):
        * page/ChromeClient.h:

2018-07-16  Alex Christensen  <achristensen@webkit.org>

        Reduce size of NetworkLoadMetrics and therefore ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=187671

        Reviewed by Darin Adler.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::toProtocol):
        (WebCore::InspectorNetworkAgent::buildObjectForMetrics):
        * platform/network/NetworkLoadMetrics.h:
        (WebCore::NetworkLoadMetrics::isolatedCopy const):
        (WebCore::NetworkLoadMetrics::reset):
        (WebCore::NetworkLoadMetrics::clearNonTimingData):

2018-07-16  Chris Dumez  <cdumez@apple.com>

        Make sure LibWebRTCMediaEndpoint is always destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=187702

        Reviewed by Youenn Fablet.

        Make sure LibWebRTCMediaEndpoint is always constructed and destructed on the main thread since
        it has a Timer data member and it would not be safe otherwise. LibWebRTCMediaEndpoint is
        ThreadSafeRefCounted and frequently passed to other threads.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:

2018-07-16  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: closeAndDeleteDatabasesForOrigins should remove all databases for those origins
        https://bugs.webkit.org/show_bug.cgi?id=187631
        <rdar://problem/42164227>

        Reviewed by Brady Eidson.

        When asked to delete database for an origin, we deleted the databases whose mainFrameOrigin 
        is that origin. Given that the origin may create IndexedDB from subframes, we should delete 
        databases whose openingOrigin is that origin too.

        Covered by modified API test: WebKit.WebsiteDataStoreCustomPaths. 

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

2018-07-16  Simon Fraser  <simon.fraser@apple.com>

        Shrink some font-related classes and enums
        https://bugs.webkit.org/show_bug.cgi?id=187686

        Reviewed by Myles Maxfield.
        
        Use enum class for enums in TextFlags.h and make them one byte big.

        Re-order members of Font to shrink it from 360 to 328 bytes.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator FontSmoothingMode const):
        (WebCore::CSSPrimitiveValue::operator FontSmallCaps const):
        (WebCore::CSSPrimitiveValue::operator TextRenderingMode const):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::verticalRightOrientationFont const):
        * platform/graphics/Font.h:
        * platform/graphics/FontCascade.cpp:
        (WebCore::offsetToMiddleOfGlyph):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::advancedTextRenderingMode const):
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::FontCascadeFonts::glyphDataForSystemFallback):
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        (WebCore::glyphPageFromFontRanges):
        * platform/graphics/FontDescription.cpp:
        (WebCore::FontCascadeDescription::FontCascadeDescription):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::setTextRenderingMode):
        (WebCore::FontDescription::setOrientation):
        (WebCore::FontDescription::setWidthVariant):
        (WebCore::FontCascadeDescription::setFontSmoothing):
        (WebCore::FontCascadeDescription::initialSmallCaps):
        (WebCore::FontCascadeDescription::initialFontSmoothing):
        (WebCore::FontCascadeDescription::initialTextRenderingMode):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::isForTextCombine const):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::preparePlatformFont):
        * platform/graphics/cocoa/FontCascadeCocoa.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        (WebCore::showGlyphsWithAdvances):
        (WebCore::FontCascade::drawGlyphs):
        (WebCore::FontCascade::fontForCombiningCharacterSequence const):
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformInit):
        (WebCore::Font::platformBoundsForGlyph const):
        (WebCore::Font::platformWidthForGlyph const):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::hash const):
        (WebCore::mapFontWidthVariantToCTFeatureSelector):
        (WebCore::FontPlatformData::ctFont const):
        (WebCore::FontPlatformData::description const):
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::buildScaledFont):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit):
        (WebCore::Font::platformWidthForGlyph const):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::fontFeatures):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes const):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/win/FontCascadeDirect2D.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/win/GlyphPageTreeNodeDirect2D.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/win/SimpleFontDataDirect2D.cpp:
        (WebCore::Font::platformInit):
        (WebCore::Font::platformBoundsForGlyph const):
        (WebCore::Font::platformWidthForGlyph const):
        * platform/text/TextFlags.h:
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineTextIfNeeded):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextWithShadows):
        * rendering/TextPainter.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::fontAndGlyphOrientation):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):

2018-07-16  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Add support for connect/disconnect and mount/unmount device events
        https://bugs.webkit.org/show_bug.cgi?id=187343

        Reviewed by Žan Doberšek.

        WebVR specs define a series of events as part of the Window Interface Extension. We're
        adding support for the connect/disconnect and mount/unmount events both at the module level
        and the platform level using OpenVR.

        In order to do that we need to keep lists of VRPlatformDisplays at platform level and
        VRDisplays at bindings level. We then update those lists accordingly to detect potential
        additions/removals, and emit the corresponding signals. A new client interface
        VRPlatformDisplayClient was also defined so that VRPlatformDisplay implementations could
        notify their clients (typically a VRDisplay).

        Last but not least, NavigatorWebVR was updated so it supplements Navigator instead of
        supplementing Page.

        * Modules/webvr/NavigatorWebVR.cpp: Supplement Navigator not Page.
        (WebCore::NavigatorWebVR::getVRDisplays): Keep a list of VRDisplays and update them
        conveniently, also emitting the required events under certain conditions (like device
        disconnection).
        (WebCore::NavigatorWebVR::supplementName): New method.
        (WebCore::NavigatorWebVR::from): Ditto.
        * Modules/webvr/NavigatorWebVR.h: Supplement Navigator not Page.
        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::create): Moved suspendIfNeeded() to constructor.
        (WebCore::VRDisplay::VRDisplay): Set itself as VRPlatformDisplay client.
        (WebCore::VRDisplay::~VRDisplay): Unset as  VRPlatformDisplay client.
        (WebCore::VRDisplay::VRPlatformDisplayConnected): Dispatch event on DOM window.
        (WebCore::VRDisplay::VRPlatformDisplayDisconnected): Ditto.
        (WebCore::VRDisplay::VRPlatformDisplayMounted): Ditto.
        (WebCore::VRDisplay::VRPlatformDisplayUnmounted): Ditto.
        * Modules/webvr/VRDisplay.h: Extend from VRPlatformDisplayClient.
        (WebCore::VRDisplay::document):
        * Modules/webvr/VRDisplayEvent.cpp: Updated Copyright.
        * Modules/webvr/VRDisplayEvent.h: Ditto.
        * Sources.txt: Added the two new files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * platform/vr/VRManager.cpp:
        (WebCore::VRManager::getVRDisplays): Keep a list of VRPlatformDisplays and update them conveniently,
        also emitting the required events under certain conditions (like device disconnection).
        * platform/vr/VRManager.h:
        * platform/vr/VRPlatformDisplay.cpp: New file with common implementations for VRPlatformDisplays.
        (WebCore::VRPlatformDisplay::setClient):
        (WebCore::VRPlatformDisplay::notifyVRPlatformDisplayEvent):
        * platform/vr/VRPlatformDisplay.h: Added a generic method to notify about different
        events. Added the client pointer.
        * platform/vr/VRPlatformDisplayClient.h: New file. VRPlatformDisplay implementations will
        call the client methods in the event of some circumstances happening.
        (WebCore::VRPlatformDisplayClient::VRPlatformDisplayConnected):
        (WebCore::VRPlatformDisplayClient::VRPlatformDisplayDisconnected):
        (WebCore::VRPlatformDisplayClient::VRPlatformDisplayMounted):
        (WebCore::VRPlatformDisplayClient::VRPlatformDisplayUnmounted):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::updateDisplayInfo): Poll the device for new events to
        detect connection/disconnections or device activations/deactivations (HMD
        mounted/unmounted).
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h:

2018-07-16  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Nicosia::PlatformLayer, Nicosia::CompositionLayer classes
        https://bugs.webkit.org/show_bug.cgi?id=187693

        Reviewed by Carlos Garcia Campos.

        Add the Nicosia::PlatformLayer class. This will be the base platform
        layer class from which different derivatives will be created, addressing
        different use cases. The generic PlatformLayer type alias will point to
        this class in the future.

        First class deriving from Nicosia::PlatformLayer is
        Nicosia::CompositionLayer, purpose of which will be to mirror the state
        that's stored in the platform-specific GraphicsLayer derivative. It will
        also allow making thread-safe updates to that state.

        CoordinatedGraphicsLayer implementation now spawns a CompositionLayer
        object and tracks state changes in a separate
        CompositionLayer::LayerState::Delta object. During flushing, the changed
        state is applied to the layer's pending state before the delta is nulled
        out. The updated state isn't used anywhere yet, but future changes will
        implement committing this state into the rendering pipeline.

        There's bits of state not yet being managed by CompositionLayer, e.g.
        debug visuals, filters and animations. These will be addressed later.

        The m_solidColor member variable is added to CoordinatedGraphicsLayer in
        order to properly store the solid color value. Normally this would be
        contained by the parent GraphicsLayer class, but no such member variable
        exists there.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaPlatformLayer.cpp: Added.
        (Nicosia::PlatformLayer::PlatformLayer):
        (Nicosia::CompositionLayer::CompositionLayer):
        * platform/graphics/nicosia/NicosiaPlatformLayer.h: Added.
        (Nicosia::PlatformLayer::isCompositionLayer const):
        (Nicosia::PlatformLayer::id const):
        (Nicosia::CompositionLayer::create):
        (Nicosia::CompositionLayer::LayerState::Flags::Flags):
        (Nicosia::CompositionLayer::updateState):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::setPosition):
        (WebCore::CoordinatedGraphicsLayer::setAnchorPoint):
        (WebCore::CoordinatedGraphicsLayer::setSize):
        (WebCore::CoordinatedGraphicsLayer::setTransform):
        (WebCore::CoordinatedGraphicsLayer::setChildrenTransform):
        (WebCore::CoordinatedGraphicsLayer::setPreserves3D):
        (WebCore::CoordinatedGraphicsLayer::setMasksToBounds):
        (WebCore::CoordinatedGraphicsLayer::setDrawsContent):
        (WebCore::CoordinatedGraphicsLayer::setContentsVisible):
        (WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
        (WebCore::CoordinatedGraphicsLayer::setBackfaceVisibility):
        (WebCore::CoordinatedGraphicsLayer::setOpacity):
        (WebCore::CoordinatedGraphicsLayer::setContentsRect):
        (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
        (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
        (WebCore::CoordinatedGraphicsLayer::setContentsToSolidColor):
        (WebCore::CoordinatedGraphicsLayer::setMaskLayer):
        (WebCore::CoordinatedGraphicsLayer::setReplicatedByLayer):
        (WebCore::CoordinatedGraphicsLayer::syncChildren):
        (WebCore::CoordinatedGraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

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

        [iOS apps on macOS] Playing embedded Twitter videos in the News app crashes the web process
        https://bugs.webkit.org/show_bug.cgi?id=187690
        <rdar://problem/41869703>

        Reviewed by Tim Horton.

        Work around unexpected behavior when soft-linking AVFoundation. After using `dlopen_preflight` to check for the
        existence of a library prior to loading the library using `dlopen`, `dlsym` subsequently returns null for some
        symbols that would otherwise be available. This causes us to RELEASE_ASSERT later down the road when we try to
        load AVAudioSessionModeDefault in AudioSessionIOS.mm.

        To fix this for now, simply check for the library directly instead of using the more lightweight preflight
        check. See clone: <rdar://problem/42224780> for more detail.

        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::isAvailable const):

2018-07-14  Simon Fraser  <simon.fraser@apple.com>

        Shrink StyleFillData, StyleStrokeData and StyleMiscData
        https://bugs.webkit.org/show_bug.cgi?id=187681

        Reviewed by Anders Carlsson.

        Shrink these data structures by making more enum classes one byte in size, and
        re-ordering. StyleFillData goes from 56 to 48, StyleStrokeData from 80 to 72,
        StyleMiscData from 40 to 32 bytes.

        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleFillData::StyleFillData):
        (WebCore::StyleFillData::operator== const):
        (WebCore::StyleStrokeData::StyleStrokeData):
        (WebCore::StyleStrokeData::operator== const):
        (WebCore::StyleStopData::operator== const):
        (WebCore::StyleMiscData::StyleMiscData):
        * rendering/style/SVGRenderStyleDefs.h:

2018-07-14  Simon Fraser  <simon.fraser@apple.com>

        Shrink CachedResource and subclasses
        https://bugs.webkit.org/show_bug.cgi?id=187546

        Reviewed by Daniel Bates.

        Shrink CachedResource down from 1384 to 1336 bytes, CachedImage from 1480 to
        1424 bytes, and CachedFont a little.
        
        This saves about 23KB on cnn.com.

        * loader/ResourceLoaderOptions.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        * loader/cache/CachedResource.h:
        * platform/network/CacheValidation.h:
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * platform/network/NetworkLoadMetrics.h:
        * platform/network/ParsedContentRange.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:

2018-07-14  Simon Fraser  <simon.fraser@apple.com>

        Shrink some style-related classes and enums
        https://bugs.webkit.org/show_bug.cgi?id=187680

        Reviewed by Antti Koivisto.
        
        Make all the enum classes in RenderStyleConstants be one byte big (all have less
        than 256 values).
        
        Shrink DocumentRuleSet from 384 to 368 bytes by re-ordering, which also helps shrink
        StyleResolver from 1024 to 952 bytes.
        
        Shrink BorderValue by re-ordering (now that the layout of Color has changed) which
        shrinks BorderData from 168 to 136 bytes.
        
        Convert a couple of other enums to enum class so that they can have explicit size.

        * css/DocumentRuleSets.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::documentElementUserAgentStyle const):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium const):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::State::State):
        (WebCore::StyleResolver::styleForElement):
        (WebCore::StyleResolver::cascadedPropertiesForRollback):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::cascadeLevelForIndex):
        * css/StyleResolver.h:
        * rendering/style/BorderValue.h:
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyleConstants.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::styleForElement):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::overrideComputedStyle):

2018-07-14  Kocsen Chung  <kocsen_chung@apple.com>

        Ensure WebKit stack is ad-hoc signed
        https://bugs.webkit.org/show_bug.cgi?id=187667

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2018-07-14  Dirk Schulze  <krit@webkit.org>

        [css-masking] Fully support -webkit-clip-path on SVG elements
        https://bugs.webkit.org/show_bug.cgi?id=185829

        Reviewed by Simon Fraser.

        -webkit-clip-path contributes to SVG elements with boxes, shapes and now with
        element references to <clipPath> elements as well. Make sure that all types
        contribute to hit-testing of the SVG element as well as they should.

        Tests: svg/clip-path/webkit-clip-path-after-expected.svg
               svg/clip-path/webkit-clip-path-after.svg
               svg/clip-path/webkit-clip-path-before-expected.svg
               svg/clip-path/webkit-clip-path-before.svg
               svg/dynamic-updates/SVGClipPath-prefixed-influences-hitTesting.html
               svg/dynamic-updates/SVGClipPath-prefixed-path-influences-hitTesting.html
               svg/dynamic-updates/SVGClipPathElement-prefixed-css-transform-influences-hitTesting.html
               svg/dynamic-updates/SVGClipPathElement-prefixed-transform-influences-hitTesting.html

        * rendering/svg/SVGRenderSupport.cpp: Share code as much as possible.
        (WebCore::clipPathReferenceBox):
        (WebCore::isPointInCSSClippingArea): Take -webkit-clip-path into account.
        (WebCore::SVGRenderSupport::clipContextToCSSClippingArea):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderingContext.cpp: Clip to -webkit-clip-path boxes, shapes and references.
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResources.cpp: Add -webkit-clip-path references to cached resources. Mimic SVG clip-path.
        (WebCore::SVGResources::buildCachedResources):

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

        Avoid fetching visitedDependentColor() so many times in editing code
        https://bugs.webkit.org/show_bug.cgi?id=187676

        Reviewed by Zalan Bujtas.
        
        editingAttributedStringFromRange called style.visitedDependentColor() twice for each property,
        and fontAttributesForSelectionStart() called it two or three times. Use a local Color variable
        to avoid so many calls. Also replace a call to alpha() with isVisible() which makes the usage more clear.

        No behavior change.

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::fontAttributesForSelectionStart const):
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange):

2018-07-13  Youenn Fablet  <youenn@apple.com>

        Support connecting a MediaStreamAudioDestinationNode to RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=187627
        <rdar://problem/35334400>

        Reviewed by Jer Noble.

        When MediaStreamAudioSource is called to read new audio samples,
        convert these samples to a WebAudioBufferList and call RealtimeMediaSource::audioSamplesAvailable.
        This makes its observers to get the audio data.

        Test: webrtc/peer-connection-createMediaStreamDestination.html

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create): Minor refactoring.
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::createMediaStream):
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        (WebCore::MediaStreamAudioDestinationNode::process):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::MediaStreamAudioSource):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/MediaStreamAudioSource.h:
        * Modules/webaudio/MediaStreamAudioSourceCocoa.cpp: Added.
        (WebCore::streamDescription):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/audio/AudioDestinationConsumer.h: Removed.
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::create):
        * platform/mediastream/MediaStreamPrivate.h:

2018-07-13  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Enable WebGL when Accelerated Compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=187664

        Reviewed by Fujii Hironori.

        AC was disabled for WinCairo in r233725 but it can still run WebGL without AC.

        * html/HTMLCanvasElement.cpp:

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

        Crash under ApplicationCacheGroup::didFailLoadingEntry()
        https://bugs.webkit.org/show_bug.cgi?id=187661
        <rdar://problem/42179755>

        Reviewed by Youenn Fablet.

        If ApplicationCacheResourceLoader::create() fails synchronously with
        ApplicationCacheResourceLoader::Error::CannotCreateResource error, then
        m_entryLoader will be null when didFailLoadingEntry() is called. However,
        didFailLoadingEntry() fails to null check m_entryLoader before using it.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFailLoadingEntry):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        * loader/appcache/ApplicationCacheGroup.h:

2018-07-13  Alex Christensen  <achristensen@webkit.org>

        Add release assertion to check thread in TimerBase::setNextFireTime
        https://bugs.webkit.org/show_bug.cgi?id=187666

        Reviewed by Ryosuke Niwa.

        This should give us insight into what is causing <rdar://problem/33352721>
        
        * platform/Timer.cpp:
        (WebCore::TimerBase::setNextFireTime):

2018-07-13  Ryosuke Niwa  <rniwa@webkit.org>

        [iOS] [WK1] Crash inside IOSurfacePool::platformGarbageCollectNow() in WebThread
        https://bugs.webkit.org/show_bug.cgi?id=187635
        <rdar://problem/34297065>

        Reviewed by Simon Fraser.

        r167717 added code to trigger a CA commit in the web process via platformGarbageCollectNow() in order to free IOSurface-related memory.
        However, that code is also running in the web thread in apps using WebKit1, causing unwanted UIView layout on the web thread.

        Fix by not triggering this CA commit if it's called on the web thread.

        * platform/graphics/cocoa/IOSurfacePoolCocoa.mm:
        (WebCore::IOSurfacePool::platformGarbageCollectNow):

2018-07-13  Antoine Quint  <graouts@apple.com>

        Dark Mode: document markers are difficult to see
        https://bugs.webkit.org/show_bug.cgi?id=187632
        <rdar://problem/41099719>

        Reviewed by Simon Fraser.

        We update the way we draw the document markers for macOS and use more constrasting colors in dark mode.
        Paving the way for future improvements, we move the drawLineForDocumentMarker() method from GraphicsContext
        to RenderTheme and implement a first version in RenderThemeMac. The circles used for the underline are now
        drawn directly with Core Graphics and we no longer use an image resource. To allow both GraphicsContext
        and RenderTheme to have different versions of the drawLineForDocumentMarker() method, the DocumentMarkerLineStyle
        enum is now an "enum class".

        No new test due to webkit.org/b/105616, webkit.org/b/187655 was raised to track the creation of new tests
        when it becomes possible again.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawLineForDocumentMarker):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::drawLineForDocumentMarker):
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/displaylists/DisplayListItems.h:
        (WebCore::DisplayList::DrawLineForDocumentMarker::create):
        (WebCore::DisplayList::DrawLineForDocumentMarker::DrawLineForDocumentMarker):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawLineForDocumentMarker):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::drawLineForDocumentMarker):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarker): Call drawLineForDocumentMarker() on the RenderTheme on
        macOS and on GraphicsContext in all other cases.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::drawLineForDocumentMarker):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::colorForStyle): Provide different colors for light and dark modes.
        (WebCore::RenderThemeMac::drawLineForDocumentMarker): A new macOS-specific version of drawLineForDocumentMarker()
        where we paint circles using Core Graphics directly.

2018-07-13  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Use smart pointers for GstByteReader
        https://bugs.webkit.org/show_bug.cgi?id=187638

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/GUniquePtrGStreamer.h: Add
        specialisation for GstByteReader.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        Use the new smart pointer class to avoid needing to remember where
        to call gst_byte_reader_free.
        (webKitMediaClearKeyDecryptorDecrypt):

2018-07-13  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move HTTP Setup logic from CurlRequest to CurlHandle for reuse.
        https://bugs.webkit.org/show_bug.cgi?id=187427

        Reviewed by Fujii Hironori.

        CurlContext will be used by Secure WebSocket client, but HTTP setup code is
        in CurlRequest, which is only for regular HTTP/HTTPS transaction. This patch
        allows wss client to setup CurlHandle for HTTPS communication, such as TLS,
        proxy or authentication.

        No new tests because there's no behavior change.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::CurlHandle):
        (WebCore::CurlHandle::enableSSLForHost):
        (WebCore::CurlHandle::willSetupSslCtx):
        (WebCore::CurlHandle::willSetupSslCtxCallback):
        (WebCore::CurlHandle::sslErrors const):
        (WebCore::CurlHandle::setUrl):
        (WebCore::CurlHandle::enableHttp):
        (WebCore::CurlHandle::enableConnectionOnly):
        (WebCore::CurlHandle::certificateInfo const):
        (WebCore::CurlHandle::enableStdErrIfUsed):
        (WebCore::CurlHandle::initialize): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlHandle::url const):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::finalizeTransfer):
        (WebCore::CurlRequest::willSetupSslCtx): Deleted.
        (WebCore::CurlRequest::willSetupSslCtxCallback): Deleted.
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        (WebCore::CurlSSLVerifier::verify):
        * platform/network/curl/CurlSSLVerifier.h:

2018-07-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer][MSE] Add GstFlowCombiner to handle non-linked inactive branches
        https://bugs.webkit.org/show_bug.cgi?id=187636

        Reviewed by Carlos Garcia Campos.

        When we have more than one source buffer, only one will be
        rendered and the inactive branch will report linking errors that
        we have to deal with.

        * platform/graphics/gstreamer/GUniquePtrGStreamer.h: Added GstFlowCombiner.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webkitMediaSrcChain): Combine the flow in the flow combiner.
        (webkit_media_src_init): Initialize the flow combiner.
        (webKitMediaSrcLinkStreamToSrcPad): Add the proxypad to the
        combiner and set the chain function.
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:
        Declare the flow combiner.

2018-07-13  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Add GstBufferMapped abstraction
        https://bugs.webkit.org/show_bug.cgi?id=187600

        Reviewed by Xabier Rodriguez-Calvar.

        There is a similar abstraction called `mapGstBuffer` and friends,
        which have a slightly different use-case: wanting a buffer that is
        mapped for a longer lifetime without have to keep track of the map
        infos separately. They could be subsumed by this abstraction, but
        everytime they need to write to the buffer, they'd have to remap
        the memory blocks.

        This abstraction is more for one-short reads and writes saving the user
        from remembering to unmap the buffer and having to manage to
        auxiliary GstMapInfo structures.

        * platform/graphics/gstreamer/GStreamerCommon.h:
        (WebCore::GstMappedBuffer::GstMappedBuffer):
        (WebCore::GstMappedBuffer::~GstMappedBuffer):
        (WebCore::GstMappedBuffer::data):
        (WebCore::GstMappedBuffer::size const):
        (WebCore::GstMappedBuffer::operator bool const):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfSample):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorSetupCipher):
        (webKitMediaClearKeyDecryptorDecrypt):

2018-07-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Make it easier to hit the significant rendered text layout milestone on pages with main article elements
        https://bugs.webkit.org/show_bug.cgi?id=187578
        <rdar://problem/42104637>

        Reviewed by Ryosuke Niwa.

        Our current heuristics for triggering the significant rendered text layout milestone are very conservative, with
        the intention of avoiding false positives. In practice, we can relax some of these constraints when we've
        detected the presence of a main article element on the page. (e.g. in New York Times articles). See per-method
        changes below for more detail.

        Test: RenderingProgressTests.DidRenderSignificantAmountOfText

        * dom/Document.cpp:
        (WebCore::Document::registerArticleElement):
        (WebCore::Document::unregisterArticleElement):
        (WebCore::Document::updateMainArticleElementAfterLayout):

        As a post layout task, update the main article element by looping through the articles (up to a maximum limit of
        10) in search of an article element that is several times larger than the second largest article element.

        * dom/Document.h:

        Store a set containing the article elements in the document, as well as the current main article on the page.

        (WebCore::Document::hasMainArticleElement const):
        * html/Element.cpp:
        (WebCore::Element::insertedIntoAncestor):
        (WebCore::Element::removedFromAncestor):

        Keep track of the article elements that exist in the document whenever elements with the article tag are added
        to or removed from the document.

        * page/FrameView.cpp:

        Add new minimum thresholds for firing the significant rendered text milestone when there exists a main article.

        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):

        Take the main article element into consideration when determining whether to fire the significant text
        layout milestone.

2018-07-12  Daniel Bates  <dabates@apple.com>

        JavaScript URL gives incorrect result when frame is navigated
        https://bugs.webkit.org/show_bug.cgi?id=187203
        <rdar://problem/41438443>

        Reviewed by David Kilzer.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):

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

        Reduce size of WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=186820

        Reviewed by Yusuke Suzuki and Youenn Fablet.

        We were using 32 bits for the length of the port, which is always between 0 and 5 inclusive
        because port numbers are missing or between 0 and 65535.  Let's just use 3 bits here.
        We were using 32 bits for the length of the scheme, which is usually 3-5 characters and can be
        longer for some custom schemes, but I've never seen one more than 20 characters.  If we assume
        schemes are always less than 64MB, we can save 8 bytes per URL!

        No change in behavior, just less memory use!
        
        To restore the IPC encoding to how it was before r221165, I just encode the string and reparse it.

        * platform/URL.cpp:
        (WebCore::URL::invalidate):
        (WebCore::URL::lastPathComponent const):
        (WebCore::URL::port const):
        (WebCore::URL::protocolHostAndPort const):
        (WebCore::URL::path const):
        (WebCore::URL::removePort):
        (WebCore::URL::setPort):
        (WebCore::URL::setHostAndPort):
        (WebCore::URL::setPath):
        * platform/URL.h:
        (WebCore::URL::encode const):
        (WebCore::URL::decode):
        (WebCore::URL::hasPath const):
        (WebCore::URL::pathStart const):
        * platform/URLParser.cpp:
        (WebCore::URLParser::copyBaseWindowsDriveLetter):
        (WebCore::URLParser::urlLengthUntilPart):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::shouldPopPath):
        (WebCore::URLParser::popPath):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parsePort):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::URLParser::allValuesEqual):
        (WebCore::URLParser::internalValuesConsistent):
        * workers/service/server/RegistrationDatabase.cpp:
        Increment the service worker registration schema version because of the URL encoding change.

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

        Add a FrameLoaderClient willInjectUserScriptForFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=187565

        Reviewed by Alex Christensen.

        Test: http/tests/contentextensions/injected-script-callback.html.

        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptImmediately):
        Calling the new callback whenever being about to inject a new script.

2018-07-12  Megan Gardner  <megan_gardner@apple.com>

        Keep Selections within Shadow DOM boundaries
        https://bugs.webkit.org/show_bug.cgi?id=187556
        <rdar://problem/41664567>

        Reviewed by Ryosuke Niwa.

        Expose needed functionality to WebKit to help with determing editing and shadow dom boundries.

        Only exposing functionality to WebKit.

        * dom/TreeScope.h:
        * editing/Editing.h:
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::adjustPositionForEnd const):
        (WebCore::VisibleSelection::adjustPositionForStart const):
        (WebCore::adjustPositionForEnd): Deleted.
        (WebCore::adjustPositionForStart): Deleted.
        * editing/VisibleSelection.h:
        
2018-07-12  Sihui Liu  <sihui_liu@apple.com>

        IndexedDB: database file of subframe cannot be removed
        https://bugs.webkit.org/show_bug.cgi?id=187564

        Reviewed by Youenn Fablet.

        For IndexedDB, if openingOrigin is different from mainFrameOrigin, there will be another 
        layer in the database file path. 
        IDBServer should delete database files recursively to make sure all files are removed.

        Covered by modified test: WebKit.WebsiteDataStoreCustomPaths.

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

2018-07-12  Per Arne Vollan  <pvollan@apple.com>

        Add compile guard for enabling NSRunLoop in the WebContent process.
        https://bugs.webkit.org/show_bug.cgi?id=187563

        Reviewed by Chris Dumez.

        No new tests, no change in behavior.

        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):

2018-07-12  Zalan Bujtas  <zalan@apple.com>

        Newly added float should trigger full layout on the block.
        https://bugs.webkit.org/show_bug.cgi?id=187251
        <rdar://problem/41726137>

        Reviewed by David Kilzer.

        RenderBlockFlow::determineStartPosition() is one of the places where we decide the extent of the line layout for the current block.
        In here we try to figure out the first line in the block that requires layout. In certain cases when floats are present,
        (due to their intrusive behavior) we just trigger a full layout on the entire block.
        One of the special cases is when a new float is added to the block. determineStartPosition() checks for such floats (floats inserted
        after the "last known float") and marks the block for full layout. However it missed the case when other, unrelated mutations happened
        in addition to this newly inserted float. This patch fixes this case by checking if the floats after the "last know float" actually need layout.

        Test: fast/inline/new-float-needs-layout-when-line-is-dirty.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::determineStartPosition):

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

        [GStreamer] Add pads to the GstFlowCombiner in MediaStreamSrc
        https://bugs.webkit.org/show_bug.cgi?id=187552

        Reviewed by Alejandro G. Castro.

        This was overlooked and it is the way the API is supposed to be used.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcAddPad):

2018-07-12  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Thread VM& to JSCell::methodTable(VM&)
        https://bugs.webkit.org/show_bug.cgi?id=187548

        Reviewed by Saam Barati.

        * bindings/js/JSDOMConstructorBase.h:
        (WebCore::JSDOMConstructorBase::className):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomGetCallData):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceName::estimatedSize):
        * bindings/scripts/test/JS/JSInterfaceName.h:

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

        MediaDevices should derive from EventTarget in its IDL
        https://bugs.webkit.org/show_bug.cgi?id=187575

        Reviewed by Chris Dumez.

        Test: fast/mediastream/MediaDevices-addEventListener.html

        * Modules/mediastream/MediaDevices.idl:

2018-07-11  Jon Lee  <jonlee@apple.com>

        Update iOS fullscreen alert text
        https://bugs.webkit.org/show_bug.cgi?id=187576
        rdar://problem/42052284

        Reviewed by Ryosuke Niwa.

        * English.lproj/Localizable.strings:

2018-07-11  Commit Queue  <commit-queue@webkit.org>

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

        Binary incompatible change with respect to Service Worker
        registration map (Requested by dydz on #webkit).

        Reverted changeset:

        "Reduce size of WebCore::URL"
        https://bugs.webkit.org/show_bug.cgi?id=186820
        https://trac.webkit.org/changeset/233742

2018-07-11  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (231276): Attempting to copy an image fails
        https://bugs.webkit.org/show_bug.cgi?id=187212
        <rdar://problem/41540074>

        Reviewed by Ryosuke Niwa.

        Renamed methods to make it clear that one URL and one title are being passed in.

        Test: editing/mac/pasteboard/can-copy-url-without-title.html

        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::setURL):
        * platform/mac/PasteboardMac.mm:
        (WebCore::writeURLForTypes):
        (WebCore::Pasteboard::writeTrustworthyWebURLsPboardType):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::setURL):

2018-07-11  Alex Christensen  <achristensen@webkit.org>

        Add SPI for immediate injection of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=173342
        <rdar://problem/29202285>

        Reviewed by Brady Eidson, Youenn Fablet, and Geoff Garen.

        The new SPI is WKUserContentController._addUserScriptImmediately.
        It is covered by new API tests.
        Existing functionality remains unchanged unless the new SPI is adopted.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        (WebCore::Frame::injectUserScriptImmediately):
        Move injection functionality to allow us to call it directly from the new SPI.
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::forEachPage):
        * page/Page.h:

2018-07-11  Alex Christensen  <achristensen@webkit.org>

        Reduce size of WebCore::URL
        https://bugs.webkit.org/show_bug.cgi?id=186820

        Reviewed by Yusuke Suzuki.

        We were using 32 bits for the length of the port, which is always between 0 and 5 inclusive
        because port numbers are missing or between 0 and 65535.  Let's just use 3 bits here.
        We were using 32 bits for the length of the scheme, which is usually 3-5 characters and can be
        longer for some custom schemes, but I've never seen one more than 20 characters.  If we assume
        schemes are always less than 64MB, we can save 8 bytes per URL!

        No change in behavior, just less memory use!

        * platform/URL.cpp:
        (WebCore::URL::invalidate):
        (WebCore::URL::lastPathComponent const):
        (WebCore::URL::port const):
        (WebCore::URL::protocolHostAndPort const):
        (WebCore::URL::path const):
        (WebCore::URL::removePort):
        (WebCore::URL::setPort):
        (WebCore::URL::setHostAndPort):
        (WebCore::URL::setPath):
        * platform/URL.h:
        (WebCore::URL::encode const):
        (WebCore::URL::decode):
        (WebCore::URL::hasPath const):
        (WebCore::URL::pathStart const):
        * platform/URLParser.cpp:
        (WebCore::URLParser::copyBaseWindowsDriveLetter):
        (WebCore::URLParser::urlLengthUntilPart):
        (WebCore::URLParser::copyURLPartsUntil):
        (WebCore::URLParser::shouldPopPath):
        (WebCore::URLParser::popPath):
        (WebCore::URLParser::parse):
        (WebCore::URLParser::parsePort):
        (WebCore::URLParser::parseHostAndPort):
        (WebCore::URLParser::allValuesEqual):
        (WebCore::URLParser::internalValuesConsistent):

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

        Fix remaining Cross-Origin-Resource-Policy failures, if any
        https://bugs.webkit.org/show_bug.cgi?id=186761
        <rdar://problem/41209829>

        Reviewed by Alex Christensen.

        Add case-sensitive check for CORP header value, as per fetch specification.
        Add HTTP->HTTPS check for same-site case, as per fetch specification.
        https://fetch.spec.whatwg.org/#cross-origin-resource-policy-check

        Test: imported/w3c/web-platform-tests/fetch/cross-origin-resource-policy/scheme-restriction.https.window.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::shouldCrossOriginResourcePolicyCancelLoad):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginResourcePolicyHeader):

2018-07-11  Ross Kirsling  <ross.kirsling@sony.com>

        [WinCairo] MIME type registry doesn't explicitly recognize *.xht
        https://bugs.webkit.org/show_bug.cgi?id=187555

        Reviewed by Konstantin Tokarev.

        Follow-up to r233715 -- WinCairo bots are failing on *.xht layout tests as they lack a registry key for this filetype.
        (Hopefully this is the last one to add.)

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        Add *.xht to the list of recognized filetypes.

2018-07-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186501
        <rdar://problem/41000224>

        Unreviewed build fix after r233729 and r233730.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processIterableKeyframes):

2018-07-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186501
        <rdar://problem/41000224>

        Unreviewed build fix after r233729.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processIterableKeyframes):

2018-07-10  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at interfaces/KeyframeEffect/processing-a-keyframes-argument-001.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186501
        <rdar://problem/41000224>

        Reviewed by Dean Jackson.

        There were two remaining assertions that we were failing in this WPT test file, both related to processing iterable keyframes.
        The first one was failing because didn't correctly propagate the TypeError exception in the forEachInIterable() callback. The
        second one was failing because we didn't use the "process a keyframe-like object" procedure when processing iterable keyframes
        and, as such, we didn't correctly sort property alphabetically before reading their values.

        To fix this second issue, we make processIterableKeyframes() use processKeyframeLikeObject(). To do so, we update processKeyframeLikeObject()
        to accept a new boolean flag to match the "allow lists" flag from the specification. We also ensure we sort the properties *before*
        reading from them which we didn't use to do previously.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processKeyframeLikeObject):
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        * animation/KeyframeEffectReadOnly.h:
        * animation/KeyframeEffectReadOnly.idl:

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

        SimpleLineLayout::FlowContents wastes 54KB of Vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186709
        <rdar://problem/41173793>

        Reviewed by Simon Fraser.

        The size of the m_segments vector in SimpleLineLayoutFlowContents is alway pre-computed and don't change after the initial append.  

        Not testable.

        * rendering/SimpleLineLayoutFlowContents.h:

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

        Make fetch() use "same-origin" credentials by default
        https://bugs.webkit.org/show_bug.cgi?id=176023

        Reviewed by Chris Dumez.

        Covered by updated tests.

        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::initializeWith):
        Setting credentials mode to same-origin for FetchRequest by default.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):
        Handle correctly referrer in case we restart a load.
        * page/PerformanceResourceTiming.cpp:
        (WebCore::entryStartTime):
        (WebCore::entryEndTime):
        In case it is not allowed to disclose resource timing info, update as
        https://www.w3.org/TR/resource-timing-1/#performanceresourcetiming

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

        "serviceworker.js" is fetched several times in a row
        https://bugs.webkit.org/show_bug.cgi?id=187435
        <rdar://problem/41940569>

        Reviewed by Youenn Fablet.

        Soft updates happen every time a fetch event is sent to a service worker for a main resource request.
        This can happen many times during a page load and will cause us to spam the HTTP server with update
        requests, especially considering that the default behavior is to bypass the HTTP cache. To address
        the issue, we now do soft updates on a 1 second delay and we keep rescheduling this timer was long as
        soft update requests keep coming. Based on my understanding of the Chromium code, this seems to be
        what they are doing so this should align our behavior with them.

        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::scheduleSoftUpdate):
        * workers/service/ServiceWorkerRegistration.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):

2018-07-10  Ross Kirsling  <ross.kirsling@sony.com>

        [WinCairo] MIME type registry doesn't explicitly recognize *.css
        https://bugs.webkit.org/show_bug.cgi?id=187538

        Reviewed by Yusuke Suzuki.

        MIMETypeRegistryWin doesn't explicitly recognize *.css; it instead falls back to the registry key "Content Type"
        under HKEY_CLASSES_ROOT\.css. This key doesn't exist on Windows Server unless an application actually registers
        it -- as a result, WinCairo bots are currently viewing it as an unrecognized filetype!

        * platform/win/MIMETypeRegistryWin.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForExtension):
        Add *.css to the list of recognized filetypes.

2018-07-10  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r233552): Find highlight has white text on yellow background
        https://bugs.webkit.org/show_bug.cgi?id=187535
        rdar://problem/42043371

        Reviewed by Tim Horton.

        Fixes existing image tests:
        - fast/text/mark-matches-rendering.html
        - fast/text/mark-matches-broken-line-rendering.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::resolveStyleForMarkedText): Remove incorect UseDarkAppearance.

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

        AX: Crash in accessing AXObjectCache in textMarkerDataForVisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=187528
        <rdar://problem/37231941>

        Reviewed by Joanmarie Diggs.

        Occasional crashes reported when running accessibility/mac/search-field-cancel-button.html.
        Looks like the cache object retrieved was not valid and we weren't checking for it.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl):

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

        FragmentInterval, FragmentIntervalTree and FragmentSearchAdapter should hold not hold raw pointers to renderers.
        https://bugs.webkit.org/show_bug.cgi?id=187249
        <rdar://problem/41725869>

        Reviewed by Simon Fraser.

        Test: fast/multicol/crash-in-vertical-writing-mode.html

        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::updateFragmentsFragmentedFlowPortionRect):
        * rendering/RenderFragmentedFlow.h:
        (WTF::ValueToString<WeakPtr<WebCore::RenderFragmentContainer>>::string):

2018-07-10  Ryosuke Niwa  <rniwa@webkit.org>

        Disable cross-origin-window-policy by default
        https://bugs.webkit.org/show_bug.cgi?id=187509

        Reviewed by Chris Dumez.

        Disabled the feature by default.

        * page/Settings.yaml:

2018-07-10  Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] The LibWebRTCProvider object in RealtimeMediaSourceCenterLibWebRTC is not needed anymore
        https://bugs.webkit.org/show_bug.cgi?id=187513

        Reviewed by Youenn Fablet.

        We used the factory of the LibWebRTCProvider in
        RealtimeMediaSourceCenterLibWebRTC as a singleton to make sure the
        devices were correctly listed and used, we needed this when using
        libwebrtc media devices management. We are now using GStreamer to handle
        the media devices so this is not needed anymore.

        No new tests, this change removed unused code.

        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        (WebCore::RealtimeMediaSourceCenterLibWebRTC::RealtimeMediaSourceCenterLibWebRTC):
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:

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

        Rollout r233530: Candidate for Speedometer regression.
        https://bugs.webkit.org/show_bug.cgi?id=187518

        * rendering/SimpleLineLayoutFlowContents.h:

2018-07-09  Antoine Quint  <graouts@apple.com>

        [Web Animations] Correct handle repetition of composite and easing values
        https://bugs.webkit.org/show_bug.cgi?id=187498
        <rdar://problem/41999183>

        Reviewed by Dean Jackson.

        If there are fewer values for "easing" and "composite" than there are keyframes, we are supposed to
        fill in missing values by repeating the pattern of specified values. We were starting our iteration
        to fill those missing values on the second missing value rather than the first missing value.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processPropertyIndexedKeyframes):

2018-07-09  Youenn Fablet  <youenn@apple.com>

        Add the possibility to run unsandboxed plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=187310
        <rdar://problem/41798808>

        Reviewed by Alexey Proskuryakov.

        Add a runtime flag to enforce plugin sandboxing.
        Covered by manual testing.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSandboxPlugInEnabled):
        (WebCore::RuntimeEnabledFeatures::sandboxPlugInEnabled const):

2018-07-09  Dean Jackson  <dino@apple.com>

        Remove fullscreen-auto-hide-delay
        https://bugs.webkit.org/show_bug.cgi?id=187493
        <rdar://problem/41830852>

        Reviewed by Antoine Quint.

        Remove the env() value for fullscreen-auto-hide-delay.

        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty const):
        (WebCore::ConstantPropertyMap::setFullscreenAutoHideDelay): Deleted.
        * dom/ConstantPropertyMap.h:
        * page/Page.cpp:
        (WebCore::Page::setFullscreenAutoHideDelay): Deleted.
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState): No need to reset delay.
        (WebCore::Internals::setFullscreenAutoHideDelay): Deleted.
        * testing/Internals.h: Remove the delay setter/getter.
        * testing/Internals.idl:

2018-07-09  Timothy Hatcher  <timothy@apple.com>

        Semantic colors don't update when accessibility Increase Contrast mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=187425
        rdar://problem/39948240

        Reviewed by Tim Horton.

        Added a listener for the accessibility change notification to invalidate our color caches.

        Removed calls to RenderTheme::singleton().platformColorsDidChange() in Page, since that
        ended up calling Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment multiple times.
        Instead, changed the functions to use the new instance version instead.

        * page/Page.cpp:
        (WebCore::Page::updateStyleAfterChangeInEnvironment): Added. Gives Page a direct way to do this work
        per instance instead of on all pages (since appearance can be difference per view).
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment): Call updateStyleAfterChangeInEnvironment.
        (WebCore::Page::setUseSystemAppearance): Call updateStyleAfterChangeInEnvironment.
        (WebCore::Page::setUseDarkAppearance): Added. Call updateStyleAfterChangeInEnvironment.
        * page/Page.h:
        (WebCore::Page::setUseDarkAppearance): Moved to the implementation file.
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): Removed recursive check since it was interfering
        with the setting of m_usingDarkAppearance and causing the wrong color cache to be used.
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance): Ditto.
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver init]): Listen for NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification.
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]): Removed assert since multiple notifications are used now.
        (WebCore::RenderThemeMac::systemColor): Change how system link colors are cached. Don't store useSystemAppearance link colors in the
        ColorCache, since that special bool isn't considered in the cache after the first time.

2018-07-09  Simon Fraser  <simon.fraser@apple.com>

        Shrink various loading-related enums to shrink CachedResource
        https://bugs.webkit.org/show_bug.cgi?id=187443

        Reviewed by Chris Dumez.
        
        ResourceRequestBase, ResourceResponseBase, ResourceLoaderOptions, FetchOptions and
        CachedResource have a lot of enum members variables most of which took 4 bytes each.
        These can be packed much more efficiently if the enums are declared with an 8-bit size.
        This requires turning enums into enum classes in some cases.
        
        This reduces the size of CachedResource from 1464 to 1384 bytes, which saves about 49KB
        over the ~600 CachedResources on nytimes.com.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::startLoadingBlobURL):
        (WebCore::FetchLoader::start):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::requestStyleSheet):
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::start):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType const):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::shouldBufferResourceData):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::loadResource):
        (WebCore::InspectorNetworkAgent::cachedResourceContent):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        (WebCore::InspectorPageAgent::inspectorResourceType):
        * loader/ApplicationManifestLoader.cpp:
        (WebCore::ApplicationManifestLoader::startLoading):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::deliverResourceData):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::notifyFinished):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::tryLoadingRedirectRequestFromApplicationCache):
        (WebCore::DocumentLoader::subresource const):
        (WebCore::DocumentLoader::loadMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::preflightSuccess):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FetchOptions.h:
        (WebCore::FetchOptions::FetchOptions):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::defaultRequestCachingPolicy):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::resourceTypeFromAsAttribute):
        (WebCore::createLinkPreloadResourceClient):
        (WebCore::LinkLoader::isSupportedType):
        (WebCore::LinkLoader::prefetchIfNeeded):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::setDataBufferingPolicy):
        (WebCore::ResourceLoader::addDataOrBuffer):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        (WebCore::ResourceLoader::cleanupForError):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::shouldSendResourceLoadCallbacks const):
        (WebCore::ResourceLoader::shouldSniffContent const):
        (WebCore::ResourceLoader::shouldIncludeCertificateInfo const):
        * loader/ResourceLoaderOptions.h:
        * loader/ResourceTimingInformation.cpp:
        (WebCore::ResourceTimingInformation::addResourceTiming):
        (WebCore::ResourceTimingInformation::storeResourceTimingInitiatorInformation):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::shouldCreatePreviewLoaderForResponse const):
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::logResourceLoaded):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        * loader/cache/CachedApplicationManifest.cpp:
        (WebCore::CachedApplicationManifest::CachedApplicationManifest):
        * loader/cache/CachedApplicationManifest.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::CachedCSSStyleSheet):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        (WebCore::CachedImage::updateBuffer):
        (WebCore::CachedImage::updateData):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):
        (WebCore::CachedRawResource::updateData):
        (WebCore::CachedRawResource::finishLoading):
        (WebCore::CachedRawResource::canReuse const):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType):
        (WebCore::deadDecodedDataDeletionIntervalForResourceType):
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::updateBuffer):
        (WebCore::CachedResource::updateData):
        (WebCore::CachedResource::isCORSSameOrigin const):
        (WebCore::CachedResource::freshnessLifetime const):
        (WebCore::CachedResource::setResponse):
        (WebCore::CachedResource::addClientToSet):
        (WebCore::CachedResource::areAllClientsXMLHttpRequests const):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isImage const):
        (WebCore::CachedResource::isMainOrMediaOrIconOrRawResource const):
        (WebCore::CachedResource::ignoreForRequestCount const):
        (WebCore::CachedResource::shouldSendResourceLoadCallbacks const):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestLinkResource):
        (WebCore::CachedResourceLoader::requestMedia):
        (WebCore::CachedResourceLoader::requestIcon):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestBeaconResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        (WebCore::CachedResourceLoader::requestApplicationManifest):
        (WebCore::contentTypeFromResourceType):
        (WebCore::CachedResourceLoader::checkInsecureContent const):
        (WebCore::CachedResourceLoader::allowedByContentSecurityPolicy const):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::canRequestInContentDispositionAttachmentSandbox const):
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest):
        (WebCore::isResourceSuitableForDirectReuse):
        (WebCore::destinationForType):
        (WebCore::CachedResourceLoader::loadResource):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy const):
        (WebCore::CachedResourceLoader::cachePolicy const):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::warnUnusedPreloads):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateAccordingCacheMode):
        * loader/cache/CachedResourceRequest.h:
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::CachedSVGDocument):
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::CachedSVGFont):
        * loader/cache/CachedSVGFont.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::CachedTextTrack):
        (WebCore::CachedTextTrack::doUpdateBuffer):
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::CachedXSLStyleSheet):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getStatistics):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponseAsync):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):
        * platform/ReferrerPolicy.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::startLoading):
        * platform/ios/QuickLook.mm:
        (WebCore::registerQLPreviewConverterIfNeeded):
        * platform/network/CacheValidation.cpp:
        (WebCore::updateRedirectChainStatus):
        (WebCore::redirectChainAllowsReuse):
        * platform/network/CacheValidation.h:
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceLoadPriority.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::httpBody const):
        (WebCore::ResourceRequestBase::updatePlatformRequest const):
        (WebCore::ResourceRequestBase::updateResourceRequest const):
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/StoredCredentialsPolicy.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::toPlatformRequestCachePolicy):
        (WebCore::fromPlatformRequestCachePolicy):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::fromPlatformRequestCachePolicy):
        (WebCore::toPlatformRequestCachePolicy):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):
        * platform/network/ios/PreviewConverter.mm:
        (WebCore::PreviewConverter::safeRequest const):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        * testing/Internals.cpp:
        (WebCore::toResourceRequestCachePolicy):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2018-07-09  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at interfaces/DocumentTimeline/constructor.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186498
        <rdar://problem/41000205>
        
        Reviewed by Dean Jackson.

        Add a Constructor to the DocumentTimeline IDL to match the spec and ensure we respect the provided
        origin time. To ensure all DocumentTimeline instances report matching current times, we read the
        current time from the "main" document timeline, the one created by the Document automatically.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::create):
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::currentTime):
        * animation/DocumentTimeline.h:
        * animation/DocumentTimeline.idl:
        * animation/DocumentTimelineOptions.h:
        * animation/DocumentTimelineOptions.idl:

2018-07-09  Antoine Quint  <graouts@apple.com>

        [Web Animations] Support overlapping keyframes
        https://bugs.webkit.org/show_bug.cgi?id=187481
        <rdar://problem/41988674>

        Reviewed by Dean Jackson.

        We now support parsing of multiple keyframes for the same offset.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::computeMissingKeyframeOffsets): Keyframes with a null offset that don't yet have a non-zero
        computed offset are keyframes with an offset that needs to be computed.
        (WebCore::KeyframeEffectReadOnly::processKeyframes): Only file an exception if an offset is found that
        is lower than a previously-parsed one, allowing offsets with the same value.
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::insert): Remove the assertion that prevented an offset to be found more than once.

2018-07-09  Youenn Fablet  <youenn@apple.com>

        StringView operator==(char*) should check the length of the string
        https://bugs.webkit.org/show_bug.cgi?id=187422

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromEncodedFilename):

2018-07-09  Simon Fraser  <simon.fraser@apple.com>

        Shrink WebCore::Pair
        https://bugs.webkit.org/show_bug.cgi?id=187450

        Reviewed by Sam Weinig.

        Move m_encoding to pack in with m_refCount and remove the virtual destructor,
        shrinking the class from 40 to 24 bytes.
        Also make the enum take only a byte, in case it gets used elsewhere
        
        There are about 500 Pairs on nytimes.com, so this memory saving is non-trivial.

        * css/Pair.h:

2018-07-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore] Annotate classes with WTF_MAKE_FAST_ALLOCATED as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=187474

        Reviewed by Mark Lam.

        When opening cnn.com, debugger says that so many objects in WebCore are allocated
        from system allocator. This patch attempts to annotate these found classes with
        WTF_MAKE_FAST_ALLOCATED.

        We also annotate WebAudio classes with `final` to make WebAudio class hierarchy solid.

        No behavior change.

        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/client/IDBConnectionProxy.h:
        * Modules/mediastream/UserMediaController.h:
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioListener.h:
        (WebCore::AudioListener::create): Deleted.
        (WebCore::AudioListener::setPosition): Deleted.
        (WebCore::AudioListener::position const): Deleted.
        (WebCore::AudioListener::setOrientation): Deleted.
        (WebCore::AudioListener::orientation const): Deleted.
        (WebCore::AudioListener::setUpVector): Deleted.
        (WebCore::AudioListener::upVector const): Deleted.
        (WebCore::AudioListener::setVelocity): Deleted.
        (WebCore::AudioListener::velocity const): Deleted.
        (WebCore::AudioListener::setDopplerFactor): Deleted.
        (WebCore::AudioListener::dopplerFactor const): Deleted.
        (WebCore::AudioListener::setSpeedOfSound): Deleted.
        (WebCore::AudioListener::speedOfSound const): Deleted.
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeInput.h:
        (WebCore::AudioNodeInput::node const): Deleted.
        * Modules/webaudio/AudioNodeOutput.h:
        * Modules/webaudio/AudioParam.h:
        (WebCore::AudioParam::create): Deleted.
        (WebCore::AudioParam::name const): Deleted.
        (WebCore::AudioParam::minValue const): Deleted.
        (WebCore::AudioParam::maxValue const): Deleted.
        (WebCore::AudioParam::defaultValue const): Deleted.
        (WebCore::AudioParam::units const): Deleted.
        (WebCore::AudioParam::resetSmoothedValue): Deleted.
        (WebCore::AudioParam::setSmoothingConstant): Deleted.
        (WebCore::AudioParam::setValueAtTime): Deleted.
        (WebCore::AudioParam::linearRampToValueAtTime): Deleted.
        (WebCore::AudioParam::exponentialRampToValueAtTime): Deleted.
        (WebCore::AudioParam::setTargetAtTime): Deleted.
        (WebCore::AudioParam::setValueCurveAtTime): Deleted.
        (WebCore::AudioParam::cancelScheduledValues): Deleted.
        (WebCore::AudioParam::hasSampleAccurateValues): Deleted.
        (WebCore::AudioParam::AudioParam): Deleted.
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/AudioProcessingEvent.h:
        (WebCore::AudioProcessingEvent::create): Deleted.
        (WebCore::AudioProcessingEvent::createForBindings): Deleted.
        (WebCore::AudioProcessingEvent::inputBuffer): Deleted.
        (WebCore::AudioProcessingEvent::outputBuffer): Deleted.
        (WebCore::AudioProcessingEvent::playbackTime const): Deleted.
        * Modules/webaudio/BiquadDSPKernel.h:
        (WebCore::BiquadDSPKernel::BiquadDSPKernel): Deleted.
        (WebCore::BiquadDSPKernel::biquadProcessor): Deleted.
        * Modules/webaudio/BiquadFilterNode.h:
        (WebCore::BiquadFilterNode::create): Deleted.
        (WebCore::BiquadFilterNode::frequency): Deleted.
        (WebCore::BiquadFilterNode::q): Deleted.
        (WebCore::BiquadFilterNode::gain): Deleted.
        (WebCore::BiquadFilterNode::detune): Deleted.
        (WebCore::BiquadFilterNode::biquadProcessor): Deleted.
        * Modules/webaudio/BiquadProcessor.h:
        (WebCore::BiquadProcessor::filterCoefficientsDirty const): Deleted.
        (WebCore::BiquadProcessor::hasSampleAccurateValues const): Deleted.
        (WebCore::BiquadProcessor::parameter1): Deleted.
        (WebCore::BiquadProcessor::parameter2): Deleted.
        (WebCore::BiquadProcessor::parameter3): Deleted.
        (WebCore::BiquadProcessor::parameter4): Deleted.
        (WebCore::BiquadProcessor::type const): Deleted.
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/DelayDSPKernel.h:
        (WebCore::DelayDSPKernel::maxDelayTime const): Deleted.
        (WebCore::DelayDSPKernel::setDelayFrames): Deleted.
        (WebCore::DelayDSPKernel::delayProcessor): Deleted.
        * Modules/webaudio/DelayNode.h:
        * Modules/webaudio/DelayProcessor.h:
        (WebCore::DelayProcessor::delayTime const): Deleted.
        (WebCore::DelayProcessor::maxDelayTime): Deleted.
        * Modules/webaudio/DynamicsCompressorNode.h:
        (WebCore::DynamicsCompressorNode::create): Deleted.
        (WebCore::DynamicsCompressorNode::threshold): Deleted.
        (WebCore::DynamicsCompressorNode::knee): Deleted.
        (WebCore::DynamicsCompressorNode::ratio): Deleted.
        (WebCore::DynamicsCompressorNode::attack): Deleted.
        (WebCore::DynamicsCompressorNode::release): Deleted.
        (WebCore::DynamicsCompressorNode::reduction): Deleted.
        * Modules/webaudio/GainNode.h:
        (WebCore::GainNode::create): Deleted.
        (WebCore::GainNode::gain): Deleted.
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        (WebCore::MediaElementAudioSourceNode::mediaElement): Deleted.
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        (WebCore::MediaStreamAudioDestinationNode::stream): Deleted.
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        (WebCore::MediaStreamAudioSourceNode::mediaStream): Deleted.
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        (WebCore::OfflineAudioCompletionEvent::renderedBuffer): Deleted.
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        (WebCore::OfflineAudioDestinationNode::create): Deleted.
        * Modules/webaudio/PannerNode.h:
        (WebCore::PannerNode::create): Deleted.
        (WebCore::PannerNode::panningModel const): Deleted.
        (WebCore::PannerNode::position const): Deleted.
        (WebCore::PannerNode::setPosition): Deleted.
        (WebCore::PannerNode::orientation const): Deleted.
        (WebCore::PannerNode::setOrientation): Deleted.
        (WebCore::PannerNode::velocity const): Deleted.
        (WebCore::PannerNode::setVelocity): Deleted.
        (WebCore::PannerNode::refDistance): Deleted.
        (WebCore::PannerNode::setRefDistance): Deleted.
        (WebCore::PannerNode::maxDistance): Deleted.
        (WebCore::PannerNode::setMaxDistance): Deleted.
        (WebCore::PannerNode::rolloffFactor): Deleted.
        (WebCore::PannerNode::setRolloffFactor): Deleted.
        (WebCore::PannerNode::coneInnerAngle const): Deleted.
        (WebCore::PannerNode::setConeInnerAngle): Deleted.
        (WebCore::PannerNode::coneOuterAngle const): Deleted.
        (WebCore::PannerNode::setConeOuterAngle): Deleted.
        (WebCore::PannerNode::coneOuterGain const): Deleted.
        (WebCore::PannerNode::setConeOuterGain): Deleted.
        (WebCore::PannerNode::distanceGain): Deleted.
        (WebCore::PannerNode::coneGain): Deleted.
        * Modules/webaudio/PeriodicWave.h:
        (WebCore::PeriodicWave::rateScale const): Deleted.
        (WebCore::PeriodicWave::periodicWaveSize const): Deleted.
        (WebCore::PeriodicWave::sampleRate const): Deleted.
        (WebCore::PeriodicWave::numberOfRanges const): Deleted.
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        (WebCore::ScriptProcessorNode::bufferSize const): Deleted.
        (WebCore::ScriptProcessorNode::doubleBufferIndex const): Deleted.
        (WebCore::ScriptProcessorNode::swapBuffers): Deleted.
        * Modules/webaudio/WaveShaperDSPKernel.h:
        (WebCore::WaveShaperDSPKernel::waveShaperProcessor): Deleted.
        * Modules/webaudio/WaveShaperProcessor.h:
        (WebCore::WaveShaperProcessor::curve): Deleted.
        (WebCore::WaveShaperProcessor::oversample const): Deleted.
        * dom/MessagePort.h:
        * html/FormAssociatedElement.h:
        * loader/LinkPreloadResourceClients.h:
        * page/WheelEventDeltaFilter.h:
        * page/mac/WheelEventDeltaFilterMac.h:
        * platform/RemoteCommandListener.h:
        * platform/audio/AudioDSPKernel.h:
        * platform/audio/AudioProcessor.h:
        * platform/audio/PlatformMediaSession.h:
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * workers/service/ServiceWorkerContainer.h:

2018-07-09  Simon Fraser  <simon.fraser@apple.com>

        Shrink RenderSVGShape
        https://bugs.webkit.org/show_bug.cgi?id=187459

        Reviewed by Zalan Bujtas.

        Shrink RenderSVGShape from 328 to 320 bytes by moving the bits before the AffineTransform,
        which is 16-byte aligned. This saves 9.6KB on nytimes.com.

        * rendering/svg/RenderSVGShape.h:

2018-07-09  Simon Fraser  <simon.fraser@apple.com>

        Shrink CSSFontFace
        https://bugs.webkit.org/show_bug.cgi?id=187456

        Reviewed by Anders Carlsson.

        Shrink CSSFontFace by 56 bytes, from 288 to 256 bytes, mostly by defining enums as 8-bit,
        but also re-ordering the member variables. There are over 400 of these objects on nytimes.com,
        so this saves about 22KB.

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontFace.h:
        * platform/text/TextFlags.h:
        * rendering/style/RenderStyleConstants.h:

2018-07-09  Commit Queue  <commit-queue@webkit.org>

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

        Revision caused the api test LinkColorWithSystemAppearance to
        fail on all systems. (Requested by Truitt on #webkit).

        Reverted changeset:

        "Semantic colors don't update when accessibility Increase
        Contrast mode is enabled."
        https://bugs.webkit.org/show_bug.cgi?id=187425
        https://trac.webkit.org/changeset/233612

2018-07-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Remove useless workaround
        https://bugs.webkit.org/show_bug.cgi?id=186921

        Reviewed by Xabier Rodriguez-Calvar.

        In bug 67407 a workaround was added for GStreamer 0.10. With 1.x
        the media/video-reverse-play-duration.html test passes without any
        workaround needed. The other test mentioned in that bug was
        removed, it seems.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        Removed early return, position queries shouldn't be avoided on EOS
        because the pipeline is in READY state, not NULL.
        (WebCore::MediaPlayerPrivateGStreamer::currentMediaTime const):

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

        Optimize packing of RenderSVGViewportContainer
        https://bugs.webkit.org/show_bug.cgi?id=187458

        Reviewed by Zalan Bujtas.

        Shrink RenderSVGViewportContainer from 296 bytes to 280 bytes, saving about 6KB on nytimes.com.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:

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

        Shrink RenderTableSection
        https://bugs.webkit.org/show_bug.cgi?id=187457

        Reviewed by Zalan Bujtas.

        Shrink RenderTableSection from 344 to 336 bytes, saving about 3.6KB on nytimes.com.

        * rendering/RenderTableSection.h:

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

        Optimize packing of RootInlineBox
        https://bugs.webkit.org/show_bug.cgi?id=187430

        Reviewed by Zalan Bujtas.

        In InlineBox, move the m_logicalWidth float up next to the m_expansion float with m_topLeft next; this
        avoids padding of 4 bytes after this float.
        
        In InlineFlowBox, move the bitfields before the pointers so they can snug up into the
        4 bytes after m_expansion in the base class.
        
        The comment about m_lineBreakPos's padding in RootInlineBox is wrong; just move it to the end
        to avoid padding before the m_lineBreakObj pointer.
        
        Make m_logicalWidth private and have derived classes use the accessor.
        
        Make EllipsisBox 4 bytes smaller too.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::paintMarkupBox):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::frameRectIncludingLineHeight const):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintCompositionUnderline const):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/RootInlineBox.h:

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

        [Web Animations] A number of tests report an incorrect computed offset
        https://bugs.webkit.org/show_bug.cgi?id=187410
        <rdar://problem/41905790>

        Reviewed by Dean Jackson.

        While we would correctly avoid computing missing offsets when processing the first keyframe following the last
        keyframes with a specified offset, we were forgetting to update the index of the last keyframe with a specified
        offset which meant we would accidentally override a specified offset with an automically-computed one.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::computeMissingKeyframeOffsets):

2018-07-08  David Kilzer  <ddkilzer@apple.com>

        DOMMatrix.invertSelf() returns garbage values for a non-invertible matrix
        <https://webkit.org/b/187446>
        <rdar://problem/41853187>

        Reviewed by Daniel Bates.

        Test: http/wpt/css/geometry/DOMMatrix-invertSelf.html

        * css/DOMMatrix.cpp:
        (WebCore::DOMMatrix::invertSelf): Add missing `else`, and
        restructure to use positive logic.

2018-07-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        Introduce a layout milestone to track when the document contains a large number of rendered characters
        https://bugs.webkit.org/show_bug.cgi?id=187412
        <rdar://problem/41744338>

        Reviewed by Ryosuke Niwa.

        Implements a new layout milestone: `DidRenderSignificantAmountOfText`. This is similar to the existing
        `DidFirstVisuallyNonEmptyLayout` milestone, but with a few important additional constraints:

        • The minimum threshold of rendered characters is much larger (3000 instead of 200).
        • The mean length of a text node must be large (at least 50).

        This is a (computationally) lightweight heuristic intended to estimate the likelihood that a page is capable of
        being presented in Reader mode. In many article-like pages, the average length of a text node is significantly
        longer than other types of pages; thus, on pages where the average length of a text node is very large *and*
        there is a large quantity of text, we can use this as a cue to opportunistically detect and enter Safari reader
        mode on watchOS.

        Test: RenderingProgressTests.DidRenderSignificantAmountOfText

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):

        Clear out new state members that keep track of whether the significant rendered text milestone has been met.

        (WebCore::elementOverflowRectIsLargerThanThreshold):

        Factor out logic to grab the overflow height of an element into a separate helper function.

        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const):
        (WebCore::FrameView::updateSignificantRenderedTextMilestoneIfNeeded):

        Determines whether to fire this new milestone after the next layout pass is finished. The logic here is similar
        to the logic in qualifiesAsVisuallyNonEmpty, requiring that there are not still pending stylesheets in the head
        and that the document height is at least a minimum threshold. However, unlike the first visually non-empty
        layout, this milestone is never guaranteed to fire.

        (WebCore::FrameView::fireLayoutRelatedMilestonesIfNeeded):
        * page/FrameView.h:
        (WebCore::FrameView::incrementVisuallyNonEmptyCharacterCount):
        * page/LayoutMilestones.h:

2018-07-06  Timothy Hatcher  <timothy@apple.com>

        Semantic colors don't update when accessibility Increase Contrast mode is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=187425
        rdar://problem/39948240

        Reviewed by Tim Horton.

        Added a listener for the accessibility change notification to invalidate our color caches.

        Removed calls to RenderTheme::singleton().platformColorsDidChange() in Page, since that
        ended up calling Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment multiple times.
        Instead, changed the functions to use the new instance version instead.

        * page/Page.cpp:
        (WebCore::Page::updateStyleAfterChangeInEnvironment): Added. Gives Page a direct way to do this work
        per instance instead of on all pages (since appearance can be difference per view).
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment): Call updateStyleAfterChangeInEnvironment.
        (WebCore::Page::setUseSystemAppearance): Call updateStyleAfterChangeInEnvironment.
        (WebCore::Page::setUseDarkAppearance): Added. Call updateStyleAfterChangeInEnvironment.
        * page/Page.h:
        (WebCore::Page::setUseDarkAppearance): Moved to the implementation file.
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): Removed recursive check since it was interfering
        with the setting of m_usingDarkAppearance and causing the wrong color cache to be used.
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance): Ditto.
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver init]): Listen for NSWorkspaceAccessibilityDisplayOptionsDidChangeNotification.
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]): Removed assert since multiple notifications are used now.

2018-07-06  Ryosuke Niwa  <rniwa@webkit.org>

        Make ReasonForSuspension enum class
        https://bugs.webkit.org/show_bug.cgi?id=187405

        Reviewed by Zalan Bujtas.

        Made ReasonForSuspension an enum class instead of enum and moved out of ActiveDOMObject.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::suspend):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::suspend):
        * dom/ActiveDOMObject.h:
        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::suspendActiveDOMObjects):
        (WebCore::Document::resumeActiveDOMObjects):
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        (WebCore::Document::suspendScheduledTasks):
        (WebCore::Document::resumeScheduledTasks):
        * dom/Document.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::reasonForSuspendingActiveDOMObjects const):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::suspend):
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::setJavaScriptPaused):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * page/Frame.cpp:
        (WebCore::Frame::suspendActiveDOMObjectsAndAnimations):
        (WebCore::Frame::resumeActiveDOMObjectsAndAnimations):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::suspend):

2018-07-06  Nan Wang  <n_wang@apple.com>

        AX: add a subrole for meter elements on macOS
        https://bugs.webkit.org/show_bug.cgi?id=187409
        <rdar://problem/41905702>

        Reviewed by Chris Fleizach.

        Test: accessibility/mac/meter-subrole.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper subrole]):

2018-07-06  Jeremy Jones  <jeremyj@apple.com>

        For <video> element, use video fullscreen instead of element fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=186093
        rdar://problem/40144751

        Reviewed by Jer Noble.

        Some pages use webkitRequestFullscreen directly on the video element, without any custom controls.
        This will prevent native fullscreeen presentation mode conrols from being used.

        This change makes webkitRequestFullscreen on a video element call webKitSetPresentationMode.

        * dom/Element.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitRequestFullscreen):
        * html/HTMLVideoElement.h:

2018-07-06  Youenn Fablet  <youenn@apple.com>

        WebRTC MediaStreamTrack Enable / Disable causes video delay / lag
        https://bugs.webkit.org/show_bug.cgi?id=186889
        <rdar://problem/41370285>

        Reviewed by Eric Carlson.

        Libwebrtc expects a continuous flow of calls for audio data since the API
        does not provide any possiblity to give timestamps.

        We were optimizing previously when a source is muted so that we would not transmit audio data.
        This breaks synchronization between audio and video frames (which are timestamped).

        This patch reverts the optimization and instead makes sure to send zeros for silenced audio tracks.

        This requires MediaStreamTrackPrivate to send audio data even if disabled,
        so that RealtimeOutgoingAudioSource will continue sending zeros at the correct pace.
        This also requires WebAudioSourceProviderAVFObjC to exit early if its track is disabled.

        Covered by existing tests.
        Manual testing shows that synchronization is kept.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::audioSamplesAvailable):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::RealtimeOutgoingAudioSource):
        (WebCore::RealtimeOutgoingAudioSource::initializeConverter):
        (WebCore::RealtimeOutgoingAudioSource::stop):
        (WebCore::RealtimeOutgoingAudioSource::sourceMutedChanged):
        (WebCore::RealtimeOutgoingAudioSource::sourceEnabledChanged):
        (WebCore::RealtimeOutgoingAudioSource::handleMutedIfNeeded): Deleted.
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        (WebCore::RealtimeOutgoingAudioSource::pullAudioData):
        (WebCore::RealtimeOutgoingAudioSource::isSilenced const):
        (WebCore::RealtimeOutgoingAudioSource::sendSilence): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingAudioSourceCocoa::pullAudioData):
        (WebCore::RealtimeOutgoingAudioSourceCocoa::handleMutedIfNeeded): Deleted.
        (WebCore::RealtimeOutgoingAudioSourceCocoa::sendSilence): Deleted.
        * platform/mediastream/mac/RealtimeOutgoingAudioSourceCocoa.h:
        * platform/mediastream/mac/WebAudioSourceProviderAVFObjC.mm:
        (WebCore::WebAudioSourceProviderAVFObjC::audioSamplesAvailable):

2018-07-06  Youenn Fablet  <youenn@apple.com>

        Make RealtimeOutgoingVideoSource use DestructionThread::Main
        https://bugs.webkit.org/show_bug.cgi?id=187402

        Reviewed by Chris Dumez.

        No change of behavior.

        * platform/mediastream/RealtimeOutgoingVideoSource.h:

2018-07-06  Ryosuke Niwa  <rniwa@webkit.org>

        Make HTMLMediaElement::remove*Track take a Ref<>&&
        https://bugs.webkit.org/show_bug.cgi?id=187407

        Reviewed by Zalan Bujtas.

        Make these functions take Ref<>&& since they can delete track objects.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeAudioTrack):
        (WebCore::HTMLMediaElement::removeTextTrack):
        (WebCore::HTMLMediaElement::removeVideoTrack):
        (WebCore::HTMLMediaElement::forgetResourceSpecificTracks):
        * html/HTMLMediaElement.h:

2018-07-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at interfaces/KeyframeEffect/processing-a-keyframes-argument-002.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186502
        <rdar://problem/41000229>l

        Reviewed by Dean Jackson.

        Ensure we only attempt to convert defined objects or we risk to throw errors in valid situations.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processKeyframeLikeObject):

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

        [Web Animations] Make WPT test at interfaces/Animation/finish.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186496
        <rdar://problem/41000179>

        Reviewed by Dean Jackson.

        We used to only resolve animations that had a target element, but animations need not have a target and their
        current time should still advance so that their finished promise may resolve. We now maintain a list of animations
        without targets and we iterate through them as well as animations with targets in DocumentTimeline::updateAnimations().

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::addAnimation):
        (WebCore::AnimationTimeline::removeAnimation):
        (WebCore::AnimationTimeline::animationWasAddedToElement):
        (WebCore::AnimationTimeline::animationWasRemovedFromElement):
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline:: const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::resolve):
        * animation/WebAnimation.h:

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

        [Web Animations] Make WPT test at interfaces/Animation/finished.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186497
        <rdar://problem/41000193>

        Reviewed by Dean Jackson.

        We need to ensure the finished state is updated as a result of any timing property changing.

        * animation/AnimationEffectReadOnly.cpp:
        (WebCore::AnimationEffectReadOnly::timingDidChange):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::effectTimingPropertiesDidChange):
        * animation/WebAnimation.h:

2018-07-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Using a Web Animation leaks the Document
        https://bugs.webkit.org/show_bug.cgi?id=187088
        <rdar://problem/41392046>

        Reviewed by Darin Adler.

        Test: webanimations/leak-document-with-web-animation.html

        We need to ensure that any remaining animation is cleared when the DocumentTimeline is detached from its Document.
        We rename WebAnimation::prepareAnimationForRemoval() to WebAnimation::remove() since it really actively disassociates
        the animation from its timeline.

        An earlier version of this patch (r233349) was rolled out due to crashes caught in the ASan configuration. The following
        changes were made to make it safe:

        - We protect the DocumentAnimationScheduler instance in displayRefreshFired() against code that might run in a
        requestAnimationFrame() callback that would trigger the object to be deleted.

        - We protect the WebAnimation instance in remove() against setEffectInternal() or setTimelineInternal() potentially
        causing the object to be deleted. Similar protections were addede to setEffect() and setTimeline().

        - We changed ~DocumentTimeline() to a default implementation to ensure it calls ~DisplayRefreshMonitorClient()
        to avoid callbacks after the object has been marked for deletion.


        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimationsForElement): We no longer need the call to removeAnimation()
        since the new WebAnimation::remove() method will also set the timeline to null which will eventually call
        removeAnimation() on the disassociated timeline.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::remove):
        (WebCore::DeclarativeAnimation::prepareAnimationForRemoval): Deleted.
        * animation/DeclarativeAnimation.h:
        * animation/DocumentAnimationScheduler.cpp:
        (WebCore::DocumentAnimationScheduler::displayRefreshFired):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::detachFromDocument): Call remove() on all known animations.
        (WebCore::DocumentTimeline::~DocumentTimeline): Deleted.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::remove): Set the timeline to null to fully disassociate this animation from its timeline.
        (WebCore::WebAnimation::setEffect):
        (WebCore::WebAnimation::setEffectInternal):
        (WebCore::WebAnimation::setTimeline): Factor the internal timeline-association code out of this JS API method so
        that we can call this code without any JS-facing implications.
        (WebCore::WebAnimation::setTimelineInternal):
        (WebCore::WebAnimation::prepareAnimationForRemoval): Deleted.
        * animation/WebAnimation.h:

2018-07-06  Daniel Bates  <dabates@apple.com>

        Remove Strong Confirmation Password button
        https://bugs.webkit.org/show_bug.cgi?id=187306
        <rdar://problem/41795185>

        Reviewed by Sam Weinig.

        Remove support for the Strong Confirmation Password button because we never made use of it.

        * English.lproj/Localizable.strings:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _accessibilityIsStrongPasswordField]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::hasAutoFillStrongPasswordButton const):
        * html/HTMLTextFormControlElement.h:
        * html/TextFieldInputType.cpp:
        (WebCore::autoFillButtonTypeToAccessibilityLabel):
        (WebCore::autoFillButtonTypeToAutoFillButtonText):
        (WebCore::autoFillButtonTypeToAutoFillButtonPseudoClassName):
        (WebCore::isAutoFillButtonTypeChanged):
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillStrongConfirmationPasswordLabel): Deleted.
        * platform/LocalizedStrings.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        * testing/Internals.cpp:
        (WebCore::toAutoFillButtonType):
        (WebCore::toInternalsAutoFillButtonType):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] REGRESSION(r233239): proxy settings not applied after r233239
        https://bugs.webkit.org/show_bug.cgi?id=187381

        Reviewed by Yusuke Suzuki.

        This is because the static variable for proxy settings was replaced by a NeverDestroyed, but the function is not
        returning a reference, but a copy. This is causing several unit tests to fail.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::proxySettings):

2018-07-06  Frederic Wang  <fwang@igalia.com>

        [Crash] Illegal use of uninitialized std::optional value in WebCore::AnimationBase::updateStateMachine
        https://bugs.webkit.org/show_bug.cgi?id=187382

        Reviewed by Carlos Garcia Campos.

        WebCore::AnimationBase::updateStateMachine has two potential places where the use of an
        uninitialized std:optional value is possible and one of them is hit when using Google drive.
        Since that old animation code is going to be removed soon, we just quickly patch this issue
        via value_or() so that we can restore the ASSERT added in bug 186536.

        No new tests, code is going to be removed soon.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine): Use value_or(0) to avoid potential crashes.

2018-07-06  Frederic Wang  <fwang@igalia.com>

        Rename HTMLTreeBuilder::didCreateCustomOrCallbackElement
        https://bugs.webkit.org/show_bug.cgi?id=187317

        Reviewed by Ryosuke Niwa.

        This function is called with a new custom element or the fallback HTMLUnknownElement element
        so we rename it didCreateCustomOrFallbackElement.

        No new tests, behavior unchanged.

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::didCreateCustomOrFallbackElement):
        (WebCore::HTMLTreeBuilder::didCreateCustomOrCallbackElement): Deleted.
        * html/parser/HTMLTreeBuilder.h:

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

        REGRESSION(r233496): macOS Sierra hits debug assertions in TrackListBase::suspend
        https://bugs.webkit.org/show_bug.cgi?id=187378
        <rdar://problem/41878885>

        Reviewed by Eric Carlson.

        These assertions were wrong since inline debugger, alert, etc... can suspend active DOM objects without
        calling canSuspendForDocumentSuspension. Fixed the bug by removing the assertion and instead suspending
        and resuming the generic event queue.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::suspend):
        (WebCore::MediaSource::resume):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::suspend):
        (WebCore::SourceBuffer::resume):
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList::suspend):
        (WebCore::SourceBufferList::resume):
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase::suspend):
        (WebCore::TrackListBase::resume):

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

        REGRESSION (r230843): Flash doesn't work; Produces blue box on page
        https://bugs.webkit.org/show_bug.cgi?id=187346
        <rdar://problem/41773974>

        Reviewed by Ryosuke Niwa.

        Introduce clearPagesPluginData used by WebProcess when a plugin policy changes.
        Add a new internals API to get the plugin count as navigator.plugin is filtering plugins.

        Test: http/tests/plugins/plugin-allow-then-reload.html

        * plugins/PluginData.h:
        * plugins/PluginInfoProvider.cpp:
        (WebCore::PluginInfoProvider::clearPagesPluginData):
        * plugins/PluginInfoProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pluginCount):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-05  Brady Eidson  <beidson@apple.com>

        IndexedDB operations in a Page fail after a StorageProcess crash.
        <rdar://problem/41626526> and https://bugs.webkit.org/show_bug.cgi?id=187123

        Reviewed by Alex Christensen.

        Test: storage/indexeddb/modern/opendatabase-after-storage-crash.html

        When the connection to a StorageProcess goes away, explicitly tell all of the WebPages
        in the WebProcess about it.
        
        This puts Documents/Workers in an error mode where requests fail instead of timeout.
        It also clears the Page's connection so *new* Documents and Workers will get a fresh 
        new connection that works.
        
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::callResultFunctionLater):
        (WebCore::IDBClient::IDBConnectionToServer::deleteDatabase):
        (WebCore::IDBClient::IDBConnectionToServer::openDatabase):
        (WebCore::IDBClient::IDBConnectionToServer::createObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::deleteObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::renameObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::clearObjectStore):
        (WebCore::IDBClient::IDBConnectionToServer::createIndex):
        (WebCore::IDBClient::IDBConnectionToServer::deleteIndex):
        (WebCore::IDBClient::IDBConnectionToServer::renameIndex):
        (WebCore::IDBClient::IDBConnectionToServer::putOrAdd):
        (WebCore::IDBClient::IDBConnectionToServer::getRecord):
        (WebCore::IDBClient::IDBConnectionToServer::getAllRecords):
        (WebCore::IDBClient::IDBConnectionToServer::getCount):
        (WebCore::IDBClient::IDBConnectionToServer::deleteRecord):
        (WebCore::IDBClient::IDBConnectionToServer::openCursor):
        (WebCore::IDBClient::IDBConnectionToServer::iterateCursor):
        (WebCore::IDBClient::IDBConnectionToServer::establishTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
        (WebCore::IDBClient::IDBConnectionToServer::didFireVersionChangeEvent):
        (WebCore::IDBClient::IDBConnectionToServer::confirmDidCloseFromServer):
        (WebCore::IDBClient::IDBConnectionToServer::connectionToServerLost):
        (WebCore::IDBClient::IDBConnectionToServer::openDBRequestCancelled):
        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionPendingClose):
        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionClosed):
        (WebCore::IDBClient::IDBConnectionToServer::abortOpenAndUpgradeNeeded):
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames):
        * Modules/indexeddb/client/IDBConnectionToServer.h:

        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::serverConnectionLostError):

        * page/Page.cpp:
        (WebCore::Page::setSessionID):
        (WebCore::Page::idbConnection):
        (WebCore::Page::optionalIDBConnection):
        (WebCore::Page::clearIDBConnection):
        * page/Page.h:

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

        Youtube video pages crash after a couple of minutes
        https://bugs.webkit.org/show_bug.cgi?id=187316

        Reviewed by Antti Koivisto.

        The crash was caused by HTMLMediaElement::stopWithoutDestroyingMediaPlayer invoking updatePlaybackControlsManager,
        which traverses all media players across different documents including the one in the main frame while its iframe
        is getting removed (to update the Touch Bar's media control).

        Fixed the bug by making this code async in both stopWithoutDestroyingMediaPlayer and ~HTMLMediaElement. To do this,
        this patch moves the timer to update the playback controls manager from HTMLMediaElement to Page since scheduling
        a timer owned by HTMLMediaElement in its destructor wouldn't work as the timer would get destructed immediately.

        Also replaced the call to clientWillPausePlayback by a call to stopSession in stopWithoutDestroyingMediaPlayer
        since the former also updates the layout synchronously via updateNowPlayingInfo; the latter function schedules
        a timer via scheduleUpdateNowPlayingInfo instead.

        Test: media/remove-video-best-media-element-in-main-frame-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call scheduleUpdatePlaybackControlsManager now that timer has been
        moved to Page.
        (WebCore::HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager): Made this return a RefPtr instead of
        a raw pointer while we're at it.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Call scheduleUpdatePlaybackControlsManager.
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto. Also invoke stopSession instead of
        clientWillPausePlayback on MediaSession since clientWillPausePlayback will synchronously try to update the layout.
        (WebCore::HTMLMediaElement::contextDestroyed):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::schedulePlaybackControlsManagerUpdate): Renamed from scheduleUpdatePlaybackControlsManager.
        (WebCore::HTMLMediaElement::updatePlaybackControlsManager): Moved to Page::playbackControlsManagerUpdateTimerFired.
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::schedulePlaybackControlsManagerUpdate): Added.
        (WebCore::Page::playbackControlsManagerUpdateTimerFired): Moved from HTMLMediaElement::updatePlaybackControlsManager.
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::bestMediaElementForShowingPlaybackControlsManager):
        * testing/Internals.h:

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

        REGRESSION(r233496): Crash in WebCore::VideoTrack::clearClient()
        https://bugs.webkit.org/show_bug.cgi?id=187377

        Reviewed by Simon Fraser.

        Clear m_client of an audio track or a video track before removing it from the list
        since TrackListBase::m_inbandTracks may hold the last ref to the track.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removeAudioTrack):
        (WebCore::HTMLMediaElement::removeVideoTrack):

2018-07-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r233495) [cairo] drawGlyphsShadow should use the fast path for zero blur-radius
        https://bugs.webkit.org/show_bug.cgi?id=187336

        Reviewed by Carlos Garcia Campos.

        drawGlyphsShadow has a fast path to draw a shadow without a shadow
        layer. Since r233495, it is not used for zero blur-radius shadow.

        In Bug 187244, I changed ShadowState::isRequired not to check
        blur-radius is zero. This is not a right fix.

        This change reverts r233495.

        No new tests (Covered by existing tests).

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::ShadowState::isRequired const): Return false if
        'blur' is zero.
        (WebCore::Cairo::fillRectWithRoundedHole): Use
        ShadowState::isVisible instead of ShadowState::isRequired to check
        a shadow should be drawn.

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

        Rename and flip the meaning of defaultAppearance to be useDarkAppearance.
        https://bugs.webkit.org/show_bug.cgi?id=187369
        rdar://problem/41870420

        Reviewed by Tim Horton.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersDarkInterfaceEvaluate):
        * css/StyleColor.h:
        * dom/Document.cpp:
        (WebCore::Document::useDarkAppearance const):
        (WebCore::Document::styleColorOptions const):
        (WebCore::Document::useDefaultAppearance const): Deleted.
        * dom/Document.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint):
        * page/Page.cpp:
        (WebCore::Page::useDarkAppearance const):
        (WebCore::Page::defaultAppearance const): Deleted.
        * page/Page.h:
        (WebCore::Page::setUseDarkAppearance):
        (WebCore::Page::setDefaultAppearance): Deleted.
        * platform/Theme.h:
        * platform/graphics/MediaPlaybackTargetPicker.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::paint):
        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker):
        * platform/mock/MediaPlaybackTargetPickerMock.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::resolveStyleForMarkedText):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const):
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors const):
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const):
        (WebCore::RenderThemeMac::colorCache const):
        (WebCore::RenderThemeMac::systemColor const):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw):

2018-07-05  Commit Queue  <commit-queue@webkit.org>

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

        Changes made for youtube crashes has caused 15 api failures
        (Requested by Truitt on #webkit).

        Reverted changeset:

        "Youtube video pages crash after a couple of minutes"
        https://bugs.webkit.org/show_bug.cgi?id=187316
        https://trac.webkit.org/changeset/233539

2018-07-05  Chris Dumez  <cdumez@apple.com>

        Update Element API to use qualifiedName instead of name/localName where applicable
        https://bugs.webkit.org/show_bug.cgi?id=187347

        Reviewed by Darin Adler.

        Update Element API to use qualifiedName instead of name/localName where applicable. Naming
        is now consistent with the IDL and the specification:
        - https://dom.spec.whatwg.org/#element

        Our implementation properly deals with qualified names already, even though the parameters
        were named localName.

        * dom/Element.cpp:
        (WebCore::Element::getAttribute const):
        (WebCore::Element::toggleAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::getAttributeNode):
        (WebCore::Element::hasAttribute const):
        * dom/Element.h:

2018-07-04  Ryosuke Niwa  <rniwa@webkit.org>

        Youtube video pages crash after a couple of minutes
        https://bugs.webkit.org/show_bug.cgi?id=187316

        Reviewed by Antti Koivisto.

        The crash was caused by HTMLMediaElement::stopWithoutDestroyingMediaPlayer invoking updatePlaybackControlsManager,
        which traverses all media players across different documents including the one in the main frame while its iframe
        is getting removed (to update the Touch Bar's media control).

        Fixed the bug by making this code async in both stopWithoutDestroyingMediaPlayer and ~HTMLMediaElement. To do this,
        this patch moves the timer to update the playback controls manager from HTMLMediaElement to Page since scheduling
        a timer owned by HTMLMediaElement in its destructor wouldn't work as the timer would get destructed immediately.

        Also replaced the call to clientWillPausePlayback by a call to stopSession in stopWithoutDestroyingMediaPlayer
        since the former also updates the layout synchronously via updateNowPlayingInfo; the latter function schedules
        a timer via scheduleUpdateNowPlayingInfo instead.

        Test: media/remove-video-best-media-element-in-main-frame-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Call scheduleUpdatePlaybackControlsManager now that timer has been
        moved to Page.
        (WebCore::HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager): Made this return a RefPtr instead of
        a raw pointer while we're at it.
        (WebCore::HTMLMediaElement::clearMediaPlayer): Call scheduleUpdatePlaybackControlsManager.
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto. Also invoke stopSession instead of
        clientWillPausePlayback on MediaSession since clientWillPausePlayback will synchronously try to update the layout.
        (WebCore::HTMLMediaElement::contextDestroyed):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::scheduleUpdatePlaybackControlsManager):
        (WebCore::HTMLMediaElement::updatePlaybackControlsManager): Moved to Page::schedulePlaybackControlsManagerUpdate.
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::schedulePlaybackControlsManagerUpdate): Added.
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::bestMediaElementForShowingPlaybackControlsManager):
        * testing/Internals.h:

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

        Do not assume that hypen's width can be computed using the simplified text measure codepath.
        https://bugs.webkit.org/show_bug.cgi?id=187352
        <rdar://problem/40821283>

        Reviewed by Simon Fraser.

        Just because the text content is qualified for simplified text measure, it does not necessarily mean the hyphen is simple enough as well.

        Test: fast/text/hyphen-is-complex-crash.html

        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        (WebCore::SimpleLineLayout::TextFragmentIterator::TextFragmentIterator):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:

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

        Video sometimes flickers when playing to AppleTV
        https://bugs.webkit.org/show_bug.cgi?id=187193
        <rdar://problem/40153865>

        Unreviewed, fix a broken API test.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory): None should set the category to AVAudioSessionCategoryAmbient, 
        because it signals that WebKit is not playing audio so we want allow other apps to play.

2018-07-05  Per Arne Vollan  <pvollan@apple.com>

        Use ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) in ScrollAnimatorMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=187334

        Reviewed by Alex Christensen.

        Use ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING) instead of __MAC_OS_X_VERSION_MIN_REQUIRED when deciding
        to use NSTimer or NSAnimation for scrollbar animation.

        No new tests. No change in behavior.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        (-[WebScrollbarPartAnimation startAnimation]):
        (-[WebScrollbarPartAnimation setCurrentProgress:setCurrentProgress:]):

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

        Don't invert text color for selections in light mode.
        https://bugs.webkit.org/show_bug.cgi?id=187349
        rdar://problem/41297946

        Reviewed by Tim Horton.

        Fix color caching in RenderTheme so we don't cache a dark mode color
        for a light appearance, or vise versa. Use the new color caching
        in RenderThemeMac, and clear the color caches in purgeCaches.

        Allow supportsSelectionForegroundColors to conditionalize on StyleColor::Options.
        Return true only in dark mode.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor const):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveSelectionForegroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::purgeCaches):
        (WebCore::RenderTheme::platformColorsDidChange):
        (WebCore::RenderTheme::activeTextSearchHighlightColor const):
        (WebCore::RenderTheme::inactiveTextSearchHighlightColor const):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsSelectionForegroundColors const):
        (WebCore::RenderTheme::supportsListBoxSelectionForegroundColors const):
        (WebCore::RenderTheme::colorCache const):
        (WebCore::RenderTheme::purgeCaches): Deleted.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::purgeCaches):
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors const):
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformColorsDidChange):
        (WebCore::RenderThemeMac::colorCache const):
        (WebCore::RenderThemeMac::systemColor const):

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

        SimpleLineLayout::FlowContents wastes 54KB of Vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186709
        <rdar://problem/41173793>

        Reviewed by Simon Fraser.

        The size of the m_segments vector in SimpleLineLayoutFlowContents is alway pre-computed and don't change after the initial append.  

        Not testable.

        * rendering/SimpleLineLayoutFlowContents.h:

2018-07-05  Nan Wang  <n_wang@apple.com>

        AX: setValue on text controls should send out key events
        https://bugs.webkit.org/show_bug.cgi?id=186690
        <rdar://problem/41169985>

        Reviewed by Chris Fleizach.

        Use Editor's insertText function when the text control element is being
        focused, so that the InputEvent will be dispatched properly.

        Test: accessibility/mac/set-value-editable-dispatch-events.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2018-07-05  Chris Dumez  <cdumez@apple.com>

        ASSERT(m_dictionaryStack.size() == 1) assertion hit in ~KeyedDecoderCF() when decoding fails
        https://bugs.webkit.org/show_bug.cgi?id=187152

        Reviewed by Brent Fulgham.

        Whenever a call to KeyedDecoderCF::beginArrayElement() succeeds (returns true), it
        appends an item to m_dictionaryStack which is expected to get popped later on via
        a matching call to KeyedDecoderCF::endArrayElement(). The ASSERT(m_dictionaryStack.size() == 1)
        assertion in the destructor protects against a begin / end mismatch.

        However, there was a bug in KeyedDecoder::decodeObjects(), which would cause us to return early
        after a call to beginArrayElement() when the lambda function call returns false, causing us
        not to call the matching endArrayElement() in this case. This patch addresses the issue by
        calling endArrayElement() before returning early.

        This bug was uncovered by r233309 which slightly changed the ITP encoding / decoding format.
        Because empty HashCountedSets are now expected to be encoded as empty array, decoding of old
        data fails and we hit the buggy code path.

        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeObjects):

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

        Move CSSParserContext to a file of its own
        https://bugs.webkit.org/show_bug.cgi?id=187342

        Reviewed by Zalan Bujtas.

        Move it out from CSSParserMode.h and CSSParser.cpp.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * contentextensions/ContentExtensionParser.cpp:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/StyleProperties.h:
        * css/StyleSheetContents.h:
        * css/parser/CSSDeferredParser.h:
        * css/parser/CSSParser.cpp:
        (WebCore::strictCSSParserContext): Deleted.
        (WebCore::CSSParserContext::CSSParserContext): Deleted.
        (WebCore::operator==): Deleted.
        * css/parser/CSSParser.h:
        * css/parser/CSSParserContext.cpp: Added.
        (WebCore::strictCSSParserContext):
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):

        Also add the missing textAutosizingEnabled bit.

        * css/parser/CSSParserContext.h: Copied from Source/WebCore/css/parser/CSSParserMode.h.
        (WebCore::CSSParserContextHash::hash):

        Also add the missing bits to the hash function.
        
        (WebCore::isQuirksModeBehavior): Deleted.
        (WebCore::isUASheetBehavior): Deleted.
        (WebCore::isUnitLessValueParsingEnabledForMode): Deleted.
        (WebCore::isCSSViewportParsingEnabledForMode): Deleted.
        (WebCore::strictToCSSParserMode): Deleted.
        (WebCore::isStrictParserMode): Deleted.
        * css/parser/CSSParserIdioms.h:
        * css/parser/CSSParserImpl.h:
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContext::completeURL const): Deleted.
        (WebCore::operator!=): Deleted.
        (WebCore::CSSParserContextHash::hash): Deleted.
        (WebCore::CSSParserContextHash::equal): Deleted.
        (WTF::HashTraits<WebCore::CSSParserContext>::constructDeletedValue): Deleted.
        (WTF::HashTraits<WebCore::CSSParserContext>::isDeletedValue): Deleted.
        (WTF::HashTraits<WebCore::CSSParserContext>::emptyValue): Deleted.
        * css/parser/CSSPropertyParserHelpers.h:
        * css/parser/CSSSelectorParser.cpp:
        * css/parser/CSSVariableParser.cpp:

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

        [Web Animations] The ready promise should initially be resolved
        https://bugs.webkit.org/show_bug.cgi?id=187341
        <rdar://problem/41844711>

        Reviewed by Dean Jackson.

        The Web Animations spec mandates that the ready promise is initially resolved.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):

2018-07-05  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Fix VRDisplayEvent implementation
        https://bugs.webkit.org/show_bug.cgi?id=187337

        Reviewed by Žan Doberšek.

        VRDisplayEvent implementation had two issues. First there were no attributes storing the
        VRDisplay the event refers to. Secondly the VRDisplayEventReason is not mandatory so it
        should be handled via an optional.

        * Modules/webvr/VRDisplayEvent.cpp:
        (WebCore::VRDisplayEvent::VRDisplayEvent):
        (WebCore::VRDisplayEvent::display const): Deleted.
        (WebCore::VRDisplayEvent::reason const): Deleted.
        * Modules/webvr/VRDisplayEvent.h:

2018-07-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r233325): [GTK] Broke 40 animations tests
        https://bugs.webkit.org/show_bug.cgi?id=187264

        Reviewed by Žan Doberšek.

        This is because DocumentAnimationScheduler uses DisplayRefreshMonitor, that is only used by GTK port when
        accelerated compositing is enabled. Add a GTK display refresh monitor implementation to be used as the default.

        * PlatformGTK.cmake: Add new file to compilation.
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::createDefaultDisplayRefreshMonitor): Create DisplayRefreshMonitorGtk in GTK.
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.cpp: Added.
        (WebCore::DisplayRefreshMonitorGtk::DisplayRefreshMonitorGtk):
        (WebCore::DisplayRefreshMonitorGtk::~DisplayRefreshMonitorGtk):
        (WebCore::onFrameClockUpdate):
        (WebCore::DisplayRefreshMonitorGtk::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitorGtk::displayLinkFired):
        * platform/graphics/gtk/DisplayRefreshMonitorGtk.h: Added.
        (WebCore::DisplayRefreshMonitorGtk::create):

2018-07-04  Antti Koivisto  <antti@apple.com>

        Reparse user stylesheets when _useSystemAppearance changes
        https://bugs.webkit.org/show_bug.cgi?id=187312
        <rdar://problem/38565834>

        Reviewed by Tim Horton.

        This setting may affect user stylesheet parsing. Reparse if it changes.

        Test: fast/media/use-system-appearance-user-stylesheet-parsing.html

        * page/Page.cpp:
        (WebCore::Page::setUseSystemAppearance):
        * page/Page.h:
        (WebCore::Page::setUseSystemAppearance): Deleted.
        * testing/Internals.cpp:
        (WebCore::Internals::setUseSystemAppearance):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-04  Thibault Saunier  <tsaunier@igalia.com>

        RealtimeIncomingVideoSources: Call stop() directly in the destructor
        https://bugs.webkit.org/show_bug.cgi?id=187303

        Reviewed by Youenn Fablet.

        Avoiding to call stopProducingData when we are not actually producing data.

        This fixes tests that will run once the WPE/GTK PeerConnection implementation is merged.

        * platform/mediastream/RealtimeIncomingVideoSource.h:
        (WebCore::RealtimeIncomingVideoSource::~RealtimeIncomingVideoSource):

2018-07-04  Thibault Saunier  <tsaunier@igalia.com>

        [GTK][WPE] Stop pushing the StreamCollection as event in GStreamerMediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=187304

        Reviewed by Philippe Normand.

        We let parsebin build the StreamCollection for us and pass extra metadata through the
        `TAG_EVENT` pushing the collection ourself is not bringing anything but adds extra work in the
        MediaPlayerGStreamer duplicating the STREAM_COLLECTION message for no good reason.

        MediaStream layout tests already test that code path.

        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
        (WebCore::webkitMediaStreamSrcPadProbeCb):

2018-07-04  Frederic Wang  <fwang@igalia.com>

        [WebIDL] Remove custom bindings for HTMLDocument
        https://bugs.webkit.org/show_bug.cgi?id=173444

        Unreviewed, add missing bugzilla link for FIXME comments.

        * dom/Document.cpp:
        (WebCore::Document::closeForBindings):
        (WebCore::Document::write):
        (WebCore::Document::writeln):

2018-07-04  Tim Horton  <timothy_horton@apple.com>

        Introduce PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=187315

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        (WebCore::GeolocationPosition::GeolocationPosition):
        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):
        (WebCore::AudioSession::routingContextUID const):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::registerItemToPasteboard):
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList itemProvider]):

2018-07-03  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at timing-model/timelines/timelines.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186508
        <rdar://problem/41000260>

        Reviewed by Dean Jackson.

        The remaining failing assertion in this test assumes that the ready promise for an animation is fired
        prior to requestAnimationFrame callbacks being fired in the current event loop such that registering
        the requestAnimationFrame() call within the ready promise has its callback fired with the same timeline
        time. To ensure that is true, we perform a microtask checkpoint as soon as we're done running pending
        tasks, which will resolve the ready promise for any play-pending animations.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations):

2018-07-03  Ryosuke Niwa  <rniwa@webkit.org>

        Nullptr crash accessing Document in GenericEventQueue::dispatchOneEvent()
        https://bugs.webkit.org/show_bug.cgi?id=187284

        Reviewed by Eric Carlson.

        The null pointer crash was caused by some GenericEventQueue dispatching an event in a stopped document,
        which does not have a valid script execution context because some uses of GenericEventQueue in media code
        was not closing the queue upon stopping of all active DOM objects.

        Fixed all uses of GenericEventQueue which did not suspend or stop the queue with active DOM objects.
        Made SourceBufferList and TrackListBase (along with AudioTrackList, TextTrackList, and VideoTrackList)
        inherit from ActiveDOMObject instead of ContextDestructionObserver to do this.

        Also fixed a bug that media elements inside a template element (and other cases where the document doesn't
        have a browsing context) were scheduling events since this would hit the newly added debug assertion in
        GenericEventQueue::dispatchOneEvent.

        Test: media/track/video-track-addition-and-frame-removal.html

        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::suspend): Assert that we never try to suspend when the document has
        this object alive since canSuspendForDocumentSuspension always returns false.
        (WebCore::WebKitMediaKeySession::resume): Ditto.
        (WebCore::WebKitMediaKeySession::stop): Stop the event queue to avoid the crash.
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer): Don't do any work to update tracks when the active DOM
        objects are stopped since this MediaSource and the related media objects are about to be destructed.
        (WebCore::MediaSource::suspend): Assert that m_asyncEventQueue is empty as canSuspendForDocumentSuspension
        returns false whenever the queue is not empty.
        (WebCore::MediaSource::resume): Ditto.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::suspend): Ditto.
        (WebCore::SourceBuffer::resume): Ditto.
        (WebCore::SourceBuffer::stop): Stop the event queue to avoid the crash.
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.cpp:
        (WebCore::SourceBufferList): Made this an active DOM object.
        (WebCore::SourceBufferList::SourceBufferList):
        (WebCore::SourceBufferList::canSuspendForDocumentSuspension const): Added. Return false when there are
        pending events to match other media code.
        (WebCore::SourceBufferList::suspend): Added. Assert that the event queue is empty here.
        (WebCore::SourceBufferList::resume): Ditto.
        (WebCore::SourceBufferList::stop): Added. Stop the event queue to avoid the crash.
        (WebCore::SourceBufferList::activeDOMObjectName const): Added.
        * Modules/mediasource/SourceBufferList.h:
        (WebCore::SourceBufferList): Made this an active DOM object.
        * Modules/mediasource/SourceBufferList.idl:
        * dom/Document.h:
        (WebCore::Document::hasBrowsingContext const): Added.
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::dispatchOneEvent): Added an assertion to catch when an event is dispatched
        inside a stopped document, which is never correct and causes this crash down the line.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): Exit early when the document doesn't have a browsing context;
        e.g. when the media element is inside a template element.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::sourceWasAdded): Ditto.
        * html/track/AudioTrackList.cpp:
        (AudioTrackList::activeDOMObjectName const): Added.
        * html/track/AudioTrackList.h:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrackList.cpp::
        (TextTrackList::activeDOMObjectName const): Added.
        * html/track/TextTrackList.h:
        * html/track/TextTrackList.idl:
        * html/track/TrackListBase.cpp:
        (WebCore::TrackListBase): Made this an active DOM object.
        (WebCore::TrackListBase::TrackListBase): 
        (WebCore::TrackListBase::canSuspendForDocumentSuspension const): Added. Return false when there are pending events
        to match other media code.
        (WebCore::TrackListBase::suspend): Added. Assert that the event queue is empty here.
        (WebCore::TrackListBase::resume): Ditto.
        (WebCore::TrackListBase::stop): Added. Stop the event queue to avoid the crash.
        * html/track/TrackListBase.h:
        * html/track/VideoTrackList.cpp:
        (VideoTrackList::activeDOMObjectName const): Added.
        * html/track/VideoTrackList.h:
        * html/track/VideoTrackList.idl:

2018-07-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        [cairo] Doesn't paint box-shadow with zero blur-radius
        https://bugs.webkit.org/show_bug.cgi?id=187244

        Reviewed by Žan Doberšek.

        Cairo::ShadowState::isRequired() returned false if blur-radius is
        zero.

        No new tests (Covered by existing tests).

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::ShadowState::isRequired const): Do not check blur
        is zero.

2018-07-03  Ryosuke Niwa  <rniwa@webkit.org>

        Add a release assert to diagnose infinite recursions in removeAllEventListeners()
        https://bugs.webkit.org/show_bug.cgi?id=187287

        Reviewed by Keith Miller.

        Assert that we never re-enter removeAllEventListeners per thread.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::removeAllEventListeners):
        * platform/ThreadGlobalData.h:
        (WebCore::ThreadGlobalData::ThreadGlobalData::isInRemoveAllEventListeners const):
        (WebCore::ThreadGlobalData::ThreadGlobalData::setIsInRemoveAllEventListeners):

2018-07-03  Chris Dumez  <cdumez@apple.com>

        performance-api/performance-observer-no-document-leak.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=186938
        <rdar://problem/41379336>

        Reviewed by Simon Fraser.

        Add internals API to get the identifier of a document and to ask if the document with
        a given identifier is still alive. This is helpful to write tests for document leaking
        fixes.

        * testing/Internals.cpp:
        (WebCore::Internals::documentIdentifier const):
        (WebCore::Internals::isDocumentAlive const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-07-03  Chris Dumez  <cdumez@apple.com>

        Improve window.event compliance: Should not be set when target is in shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=186266

        Reviewed by Ryosuke Niwa.

        Stop exposing window.event to Shadow DOM by not setting window.event if the event's target
        is a Node inside a shadow tree. This is as per the latest DOM specification:
        - https://github.com/whatwg/dom/pull/407

        This aligns our behavior with Blink as well:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=779461

        Tests: imported/w3c/web-platform-tests/dom/events/event-global.html
               imported/w3c/web-platform-tests/dom/events/event-global.worker.html

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):

2018-07-03  Chris Dumez  <cdumez@apple.com>

        [Cocoa] Disable vnode guard related simulated crashes for WKTR / DRT and WebSQL
        https://bugs.webkit.org/show_bug.cgi?id=187270
        <rdar://problem/40674034>

        Reviewed by Geoffrey Garen.

        Disable vnode guard related simulated crashes for WebSQL by setting the expected
        environment variable, if not already set by WKTR / DRT.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::initialize):
        (WebCore::DatabaseManager::platformInitialize):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/cocoa/DatabaseManagerCocoa.mm: Added.
        (WebCore::DatabaseManager::paltformInitialize):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/FileSystem.h:
        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::FileSystem::realPath):
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::realPath):

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

        Don't allow autoplay when the element is suspended
        https://bugs.webkit.org/show_bug.cgi?id=187299
        <rdar://problem/41044691>

        Reviewed by Youenn Fablet.
        
        Block autoplay when a media element is suspended. Add more release logging to the methods
        that handle autoplay attempts to help diagnose future media playback problems.

        * html/HTMLMediaElement.cpp:
        (WebCore::convertEnumerationToString): Convert PlaybackWithoutUserGesture to a string.
        (WebCore::HTMLMediaElement::dispatchPlayPauseEventsIfNeedsQuirks): Add logging.
        (WebCore::HTMLMediaElement::hardwareMutedStateDidChange): Ditto.
        (WebCore::HTMLMediaElement::handleAutoplayEvent): Ditto.
        (WebCore::HTMLMediaElement::userDidInterfereWithAutoplay): Ditto.
        (WebCore::HTMLMediaElement::setPlaybackWithoutUserGesture): Ditto.
        * html/HTMLMediaElement.h:
        (WTF::LogArgument<WebCore::HTMLMediaElement::PlaybackWithoutUserGesture>::toString):

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const): Playback is not permitted when the
        element is suspended.
        * html/MediaElementSession.h:

2018-07-03  Zalan Bujtas  <zalan@apple.com>

        [LFC] Generate anonymous inline box for text content.
        https://bugs.webkit.org/show_bug.cgi?id=187301

        Reviewed by Antti Koivisto.

        Always have a inline container for text content (and no dedicated text renderer).

        * layout/layouttree/LayoutInlineBox.cpp:
        (WebCore::Layout::InlineBox::InlineBox):
        * layout/layouttree/LayoutInlineBox.h:
        (WebCore::Layout::InlineBox::setContent):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-07-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Embed certificate information into ResourceResponse.
        https://bugs.webkit.org/show_bug.cgi?id=187102

        Reviewed by Youenn Fablet.

        No new tests but tested internally.

        Collect certificate information from the communication and put them into
        ResourceResponse for the sake of advanced security checking and information
        providing to the user.

        * platform/Curl.cmake:
        * platform/network/curl/CertificateInfo.cpp: Copied from Source/WebCore/platform/network/curl/CertificateInfo.h.
        (WebCore::CertificateInfo::CertificateInfo):
        (WebCore::CertificateInfo::isolatedCopy const):
        (WebCore::CertificateInfo::makeCertificate):
        * platform/network/curl/CertificateInfo.h:
        (WebCore::CertificateInfo::verificationError const):
        (WebCore::CertificateInfo::certificateChain const):
        (WebCore::operator==):
        (WebCore::CertificateInfo::CertificateInfo): Deleted.
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didCompleteTransfer):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::getCertificateInfo const):
        (WebCore::CurlRequest::getNetworkLoadMetrics const):
        (WebCore::CurlRequest::getNetworkLoadMetrics): Deleted.
        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):
        (WebCore::CurlResourceHandleDelegate::curlDidComplete):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::setHostAllowsAnyHTTPSCertificate):
        (WebCore::CurlSSLHandle::canIgnoredHTTPSCertificate):
        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        (WebCore::CurlSSLVerifier::verifyCallback):
        (WebCore::StackOfX509::StackOfX509): For RAII. Used in pemDataFromCtx().
        (WebCore::StackOfX509::~StackOfX509): Ditto.
        (WebCore::StackOfX509::count): Ditto.
        (WebCore::StackOfX509::item): Ditto.
        (WebCore::BIOHolder::BIOHolder): Ditto.
        (WebCore::BIOHolder::~BIOHolder): Ditto.
        (WebCore::BIOHolder::write): Ditto.
        (WebCore::BIOHolder::asCertificate): Ditto.
        (WebCore::pemDataFromCtx): Become simple static function.
        (WebCore::convertToSSLCertificateFlags): Ditto.
        (WebCore::CurlSSLVerifier::certVerifyCallback): Deleted.
        (WebCore::CurlSSLVerifier::getPemDataFromCtx): Deleted.
        (WebCore::CurlSSLVerifier::convertToSSLCertificateFlags): Deleted.
        * platform/network/curl/CurlSSLVerifier.h:
        (WebCore::CurlSSLVerifier::verificationError):
        (WebCore::CurlSSLVerifier::certificateChain const):
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceErrorCurl.cpp:
        (WebCore::ResourceError::isSSLConnectError const):
        (WebCore::ResourceError::isSSLCertVerificationError const):
        (WebCore::ResourceError::hasSSLConnectError const): Deleted.
        * platform/network/curl/ResourceResponse.h:
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::setCertificateInfo):
        (WebCore::ResourceResponse::setDeprecatedNetworkLoadMetrics):

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

        Clean up the layer volatility code and logging
        https://bugs.webkit.org/show_bug.cgi?id=187286

        Reviewed by Tim Horton.

        Export a function.

        * platform/graphics/cocoa/IOSurface.h:

2018-07-03  Commit Queue  <commit-queue@webkit.org>

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

        this revision is causing crashes on iOS 11 simulator
        (Requested by Truitt on #webkit).

        Reverted changeset:

        "[Fullscreen] Restore ASSERT_NOT_REACHED() checks in exit
        fullscreen handler after r231924"
        https://bugs.webkit.org/show_bug.cgi?id=186945
        https://trac.webkit.org/changeset/233112

2018-07-03  Chris Dumez  <cdumez@apple.com>

        Implement support for Element.toggleAttribute
        https://bugs.webkit.org/show_bug.cgi?id=186883

        Reviewed by Sam Weinig.

        Implement support for Element.toggleAttribute as per:
        - https://github.com/whatwg/dom/issues/461
        - https://dom.spec.whatwg.org/#dom-element-toggleattribute

        This was already implemented in Blink:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=854960

        Edge expressed public support:
        - https://github.com/whatwg/dom/issues/461#issuecomment-398206390

        Gecko is working on it:
        - https://bugzilla.mozilla.org/show_bug.cgi?id=1469592

        * dom/Element.cpp:
        (WebCore::Element::toggleAttribute):
        * dom/Element.h:
        * dom/Element.idl:

2018-07-03  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement minimum/maximum content width logic.
        https://bugs.webkit.org/show_bug.cgi?id=187241

        Reviewed by Antti Koivisto.

        Compute the minimum/maximum content width if needed and cache the values on the formatting state.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::shrinkToFitWidth): Deleted.
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::setMinimumMaximumContentWidth):
        (WebCore::Layout::FormattingState::clearMinimumMaximumContentWidth):
        (WebCore::Layout::FormattingState::minimumMaximumContentWidth const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::establishedFormattingState):
        * layout/LayoutContext.h:
        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::createFormattingState const):
        (WebCore::Layout::BlockFormattingContext::minimumMaximumContentWidth const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::minimumMaximumContentWidthNeedsChildrenWidth):
        (WebCore::Layout::BlockFormattingContext::Geometry::minimumMaximumContentWidth):
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::createFormattingState const):
        (WebCore::Layout::InlineFormattingContext::minimumMaximumContentWidth const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:
        * page/FrameViewLayoutContext.cpp:

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

        Unreviewed, rolling out r233461.

        Assertions triggered during iOS 11 debug layout and API tests

        Reverted changeset:

        "[iOS] Add assert to catch improper use of WebCore::Timer in
        UI Process"
        https://bugs.webkit.org/show_bug.cgi?id=185330
        https://trac.webkit.org/changeset/233461

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

        Update Fullscreen anti-phishing alert text
        https://bugs.webkit.org/show_bug.cgi?id=187199
        <rdar://problem/41162543>

        Reviewed by Brent Fulgham.

        * English.lproj/Localizable.strings:

2018-07-03  Frederic Wang  <fwang@igalia.com>

        REGRESSION (r232186): Hardware-accelerated CSS animations using steps() timing function no longer work
        https://bugs.webkit.org/show_bug.cgi?id=186129

        Reviewed by Antoine Quint.

        When the WebAnimationsCSSIntegration flag is enabled, animating the transform property with
        a steps() timing function no longer works. This is because the WebAnimation code wrongly
        assumes that the transform property can always be accelerated (for counterexamples, see
        GraphicsLayerCA::animationCanBeAccelerated). For consistency with AnimationBase, we make
        WebAnimation fallback to non-accelerated mode when RenderBoxModelObject::startAnimation
        fails. This addresses the regression previously mentioned.

        Test: http/wpt/css/css-animations/start-animation-001.html

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions): Fallback to
        non-accelerated mode if startAnimation failed.

2018-07-03  David Kilzer  <ddkilzer@apple.com>

        [iOS] Add assert to catch improper use of WebCore::Timer in UI Process
        <https://webkit.org/b/185330>
        <rdar://problem/32816079>

        Reviewed by Darin Adler.

        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::s_webKitProcessType): Add. Global to track process
        type.
        (WebCore::setWebKitProcessType): Implement new function that is
        called when initializing Web, Network, and Storage processes.
        (WebCore::isInNetworkProcess): Add.
        (WebCore::isInStorageProcess): Add.
        (WebCore::isInWebProcess): Add.
        - Check value in s_webKitProcessType to determine which process
          is currently running.
        * platform/RuntimeApplicationChecks.h:
        (WebCore::isInNetworkProcess): Add.
        (WebCore::isInStorageProcess): Add.
        (WebCore::isInWebProcess):
        - Make available for all platforms.

        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase): Add assert and os_log_fault.
        This catches the unwanted behavior on iOS using isAllowed().
        (WebCore::TimerBase::isAllowed): Add implementation.
        * platform/Timer.h:
        (WebCore::TimerBase::isAllowed): Add declaration.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::isInWebProcess): Delete.  Replace with method in
        RuntimeApplicationChecks.cpp.

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

        Tighter limit for canvas memory use on iOS
        https://bugs.webkit.org/show_bug.cgi?id=187279
        <rdar://problem/38420562>

        Reviewed by Simon Fraser.

        We allowed 448MB of canvas buffer memory. This is still too much in some cases. Painting a large
        canvas may also requires several other temporary canvas sized buffers getting us easily over
        the process size limit.

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxActivePixelMemory):

        Drop to (ramSize() / 4) which computes to 224MB on 2GB devices.

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

        [Cocoa] Google Fonts doesn't work if the user has the requested font locally-installed
        https://bugs.webkit.org/show_bug.cgi?id=187228
        <rdar://problem/40967280>

        Reviewed by Brent Fulgham.

        This is due to the local() items in the src: descriptor in the @font-family blocks.

        This is because of a behavior difference between CSSFontFaceSource::load() and CSSFontFaceSource::font().
        load() is supposed to set the status() to Success iff the font can be used, and then CSSFontFaceSource::font()
        is supposed to return the font itself to use. load() works by constructing a dummy FontDescription and
        performing a system lookup (to see if the local font really exists). However, this dummy FontDescription
        doesn't set the ShouldAllowUserInstalledFonts flag. Then, in CSSFontFaceSource::font(), a similar lookup is
        performed, except this one has the original FontDescription (with the correct value of the
        ShouldAllowUserInstalledFonts flag set. Therefore, the two functions disagree about the state of the flag.

        When the CSSFontFaceSource's status gets set to Success, that means "this is the font face source that
        represents the @font-face block" but when CSSFontFaceSource::font() returns nullptr, that means "The font face
        source can't be used for some reason" so we then continue searching down the font-family list (and render the
        text in Helvetica or whatever comes next).

        The solution is simple - just set the ShouldAllowUserInstalledFonts flag correctly in the dummy
        FontDescription.

        Test: fast/text/user-installed-fonts/local.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::allowUserInstalledFonts const):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSet.cpp:
        (WebCore::CSSFontFaceSet::ensureLocalFontFacesForFamilyRegistered):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):

2018-06-29  Ryosuke Niwa  <rniwa@webkit.org>

        Generate event and event target interface types directly instead of via macros
        https://bugs.webkit.org/show_bug.cgi?id=187215

        Reviewed by Chris Dumez.

        Made make_event_factory.pl directly generate EventInterface enum values and toJSNewlyCreated for Event,
        and EventTargetInterface enum values and toJS for EventTarget. Removed the code to generate EventFactory::create
        since it was never even compiled or used anywhere.

        This patch faithfully replicates what the macro used to generate but we should consider always generating either
        toJS or toJSNewlyCreated for both interfaces in the future.

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

        * DerivedSources.make: Generate EventTargetFactory.cpp, which is used to generate toJS function for EventTarget.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJSNewlyCreated): Deleted. Now generated directly in EventFactory.cpp.
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped): Removed the use of TRY_TO_UNWRAP_WITH_INTERFACE.
        (WebCore::toJS): Deleted. Now generated directly in EventFactory.cpp.
        * bindings/scripts/InFilesCompiler.pm:
        (generateInterfacesHeader): Use #pragma once. Generate enum values directly. Added the support for suffixing
        each type name with namespace for EventTarget.
        * dom/Event.h: Removed the declaration of EventInterface enum. It's now directly generated in EventInterfaces.h
        * dom/EventNames.in: Generate toJSNewlyCreated.
        * dom/EventTarget.h: Removed the declaration of EventTargetInterface as it's now done in EventTargetInterfaces.h.
        * dom/EventTargetFactory.in: Generate toJS.
        * dom/make_event_factory.pl:
        (defaultParameters): Added two new options. factoryFunction specifies whether toJS or toJSNewlyCreated is generated,
        and useNamespaceAsSuffix specifies whether each entry should be suffixed by the namespace (used by EventTarget).
        (generateCode): Added a missing semicolon.
        (generateImplementation): Removed the early exit for EventTarget since we now need to generate its toJS function.
        Replaced the code to generate EventFactory::create by the one to generate toJS / toJSNewlyCreated.

2018-07-02  Zalan Bujtas  <zalan@apple.com>

        HTML widget displays blank when playing on page
        https://bugs.webkit.org/show_bug.cgi?id=187272
        <rdar://problem/39317899>

        Reviewed by Simon Fraser.

        When a composited layer gains content (in this particular case, going from NoContentsLayer to ContentsLayerForMedia),
        we need to size the associated graphics layer accordingly (NoContentsLayer means zero sized graphics layer).  

        Not testable on iOS.

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

2018-07-02  David Kilzer  <ddkilzer@apple.com>

        Refactor InlineTextBox::emphasisMarkExistsAndIsAbove()
        <https://webkit.org/b/187204>

        Reviewed by Darin Adler.

        No new tests since there is no change in behavior.

        Refactor emphasisMarkExistsAndIsAbove() to return a
        std::optional<bool> instead of returning a bool and taking a
        std::optional<bool> argument.  The state returned is now:
        - std::nullopt => emphasis mark doesn't exist or is suppressed.
        - false => emphasis mark exists and is not suppressed, but is not above.
        - true => emphasis mark exists and is not suppressed, and is above.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment const):
        - Update for refactored method.  Remove some redundant checks
          for TextEmphasisMark::None that already happen in
          emphasisMarkExistsAndIsAbove().
        * rendering/InlineTextBox.cpp:
        (WebCore::emphasisPositionHasNeitherLeftNorRight): Delete.
        - Replaced by an OptionSet<TextEmphasisPosition>.
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        - Refactor as described above.
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        - Update for refactored method.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        - Update for new method signature.

2018-07-02  Megan Gardner  <megan_gardner@apple.com>

        Enable copy paste on iOS apps for Mac
        https://bugs.webkit.org/show_bug.cgi?id=187194
        <rdar://problem/41451148>

        Reviewed by Darin Adler.

        Difficult to test this platform.

        UIKit doesn't support itemProviders for iOS apps for Mac, so we need to revert to the
        older way of setting a dictionary of objects and keys for items. Not everything is
        availble in this form, and we haven't cleaned up our itemProvider code yet, so we 
        need to case some things out for now. Hopefully in the future, this will be implmented
        and can just work as expected, but for now, this is the best workaround.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::registerItemToPasteboard):
        (WebCore::PlatformPasteboard::write):
        (WebCore::PlatformPasteboard::readURL):
        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList itemProvider]):

2018-07-02  Eric Carlson  <eric.carlson@apple.com>

        Video sometimes flickers when playing to AppleTV
        https://bugs.webkit.org/show_bug.cgi?id=187193
        <rdar://problem/40153865>

        Reviewed by Jer Noble and Youenn Fablet.
        
        No new tests, existing test updated.

        Delay 100ms before changing the iOS audio session category because it is an expensive and
        potentially disruptive operation, and changing an audio or video element configuration
        can result in several quick, ultimately unnecessary, category changes.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::clientWillBeginPlayback): Add logging.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::PlatformMediaSessionManager): Initialize timer.
        (WebCore::PlatformMediaSessionManager::removeSession): Deactivate audio session when there
        are no sessions.
        (WebCore::PlatformMediaSessionManager::updateSessionStateTimerFired): New, update session now.
        (WebCore::PlatformMediaSessionManager::updateSessionState): Add parameter.
        * platform/audio/PlatformMediaSessionManager.h:

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState): Defer update if it isn't supposed to happen
        immediately.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory): Drive-by: setting the audio category to nil is a noop,
        so don't waste time doing it.
        (WebCore::AudioSession::tryToSetActive): Allow other apps to resume playback when we deactivate
        the audio session.

        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer): Add WTF_MAKE_FAST_ALLOCATED so it can be used in a unique_ptr.

2018-07-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        Clean up some spellchecking code
        https://bugs.webkit.org/show_bug.cgi?id=187238

        Reviewed by Tim Horton.

        A few minor tweaks to modernize some spellchecking code. No change in behavior.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

        Use move semantics when passing Ranges to markAllMisspellingsAndBadGrammarInRanges.

        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

        Change this to take RefPtr<Range>&& instead of Range*.

        (WebCore::Editor::markMisspellingsAndBadGrammar):

        Remove an unnecessary call to `RefPtr::get()`.

        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingParagraph::invalidateParagraphRangeValues):
        (WebCore::TextCheckingParagraph::checkingStart const):
        (WebCore::TextCheckingParagraph::checkingEnd const):
        (WebCore::TextCheckingParagraph::checkingLength const):
        (WebCore::TextCheckingParagraph::automaticReplacementStart const):
        (WebCore::TextCheckingParagraph::automaticReplacementLength const):

        Currently, all of these cached range offsets are `int`s, and use a value of -1 to denote that their values are
        missing and must be recomputed. Instead, make these `std::optional`s and let `std::nullopt` represent the
        missing value.

        * editing/TextCheckingHelper.h:

2018-07-02  Antoine Quint  <graouts@apple.com>

        Crash in WebCore::WebAnimation::timeToNextRequiredTick when running imported/w3c/web-platform-tests/web-animations/interfaces/Animatable/animate-no-browsing-context.html
        https://bugs.webkit.org/show_bug.cgi?id=187145

        Reviewed by Dean Jackson.

        Ensure we have a resolved time value before trying to use it.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timeToNextRequiredTick const):

2018-07-02  Antoine Quint  <graouts@apple.com>

        [Web Animations] Crash in KeyframeEffectReadOnly::applyPendingAcceleratedActions()
        https://bugs.webkit.org/show_bug.cgi?id=187139

        Reviewed by Dean Jackson.

        Ensure we have a resolved time value before trying to use it.

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

2018-07-02  Youenn Fablet  <youenn@apple.com>

        Reject getUserMedia promise if capture fails
        https://bugs.webkit.org/show_bug.cgi?id=187190

        Reviewed by Eric Carlson.

        In case PendingActivationMediaStream is notified of a change,
        Check whether any track failed to capture.
        If so, reject the promise.
        Add more release logging in error case.

        Covered by manual testing.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::PendingActivationMediaStream::~PendingActivationMediaStream):
        (WebCore::UserMediaRequest::PendingActivationMediaStream::characteristicsChanged):
        (WebCore::UserMediaRequest::mediaStreamIsReady):
        (WebCore::UserMediaRequest::mediaStreamDidFail):
        * Modules/mediastream/UserMediaRequest.h:
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::captureFailed):
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setupCaptureSession):

2018-07-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WK2] fast/parser/document-open-in-unload.html makes the following test crash
        https://bugs.webkit.org/show_bug.cgi?id=98345
        <rdar://problem/12474923>

        Reviewed by Ryosuke Niwa.

        m_documentLoader can become null in the middle of
        FrameLoader::commitProvisionalLoad by stopping the loading.

        No new tests (Covered by existing tests).

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad): Do null check of m_documentLoader.

2018-07-01  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] LastResort in the font family list causes emoji with joiners to be rendered as multiple .notdef characters
        https://bugs.webkit.org/show_bug.cgi?id=187209
        <rdar://problem/40920785>

        Reviewed by Darin Adler.

        Inside our complex text codepath, we perform our own font fallback, which
        includes a function that asks "can this font support this grapheme cluster?"
        Because of the mechanics of how fonts work, the implementation of this
        function is "Does the font's cmap table support every character of the
        cluster?" We were using Font::glyphForCharacter() to determine this; however,
        this function maps certain control characters to the zero width space
        character (with the intention that these control characters shouldn't be
        visible in the fast text codepath). That replacement, however, was causing
        us to get false negatives, because Apple Color Emoji doesn't support zero
        width space. Therefore, Apple Color Emoji was looking like it didn't support
        emoji combining sequences.

        The best solution to this would be to get Font::glyphForCharacter() to stop
        performing these replacements (see https://bugs.webkit.org/show_bug.cgi?id=187166).
        However, that is too risky of a change to be making right now. Instead,
        a more localized solution is to implement a version of "Does the font's cmap
        table support every character of the cluster" that doesn't perform the
        substitutions. This patch does exactly that, and uses a bit vector to cache
        the results. In order to not have a giant bit vector, we take the old code
        path if we know the substitutions won't affect us (and uses ASSERT()s to 
        validate this) so the bit vector only holds at maximum 3 words of storage.

        Test: fast/text/emoji-with-joiner.html

        * platform/graphics/Font.cpp:
        (WebCore::codePointSupportIndex):
        (WebCore::createAndFillGlyphPage):
        (WebCore::Font::platformSupportsCodePoint const):
        (WebCore::Font::supportsCodePoint const):
        (WebCore::Font::canRenderCombiningCharacterSequence const):
        * platform/graphics/Font.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::platformSupportsCodePoint const):

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

        [macOS] Text replacements that end with symbols are expanded immediately
        https://bugs.webkit.org/show_bug.cgi?id=187225
        <rdar://problem/41112433>

        Reviewed by Darin Adler.

        In shipping Safari, enabling grammar correction causes text shortcuts that end with symbols or punctuation marks
        to immediately trigger when typing; normally, when grammar correction is off, this is only triggered after the
        user has additionally inserted a punctuation mark or whitespace character after the replaced text.

        This bug happens because enabling grammar checking causes the spell checking range to expand to the range of the
        full sentence, so any text checking results that replace an existing range are triggered as long as they end
        anywhere in the sentence. In contrast, when grammar checking is disabled, the spell checking range is limited to
        the nearest adjacent word, which prevents text replacement from occurring elsewhere in the sentence.

        However, after r232530, we now always expand the spell checking range to the extent of the sentence when a word
        is typed regardless of whether grammar checking is enabled, which means that the issue described above now
        happens everywhere. To fix this recent regression and the existing bug, we:

        -   Augment our spellchecking codepaths to include a new automatic text replacement range, alongside
            spellchecking and paragraph ranges.
        -   Let this automatic text replacement range be the range of the adjacent word in the case where the user has
            finished typing a word.
        -   When marking and replacing text checking results, consult this new automatic text replacement instead of the
            spellchecking range.

        This keeps the behavior grammar and sentence retro correction results intact, while limiting the scope in which
        text replacement results are applied.

        Test: editing/spelling/text-replacement-after-typing-to-word.html

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/Editor.cpp:
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):

        Pass in the adjacent word range for the `automaticReplacementRange`, instead of the spell checking range (which
        may be extended to the full range of the sentence).

        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):

        Add an `automaticReplacementRange` argument to markAllMisspellingsAndBadGrammarInRanges, and adjust call sites
        to pass in a range (generally the same as the spell checking range, but in the case where a word has been typed,
        this is a narrower range).

        (WebCore::correctSpellcheckingPreservingTextCheckingParagraph):
        (WebCore::Editor::markAndReplaceFor):

        When replacing text, only allow text replacement in the automatic replacement range rather than the spell
        checking range.

        (WebCore::Editor::markMisspellingsAndBadGrammar):
        * editing/Editor.h:
        * editing/SpellChecker.cpp:
        (WebCore::SpellCheckRequest::SpellCheckRequest):

        Add a new version of this constructor that takes a single Range representing both the spellchecking range and
        the automatic text replacement range, for convenience.

        (WebCore::SpellCheckRequest::create):
        * editing/SpellChecker.h:

        Add plumbing for the automatic replacement range.

        (WebCore::SpellCheckRequest::automaticReplacementRange const):
        * editing/TextCheckingHelper.cpp:

        Add plumbing for the automatic replacement range, and new helpers to locate the range as offsets within the
        text checking paragraph range.

        (WebCore::TextCheckingParagraph::TextCheckingParagraph):
        (WebCore::TextCheckingParagraph::invalidateParagraphRangeValues):
        (WebCore::TextCheckingParagraph::automaticReplacementStart const):
        (WebCore::TextCheckingParagraph::automaticReplacementLength const):
        * editing/TextCheckingHelper.h:

2018-06-30  David Kilzer  <ddkilzer@apple.com>

        Follow-up: Fix clang static analyzer warnings: Garbage return value
        <https://webkit.org/b/187224>

        Address review feedback from Eric Carlson.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::valueForCapabilityRange const):
        - Use brace initialization for more local variables.

2018-06-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Asan false positive: stack use after scope under WebCore::ApplyPropertyBorderImageModifier in WebCore::Length::Length(WebCore::Length&&)
        https://bugs.webkit.org/show_bug.cgi?id=186980
        <rdar://problem/41409838>

        Reviewed by Oliver Hunt.

        We believe that we have found a bug in GCC's address sanitizer. It is blocking work on other
        issues, so work around it by changing a temporary into a local variable.

        * css/StyleBuilderCustom.h:
        (WebCore::ApplyPropertyBorderImageModifier::applyInitialValue):

2018-06-30  David Kilzer  <ddkilzer@apple.com>

        Fix clang static analyzer warnings: Garbage return value
        <https://webkit.org/b/187224>

        Reviewed by Eric Carlson.

        * platform/mediastream/MediaConstraints.h:
        (WebCore::NumericConstraint::valueForCapabilityRange const):
        - Use brace initialization for local variables.

2018-06-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not add the containing block's offset while computing the out-of-flow static position.
        https://bugs.webkit.org/show_bug.cgi?id=187202

        Reviewed by Antti Koivisto.

        The static position for an out-of-flow elements is
        1. the distance from the parent's border box.
        2. climbing up on the containing block chain and offset the containers until we reach the out-of-flow element's containing block.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):

2018-06-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] If the top and bottom margins of a box are adjoining, then it is possible for margins to collapse through it.
        https://bugs.webkit.org/show_bug.cgi?id=187220

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginBottomCollapsedThrough):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild):

2018-06-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust final out-of-flow position with the computed margin value.
        https://bugs.webkit.org/show_bug.cgi?id=187219

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):

2018-06-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make WPT test at timing-model/timelines/document-timelines.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=186507
        <rdar://problem/41000257>

        Reviewed by Dean Jackson.

        The Web Animations spec, along with the HTML5 event loop spec, specify some assumptions on the time reported by
        document.timeline.currentTime:

        - it should only increase once per frame
        - it should have the same value as the timestamp passed to requestAnimationFrame() callbacks

        The WPT test at web-platform-tests/web-animations/timing-model/timelines/document-timelines.html relies on these
        assumptions to be true so that we check that the start time of a new animation is not the same as the timeline time
        when it was created, since it will be in the "play-pending" state for a frame.

        In order to support this, we add two new methods on DocumentAnimationScheduler. First, when a scheduled display update
        fires, we record the timestamp and expose it via lastTimestamp() such that DocumentTimeline and ScriptedAnimationController
        can use the same value when updating animations. Then, to know whether code is run as a result of a display update, we
        expose isFiring().

        Now, within DocumentTimeline::currentTime(), we can cache the current time this way:

        - if we're in the middle of a display update, use the value returned by lastTimestamp().
        - otherwise, compute what would have been the ideal number of frames (at 60fps or less if throttled) and add those to
        the lastTimestamp() value.

        Then, we remove this cached current time when both currently-running JavaScript has completed and all animation update
        code has completed by waiting on the invalidation task to run.

        * animation/DocumentAnimationScheduler.cpp:
        (WebCore::DocumentAnimationScheduler::displayRefreshFired):
        * animation/DocumentAnimationScheduler.h:
        (WebCore::DocumentAnimationScheduler::lastTimestamp):
        (WebCore::DocumentAnimationScheduler::isFiring const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::performInvalidationTask):
        (WebCore::DocumentTimeline::maybeClearCachedCurrentTime):
        * animation/DocumentTimeline.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire):

2018-06-29  Nan Wang  <n_wang@apple.com>

        Crash under WebCore::AXObjectCache::handleMenuItemSelected
        https://bugs.webkit.org/show_bug.cgi?id=186918
        <rdar://problem/41365984>

        Reviewed by Chris Fleizach.

        When a node is being destroyed, we deregister it from the AX cache through the Node's destructor.
        But we did not remove the corresponding entry from the m_deferredFocusedNodeChange list. It would
        then lead to a crash if we try to access the deleted node from m_deferredFocusedNodeChange.
        Fixed it by removing the entry if the newly focused node is being destroyed.

        Test: accessibility/accessibility-crash-focused-element-change.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::remove):

2018-06-29  Antti Koivisto  <antti@apple.com>

        REGRESSION (r232806): Facebook login fields have blue fill background instead of white
        https://bugs.webkit.org/show_bug.cgi?id=187207
        <rdar://problem/41606349>

        Reviewed by Tim Horton.

        This happens because a 'prefers-dark-interface' media query on UA sheet always evaluates to true in dark mode.

        Tests: fast/forms/input-background-ua-media-query.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersDarkInterfaceEvaluate):

        Make prefers-dark-interface media query match only when using system appearance.

2018-06-29  Daniel Bates  <dabates@apple.com>

        REGRESSION (r230921): Cannot log in to forums.swift.org using GitHub account
        https://bugs.webkit.org/show_bug.cgi?id=187197
        <rdar://problem/40420821>

        Reviewed by Brent Fulgham.

        Fixes an issue where a Same-Site cookies are not sent with any child window load if the
        load is cross-origin with respect to the window's opener. One example where this issue
        manifest itself was in the GitHub sign in flow on forums.swift.org.

        Currently we always consider the origin of the window's opener (if we have one) when
        determining whether a frame load request is same-origin and hence should send Same-Site
        cookies when performing the request. So, when page A.com opens a child window to B.com and
        then a person clicks a hyperlink or submits a form to B.com/b2 then we do not send Same-
        Site cookies with the request to B.com/b2 (because its origin, B.com, is cross-origin
        with its opener, A.com). But we should send Same-Site cookies with the request to B.com/b2
        because it is same-origin with the page that initiated the request, B.com. Instead of
        always considering the origin the window's opener for every frame load we should only
        consider it for the first non-empty document load.

        Tests: http/tests/cookies/same-site/fetch-in-about-blank-popup.html
               http/tests/cookies/same-site/post-from-cross-site-popup.html

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

2018-06-29  Nan Wang  <n_wang@apple.com>

        AX: [iOS] VoiceOver scroll position is jumpy in frames
        https://bugs.webkit.org/show_bug.cgi?id=186956

        Reviewed by Simon Fraser.

        iOS is using delegate scrolling and we should not take into account
        the scroll offset when converting rects.

        Also fixed a issue where we want to scroll the element into view even
        if it's partially visible.

        Test: fast/scrolling/ios/iframe-scroll-into-view.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollToMakeVisible const):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::contentsToContainingViewContents const):

2018-06-29  Chris Dumez  <cdumez@apple.com>

        WebKitLegacy: Can trigger recursive loads triggering debug assertions
        https://bugs.webkit.org/show_bug.cgi?id=187121
        <rdar://problem/41259430>

        Reviewed by Brent Fulgham.

        In order to support asynchronous policy delegates, r229722 added a call to
        FrameLoader::clearProvisionalLoadForPolicyCheck() when starting a navigation
        policy decision in PolicyChecker::checkNavigationPolicy(). This calls
        stopLoading() on the current provisional loader if there is one, and potentially
        calls the didFailProvisionalLoadWithError cleint delegate. This delegate call
        is synchronous on WebKit1, so the client may start a new load from this delegate
        and re-enter Webcore. This happens in practive with Quickens 2017 / 2018 on Mac.

        Before r229722, this was not an issue because pending loads were canceled after
        the (asynchronous) navigation policy decision, via FrameLoader::stopAllLoaders().
        FrameLoader::stopAllLoaders() sets a m_inStopAllLoaders flag and we return early
        in FrameLoader::loadRequest() when this flag is set to prevent recursive loads.

        To maintain shipping behavior as much as possible, this patch introduces a similar
        inClearProvisionalLoadForPolicyCheck which gets set during
        FrameLoader::clearProvisionalLoadForPolicyCheck() and we prevent new loads while
        this flag is set.

        I have verified that Quickens 2017 / 2018 works again after this change and I added
        API test coverage for this behavior.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::clearProvisionalLoadForPolicyCheck):
        * loader/FrameLoader.h:

2018-06-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Infinite loop if a <use> element references its ancestor and the DOMNodeInserted event handler of one its ancestor's descents updates the document style
        https://bugs.webkit.org/show_bug.cgi?id=186925

        Reviewed by Antti Koivisto.

        This patches fixes two issues:
        -- SVGTRefTargetEventListener should not assume it has to be attached to
        target when its handleEvent() is called.
        Because SVGTRefTargetEventListener::handleEvent() references the target
        element, we just return if the listener is detached.

        -- The <use> element should not clone its shadow tree if it references one
        of its ancestors. The DOMNodeInserted of any node in the target element
        tree may issue a document command. This document command will cause the 
        shadow tree to be re-cloned so this will cause infinite loop to happen.

        Test: svg/dom/svg-use-infinite-loop-cloning.html

        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefTargetEventListener::handleEvent):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateShadowTree):

2018-06-29  Manuel Rego Casasnovas  <rego@igalia.com>

        [WPE] Three CSS Grid Layout tests crash due to valueless std::optional access
        https://bugs.webkit.org/show_bug.cgi?id=186752

        Reviewed by Frédéric Wang.

        This is a simple fix for the crash we're getting on WPE
        in IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep().

        Covered by existent tests, just remove them from TestExpectations file.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::IndefiniteSizeStrategy::freeSpaceForStretchAutoTracksStep const):
        Check if minSize is null before trying to access it's value.

2018-06-29  David Fenton  <david_fenton@apple.com>

        Unreviewed, rolling out r233349.

        caused 42 crashes on iOS GuardMalloc and iOS ASan tests

        Reverted changeset:

        "[Web Animations] Using a Web Animation leaks the Document"
        https://bugs.webkit.org/show_bug.cgi?id=187088
        https://trac.webkit.org/changeset/233349

2018-06-29  Jer Noble  <jer.noble@apple.com>

        Returning PiP'd video to fullscreen while playing leaves video muted.
        https://bugs.webkit.org/show_bug.cgi?id=187181
        <rdar://problem/41408335>

        Reviewed by Eric Carlson.

        Test: media/picture-in-picture-interruption.html

        Don't reset the media session's state at the end of an interruption if it wasn't changed an the beginning of one.

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::endInterruption):
        * testing/Internals.cpp:
        (WebCore::Internals::mediaSessionState):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-06-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] When the formatting root is also a containing block for out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=187179

        Reviewed by Antti Koivisto.

        Out-of-flow descendants' layout requires their containing block height to be computed. This patch takes care of the case
        when the containing block is also a formatting context root (e.g. relative positioned with overflow other than visible).

        * layout/Verification.cpp:
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):

2018-06-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not skip the next inflow sibling after finishing a formatting context root layout.
        https://bugs.webkit.org/show_bug.cgi?id=187178

        Reviewed by Antti Koivisto.

        Since the block formatting layout is based on pre-order traversal, after finishing a formatting
        context layout (which takes care of its entire subtre), we need to visit the next (in-flow)sibling. 

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):

2018-06-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] The static position for an out-of-flow box should include the previous sibling's collapsed margin
        https://bugs.webkit.org/show_bug.cgi?id=187169

        Reviewed by Antti Koivisto.

        When computing the static position of an absolutely positioned box, we need to look at the previous sibling's bottom margin.
        If the previous sibling happens to collapse its bottom margin with the parent's bottom margin, we still need to account for it
        and compute the static vertical position as if the bottom margin was not collapsed.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::nonCollapsedMarginBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidVerticalNonCollapsedMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::setVerticalNonCollapsedMargin):
        (WebCore::Display::Box::nonCollapsedMarginTop const):
        (WebCore::Display::Box::nonCollapsedMarginBottom const):

2018-06-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Using a Web Animation leaks the Document
        https://bugs.webkit.org/show_bug.cgi?id=187088
        <rdar://problem/41392046>

        Reviewed by Dean Jackson.

        Test: webanimations/leak-document-with-web-animation.html

        We need to ensure that any remaining animation is cleared when the DocumentTimeline is detached from its Document.
        We rename WebAnimation::prepareAnimationForRemoval() to WebAnimation::remove() since it really actively disassociates
        the animation from its timeline.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimationsForElement): We no longer need the call to removeAnimation()
        since the new WebAnimation::remove() method will also set the timeline to null which will eventually call
        removeAnimation() on the disassociated timeline.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::remove):
        (WebCore::DeclarativeAnimation::prepareAnimationForRemoval): Deleted.
        * animation/DeclarativeAnimation.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::detachFromDocument): Call remove() on all known animations.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::remove): Set the timeline to null to fully disassociate this animation from its timeline.
        (WebCore::WebAnimation::setTimeline): Factor the internal timeline-association code out of this JS API method so
        that we can call this code without any JS-facing implications.
        (WebCore::WebAnimation::setTimelineInternal):
        (WebCore::WebAnimation::prepareAnimationForRemoval): Deleted.
        * animation/WebAnimation.h:

2018-06-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow positioned height does not necessarily equal to "bottom - top".
        https://bugs.webkit.org/show_bug.cgi?id=187168

        Reviewed by Antti Koivisto.

        According to the spec "For absolutely positioned elements, the used values of the vertical dimensions must satisfy this constraint:
        'top' + 'margin-top' + 'border-top-width' + 'padding-top' + 'height' + 'padding-bottom' + 'border-bottom-width' + 'margin-bottom' + 'bottom' = height of containing block"
        With a non-auto "height" value, the bottom - top does not necessarily compute to the height of the element.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):

2018-06-28  Olivia Barnett  <obarnett@apple.com>

        Find in page for typographic quotes does not find low (German) quotes
        https://bugs.webkit.org/show_bug.cgi?id=187164
        <rdar://problem/29612785>

        Reviewed by Tim Horton.

        Added additional quote test to LayoutTests/fast/text/find-quotes.html.

        Added functionality to replace German quotes when matching.

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMark):
        (WebCore::foldQuoteMarks):

2018-06-28  Antti Koivisto  <antti@apple.com>

        REGRESSION (233281): fast/dom/location-new-window-no-crash.html and some other tests are timing out
        https://bugs.webkit.org/show_bug.cgi?id=187156

        Reviewed by Zalan Bujtas.

        We need still need to re-enable memory cache client calls even when not doing other post-resolution callbacks.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::memoryCacheClientCallsResumeQueue):

        Add a separate queue for this.

        (WebCore::Style::suspendMemoryCacheClientCalls):
        (WebCore::Style::PostResolutionCallbackDisabler::~PostResolutionCallbackDisabler):

2018-06-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] DataTransfer.getData always returns the empty string when dropping text
        https://bugs.webkit.org/show_bug.cgi?id=187130
        <rdar://problem/41014117>

        Reviewed by Ryosuke Niwa.

        Currently, DataTransfer.getData() always returns the empty string on drop. This is because all data on drop is
        backed by local files in the temporary directory, so the number of files is never 0; this, combined with the
        fact that WebKit will suppress access to the DataTransfer object if there is one or more file in the pasteboard,
        means that getData() never works for drag and drop on iOS at the moment. To fix this, we need to know whether a
        dropped item provider is a file.

        Ideally, we'd have a flag to tell us whether or not an NSItemProvider being dropped is a file, or instead just
        inline data - in fact, this flag already exists in the form of UIPreferredPresentationStyle. Unfortunately, not
        all apps that vend draggable files specify this, so we can't simply ask the item provider whether it's intended
        to be a file. As a workaround, we can use several heuristics to determine the "file content state" of the drag
        pasteboard on iOS (see below for more details).

        This patch adds some plumbing through the client layers to grab a list of item information describing each
        dropped item provider on iOS. Using this information, we tweak the logic in Pasteboard::fileContentState to make
        an educated guess at whether or not the pasteboard really contains files; if we determine that the pasteboard
        probably contains no files, we'll allow DataTransfer.getData() to retrieve information from the pasteboard.
        Otherwise, if the pasteboard may contain files, we'll fall back to our current behavior of including the "Files"
        type in DataTransfer.types and allowing the page to grab file data using DataTransfer.files or
        DataTransfer.items.

        Tests:  DataInteractionTests.DataTransferGetDataReadPlainAndRichText
                DataInteractionTests.DataTransferSuppressGetDataDueToPresenceOfTextFile

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::filesFromPasteboardAndItemList const):

        Check Pasteboard::fileContentState() to ensure that we don't expose files when DataTransfer.types does not
        contain the "Files" type, and vice versa, and DataTranser.files is also empty in this case.

        * dom/DataTransferItemList.cpp:
        * platform/PasteboardItemInfo.h:

        Add a couple of additional members to PasteboardItemInfo: suggestedFileName and hasDeclaredNonTextType, a flag
        that indicates whether or not the pasteboard item has a type representation that is a declared type, but is not
        a text type (i.e. does not conform to "public.text", "public.url", or rich text format with attachment types).

        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):
        * platform/PasteboardStrategy.h:
        * platform/PlatformPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):

        Instead of always considering a dropped item provider on iOS to represent a file, only do so if at least one of
        the following conditions are met:
        - The drop session contains multiple item providers (flocking text selections is a very rare use case).
        - The item provider was explicitly marked as an attachment.
        - The item provider has a suggested file name.
        - The item provider has any other content that is not text.

        In the case where none of the above conditions are met, the item provider (if it ends up being a file) is
        essentially indistinguishable from inline data. An example of this is dropping a plain text file that is
        unnamed, with no presentation style, and alongside no other items nor other known type representations. These
        are cases in which whether the item is treated as a file or as inline data is (hopefully) irrelevant.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::allPasteboardItemInfo):
        (WebCore::PlatformPasteboard::informationForItemAtIndex):

2018-06-28  Timothy Hatcher  <timothy@apple.com>

        Don't force black text when TextIndicator draws backgrounds or all content.
        https://bugs.webkit.org/show_bug.cgi?id=187161
        rdar://problem/40434644

        Reviewed by Tim Horton.

        * page/TextIndicator.cpp:
        (WebCore::snapshotOptionsForTextIndicatorOptions):
        Only set SnapshotOptionsForceBlackText when TextIndicatorOptionRespectTextColor and
        TextIndicatorOptionPaintBackgrounds are not set.

2018-06-28  Timothy Hatcher  <timothy@apple.com>

        Find on page selection color isn't adapted for dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=187072

        Unreviewed, revert part of r233280.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const): Use pure yellow again.

2018-06-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_animation-starttime.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183834
        <rdar://problem/40997932>

        Reviewed by Dean Jackson.

        We need to run pending tasks in the "update animations" procedure to ensure that the start time has been set
        to a different time than the timeline time at the time the animation was asked to play(). This ensure the
        timeline current time has progressed and can be queried to a different value in a requestAnimationFrame()
        callback.

        When invalidating events, we need to make sure we disregard instances when an animation has and is still pending
        so that we wait until we change the pending state to work out which events to enqueue.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::invalidateDOMEvents):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::updatePendingTasks):
        (WebCore::WebAnimation::timeToNextRequiredTick const):
        (WebCore::WebAnimation::runPendingTasks):
        * animation/WebAnimation.h:

2018-06-28  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in ScriptController::canExecuteScripts via WebCore::SVGUseElement::insertedIntoAncestor
        https://bugs.webkit.org/show_bug.cgi?id=187137
        <rdar://problem/41081885>

        Reviewed by Zalan Bujtas.

        The bug was caused by SVGUseElement::notifyFinished firing a DOM event via SVGUseElement::updateExternalDocument
        inside SVGUseElement::insertedIntoAncestor. Ideally, we make every call to notifyFinished asynchronous
        but simply delay the call to updateExternalDocument() until didFinishInsertingNode() for now.

        No new tests since the failure is caught with the newly added assertion in notifyFinished by existing SVG tests
        such as svg/batik/filters/filterRegions.svg and svg/batik/text/smallFonts.svg. Unfortunately, I could not
        construct a test case which hits this release assertion since the real crash happens when the cached resource
        had an error but in the all cases I could find, the resource response with an error results in a reload or
        an asynchronous failure callback.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::didAddClient): Added a FIXME.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoAncestor): Delay the call to updateExternalDocument.
        (WebCore::SVGUseElement::didFinishInsertingNode): Invoke updateExternalDocument.
        (WebCore::SVGUseElement::notifyFinished): Added an assertion.
        * svg/SVGUseElement.h:

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r233309.

        Invalidates previous database model without versioning

        Reverted changeset:

        "Fix encoding / decoding issues in ResourceLoadStatistics"
        https://bugs.webkit.org/show_bug.cgi?id=186890
        https://trac.webkit.org/changeset/233309

2018-06-28  Timothy Hatcher  <timothy@apple.com>

        Focus ring color does not honor dark mode or system accent color.
        https://bugs.webkit.org/show_bug.cgi?id=187144
        rdar://problem/41105081

        Reviewed by Tim Horton.

        Pass the focus ring color through to the GraphicsContext methods that draw it.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::drawFocusRingAtTime):
        (WebCore::drawFocusRing):
        (WebCore::drawFocusRingToContext):
        (WebCore::drawFocusRingToContextAtTime):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::focusRingColor): Deleted.
        * platform/mac/ThemeMac.mm:
        (WebCore::drawCellFocusRingWithFrameAtTime):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):

2018-06-28  Aditya Keerthi  <akeerthi@apple.com>

        REGRESSION (r232040): Cursor jumping in Safari text fields
        https://bugs.webkit.org/show_bug.cgi?id=187142
        <rdar://problem/41397577>

        Reviewed by Tim Horton.

        r232040 enabled click events to fire on nodes that are already being edited in
        iOS. This resulted FrameSelection::setSelection being called twice. One call
        originated from the UIWKTextInteractionAssistant, which snaps the caret to word
        boundaries. The other call originates from handleMousePressEvent in EventHandler,
        and uses character boundaries. Consequently, we see the caret jumping around.

        To fix this issue, an early return was added in the handleMousePressEvent
        codepath, which prevents FrameSelection::setSelection from being called when
        clicking on a node that is already being edited. This ensures that the
        UIWKTextInteractionAssistant codepath is the only influence on the caret position.

        Test: fast/events/ios/click-selectionchange-once.html

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

2018-06-28  Chris Dumez  <cdumez@apple.com>

        Fix encoding / decoding issues in ResourceLoadStatistics
        https://bugs.webkit.org/show_bug.cgi?id=186890

        Reviewed by Brent Fulgham.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::encodeHashCountedSet):
        (WebCore::encodeHashSet):
        Do not return early if the container we're trying to encode is empty. Instead,
        have the encoder encode an empty array. This is important for encoding / decoding
        to be fully symmetric. Otherwise, when trying to decode one of these empty containers,
        the decoder would fail (silently since we were ignoring decoding errors). Worse, the
        decoder might succeed but actually be decoding the *next* container in the file, since
        we have several HashCountedSets / HashSets encoded one after another.

        (WebCore::decodeHashCountedSet):
        (WebCore::decodeHashSet):
        Return a boolean to indicate if the decoding suceeded or not.

        (WebCore::ResourceLoadStatistics::decode):
        Check for container decoding errors and return false when decoding fails.
        Otherwise, we would just silently keep going.

2018-06-28  Sihui Liu  <sihui_liu@apple.com>

        Cookie API: cookie creation time is wrong
        https://bugs.webkit.org/show_bug.cgi?id=187101

        Reviewed by Geoffrey Garen.

        Covered by API test: WebKit.WKHTTPCookieStoreCreationTime.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const):

2018-06-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add Display::Box::nonCollapsedMarginBox for verification purposes.
        https://bugs.webkit.org/show_bug.cgi?id=187140

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::nonCollapsedMarginBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setVerticalNonCollapsedMargin):

2018-06-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] The margin bottom of the document element does not collapse with its last inflow child's bottom margin.
        https://bugs.webkit.org/show_bug.cgi?id=187135

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild):

2018-06-28  Dirk Schulze  <krit@webkit.org>

        [css-masking] Update clip-path box mapping to unified box
        https://bugs.webkit.org/show_bug.cgi?id=185797

        Reviewed by Simon Fraser.

        The box mapping for fill-box, stroke-box, view-box on HTML elements
        and content-box, padding-box, margin-box, border-box for SVG elements
        was aligned with the transform-box CSS property.

        Furthermore, the keywords fill changed to fill-box and stroke changed
        to stroke-box.

        https://drafts.fxtf.org/css-masking-1/#typedef-geometry-box

        Update the -webkit-clip-path property.

        Tests: svg/clip-path/clip-path-shape-border-box-expected.svg
               svg/clip-path/clip-path-shape-border-box.svg
               svg/clip-path/clip-path-shape-content-box-expected.svg
               svg/clip-path/clip-path-shape-content-box.svg
               svg/clip-path/clip-path-shape-margin-box-expected.svg
               svg/clip-path/clip-path-shape-margin-box.svg
               svg/clip-path/clip-path-shape-padding-box-expected.svg
               svg/clip-path/clip-path-shape-padding-box.svg

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CSSBoxType const):
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertClipPath):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapeOrBox):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::computeRoundedRectForBoxShape):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::setReferenceBoxLogicalSize):
        (WebCore::ShapeOutsideInfo::logicalTopOffset const):
        (WebCore::ShapeOutsideInfo::logicalLeftOffset const):
        * rendering/style/RenderStyleConstants.h:
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):

2018-06-27  Timothy Hatcher  <timothy@apple.com>

        Don't expose new semantic -apple-system color keywords on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=187080
        rdar://problem/41505699

        Reviewed by Tim Horton.

        * DerivedSources.make: Use gnu++14, since gnu++17 is giving errors on macOS 10.12.
        * css/CSSValueKeywords.in: Define new semantic colors only on macOS.

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Compute both the collapsed and the non-collapsed margin values.
        https://bugs.webkit.org/show_bug.cgi?id=187129

        Reviewed by Antti Koivisto.

        For validation purposes only at this point.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Align inFlowNonReplacedHeightAndMargin() style with the rest of the compute functions.
        https://bugs.webkit.org/show_bug.cgi?id=187126

        Reviewed by Antti Koivisto.

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

2018-06-27  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][WPE] Use LazyNeverDestroyed<XErrorTrapper> to remove static initializers
        https://bugs.webkit.org/show_bug.cgi?id=187089

        Reviewed by Michael Catanzaro.

        Do not allow copying since XErrorTrapper's logic relies on the address of XErrorTrapper.

        * platform/graphics/x11/XErrorTrapper.h:

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Align inFlowNonReplacedWidthAndMargin() style with the rest of the compute functions.
        https://bugs.webkit.org/show_bug.cgi?id=187124

        Reviewed by Antti Koivisto.

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

2018-06-27  Dirk Schulze  <krit@webkit.org>

        -webkit-clip-path wrong offset for clipPath references
        https://bugs.webkit.org/show_bug.cgi?id=129246

        Reviewed by Simon Fraser.

        Compute the correct offset for reference clip-paths by reusing
        some of the logic from basic shapes.
        Makes reference based clip-path interoperable and follows the
        spec.

        Test: css3/masking/clip-path-reference-2.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::computeClipPath const):
        (WebCore::RenderLayer::setupClipPath):

2018-06-27  Antti Koivisto  <antti@apple.com>

        Don't invoke post resolution callbacks when resolving computed style
        https://bugs.webkit.org/show_bug.cgi?id=187113
        <rdar://problem/41365766>

        Reviewed by Geoff Garen.

        Post-resolution callbacks should only be invoked when we resolve the full document style,
        not when resolving computed style for a single element.

        Tests: fast/dom/object-computed-style-event.html

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Element.cpp:
        (WebCore::Element::resolveComputedStyle):

        Also ref the ancestor stack to be safe.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::PostResolutionCallbackDisabler::PostResolutionCallbackDisabler):
        (WebCore::Style::PostResolutionCallbackDisabler::~PostResolutionCallbackDisabler):

        Add an option to not drain the callback queue on destruction. In this mode we
        just block network loads.

        * style/StyleTreeResolver.h:

2018-06-27  Timothy Hatcher  <timothy@apple.com>

        Find on page selection color isn't adapted for dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=187072
        rdar://problem/40354841

        Reviewed by Tim Horton.

        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Use [NSColor findHighlightColor].
        * platform/mac/LocalDefaultSystemAppearance.h:
        (WebCore::LocalDefaultSystemAppearance::usingDarkAppearance const): Added.
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): Set m_usingDarkAppearance.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintPlatformDocumentMarkers): Use TextPaintPhase::Decoration since this
        matches step three of InlineTextBox::paint ("Paint fancy decorations"). This allows TextMatch to
        paint a forground and not end up painting during this "fancy decorations" phase.
        (WebCore::InlineTextBox::resolveStyleForMarkedText): Set the fillColor for TextMarker to force a
        dark text color which will draw over the yellow highlight.
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers): Added support for TextPaintPhase::Decoration.
        Seperate DocumentMarker::TelephoneNumber and DocumentMarker::TextMatch. Have DocumentMarker::TextMatch
        support Forground and Background phases.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformColorsDidChange):
        (WebCore::RenderTheme::activeTextSearchHighlightColor const): Added. Call the platfrom version.
        (WebCore::RenderTheme::inactiveTextSearchHighlightColor const): Added. Ditto.
        (WebCore::RenderTheme::platformActiveTextSearchHighlightColor const): Added StyleColor::Options.
        (WebCore::RenderTheme::platformInactiveTextSearchHighlightColor const): Ditto.
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveTextSearchHighlightColor const): Added.
        (WebCore::RenderThemeMac::platformInactiveTextSearchHighlightColor const): Added.
        (WebCore::RenderThemeMac::platformColorsDidChange): Clear new color caches.
        (WebCore::RenderThemeMac::systemColor const): Cache system colors by light and dark mode.

2018-06-27  Chris Dumez  <cdumez@apple.com>

        Crash under SWServer::unregisterServiceWorkerClient()
        https://bugs.webkit.org/show_bug.cgi?id=187115
        <rdar://problem/41539197>

        Reviewed by Youenn Fablet.

        Connections are usually destroyed before their SWServer. However, as per crash traces, it is possible
        for SWServers to get destroyed while they still have connections. When this happens, the connections
        (which are owned by the SWServer) get destroyed with other SWServer data members. In turn, the
        connection destructor tries to unregister its clients from the server that is currently being destroyed.

        To address the issue, the SWServer destructor now destroys remaining connections early, before SWServer's
        other data members get destroyed.

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

2018-06-27  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should not need to hard ref NetworkConnectionToWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=186551

        Reviewed by Daniel Bates.

        No change of behavior.
        Add a way to set the client receiving any CSP warning/error notification.

        * page/csp/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::setClient):

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Do not collapse margin with the parent when element has border/padding.
        https://bugs.webkit.org/show_bug.cgi?id=187114

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):

2018-06-27  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build after r233268.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::hasContents const):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Out-of-flow positioned element's height depends on its containing block's height.
        https://bugs.webkit.org/show_bug.cgi?id=187082

        Reviewed by Antti Koivisto.

        We can't really compute the final height of an out-of-flow element until after its containing block's height is computed.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::layoutFormattingContextSubtree):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/layouttree/LayoutContainer.h:
        (WebCore::Layout::Container::outOfFlowDescendants const):
        (WebCore::Layout::Container::outOfFlowDescendants): Deleted.

2018-06-27  Youenn Fablet  <youenn@apple.com>

        Disable content blockers in NetworkLoadChecker except for ping loads
        https://bugs.webkit.org/show_bug.cgi?id=187083
        <rdar://problem/41440083>

        Reviewed by Chris Dumez.

        Add internals API to reload a frame without content extensions.

        Test: http/tests/contentextensions/reload-without-contentextensions.html

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

2018-06-27  Simon Fraser  <simon.fraser@apple.com>

        https://hackernoon.com/ uses lots of layer backing store
        https://bugs.webkit.org/show_bug.cgi?id=186909
        rdar://problem/40257540

        Reviewed by Tim Horton.
        
        The existing "backing store detached" logic, which was used to eliminate backing store
        for compositing layers outside the viewport, had a number of bugs that allowed layers
        to have backing store when they should not.
        
        Specifically, any code path that ended up in setNeedsDisplay{InRect}() in PlatformCALayer
        could trigger backing store creation on layers that should have never had any.
        
        Rather than monkeypatch all the GraphicsLayerCA call sites that call setNeedsDisplay{InRect}(),
        just bail early from the PlatformCALayer* methods that trigger repaints.
        
        Tests didn't catch this because they just dumped the state of the backingStoreAttached flag. To fix this,
        create backingStoreAttachedForTesting() which also tests whether the layer has contents.

        Test: compositing/backing/backing-store-attachment-outside-viewport.html

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties const):
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::backingStoreAttachedForTesting const):
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::backingStoreAttachedForTesting const):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::setNeedsDisplay):
        (PlatformCALayerCocoa::setNeedsDisplayInRect):
        (PlatformCALayerCocoa::hasContents const):

2018-06-27  David Kilzer  <ddkilzer@apple.com>

        Fix clang static analyzer warnings: Branch condition evaluates to a garbage value
        <https://webkit.org/b/186968>

        Reviewed by Zalan Bujtas.

        This patch changes two stack-allocated `bool` variables into
        `std::optional<bool>` since the functions that set the variable
        may return early without setting it.  It also changes one
        stack-allocated pointer to be initialized to `nullptr`.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        Update for change to CSSPropertyAnimation::getPropertyAtIndex()
        argument type.

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::writeImageToPasteboard): Initialize
        `cachedImage` stack pointer to nullptr since getImage() has an
        early return that doesn't set `cachedImage`.
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::writeImageToPasteboard): Ditto.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimation::getPropertyAtIndex):
        * page/animation/CSSPropertyAnimation.h:
        (WebCore::CSSPropertyAnimation::getPropertyAtIndex):
        - Change method to take `std::optional<bool>` instead of `bool`
          as second argument since the method may return early without
          setting `isShorthand`.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions): Update for
        change to CSSPropertyAnimation::getPropertyAtIndex() argument
        type.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection): Also
        rename local `emphasisMarkIsOver` to `emphasisMarkIsAbove` to
        match other call sites.
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment const):
        - Update for change to InlineTextBox::emphasisMarkExistsAndIsAbove()
          argument type.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        - Change method to take `std::optional<bool>` instead of `bool`
          as second argument since the method may return early without
          setting `above`.
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        - Update for change to InlineTextBox::emphasisMarkExistsAndIsAbove()
          argument type.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        - Change method to take `std::optional<bool>` instead of `bool`.

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move formatting context root layout logic to a dedicated function.
        https://bugs.webkit.org/show_bug.cgi?id=187097

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layoutFormattingContextRoot const):
        * layout/blockformatting/BlockFormattingContext.h:

2018-06-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Compute static position for out-of-flow elements only when required.
        https://bugs.webkit.org/show_bug.cgi?id=187096

        Reviewed by Antti Koivisto.

        Computing static position for out-of-flow elements could be somewhat expensive, so let's not do it unless we actually need it.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::staticVerticalPositionForOutOfFlowPositioned):
        (WebCore::Layout::staticHorizontalPositionForOutOfFlowPositioned):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPositionForOutOfFlowPositioned): Deleted.

2018-06-27  Nan Wang  <n_wang@apple.com>

        AX: [iOS] Remove the ability to set keyboard focus when VoiceOver takes focus
        https://bugs.webkit.org/show_bug.cgi?id=187076

        Reviewed by Chris Fleizach.

        We shouldn't set keyboard focus when assistive technology takes focus since
        this is causing website incompatibility issues by causing focus to be lost.

        Test: accessibility/ios-simulator/accessibility-focus-do-not-set-focus.html

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

2018-06-21  Emilio Cobos Álvarez  <emilio@crisal.io>

        Move clearChildNeedsStyleRecalc into resetStyleForNonRenderedDescendants.
        https://bugs.webkit.org/show_bug.cgi?id=186881

        Reviewed by Antti Koivisto.

        Every caller does this already.

        No new tests, no change in behavior.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::TreeResolver::resolveComposedTree):

2018-06-27  Tomas Popela  <tpopela@redhat.com>

        [GStreamer] Coverity scan issues
        https://bugs.webkit.org/show_bug.cgi?id=187087

        Reviewed by Xabier Rodriguez-Calvar.

        Fix uninitialized members.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2018-06-27  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Move definitions of GCryptUtilities helpers into a separate source file
        https://bugs.webkit.org/show_bug.cgi?id=187033

        Reviewed by Michael Catanzaro.

        Move the GCryptUtilities helpers that operate on libgcrypt values and
        constants into a separate source file. This limits a bit the amount of
        inlining the compiler might feel compelled to do, and the resulting
        shared library is 8kB smaller in size.

        * crypto/gcrypt/GCryptUtilities.cpp: Copied from Source/WebCore/crypto/gcrypt/GCryptUtilities.h.
        (WebCore::hmacAlgorithm):
        (WebCore::digestAlgorithm):
        (WebCore::hashCryptoDigestAlgorithm):
        (WebCore::mpiLength):
        (WebCore::mpiData):
        (WebCore::mpiZeroPrefixedData):
        (WebCore::mpiSignedData):
        * crypto/gcrypt/GCryptUtilities.h:
        (WebCore::hmacAlgorithm): Deleted.
        (WebCore::digestAlgorithm): Deleted.
        (WebCore::hashCryptoDigestAlgorithm): Deleted.
        (WebCore::mpiLength): Deleted.
        (WebCore::mpiData): Deleted.
        (WebCore::mpiZeroPrefixedData): Deleted.
        (WebCore::mpiSignedData): Deleted.
        * platform/SourcesGCrypt.txt:

2018-06-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Pass VM& to functions more
        https://bugs.webkit.org/show_bug.cgi?id=186241

        Reviewed by Mark Lam.

        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::JSCustomElementRegistry::define):

2018-06-26  Simon Fraser  <simon.fraser@apple.com>

        CSSGradientValue's color stops vector wastes 12KB on theverge.com
        https://bugs.webkit.org/show_bug.cgi?id=186988

        Reviewed by Sam Weinig.

        Shrink the color stops vector when we're done parsing the stops.

        * css/CSSGradientValue.h:
        (WebCore::CSSGradientValue::doneAddingStops):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradient):
        (WebCore::CSSPropertyParserHelpers::consumeGradientColorStops):
        (WebCore::CSSPropertyParserHelpers::consumeAngularGradientColorStops):

2018-06-25  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove static initializers more
        https://bugs.webkit.org/show_bug.cgi?id=186969

        Reviewed by Michael Catanzaro.

        This patch removes static initializers more. They typically exists in GTK port.

        No behavior change.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ResourceUsageData.cpp: Removed.
        * page/ResourceUsageData.h:
        Remove ResourceUsageData constructors since default constructors are enough.

        (WebCore::MemoryCategoryInfo::MemoryCategoryInfo):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::markupPrefix):
        (WebCore::removeMarkupPrefix):
        (WebCore::PasteboardHelper::fillSelectionData):
        Use NeverDestroyed<> and static functions.

        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        (WebCore::defaultVolumeCapability):
        (WebCore::GStreamerAudioCaptureSource::capabilities const):
        CapabilityValueOrRange's constructor is not constexpr.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::initialAcceptLanguages):
        (WebCore::proxySettings):
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::setupProxy):
        (WebCore::SoupNetworkSession::setProxySettings):
        (WebCore::SoupNetworkSession::setInitialAcceptLanguages):
        Use NeverDestroyed<> and static functions.

2018-06-26  Daniel Bates  <dabates@apple.com>

        REGRESSION (r231479): Unable to buy Odeon cinema tickets in STP (bogus 'X-Frame-Options' to 'SAMEORIGIN')
        https://bugs.webkit.org/show_bug.cgi?id=186090
        <rdar://problem/40692595>

        Reviewed by Andy Estes.

        Fix up Content Security Policy logic for checking the frame ancestors now that we
        exclude the frame that initiated the load request.

        Test: http/tests/security/XFrameOptions/cross-origin-iframe-post-form-to-parent-same-origin-x-frame-options-page-allow.html

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowFrameAncestors const): 
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkFrameAncestors):

2018-06-26  Chris Dumez  <cdumez@apple.com>

        Simplify NetworkStorageSession::getAllStorageAccessEntries()
        https://bugs.webkit.org/show_bug.cgi?id=187016

        Reviewed by Youenn Fablet.

        Iterate over the HashMaps' values instead of iterating over their keys and then looking them
        up in the HashMap.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::getAllStorageAccessEntries const):

2018-06-26  Eric Carlson  <eric.carlson@apple.com>

        [Mac] AirPlay picker uses incorrect theme in Dark mode
        https://bugs.webkit.org/show_bug.cgi?id=187054
        <rdar://problem/41291093>

        Reviewed by Timothy Hatcher.

        * Modules/mediasession/WebMediaSessionManager.cpp:
        (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Add useDefaultAppearance parameter.
        * Modules/mediasession/WebMediaSessionManager.h:

        * platform/graphics/MediaPlaybackTargetPicker.cpp:
        (WebCore::MediaPlaybackTargetPicker::showPlaybackTargetPicker): Ditto.
        * platform/graphics/MediaPlaybackTargetPicker.h:

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h:
        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Choose theme based on
        useDefaultAppearance parameter.

        * platform/mock/MediaPlaybackTargetPickerMock.cpp:
        (WebCore::MediaPlaybackTargetPickerMock::showPlaybackTargetPicker): Log parameter.
        * platform/mock/MediaPlaybackTargetPickerMock.h:

2018-06-26  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Do not forget to set stream on track switching
        https://bugs.webkit.org/show_bug.cgi?id=187049

        Reviewed by Philippe Normand.

        This was an overlooked issue introduced in Bug #186678

        This is already tested, but we currently run only tests against playbin2

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

2018-06-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fixed positioning is a subcategory of absolute positioning.
        https://bugs.webkit.org/show_bug.cgi?id=187043

        Reviewed by Antti Koivisto.

        https://www.w3.org/TR/CSS22/visuren.html#absolute-positioning
        References in this specification to an absolutely positioned element (or its box) imply that the element's 'position'
        property has the value 'absolute' or 'fixed'.

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isAbsolutelyPositioned const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isOutOfFlowPositioned const):

2018-06-26  Commit Queue  <commit-queue@webkit.org>

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

        broke media/video-ended-event-negative-playback.html
        (Requested by philn on #webkit).

        Reverted changeset:

        "[GStreamer] Remove useless workaround"
        https://bugs.webkit.org/show_bug.cgi?id=186921
        https://trac.webkit.org/changeset/233143

2018-06-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Computed height for in-flow non-replaced should not include padding and border.
        https://bugs.webkit.org/show_bug.cgi?id=187031

        Reviewed by Antti Koivisto.

        In certain cases the height of a non-replaced in-flow box is computed using the bottom position of its last in-flow child.
        The in-flow child's bottom position is in the coordinate system of the containing block's border box (border box's top left is 0, 0) ->
        it includes both the (top) border and the padding of the containing block.

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

2018-06-26  Zan Dobersek  <zdobersek@igalia.com>

        Crash in WebAnimation::runPendingPlayTask
        https://bugs.webkit.org/show_bug.cgi?id=186189

        Reviewed by Carlos Garcia Campos.

        Avoid crashes on nullopt std::optional dereference in the
        runPendingPlayTask() and runPendingPauseTask() methods of the
        WebAnimation class by defaulting to a Seconds(0) value.

        In both cases the std::optional value is the current time retrieved from
        the associated DocumentTimeline object. But there's no guarantee that
        the timeline is active and the resulting time value is resolved (i.e.
        not nullopt). Dereferencing the nullopt Seconds value doesn't cause a
        problem on configurations still building as C++14 and the fallback
        std::optional implementation provided by WTF -- no signal is raised, and
        a 0 value is returned. Configurations building as C++17 on the other
        hand use the stdlib-provided std::optional that does raise a signal on
        invalid access, leading to crashes.

        The default-to-Seconds(0) solution avoids crashes on configurations
        that build with C++17 support enabled, and thus match configurations
        that are still using WTF's std::optional. This still doesn't address the
        underlying problem of retrieving current time from an inactive document
        timeline and using it as ready time for the pending play/pause task
        execution.

        runPendingPlayTask() change addresses crashes in the following tests:
        - fast/animation/css-animation-resuming-when-visible.html
        - fast/animation/css-animation-resuming-when-visible-with-style-change.html
        - imported/w3c/web-platform-tests/web-animations/interfaces/Animatable/animate-no-browsing-context.html
        - imported/w3c/web-platform-tests/web-animations/interfaces/Animatable/getAnimations.html

        runPendingPauseTask() change addresses crashes in the following tests:
        - animations/multiple-animations-timing-function.html

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::runPendingPauseTask):

2018-06-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Show the feature as "Supported in Preview"
        https://bugs.webkit.org/show_bug.cgi?id=187037

        Reviewed by Dean Jackson.

        Web Animations are enabled by default in STP.

        * features.json:

2018-06-26  Miguel Gomez  <magomez@igalia.com>

        [GTK] Many webpages can crash the browser in WebCore::CoordinatedGraphicsLayer::transformedVisibleRect
        https://bugs.webkit.org/show_bug.cgi?id=179304

        Reviewed by Michael Catanzaro.

        When adding new CoordinatedGraphicsLayers to the tree, check that they have the appropriate
        CompositingCoordinator. If that's not the case, set the appropriate one to the layer and its
        children and set the state of those layers so they are rendered properly.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addChild):
        (WebCore::CoordinatedGraphicsLayer::addChildAtIndex):
        (WebCore::CoordinatedGraphicsLayer::addChildAbove):
        (WebCore::CoordinatedGraphicsLayer::addChildBelow):
        (WebCore::CoordinatedGraphicsLayer::replaceChild):
        (WebCore::CoordinatedGraphicsLayer::setCoordinatorIncludingSubLayersIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-06-25  Keith Rollin  <krollin@apple.com>

        Adjust WEBCORE_EXPORT annotations for LTO
        https://bugs.webkit.org/show_bug.cgi?id=186944
        <rdar://problem/41384880>

        Reviewed by David Kilzer.

        Adjust a number of places that result in WebKit's
        'check-for-weak-vtables-and-externals' script reporting weak external
        symbols:

            ERROR: WebCore has a weak external symbol in it (/Volumes/Data/dev/webkit/OpenSource/WebKitBuild/Release/WebCore.framework/Versions/A/WebCore)
            ERROR: A weak external symbol is generated when a symbol is defined in multiple compilation units and is also marked as being exported from the library.
            ERROR: A common cause of weak external symbols is when an inline function is listed in the linker export file.
            ...

        These cases are caused by inline methods being marked with WTF_EXPORT
        (or related macro) or with an inline function being in a class marked
        as such, and when enabling LTO builds.

        For the most part, address these by removing the WEBCORE_EXPORT
        annotation from inline methods. In some cases, move the implementation
        out-of-line because it's the class that has the WEBCORE_EXPORT on it
        and removing the annotation from the class would be too disruptive.
        Finally, in other cases, move the implementation out-of-line because
        check-for-weak-vtables-and-externals still complains when keeping the
        implementation inline and removing the annotation; this seems to
        typically (but not always) happen with destructors.

        No new tests. There is no changed functionality. Only the annotation
        and treatment of inline methods are altered.

        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::pause):
        * page/CacheStorageProvider.h:
        (): Deleted.
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::reportSynchronousScrollingReasonsChanged):
        (WebCore::ScrollingTree::reportExposedUnfilledArea):
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::hasActiveNowPlayingSession const):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingTitle const):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingDuration const):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingElapsedTime const):
        (WebCore::PlatformMediaSessionManager::lastUpdatedNowPlayingInfoUniqueIdentifier const):
        (WebCore::PlatformMediaSessionManager::registeredAsNowPlayingApplication const):
        * platform/audio/mac/CARingBuffer.cpp:
        (WebCore::CARingBuffer::~CARingBuffer):
        * platform/audio/mac/CARingBuffer.h:
        (WebCore::CARingBuffer::~CARingBuffer): Deleted.
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/gamepad/GamepadProvider.h:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::displayListAsText const):
        (WebCore::GraphicsLayer::setIsTrackingDisplayListReplay):
        (WebCore::GraphicsLayer::isTrackingDisplayListReplay const):
        (WebCore::GraphicsLayer::replayDisplayListAsText const):
        * platform/mac/PlaybackSessionInterfaceMac.h:
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
        (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::setActive):
        (WebCore::LibWebRTCProvider::createDecoderFactory):
        (WebCore::LibWebRTCProvider::createEncoderFactory):
        (WebCore::LibWebRTCProvider::disableEnumeratingAllNetworkInterfaces):
        (WebCore::LibWebRTCProvider::enableEnumeratingAllNetworkInterfaces):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        * testing/MockGamepadProvider.h:
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::~Connection):

2018-06-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust static position for out-of-flow positioned boxes.
        https://bugs.webkit.org/show_bug.cgi?id=187000

        Reviewed by Antti Koivisto.

        The static position of an out-of-flow positioned box is the the position where box would go
        if it was in-flow positioned. This position needs to the resolved in the containing block's coordinate system.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPositionForOutOfFlowPositioned):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):

2018-06-25  Brady Eidson  <beidson@apple.com>

        Remove RELEASE_ASSERT added in r230875.
        <rdar://problem/40860061> and https://bugs.webkit.org/show_bug.cgi?id=187022

        Reviewed by Brent Fulgham.

        There's actually more than one way for a network session to be destroyed, and that can happen
        asynchronously and unpredictably.

        And the request to start up a WebSocket and do its handshake is also asynchronous and unpredictable
 
        It's an expected race.

        If the NetworkStorageSession cannot be found then the WebSocket handshake should just fail.

        * platform/network/SocketStreamHandleImpl.cpp:
        (WebCore::cookieDataForHandshake): If the NetworkStorageSession cannot be found, return std::nullopt.
        (WebCore::SocketStreamHandleImpl::platformSendHandshake): If the cookieData is null, fail the handshake.

2018-06-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iPad apps on macOS] Web process crashes when attempting to play embedded YouTube video in News
        https://bugs.webkit.org/show_bug.cgi?id=187011
        <rdar://problem/40906808>

        Reviewed by Tim Horton.

        Disable remote media commands when running iOS WebKit on macOS. The iOS flavor of RemoteCommandListener
        currently throws an exception when attempting to soft-link the MediaPlayer framework, which prevents video from
        being played altogether. For a followup tracking touch bar integration in iOS WebKit on macOS, see:
        <rdar://problem/39164732>.

        Manually tested by playing a YouTube video in News.

        * platform/RemoteCommandListener.cpp:
        * platform/ios/RemoteCommandListenerIOS.h:
        * platform/ios/RemoteCommandListenerIOS.mm:

2018-06-25  Keith Rollin  <krollin@apple.com>
        Unreviewed, rolling out r233087.

        Causes 5% Mac PLT regression.

        Reverted changeset:

        "Recalc styles every time defaultAppearance changes."
        https://bugs.webkit.org/show_bug.cgi?id=186866
        https://trac.webkit.org/changeset/233087

2018-06-25  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r229722): WebKitLegacy clients can crash when loading alternate page
        https://bugs.webkit.org/show_bug.cgi?id=187008
        
        Reviewed by Chris Dumez.

        The new call to 'clearProvisionalLoadForPolicyCheck' added in r229722 broke loading
        behavior in WebKitLegacy.

        1. We can now enter 'cancelPolicyCheckIfNeeded' without a Frame loader, in what appears
           to be a recursive call during the load cancellation (the 'm_waitingForContentPolicy'
           and 'm_waitingForNavigationPolicy' have already been nulled). It seems like we should
           return early here, or perhaps just move the RELEASE_ASSERT inside the case where we
           have an active policy check happening.

        2. We also enter FrameLoader::checkContentPolicy without an active document loader. We
           should recognize this case and handle it, rather than trying to dereference a nullptr
           document loader.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::cancelPolicyCheckIfNeeded): Move the RELEASE_ASSERT inside the
        conditional where the frameLoader is actually used.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkContentPolicy): Recognize that the activeDocumentLoader may
        be nullptr at this point, and take appropriate action (rather than crashing).

2018-06-25  Simon Fraser  <simon.fraser@apple.com>

        MatchedPropertiesCacheItem wastes 388KB of vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186990

        Reviewed by Antti Koivisto.

        MatchedPropertiesCacheItem.matchedProperties was appended to, so it allocated capacity
        in 16-size chunks. Instead, assign to it so it only allocates as much capacity as is needed.
        Copy-constructing is more wasteful, since it copies the 64-chunk size from the right-hand side.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::addToMatchedPropertiesCache):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::MatchedPropertiesCacheItem::MatchedPropertiesCacheItem):

2018-06-25  Chris Dumez  <cdumez@apple.com>

        Null dereference crash un ApplicationCacheGroup::startLoadingEntry()
        https://bugs.webkit.org/show_bug.cgi?id=187012
        <rdar://problem/40793716>

        Reviewed by Youenn Fablet.

        m_entryLoader can be null because ApplicationCacheResourceLoader::create() return null when
        CachedResourceLoader::requestRawResource() fails synchronously. In such case, the completion
        handler gets called with a ApplicationCacheResourceLoader::Error::CannotRequestResource error.

        To address the issue, we capture the request's URL in the lambda and use it instead of trying
        to get the URL from the loader's resource.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::startLoadingEntry):

2018-06-25  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION (r233140): Windows build failure due to incomplete FrameView and RenderBox types
        https://bugs.webkit.org/show_bug.cgi?id=186997

        * animation/KeyframeEffectReadOnly.cpp:

2018-06-25  Antoine Quint  <graouts@apple.com>

        REGRESSION: hardware-accelerated animation fails on inline element
        https://bugs.webkit.org/show_bug.cgi?id=186981
        <rdar://problem/41418697>

        Reviewed by Dean Jackson.

        Ensure we only queue accelerated actions when we have a renderer so we don't attempt
        to start an accelerated animation too soon.

        Test: webanimations/opacity-animation-yields-compositing-span.html

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::updateAcceleratedAnimationState):

2018-06-25  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r233140): v2: Windows build failure due to incomplete DocumentAnimationScheduler type
        <https://webkit.org/b/186997>

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::windowScreenDidChange):
        * dom/Document.h:
        - DocumentAnimationScheduler is behind the
          USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR) macro, which
          is disabled on Windows.
        - This also reverts my fix in r233144 since it didn't work.

2018-06-25  Youenn Fablet  <youenn@apple.com>

        Add API to control mock media devices
        https://bugs.webkit.org/show_bug.cgi?id=186958

        Reviewed by Eric Carlson.

        Refactor code to introduce a MockDevice structure that can be used in multiple processes.
        Update mock sources and center to use MockDevice.
        Add API to update mock media devices.

        Make MediaDevices an ActiveDOMObject so that it does not get collected when ondevicechange is set.

         Test: fast/mediastream/device-change-event-2.html

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        (WebCore::MediaDevices::stop):
        (WebCore::MediaDevices::scheduledEventTimerFired):
        (WebCore::MediaDevices::hasPendingActivity const):
        (WebCore::MediaDevices::activeDOMObjectName const):
        (WebCore::MediaDevices::canSuspendForDocumentSuspension const):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaDevices.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeMediaSourceCenter.h:
        * platform/mock/MockMediaDevice.h: Added.
        (WebCore::MockMicrophoneProperties::encode const):
        (WebCore::MockMicrophoneProperties::decode):
        (WebCore::MockCameraProperties::encode const):
        (WebCore::MockCameraProperties::decode):
        (WebCore::MockDisplayProperties::encode const):
        (WebCore::MockDisplayProperties::decode):
        (WebCore::MockMediaDevice::isMicrophone const):
        (WebCore::MockMediaDevice::isCamera const):
        (WebCore::MockMediaDevice::isDisplay const):
        (WebCore::MockMediaDevice::type const):
        (WebCore::MockMediaDevice::encode const):
        (WebCore::MockMediaDevice::decodeMockMediaDevice):
        (WebCore::MockMediaDevice::decode):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::startProducingData):
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::defaultDevices):
        (WebCore::devices):
        (WebCore::deviceMap):
        (WebCore::deviceListForDevice):
        (WebCore::MockRealtimeMediaSource::createCaptureDevice):
        (WebCore::MockRealtimeMediaSource::resetDevices):
        (WebCore::MockRealtimeMediaSource::setDevices):
        (WebCore::MockRealtimeMediaSource::addDevice):
        (WebCore::MockRealtimeMediaSource::removeDevice):
        (WebCore::MockRealtimeMediaSource::captureDeviceWithPersistentID):
        (WebCore::MockRealtimeMediaSource::audioDevices):
        (WebCore::MockRealtimeMediaSource::videoDevices):
        (WebCore::MockRealtimeMediaSource::displayDevices):
        (WebCore::MockRealtimeMediaSource::MockRealtimeMediaSource):
        (WebCore::MockRealtimeMediaSource::initializeCapabilities):
        (WebCore::MockRealtimeMediaSource::initializeSettings):
        (WebCore::MockRealtimeMediaSource::settings const):
        (WebCore::MockRealtimeMediaSource::supportedConstraints):
        * platform/mock/MockRealtimeMediaSource.h:
        (WebCore::MockRealtimeMediaSource::device const):
        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
        (WebCore::MockRealtimeMediaSourceCenter::singleton):
        (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
        (WebCore::MockRealtimeMediaSourceCenter::setDevices):
        (WebCore::MockRealtimeMediaSourceCenter::addDevice):
        (WebCore::MockRealtimeMediaSourceCenter::removeDevice):
        * platform/mock/MockRealtimeMediaSourceCenter.h:
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
        (WebCore::MockRealtimeVideoSource::initializeCapabilities):
        (WebCore::MockRealtimeVideoSource::drawText):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::mockCamera const):
        (WebCore::MockRealtimeVideoSource::mockScreen const):

2018-06-25  Simon Fraser  <simon.fraser@apple.com>

        AutoTableLayout wastes 52KB of Vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186710

        Reviewed by Zalan Bujtas.
        
        Call resizeToFit() to only allocate enough capacity for the number of columns.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::insertSpanCell): Whitespace fix.
        * rendering/AutoTableLayout.h:

2018-06-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Adjust static position with containing block's content box top/left
        https://bugs.webkit.org/show_bug.cgi?id=186999

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::contentBoxTop const):
        (WebCore::Display::Box::contentBoxLeft const):

2018-06-25  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r233140): Windows build failure due to incomplete DocumentAnimationScheduler type
        <https://webkit.org/b/186997>

        * dom/Document.cpp:
        * dom/Document.h:
        - Attempt to fix Windows build failure by moving include of
          DocumentAnimationScheduler.h from Document.cpp to Document.h.

2018-06-25  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Remove useless workaround
        https://bugs.webkit.org/show_bug.cgi?id=186921

        Reviewed by Xabier Rodriguez-Calvar.

        In bug 67407 a workaround was added for GStreamer 0.10. With 1.x
        the media/video-reverse-play-duration.html test passes without any
        workaround needed. The other test mentioned in that bug was
        removed, it seems.

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

2018-06-24  Tomas Popela  <tpopela@redhat.com>

        Unreviewed, address Darin's comment
        https://bugs.webkit.org/show_bug.cgi?id=186757

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::cpuPeriod):

2018-06-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_animation-pausing.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183826
        <rdar://problem/40997412>

        Reviewed by Dean Jackson.

        The CSS Animations Level 2 specification defines that calling pause() on a CSSAnimation object is "sticky"
        until a call to play() is made, meaning that any changes to the running state via the CSS animation-play-state
        property is overridden by the stickiness of the pause() call. In this patch we add an m_stickyPaused flag which
        is set in API calls to pause() and play(). While this flag is true, changes to the animation-play-state property
        to the "running" value are ignored.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
        (WebCore::CSSAnimation::bindingsPlay):
        (WebCore::CSSAnimation::bindingsPause):
        * animation/CSSAnimation.h:

2018-06-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure animations are updated prior to requestAnimationFrame callbacks
        https://bugs.webkit.org/show_bug.cgi?id=186997
        <rdar://problem/41419414>

        Reviewed by Dean Jackson.

        Some sub-tests of imported/mozilla/css-animations/test_animation-pausing.html clearly expect that animations
        would be resolved prior to firing a requestAnimationFrame() callback, as the HTML5 event loop mandates. But until
        now, both DocumentTimeline and ScriptedAnimationController would make calls to DisplayRefreshMonitorManager::scheduleAnimation()
        that were not coordinated and so the order in which the DocumentTimeline and ScriptedAnimationController callbacks
        were performed was not guaranteed.

        In this patch we add a new DocumentAnimationScheduler class which is created by a Document to manage this specific
        situation. Now DocumentTimeline and ScriptedAnimationController use this supporting object instead of being their
        own DisplayRefreshMonitorClient and call scheduleWebAnimationsResolution() and scheduleScriptedAnimationResolution()
        respectively to indicate the need to schedule an animation through the DisplayRefreshMonitorManager to serve the specific
        needs of either, or both, classes. Then DocumentAnimationScheduler ensures that Web Animations resolution happens
        prior to requestAnimationFrame callbacks when both are scheduled.

        In the future we should be able to move more code from DocumentTimeline and ScriptedAnimationController over to
        DocumentAnimationScheduler, such as support for throttling and using a timer-based fallback, but this patch provides
        the minimal functionality required to provide a sounder foundation.

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::requestAnimationFrame):
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/DocumentAnimationScheduler.cpp: Added.
        (WebCore::DocumentAnimationScheduler::create):
        (WebCore::DocumentAnimationScheduler::DocumentAnimationScheduler):
        (WebCore::DocumentAnimationScheduler::detachFromDocument):
        (WebCore::DocumentAnimationScheduler::scheduleWebAnimationsResolution):
        (WebCore::DocumentAnimationScheduler::scheduleScriptedAnimationResolution):
        (WebCore::DocumentAnimationScheduler::displayRefreshFired):
        (WebCore::DocumentAnimationScheduler::windowScreenDidChange):
        (WebCore::DocumentAnimationScheduler::createDisplayRefreshMonitor const):
        * animation/DocumentAnimationScheduler.h: Copied from Source/WebCore/animation/CSSAnimation.h.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::create):
        (WebCore::DocumentTimeline::DocumentTimeline):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        (WebCore::DocumentTimeline::windowScreenDidChange): Deleted.
        (WebCore::DocumentTimeline::createDisplayRefreshMonitor const): Deleted.
        * animation/DocumentTimeline.h:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::windowScreenDidChange):
        (WebCore::Document::requestAnimationFrame):
        (WebCore::Document::animationScheduler):
        (WebCore::Document::timeline):
        * dom/Document.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire):
        (WebCore::ScriptedAnimationController::windowScreenDidChange): Deleted.
        (WebCore::ScriptedAnimationController::displayRefreshFired): Deleted.
        (WebCore::ScriptedAnimationController::createDisplayRefreshMonitor const): Deleted.
        * dom/ScriptedAnimationController.h:
        (WebCore::ScriptedAnimationController::create):

2018-06-25  Zan Dobersek  <zdobersek@igalia.com>

        [GCrypt] Zero-prefix (if necessary) output of RSA-based encryption and signing operations
        https://bugs.webkit.org/show_bug.cgi?id=186967

        Reviewed by Michael Catanzaro.

        Output for RSA-based encryption and signing operations should match the
        length of the RSA key. The way we retrieve the MPI data means libgcrypt
        can ignore the high-bit zero values and leave us with a valid result
        that's shorter in length compared to the RSA key. For instance, if the
        output MPI fits into 2040 bits while a 2048-bit key was used we'll end
        up with MPI data that will be fitted into a 255-byte Vector, one byte
        short of the expected output length.

        To avoid this, mpiZeroPrefixedData() is now used when retrieving output
        of these RSA operations, and the value of the key size in bytes is
        passed to it. This efficiently prepares the output Vector and then
        copies the MPI data into it, respecting the MPI data length as well as
        the desired length of the output.

        No new tests -- relevant tests are now stable (i.e. not sporadically
        failing anymore), associated expectations are removed.

        * crypto/gcrypt/CryptoAlgorithmECDHGCrypt.cpp:
        (WebCore::gcryptDerive): Also use mpiZeroPrefixedData().
        * crypto/gcrypt/CryptoAlgorithmRSAES_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        * crypto/gcrypt/CryptoAlgorithmRSASSA_PKCS1_v1_5GCrypt.cpp:
        (WebCore::gcryptSign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign):
        * crypto/gcrypt/CryptoAlgorithmRSA_OAEPGCrypt.cpp:
        (WebCore::gcryptEncrypt):
        (WebCore::CryptoAlgorithmRSA_OAEP::platformEncrypt):
        * crypto/gcrypt/CryptoAlgorithmRSA_PSSGCrypt.cpp:
        (WebCore::gcryptSign):
        (WebCore::CryptoAlgorithmRSA_PSS::platformSign):
        * crypto/gcrypt/GCryptUtilities.h:
        (WebCore::mpiZeroPrefixedData):

2018-06-24  Simon Fraser  <simon.fraser@apple.com>

        Fix the DUMP_NODE_STATISTICS code so that it compiles
        https://bugs.webkit.org/show_bug.cgi?id=186982

        Reviewed by Anders Carlsson.

        The DUMP_NODE_STATISTICS code had bitrotted. ENTITY_NODE no longer exists.
        liveNodeSet needs to be a static function with a NeverDestroyed<>.

        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::trackForDebugging):
        (WebCore::Node::~Node):

2018-06-24  Simon Fraser  <simon.fraser@apple.com>

        Fix the composition underline to be transformed by -apple-color-filter
        https://bugs.webkit.org/show_bug.cgi?id=186983
        rdar://problem/40515558

        Reviewed by Zalan Bujtas.
        
        Transform the composition underline color with the color filter.

        Test: css3/color-filters/color-filter-composition-underline-color.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionUnderline const):

2018-06-23  Zalan Bujtas  <zalan@apple.com>

        [Mail] Use the Mail Viewer width as the base for resolving horizontal viewport units
        https://bugs.webkit.org/show_bug.cgi?id=186585
        <rdar://problem/30685325>

        Reviewed by Tim Horton.

        Use the existing "override viewport size for viewport units" mechanism to compute the preferred
        viewport unit values for the Mail Viewer html content. 

        Test: fast/dynamic/mail-autosize-viewport-unit.html

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::enableAutoSizeMode):
        (WebCore::FrameView::clearViewportSizeOverrideForCSSViewportUnits):
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        (WebCore::FrameView::overrideViewportSizeForCSSViewportUnits):
        (WebCore::FrameView::viewportSizeForCSSViewportUnits const):
        * page/FrameView.h:

2018-06-23  Zalan Bujtas  <zalan@apple.com>

        [LFC] Relatively positioned renderer needs offsetting for validation
        https://bugs.webkit.org/show_bug.cgi?id=186959

        Reviewed by Antti Koivisto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):

2018-06-23  Zalan Bujtas  <zalan@apple.com>

        [LFC] Miscellaneous fixes to fix simple absolute positioning.
        https://bugs.webkit.org/show_bug.cgi?id=186962

        Reviewed by Antti Koivisto.

        1. Collect out-of-flow formatting root descendants.
        2. Remove invalid and redundant ASSERTs
          invalid because the assertion is missing border, padding etc.
          redundant becasue we assert on geometry correctness in validateGeometryConstraintsAfterLayout.  

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::addOutOfFlowDescendant):
        (WebCore::Layout::Container::setOutOfFlowDescendants): Deleted.
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-06-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add user-defined literal for ASCIILiteral
        https://bugs.webkit.org/show_bug.cgi?id=186839

        Reviewed by Darin Adler.

        No behavior change.

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseManifest):
        (WebCore::ApplicationManifestParser::logManifestPropertyNotAString):
        (WebCore::ApplicationManifestParser::logManifestPropertyInvalidURL):
        (WebCore::ApplicationManifestParser::logDeveloperWarning):
        (WebCore::ApplicationManifestParser::parseStartURL):
        (WebCore::ApplicationManifestParser::parseDisplay):
        (WebCore::ApplicationManifestParser::parseName):
        (WebCore::ApplicationManifestParser::parseDescription):
        (WebCore::ApplicationManifestParser::parseShortName):
        (WebCore::ApplicationManifestParser::parseScope):
        * Modules/beacon/NavigatorBeacon.cpp:
        (WebCore::NavigatorBeacon::logError):
        (WebCore::NavigatorBeacon::sendBeacon):
        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::requestFromInfo):
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::errorToException):
        * Modules/credentialmanagement/BasicCredential.cpp:
        (WebCore::BasicCredential::type const):
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::store):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess const):
        * Modules/entriesapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::root):
        (WebCore::validatePathIsExpectedType):
        (WebCore::resolveRelativeVirtualPath):
        (WebCore::DOMFileSystem::getEntry):
        * Modules/entriesapi/FileSystemDirectoryEntry.cpp:
        (WebCore::FileSystemDirectoryEntry::getEntry):
        * Modules/entriesapi/FileSystemDirectoryReader.cpp:
        (WebCore::FileSystemDirectoryReader::readEntries):
        * Modules/fetch/FetchBody.cpp:
        (WebCore::FetchBody::consumeAsStream):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::loadingFailed):
        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::arrayBuffer):
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::consumeOnceLoadingFinished):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::json):
        (WebCore::FetchBodyOwner::text):
        (WebCore::FetchBodyOwner::blobLoadingFailed):
        (WebCore::FetchBodyOwner::consumeBodyAsStream):
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader):
        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::startLoadingBlobURL):
        (WebCore::FetchLoader::start):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::setMethod):
        (WebCore::computeReferrer):
        (WebCore::buildOptions):
        (WebCore::FetchRequest::initializeOptions):
        (WebCore::FetchRequest::initializeWith):
        (WebCore::FetchRequest::setBody):
        (WebCore::FetchRequest::referrer const):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        (WebCore::FetchResponse::redirect):
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * Modules/geolocation/GeoNotifier.cpp:
        (WebCore::GeoNotifier::timerFired):
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::requestUsesCachedPosition):
        (WebCore::Geolocation::makeCachedPositionCallbacks):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::cancelRequests):
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::advance):
        (WebCore::IDBCursor::continuePrimaryKey):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::deleteFunction):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        (WebCore::IDBDatabase::deleteObjectStore):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::setName):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::doCount):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::doGet):
        (WebCore::IDBIndex::getKey):
        (WebCore::IDBIndex::doGetKey):
        (WebCore::IDBIndex::getAll):
        (WebCore::IDBIndex::getAllKeys):
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString const):
        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::loggingString const):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::setName):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::openKeyCursor):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::getKey):
        (WebCore::IDBObjectStore::putOrAdd):
        (WebCore::IDBObjectStore::doDelete):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::clear):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        (WebCore::IDBObjectStore::count):
        (WebCore::IDBObjectStore::doCount):
        (WebCore::IDBObjectStore::getAll):
        (WebCore::IDBObjectStore::getAllKeys):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::result const):
        (WebCore:: const):
        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::putOrAddOnServer):
        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::performGetAllDatabaseNames):
        * Modules/indexeddb/server/MemoryIDBBackingStore.cpp:
        (WebCore::IDBServer::MemoryIDBBackingStore::deleteRange):
        (WebCore::IDBServer::MemoryIDBBackingStore::addRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getAllRecords):
        (WebCore::IDBServer::MemoryIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::MemoryIDBBackingStore::getCount):
        (WebCore::IDBServer::MemoryIDBBackingStore::openCursor):
        (WebCore::IDBServer::MemoryIDBBackingStore::iterateCursor):
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        (WebCore::IDBServer::SQLiteIDBBackingStore::createAndPopulateInitialDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::extractExistingDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseNameFromEncodedFilename):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getOrEstablishDatabaseInfo):
        (WebCore::IDBServer::SQLiteIDBBackingStore::beginTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::abortTransaction):
        (WebCore::IDBServer::SQLiteIDBBackingStore::commitTransaction):
        (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::deleteRange):
        (WebCore::IDBServer::SQLiteIDBBackingStore::updateAllIndexesForAddRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::addRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getBlobRecordsForObjectStoreRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllObjectStoreRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getAllIndexRecords):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getIndexRecord):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetIndexRecordForOneKey):
        (WebCore::IDBServer::SQLiteIDBBackingStore::getCount):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedGetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::uncheckedSetKeyGeneratorValue):
        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::revertGeneratedKeyNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):
        (WebCore::IDBServer::SQLiteIDBBackingStore::openCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::iterateCursor):
        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
        * Modules/indexeddb/server/SQLiteIDBTransaction.cpp:
        (WebCore::IDBServer::SQLiteIDBTransaction::begin):
        (WebCore::IDBServer::SQLiteIDBTransaction::commit):
        (WebCore::IDBServer::SQLiteIDBTransaction::abort):
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::deleteObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::renameObjectStore):
        (WebCore::IDBServer::UniqueIDBDatabase::deleteIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::renameIndex):
        (WebCore::IDBServer::UniqueIDBDatabase::performPutOrAdd):
        (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
        (WebCore::IDBServer::UniqueIDBDatabase::abortTransaction):
        * Modules/indexeddb/shared/IDBError.h:
        (WebCore::IDBError::userDeleteError):
        * Modules/indexeddb/shared/IDBTransactionInfo.cpp:
        (WebCore::IDBTransactionInfo::loggingString const):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::addIceCandidate):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::deny):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::checkAndCanonicalizeTotal):
        (WebCore::PaymentRequest::create):
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::webkitStorageInfo const):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::channelCountMode):
        (WebCore::AudioNode::channelInterpretation):
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::MediaStreamAudioSource):
        * Modules/webauthn/AuthenticatorManager.cpp:
        (WebCore::AuthenticatorManagerInternal::produceClientDataJson):
        (WebCore::AuthenticatorManagerInternal::initTimeoutTimer):
        (WebCore::AuthenticatorManager::create const):
        (WebCore::AuthenticatorManager::discoverFromExternalSource const):
        (WebCore::AuthenticatorManager::isUserVerifyingPlatformAuthenticatorAvailable const):
        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticator::makeCredential):
        (WebCore::LocalAuthenticator::getAssertion):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::usage):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::binaryType const):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readStatusLine):
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::checkResponseHeaders):
        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::requestPresent):
        (WebCore::VRDisplay::exitPresent):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::defaultLiveRegionStatusForRole):
        (WebCore::AccessibilityObject::invalidStatus const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement const):
        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::constructCustomElementSynchronously):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::getCustomElementCallback):
        (WebCore::validateCustomElementNameAndThrowIfNeeded):
        (WebCore::JSCustomElementRegistry::define):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMConstructorBase.cpp:
        (WebCore::callThrowTypeError):
        * bindings/js/JSDOMConstructorBase.h:
        (WebCore::JSDOMConstructorBase::className):
        * bindings/js/JSDOMConstructorNotConstructable.h:
        (WebCore::JSDOMConstructorNotConstructable::callThrowTypeError):
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::createDOMException):
        (WebCore::throwSequenceTypeError):
        (WebCore::throwNonFiniteTypeError):
        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorForEach):
        (WebCore::IteratorTraits>::next):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::isResponseCorrect):
        (WebCore::handleResponseOnStreamingAction):
        (WebCore::JSDOMWindowBase::compileStreaming):
        (WebCore::JSDOMWindowBase::instantiateStreaming):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::preventExtensions):
        (WebCore::JSDOMWindow::toStringName):
        * bindings/js/JSHTMLElementCustom.cpp:
        (WebCore::constructJSHTMLElement):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::preventExtensions):
        (WebCore::JSLocation::toStringName):
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::constructJSReadableStreamDefaultController):
        (WebCore::constructJSReadableByteStreamController):
        (WebCore::constructJSReadableStreamBYOBRequest):
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::preventExtensions):
        (WebCore::JSRemoteDOMWindow::toStringName):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::resolveModuleSpecifier):
        (WebCore::ScriptModuleLoader::resolve):
        (WebCore::ScriptModuleLoader::fetch):
        (WebCore::ScriptModuleLoader::evaluate):
        (WebCore::ScriptModuleLoader::importModule):
        (WebCore::ScriptModuleLoader::notifyFinished):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::maybeThrowExceptionIfSerializationFailed):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        (GenerateConstructorHelperMethods):
        (GenerateCallTracer):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::JSInterfaceNameConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::JSMapLikeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::JSReadOnlyMapLikeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::JSTestCEReactionsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::JSTestCEReactionsStringifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::JSTestCallTracerConstructor::initializeProperties):
        (WebCore::jsTestCallTracerTestAttributeInterfaceGetter):
        (WebCore::setJSTestCallTracerTestAttributeInterfaceSetter):
        (WebCore::jsTestCallTracerTestAttributeSpecifiedGetter):
        (WebCore::setJSTestCallTracerTestAttributeSpecifiedSetter):
        (WebCore::jsTestCallTracerTestAttributeWithVariantGetter):
        (WebCore::setJSTestCallTracerTestAttributeWithVariantSetter):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationInterfaceBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationSpecifiedBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithArgumentsBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithNullableVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithOptionalVariantArgumentBody):
        (WebCore::jsTestCallTracerPrototypeFunctionTestOperationWithDefaultVariantArgumentBody):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::JSTestCallbackInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::JSTestDOMJITConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::JSTestEnabledBySettingConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::JSTestEventTargetConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::JSTestExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::JSTestGlobalObjectConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestIndexedSetterNoIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::JSTestIndexedSetterThrowingExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestIndexedSetterWithIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::construct):
        (WebCore::JSTestInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::JSTestIterableConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::JSTestNamedAndIndexedSetterThrowingExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::JSTestNamedDeleterNoIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::JSTestNamedDeleterThrowingExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::JSTestNamedDeleterWithIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedDeleterWithIndexedGetterConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::JSTestNamedGetterCallWithConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::JSTestNamedGetterNoIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::JSTestNamedGetterWithIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::JSTestNamedSetterNoIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::JSTestNamedSetterThrowingExceptionConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::JSTestNamedSetterWithIdentifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetterConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithOverrideBuiltinsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNodeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::JSTestObjConstructor::initializeProperties):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueBody):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::JSTestOverloadedConstructorsWithSequenceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::JSTestPluginInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::JSTestPromiseRejectionEventConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::JSTestSerializationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::JSTestSerializationIndirectInheritanceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::JSTestSerializationInheritConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::JSTestSerializationInheritFinalConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::JSTestStringifierConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::JSTestStringifierAnonymousOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::JSTestStringifierNamedOperationConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::JSTestStringifierOperationImplementedAsConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::JSTestStringifierOperationNamedToStringConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::JSTestStringifierReadOnlyAttributeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::JSTestStringifierReadWriteAttributeConstructor::initializeProperties):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsConstructor::initializeProperties):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        (JSC::Bindings::CInstance::stringValue const):
        (JSC::Bindings::CInstance::toJSPrimitive const):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcArray::setValueAt const):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::processContentExtensionRulesForLoad):
        * crypto/SubtleCrypto.cpp:
        (WebCore::rejectWithException):
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/keys/CryptoKeyEC.cpp:
        (WebCore::CryptoKeyEC::algorithm const):
        * css/CSSInheritedValue.cpp:
        (WebCore::CSSInheritedValue::customCSSText const):
        * css/CSSInitialValue.cpp:
        (WebCore::CSSInitialValue::customCSSText const):
        * css/CSSKeyframesRule.cpp:
        (WebCore::CSSKeyframesRule::insertRule):
        * css/CSSRevertValue.cpp:
        (WebCore::CSSRevertValue::customCSSText const):
        * css/CSSStyleSheet.h:
        * css/CSSUnsetValue.cpp:
        (WebCore::CSSUnsetValue::customCSSText const):
        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::customCSSText const):
        * css/DOMMatrixReadOnly.cpp:
        (WebCore::DOMMatrixReadOnly::validateAndFixup):
        (WebCore::DOMMatrixReadOnly::toFloat32Array const):
        (WebCore::DOMMatrixReadOnly::toFloat64Array const):
        (WebCore::DOMMatrixReadOnly::toString const):
        * css/DeprecatedCSSOMValueList.cpp:
        (WebCore::DeprecatedCSSOMValueList::cssText const):
        * css/FontFace.cpp:
        (WebCore::FontFace::create):
        (WebCore::FontFace::unicodeRange const):
        (WebCore::FontFace::featureSettings const):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::serialize const):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyPriority):
        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::toString const):
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::commitMediaQuery):
        * dom/CDATASection.cpp:
        (WebCore::CDATASection::nodeName const):
        * dom/Comment.cpp:
        (WebCore::Comment::nodeName const):
        * dom/DOMException.cpp:
        (WebCore::DOMException::description const):
        (WebCore::DOMException::create):
        * dom/DOMException.h:
        (WebCore::DOMException::name):
        (WebCore::DOMException::message):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::DataTransfer):
        (WebCore::DataTransfer::types const):
        (WebCore::DataTransfer::createForInputEvent):
        (WebCore::DataTransfer::dropEffect const):
        (WebCore::DataTransfer::effectAllowed const):
        * dom/DataTransferItem.cpp:
        (WebCore::DataTransferItem::kind const):
        * dom/Document.cpp:
        (WebCore::Document::suggestedMIMEType const):
        (WebCore::Document::contentType const):
        (WebCore::Document::nodeName const):
        (WebCore::Document::writeln):
        (WebCore::Document::canNavigate):
        (WebCore::Document::designMode const):
        (WebCore::Document::requestFullScreenForElement):
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::nodeName const):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::initMouseEventQuirk):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::requestModuleScript):
        * dom/ScriptElementCachedScriptFetcher.cpp:
        (WebCore::ScriptElementCachedScriptFetcher::requestModuleScript const):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::dispatchErrorEvent):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::throttlingReasonsToString):
        * dom/Text.cpp:
        (WebCore::Text::nodeName const):
        * dom/TextEncoder.cpp:
        (WebCore::TextEncoder::encoding const):
        * dom/Traversal.cpp:
        (WebCore::NodeIteratorBase::acceptNode):
        * editing/EditCommand.cpp:
        (WebCore::inputTypeNameForEditingAction):
        * editing/Editing.cpp:
        (WebCore::createTabSpanElement):
        * editing/Editor.cpp:
        (WebCore::createDataTransferForClipboardEvent):
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertBacktab):
        (WebCore::executeInsertLineBreak):
        (WebCore::executeInsertNewline):
        (WebCore::executeInsertTab):
        (WebCore::executeJustifyCenter):
        (WebCore::executeJustifyFull):
        (WebCore::executeJustifyLeft):
        (WebCore::executeJustifyRight):
        (WebCore::executeStrikethrough):
        (WebCore::executeSubscript):
        (WebCore::executeSuperscript):
        (WebCore::executeToggleBold):
        (WebCore::executeToggleItalic):
        (WebCore::executeUnderline):
        (WebCore::executeUnscript):
        (WebCore::stateBold):
        (WebCore::stateItalic):
        (WebCore::stateStrikethrough):
        (WebCore::stateSubscript):
        (WebCore::stateSuperscript):
        (WebCore::stateUnderline):
        (WebCore::stateJustifyCenter):
        (WebCore::stateJustifyFull):
        (WebCore::stateJustifyLeft):
        (WebCore::stateJustifyRight):
        (WebCore::Editor::Command::value const):
        * editing/SmartReplace.cpp:
        (WebCore::getSmartSet):
        * fileapi/FileCocoa.mm:
        (WebCore::File::computeNameAndContentTypeForReplacedFile):
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::saveFormControlState const):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::fallbackValue const):
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::createFileEntry):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFilesizeString):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList const):
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const):
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::HTMLAppletElement):
        (WebCore::HTMLAppletElement::updateWidget):
        * html/HTMLCanvasElement.cpp:
        (WebCore::toEncodingMimeType):
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::captureStream):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::contentEditable const):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::keytype const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const):
        (WebCore::stringForNetworkState):
        (WebCore::HTMLMediaElement::preload const):
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * html/HTMLObjectElement.cpp:
        (WebCore::mapDataParamToSrc):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::setReplacement):
        * html/ImageData.cpp:
        (WebCore::ImageData::create):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData const):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        (WebCore::WebGL2RenderingContext::getParameter):
        * html/canvas/WebGLCompressedTextureASTC.cpp:
        (WebCore::WebGLCompressedTextureASTC::WebGLCompressedTextureASTC):
        (WebCore::WebGLCompressedTextureASTC::getSupportedProfiles):
        (WebCore::WebGLCompressedTextureASTC::supported):
        (WebCore::m_isLDRSupported): Deleted.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        (WebCore::WebGLRenderingContextBase::enableSupportedExtension):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGPUEnums.cpp:
        (WebCore::web3DCompareFunctionName):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseCORSSettingsAttribute):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::initiatorFor):
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::PreloadRequest::resourceRequest):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink):
        * html/track/DataCue.cpp:
        (WebCore::DataCue::toJSONString const):
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::updateCueFromCueData):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::toJSON const):
        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGeneric::toJSONString const):
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::setLanguage):
        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::toJSON const):
        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::CommandLineAPIModule):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::indexForData):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient):
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern):
        * inspector/InspectorFrontendClient.h:
        (WebCore::InspectorFrontendClient::debuggableType):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::userInterfaceLayoutDirection):
        (WebCore::InspectorFrontendHost::platform):
        (WebCore::InspectorFrontendHost::port):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::setIndicating):
        (WebCore::InspectorOverlay::drawPaintRects):
        (WebCore::InspectorOverlay::drawRulers):
        (WebCore::appendPathSegment):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createConsoleProfileData):
        (WebCore::TimelineRecordFactory::createProbeSampleData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createTimeStampData):
        (WebCore::TimelineRecordFactory::createAnimationFrameData):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::appendLayoutRoot):
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):
        (WebCore::jsStringForPaymentRequestState):
        (WebCore::WebInjectedScriptHost::getInternalProperties):
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::createStyleSheet):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::requestShaderSource):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::setShaderProgramDisabled):
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::assertInspectorCanvas):
        (WebCore::InspectorCanvasAgent::assertInspectorProgram):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::assertNode):
        (WebCore::InspectorDOMAgent::assertDocument):
        (WebCore::InspectorDOMAgent::assertElement):
        (WebCore::InspectorDOMAgent::assertEditableNode):
        (WebCore::InspectorDOMAgent::assertEditableElement):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushNodeToFrontend):
        (WebCore::InspectorDOMAgent::requestChildNodes):
        (WebCore::InspectorDOMAgent::querySelector):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::releaseBackendNodeIds):
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::insertAdjacentHTML):
        (WebCore::InspectorDOMAgent::setNodeValue):
        (WebCore::InspectorDOMAgent::setEventListenerDisabled):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::highlightConfigFromInspectorObject):
        (WebCore::InspectorDOMAgent::highlightQuad):
        (WebCore::InspectorDOMAgent::highlightSelector):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::highlightNodeList):
        (WebCore::InspectorDOMAgent::moveTo):
        (WebCore::InspectorDOMAgent::focus):
        (WebCore::InspectorDOMAgent::setInspectedNode):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        (WebCore::InspectorDOMAgent::pushNodeByBackendIdToFrontend):
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::domTypeName):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::Inspector::idbKeyRangeFromKeyRange):
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::InspectorNetworkAgent):
        (WebCore::InspectorNetworkAgent::getResponseBody):
        (WebCore::InspectorNetworkAgent::loadResource):
        (WebCore::InspectorNetworkAgent::resolveWebSocket):
        (WebCore::InspectorNetworkAgent::createTextDecoder):
        (WebCore::InspectorNetworkAgent::searchInRequest):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceContent):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::navigate):
        (WebCore::InspectorPageAgent::assertFrame):
        (WebCore::InspectorPageAgent::assertDocumentLoader):
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        (WebCore::InspectorPageAgent::archive):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::setInstruments):
        (WebCore::InspectorTimelineAgent::startFromConsole):
        (WebCore::InspectorTimelineAgent::stopFromConsole):
        (WebCore::InspectorTimelineAgent::didCompleteRecordEntry):
        * inspector/agents/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::initialized):
        (WebCore::InspectorWorkerAgent::sendMessageToWorker):
        * inspector/agents/WebConsoleAgent.cpp:
        (WebCore::WebConsoleAgent::setLoggingChannelLevel):
        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::injectedScriptForEval):
        * inspector/agents/page/PageNetworkAgent.cpp:
        (WebCore::PageNetworkAgent::scriptExecutionContext):
        * inspector/agents/page/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        * inspector/agents/worker/ServiceWorkerAgent.cpp:
        (WebCore::ServiceWorkerAgent::ServiceWorkerAgent):
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::injectedScriptForEval):
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::injectedScriptForEval):
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::handleProvisionalLoadFailure):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        (WebCore::validatePreflightResponse):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::notifyFinished):
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::isRemoteWebArchive):
        (WebCore::DocumentLoader::startIconLoading):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::reportRedirectionWithBadScheme):
        (WebCore::DocumentThreadableLoader::reportContentSecurityPolicyError):
        (WebCore::DocumentThreadableLoader::reportCrossOriginResourceSharingError):
        (WebCore::DocumentThreadableLoader::reportIntegrityMetadataError):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::parseEncodingType):
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::Attributes::methodString):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::initForSynthesizedDocument):
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::defaultSubstituteDataForURL):
        (WebCore::FrameLoader::addHTTPUpgradeInsecureRequestsIfNeeded):
        (WebCore::FrameLoader::dispatchBeforeUnloadEvent):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preconnectIfNeeded):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendViolationReport):
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::primaryDomain):
        (WebCore::ResourceLoadStatistics::areDomainsAssociated):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::didBlockAuthenticationChallenge):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::logError):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        (WebCore::ApplicationCacheGroup::didFinishLoadingEntry):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::createFileURL):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::createArchiveMIMETypesMap):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::acceptHeaderValueFromType):
        (WebCore::CachedResourceRequest::updateAcceptEncodingHeader):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::getOriginsWithCache):
        * loader/soup/ResourceLoaderSoup.cpp:
        (WebCore::ResourceLoader::loadGResource):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::type const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::createWindow):
        * page/DebugPageOverlays.cpp:
        (WebCore::touchEventRegionColors):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mediaLoadedKey):
        (WebCore::DiagnosticLoggingKeys::mediaLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::memoryCacheEntryDecisionKey):
        (WebCore::DiagnosticLoggingKeys::memoryCacheUsageKey):
        (WebCore::DiagnosticLoggingKeys::missingValidatorFieldsKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadedKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingCPUUsageKey):
        (WebCore::DiagnosticLoggingKeys::postPageBackgroundingMemoryUsageKey):
        (WebCore::DiagnosticLoggingKeys::pageHandlesWebGLContextLossKey):
        (WebCore::DiagnosticLoggingKeys::postPageLoadCPUUsageKey):
        (WebCore::DiagnosticLoggingKeys::postPageLoadMemoryUsageKey):
        (WebCore::DiagnosticLoggingKeys::provisionalLoadKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsPluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOnePluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::pageLoadedKey):
        (WebCore::DiagnosticLoggingKeys::playedKey):
        (WebCore::DiagnosticLoggingKeys::engineFailedToLoadKey):
        (WebCore::DiagnosticLoggingKeys::entryRightlyNotWarmedUpKey):
        (WebCore::DiagnosticLoggingKeys::entryWronglyNotWarmedUpKey):
        (WebCore::DiagnosticLoggingKeys::navigationKey):
        (WebCore::DiagnosticLoggingKeys::needsRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheFailureReasonKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheUnusedReasonKey):
        (WebCore::DiagnosticLoggingKeys::networkCacheReuseFailureKey):
        (WebCore::DiagnosticLoggingKeys::networkKey):
        (WebCore::DiagnosticLoggingKeys::networkProcessCrashedKey):
        (WebCore::DiagnosticLoggingKeys::neverSeenBeforeKey):
        (WebCore::DiagnosticLoggingKeys::noKey):
        (WebCore::DiagnosticLoggingKeys::noCacheKey):
        (WebCore::DiagnosticLoggingKeys::noStoreKey):
        (WebCore::DiagnosticLoggingKeys::nonVisibleStateKey):
        (WebCore::DiagnosticLoggingKeys::notInMemoryCacheKey):
        (WebCore::DiagnosticLoggingKeys::pageCacheKey):
        (WebCore::DiagnosticLoggingKeys::pageCacheFailureKey):
        (WebCore::DiagnosticLoggingKeys::noDocumentLoaderKey):
        (WebCore::DiagnosticLoggingKeys::noLongerInCacheKey):
        (WebCore::DiagnosticLoggingKeys::otherKey):
        (WebCore::DiagnosticLoggingKeys::mainDocumentErrorKey):
        (WebCore::DiagnosticLoggingKeys::mainResourceKey):
        (WebCore::DiagnosticLoggingKeys::isErrorPageKey):
        (WebCore::DiagnosticLoggingKeys::isExpiredKey):
        (WebCore::DiagnosticLoggingKeys::isReloadIgnoringCacheDataKey):
        (WebCore::DiagnosticLoggingKeys::loadingKey):
        (WebCore::DiagnosticLoggingKeys::hasPluginsKey):
        (WebCore::DiagnosticLoggingKeys::httpsNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::imageKey):
        (WebCore::DiagnosticLoggingKeys::inMemoryCacheKey):
        (WebCore::DiagnosticLoggingKeys::inactiveKey):
        (WebCore::DiagnosticLoggingKeys::internalErrorKey):
        (WebCore::DiagnosticLoggingKeys::invalidSessionIDKey):
        (WebCore::DiagnosticLoggingKeys::isAttachmentKey):
        (WebCore::DiagnosticLoggingKeys::isConditionalRequestKey):
        (WebCore::DiagnosticLoggingKeys::isDisabledKey):
        (WebCore::DiagnosticLoggingKeys::noCurrentHistoryItemKey):
        (WebCore::DiagnosticLoggingKeys::quirkRedirectComingKey):
        (WebCore::DiagnosticLoggingKeys::rawKey):
        (WebCore::DiagnosticLoggingKeys::redirectKey):
        (WebCore::DiagnosticLoggingKeys::isLoadingKey):
        (WebCore::DiagnosticLoggingKeys::documentLoaderStoppingKey):
        (WebCore::DiagnosticLoggingKeys::domainCausingCrashKey):
        (WebCore::DiagnosticLoggingKeys::domainCausingEnergyDrainKey):
        (WebCore::DiagnosticLoggingKeys::domainCausingJetsamKey):
        (WebCore::DiagnosticLoggingKeys::simulatedPageCrashKey):
        (WebCore::DiagnosticLoggingKeys::exceededActiveMemoryLimitKey):
        (WebCore::DiagnosticLoggingKeys::exceededInactiveMemoryLimitKey):
        (WebCore::DiagnosticLoggingKeys::exceededBackgroundCPULimitKey):
        (WebCore::DiagnosticLoggingKeys::domainVisitedKey):
        (WebCore::DiagnosticLoggingKeys::cannotSuspendActiveDOMObjectsKey):
        (WebCore::DiagnosticLoggingKeys::cpuUsageKey):
        (WebCore::DiagnosticLoggingKeys::createSharedBufferFailedKey):
        (WebCore::DiagnosticLoggingKeys::activeInForegroundTabKey):
        (WebCore::DiagnosticLoggingKeys::activeInBackgroundTabOnlyKey):
        (WebCore::DiagnosticLoggingKeys::applicationCacheKey):
        (WebCore::DiagnosticLoggingKeys::applicationManifestKey):
        (WebCore::DiagnosticLoggingKeys::audioKey):
        (WebCore::DiagnosticLoggingKeys::backNavigationDeltaKey):
        (WebCore::DiagnosticLoggingKeys::canCacheKey):
        (WebCore::DiagnosticLoggingKeys::cacheControlNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::cachedResourceRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::cachedResourceRevalidationReasonKey):
        (WebCore::DiagnosticLoggingKeys::deniedByClientKey):
        (WebCore::DiagnosticLoggingKeys::deviceMotionKey):
        (WebCore::DiagnosticLoggingKeys::deviceOrientationKey):
        (WebCore::DiagnosticLoggingKeys::diskCacheKey):
        (WebCore::DiagnosticLoggingKeys::diskCacheAfterValidationKey):
        (WebCore::DiagnosticLoggingKeys::reloadKey):
        (WebCore::DiagnosticLoggingKeys::replaceKey):
        (WebCore::DiagnosticLoggingKeys::retrievalRequestKey):
        (WebCore::DiagnosticLoggingKeys::resourceLoadedKey):
        (WebCore::DiagnosticLoggingKeys::resourceResponseSourceKey):
        (WebCore::DiagnosticLoggingKeys::retrievalKey):
        (WebCore::DiagnosticLoggingKeys::revalidatingKey):
        (WebCore::DiagnosticLoggingKeys::reloadFromOriginKey):
        (WebCore::DiagnosticLoggingKeys::reloadRevalidatingExpiredKey):
        (WebCore::DiagnosticLoggingKeys::sameLoadKey):
        (WebCore::DiagnosticLoggingKeys::scriptKey):
        (WebCore::DiagnosticLoggingKeys::serviceWorkerKey):
        (WebCore::DiagnosticLoggingKeys::streamingMedia):
        (WebCore::DiagnosticLoggingKeys::styleSheetKey):
        (WebCore::DiagnosticLoggingKeys::successfulSpeculativeWarmupWithRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::successfulSpeculativeWarmupWithoutRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::svgDocumentKey):
        (WebCore::DiagnosticLoggingKeys::synchronousMessageFailedKey):
        (WebCore::DiagnosticLoggingKeys::telemetryPageLoadKey):
        (WebCore::DiagnosticLoggingKeys::timedOutKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledMoreThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedMoreThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::occurredKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededMoreThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::uncacheableStatusCodeKey):
        (WebCore::DiagnosticLoggingKeys::underMemoryPressureKey):
        (WebCore::DiagnosticLoggingKeys::unknownEntryRequestKey):
        (WebCore::DiagnosticLoggingKeys::unlikelyToReuseKey):
        (WebCore::DiagnosticLoggingKeys::unsupportedHTTPMethodKey):
        (WebCore::DiagnosticLoggingKeys::unsuspendableDOMObjectKey):
        (WebCore::DiagnosticLoggingKeys::unusedKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonCredentialSettingsKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonErrorKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonMustRevalidateNoValidatorKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonNoStoreKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonRedirectChainKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonReloadKey):
        (WebCore::DiagnosticLoggingKeys::unusedReasonTypeMismatchKey):
        (WebCore::DiagnosticLoggingKeys::usedKey):
        (WebCore::DiagnosticLoggingKeys::userZoomActionKey):
        (WebCore::DiagnosticLoggingKeys::varyingHeaderMismatchKey):
        (WebCore::DiagnosticLoggingKeys::videoKey):
        (WebCore::DiagnosticLoggingKeys::visibleNonActiveStateKey):
        (WebCore::DiagnosticLoggingKeys::visibleAndActiveStateKey):
        (WebCore::DiagnosticLoggingKeys::wastedSpeculativeWarmupWithRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::wastedSpeculativeWarmupWithoutRevalidationKey):
        (WebCore::DiagnosticLoggingKeys::webViewKey):
        (WebCore::DiagnosticLoggingKeys::yesKey):
        (WebCore::DiagnosticLoggingKeys::expiredKey):
        (WebCore::DiagnosticLoggingKeys::fontKey):
        (WebCore::DiagnosticLoggingKeys::prunedDueToMemoryPressureKey):
        (WebCore::DiagnosticLoggingKeys::prunedDueToMaxSizeReached):
        (WebCore::DiagnosticLoggingKeys::prunedDueToProcessSuspended):
        (WebCore::WebCore::DiagnosticLoggingKeys::notHTTPFamilyKey):
        (WebCore::WebCore::DiagnosticLoggingKeys::webGLStateKey):
        (WebCore::DiagnosticLoggingKeys::memoryUsageToDiagnosticLoggingKey):
        (WebCore::DiagnosticLoggingKeys::foregroundCPUUsageToDiagnosticLoggingKey):
        (WebCore::DiagnosticLoggingKeys::backgroundCPUUsageToDiagnosticLoggingKey):
        (WebCore::DiagnosticLoggingKeys::resourceLoadStatisticsTelemetryKey):
        * page/DisabledAdaptations.cpp:
        (WebCore::watchAdaptationName):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handlePasteGlobalSelection):
        (WebCore::convertDragOperationToDropZoneOperation):
        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::appName):
        (WebCore::NavigatorBase::appCodeName):
        * page/Page.cpp:
        (WebCore::Page::logNavigation):
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::url const):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * page/PerformanceMark.h:
        * page/PerformanceMeasure.h:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::observe):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        * page/PerformanceUserTiming.cpp:
        (WebCore::restrictedMarkFunction):
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::toString const):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::toString const):
        (WebCore::SecurityOriginData::databaseIdentifier const):
        * page/cocoa/ResourceUsageOverlayCocoa.mm:
        (WebCore::gcTimerString):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const):
        (WebCore::ContentSecurityPolicy::reportUnsupportedDirective const):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        (WebCore::cpuUsageString):
        (WebCore::gcTimerString):
        * platform/ContentType.cpp:
        (WebCore::ContentType::codecsParameter):
        (WebCore::ContentType::profilesParameter):
        * platform/Decimal.cpp:
        (WebCore::Decimal::toString const):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::typesForCommonExtension):
        (WebCore::initializeUnsupportedTextMIMETypes):
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):
        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::canServiceWorkersHandleURLScheme):
        * platform/URL.cpp:
        (WebCore::mimeTypeFromDataURL):
        * platform/UserAgentQuirks.cpp:
        (WebCore::UserAgentQuirks::stringForQuirk):
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::keyForCharCode):
        * platform/cocoa/NetworkExtensionContentFilter.mm:
        (WebCore::NetworkExtensionContentFilter::unblockHandler const):
        * platform/cocoa/ParentalControlsContentFilter.mm:
        (WebCore::ParentalControlsContentFilter::unblockHandler const):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::fileContentState):
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isSafari):
        (WebCore::MacApplication::isAppleMail):
        (WebCore::MacApplication::isIBooks):
        (WebCore::MacApplication::isITunes):
        (WebCore::MacApplication::isMicrosoftMessenger):
        (WebCore::MacApplication::isAdobeInstaller):
        (WebCore::MacApplication::isAOLInstantMessenger):
        (WebCore::MacApplication::isMicrosoftMyDay):
        (WebCore::MacApplication::isMicrosoftOutlook):
        (WebCore::MacApplication::isQuickenEssentials):
        (WebCore::MacApplication::isAperture):
        (WebCore::MacApplication::isVersions):
        (WebCore::MacApplication::isHRBlock):
        (WebCore::MacApplication::isIAdProducer):
        (WebCore::MacApplication::isSolidStateNetworksDownloader):
        (WebCore::IOSApplication::isMobileMail):
        (WebCore::IOSApplication::isMobileSafari):
        (WebCore::IOSApplication::isWebBookmarksD):
        (WebCore::IOSApplication::isDumpRenderTree):
        (WebCore::IOSApplication::isMobileStore):
        (WebCore::IOSApplication::isSpringBoard):
        (WebCore::IOSApplication::isWebApp):
        (WebCore::IOSApplication::isIBooks):
        (WebCore::IOSApplication::isIBooksStorytime):
        (WebCore::IOSApplication::isTheSecretSocietyHiddenMystery):
        (WebCore::IOSApplication::isCardiogram):
        (WebCore::IOSApplication::isNike):
        * platform/cocoa/UserAgentCocoa.mm:
        (WebCore::userAgentBundleVersion):
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):
        (WebCore::GameControllerGamepad::setupAsGamepad):
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::toJSONString const):
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        (WebCore::CDMFactoryFairPlayStreaming::supportsKeySystem):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::isEqual):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::keySystem const):
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::generateKeyRequest):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        (WebCore::CDMSessionAVStreamSession::generateKeyRequest):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::propertyIdToString):
        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::tileGridContainerLayerName):
        (WebCore::TileController::zoomedOutTileGridContainerLayerName):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL const):
        (WebCore::dataURL):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::VideoTextureCopierCV::initializeContextObjects):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::toJSONString const):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        (Nicosia::PaintingEngineThreaded::PaintingEngineThreaded):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::initializeAvailableExtensions):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::getUnmangledInfoLog):
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::TextureMapperContextAttributes::get):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::toDataURL const):
        (WebCore::ImageDataToDataURL):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::typesForLegacyUnsafeBindings):
        * platform/gtk/PasteboardHelper.cpp:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        (WebCore::PlatformKeyboardEvent::keyValueForGdkKeyCode):
        (WebCore::PlatformKeyboardEvent::keyCodeForHardwareKeyCode):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.h:
        * platform/ios/Device.cpp:
        (WebCore::deviceName):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType):
        * platform/ios/PlatformEventFactoryIOS.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::codeForKeyEvent):
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType):
        * platform/mac/PlatformEventFactoryMac.mm:
        (WebCore::keyForKeyEvent):
        (WebCore::codeForKeyEvent):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::safeTypeForDOMToReadAndWriteForPlatformType):
        * platform/mediastream/MediaConstraints.cpp:
        (WebCore::addDefaultVideoConstraints):
        * platform/mediastream/PeerMediaDescription.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::applyConstraints):
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID):
        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::deviceMap):
        (WebCore::MockRealtimeMediaSource::audioDevices):
        (WebCore::MockRealtimeMediaSource::videoDevices):
        (WebCore::MockRealtimeMediaSource::displayDevices):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::writeBlobsToTemporaryFiles):
        * platform/network/DataURLDecoder.cpp:
        (WebCore::DataURLDecoder::parseMediaType):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendMultiPartFileValue):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPRequestLine):
        (WebCore::parseHTTPHeader):
        (WebCore::normalizeHTTPMethod):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::redirectedRequest const):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::handleDataURL):
        * platform/network/curl/SynchronousLoaderClientCurl.cpp:
        (WebCore::SynchronousLoaderClient::platformBadResponseError):
        * platform/network/win/DownloadBundleWin.cpp:
        (WebCore::DownloadBundle::fileExtension):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        (WebCore::SQLiteDatabase::setFullsync):
        (WebCore::SQLiteDatabase::maximumSize):
        (WebCore::SQLiteDatabase::pageSize):
        (WebCore::SQLiteDatabase::freeSpaceSize):
        (WebCore::SQLiteDatabase::totalSize):
        (WebCore::SQLiteDatabase::clearAllTables):
        (WebCore::SQLiteDatabase::runVacuumCommand):
        (WebCore::SQLiteDatabase::runIncrementalVacuumCommand):
        (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::deleteDatabaseFile):
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::dateFormat):
        (WebCore::getFormatForSkeleton):
        * platform/text/LocaleNone.cpp:
        (WebCore::LocaleNone::dateFormat):
        (WebCore::LocaleNone::monthFormat):
        (WebCore::LocaleNone::shortMonthFormat):
        (WebCore::LocaleNone::timeFormat):
        (WebCore::LocaleNone::shortTimeFormat):
        (WebCore::LocaleNone::dateTimeFormatWithSeconds):
        (WebCore::LocaleNone::dateTimeFormatWithoutSeconds):
        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::scriptNameToCode):
        (WebCore::localeToScriptCodeForFontSelection):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::defaultTextEncodingNameForSystemLanguage):
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::bundleName):
        * platform/wpe/RenderThemeWPE.cpp:
        (WebCore::RenderThemeWPE::mediaControlsStyleSheet):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::setText):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::extraDefaultStyleSheet):
        * svg/SVGComponentTransferFunctionElement.h:
        (WebCore::SVGPropertyTraits<ComponentTransferType>::toString):
        * svg/SVGFEColorMatrixElement.h:
        (WebCore::SVGPropertyTraits<ColorMatrixType>::toString):
        * svg/SVGFECompositeElement.h:
        (WebCore::SVGPropertyTraits<CompositeOperationType>::toString):
        * svg/SVGFEConvolveMatrixElement.h:
        (WebCore::SVGPropertyTraits<EdgeModeType>::toString):
        * svg/SVGFEDisplacementMapElement.h:
        (WebCore::SVGPropertyTraits<ChannelSelectorType>::toString):
        * svg/SVGFEMorphologyElement.h:
        (WebCore::SVGPropertyTraits<MorphologyOperatorType>::toString):
        * svg/SVGFETurbulenceElement.h:
        (WebCore::SVGPropertyTraits<SVGStitchOptions>::toString):
        (WebCore::SVGPropertyTraits<TurbulenceType>::toString):
        * svg/SVGGradientElement.h:
        (WebCore::SVGPropertyTraits<SVGSpreadMethodType>::toString):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGMarkerTypes.h:
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::toString):
        * svg/SVGMatrixValue.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        (WebCore::SVGSVGElement::parseAttribute):
        * svg/SVGTextContentElement.h:
        (WebCore::SVGPropertyTraits<SVGLengthAdjustType>::toString):
        * svg/SVGTextPathElement.h:
        (WebCore::SVGPropertyTraits<SVGTextPathMethodType>::toString):
        (WebCore::SVGPropertyTraits<SVGTextPathSpacingType>::toString):
        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendCFFTable):
        * svg/SVGUnitTypes.h:
        (WebCore::SVGPropertyTraits<SVGUnitTypes::SVGUnitType>::toString):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::filenameExtension const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::userInterfaceDirectionPolicy):
        (WebCore::InternalSettings::systemLayoutDirection):
        * testing/Internals.cpp:
        (WebCore::Internals::areSVGAnimationsPaused const):
        (WebCore::Internals::accessKeyModifiers const):
        (WebCore::Internals::setMediaDeviceState):
        (WebCore::Internals::audioSessionCategory const):
        (WebCore::Internals::systemPreviewRelType):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDM::sanitizeResponse const):
        (WebCore::MockCDMInstance::updateLicense):
        * testing/MockContentFilter.cpp:
        (WebCore::MockContentFilter::unblockRequestDeniedScript const):
        * testing/MockCredentialsMessenger.cpp:
        (WebCore::MockCredentialsMessenger::~MockCredentialsMessenger):
        (WebCore::MockCredentialsMessenger::makeCredential):
        (WebCore::MockCredentialsMessenger::getAssertion):
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::debuggerMode):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::createResourceRequest):
        (WebCore::WorkerScriptLoader::didReceiveData):
        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::waitUntil):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::~FetchEvent):
        (WebCore::FetchEvent::respondWith):
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::clearPendingJobs):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerClients.cpp:
        (WebCore::ServiceWorkerClients::openWindow):
        (WebCore::ServiceWorkerClients::claim):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext):
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::update):
        * workers/service/ServiceWorkerWindowClient.cpp:
        (WebCore::ServiceWorkerWindowClient::focus):
        (WebCore::ServiceWorkerWindowClient::navigate):
        * workers/service/context/ServiceWorkerDebuggable.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::runRegisterJob):
        (WebCore::SWServerJobQueue::runUnregisterJob):
        (WebCore::SWServerJobQueue::runUpdateJob):
        * xml/XMLErrors.cpp:
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        (WebCore::XMLHttpRequest::responseMIMEType const):
        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XPathPredicate.cpp:
        (WebCore::XPath::evaluatePredicate):
        * xml/XPathValue.cpp:
        (WebCore::XPath::Value::toString const):
        * xml/parser/CharacterReferenceParserInlines.h:
        (WebCore::consumeCharacterReference):

2018-06-22  Youenn Fablet  <youenn@apple.com>

        Disable WebSocket in WatchOS
        https://bugs.webkit.org/show_bug.cgi?id=186931
        <rdar://problem/39584458>

        Reviewed by Wenson Hsieh.

        Add a runtime flag to enable/disable WebSocket.
        By default, flag is on for all platforms except for WatchOS.

        Test: fast/dom/Window/watchos/websocket/watchos/no-websocket-in-watchos.html

        * Modules/websockets/WebSocket.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebSocketEnabled):
        (WebCore::RuntimeEnabledFeatures::webSocketEnabled const):

2018-06-22  Woodrow Wang  <woodrow_wang@apple.com>

        SubresourceLoader::didFail() should only log message if state is Initialized
        https://bugs.webkit.org/show_bug.cgi?id=185124

        Reviewed by Daniel Bates.

        Functionality does not change. Moved console logging to be 
        after checking state of subresource loader. We only need to 
        log if the state is initialized. This is consistent with other
        functions in the file. We can also remove a null check for the 
        frame pointer (m_frame). The superclass ResourceLoader constructor
        takes an lvalue reference and initializes m_frame, ensuring
        m_frame cannot be null. It is only set to null by 
        ResourceLoader::releaseResources(), which is only called after the 
        resource finishes loading or fails to load. Thus, in didFail(), 
        m_frame must be non-null when we're logging and up until the end of the function.  

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

2018-06-22  Timothy Hatcher  <timothy@apple.com>

        Corner of two scroll bars is white with dark mode enabled.
        https://bugs.webkit.org/show_bug.cgi?id=186819
        rdar://problem/40434350

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::paint): Added LocalDefaultSystemAppearance.
        * page/Page.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paintScrollCorner): Dropped ScrollView argument.
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner): Ditto.
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner): Deleted. Default is the same.
        * platform/ScrollbarThemeComposite.h:
        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): Added recursion early return.
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance): Ditto.
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paintScrollCorner): Added.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintScrollCorner): Call ScrollbarTheme::paintScrollCorner.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents): Added LocalDefaultSystemAppearance.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::paintContents): Added LocalDefaultSystemAppearance.
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner): Call ScrollbarTheme::paintScrollCorner.
        * rendering/RenderScrollbarTheme.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Added LocalDefaultSystemAppearance.

2018-06-22  Tim Horton  <timothy_horton@apple.com>

        Make it possible to add a border around loading or failed-to-load images
        https://bugs.webkit.org/show_bug.cgi?id=186614
        <rdar://problem/39050152>

        Reviewed by Zalan Bujtas.

        Tests: http/tests/images/loading-image-border.html
               http/tests/images/loading-image-no-border.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIncompleteImageOutline):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderImage.h:
        Factor the missing-image outline out, and - if desired - paint it in
        cases where the image is still loading or otherwise pending, not just
        when the image fails to load.

        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setIncompleteImageBorderEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        Add and expose a setting to enable the feature.

2018-06-22  Brady Eidson  <beidson@apple.com>

        WKURLSchemeHandler doesn't handle sync XHR.
        <rdar://problem/40955884> and https://bugs.webkit.org/show_bug.cgi?id=186902

        Reviewed by Chris Dumez.

        * English.lproj/Localizable.strings:

2018-06-22  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Restore ASSERT_NOT_REACHED() checks in exit fullscreen handler after r231924
        https://bugs.webkit.org/show_bug.cgi?id=186945
        <rdar://problem/37277469>

        Reviewed by Simon Fraser.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::exitFullscreenHandler):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):

2018-06-22  Per Arne Vollan  <pvollan@apple.com>

        Unreviewed build fix on Windows.

        * testing/Internals.h:

2018-06-22  Youenn Fablet  <youenn@apple.com>

        Incoming G722 doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=186307
        <rdar://problem/40809745>

        Reviewed by Eric Carlson.

        WebRTC backends usually does the following:
        - Initially call RealtimeIncomingAudioSource with 16KHz data
        - Switch to 48KHz when actual data is decoded.
        We added a check that was discarding any 16KHz data, but in case of G722, the data remains as 16KHz and is then never read.
        The solution is to remove the check that discards 16KHz information.
        We then need to fix a bug in AudioTrackPrivateMediaStreamCocoa that was preventing proper handling of change of audio data configuration.

        Test: webrtc/audio-peer-connection-g722.html

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
        (WebCore::RealtimeIncomingAudioSourceCocoa::OnData):

2018-06-22  Timothy Hatcher  <timothy@apple.com>

        Recalc styles every time defaultAppearance changes.
        https://bugs.webkit.org/show_bug.cgi?id=186866
        rdar://problem/41309805

        Reviewed by Tim Horton.

        * page/Page.cpp:
        (WebCore::Page::setUseSystemAppearance): Added. Recalc styles and update system colors.
        (WebCore::Page::setDefaultAppearance): Added. Ditto.
        * page/Page.h:
        (WebCore::Page::setUseSystemAppearance): Deleted impl.
        (WebCore::Page::setDefaultAppearance): Deleted impl.

2018-06-22  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Avoid sending SELECT_STREAM events when nothing changed
        https://bugs.webkit.org/show_bug.cgi?id=186678

        Reviewed by Philippe Normand.

        This avoid extra work in decodebin3 and should work around a crash
        in decodebin3 when we send spurious SELECT_STREAM in the mediastream
        layout tests.

        GStreamer was also missing safe guards in the GstStream APIs which have been
        added in gstreamer core in 8833ca942ea21c58c0f63822f0e2b61695b39447
        "stream: Add some missing API safe guards".

        Should fix following flakes:
          - fast/mediastream/MediaStream-video-element-track-stop.html
          - fast/mediastream/change-tracks-media-stream-being-played.html

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

2018-06-22  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r230950): [GTK] WebKit::CoordinatedBackingStoreTile::setBackBuffer(): WebKitWebProcess killed by SIGSEGV (ASSERTION FAILED: it != m_tiles.end())
        https://bugs.webkit.org/show_bug.cgi?id=186206

        Unreviewed manual rollout of r230950

        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::shouldHaveBackingStore const):

2018-06-20  Darin Adler  <darin@apple.com>

        [Cocoa] Use the isDirectory: variants of NSURL methods more to eliminate unnecessary file system activity
        https://bugs.webkit.org/show_bug.cgi?id=186875

        Reviewed by Anders Carlsson.

        * platform/cocoa/ThemeCocoa.mm:
        (WebCore::passKitBundle): Use isDirectory:YES when creating a URL pointing to a framework,
        since frameworks are directories.

2018-06-22  Miguel Gomez  <magomez@igalia.com>

        [WPE][ThreadedRendering] WPE crashes rendering SVG content when using ThreadedRendering
        https://bugs.webkit.org/show_bug.cgi?id=186914

        Reviewed by Carlos Garcia Campos.

        Add GraphicsContextImpl::clipToImageBuffer() to the interface and the implementors. Forward
        the call to GraphicsContext::clipToImageBuffer() to the implementation if possible in the
        cairo case.

        Covered by existent tests.

        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::clipToImageBuffer):
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::clipToImageBuffer):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::CairoOperationRecorder::clipToImageBuffer):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h:

2018-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [CMake] Generated sources depending on SelectorPseudoClassAndCompatibilityElementMap.in are not regenerated
        https://bugs.webkit.org/show_bug.cgi?id=186911

        Reviewed by Michael Catanzaro.

        This is causing test fullscreen/fullscreen-env.html to fail since it was added in r233066 in the bots that
        didn't start a clean build. The problem is that the CMake command to generate
        SelectorPseudoClassAndCompatibilityElementMap.cpp doesn't depend on
        SelectorPseudoClassAndCompatibilityElementMap.in.

        * CMakeLists.txt:

2018-06-22  Miguel Gomez  <magomez@igalia.com>

        [WPE][ThreadedRendering] WPE crashes rendering some pieces of text when using ThreadedRendering
        https://bugs.webkit.org/show_bug.cgi?id=186886

        Reviewed by Žan Doberšek.

        Modify DisplayList DrawGlyphs element to use a GraphicsContext for replaying. To do so, modify
        GraphicsContext::drawGlyphs() API so it doesn't require a FontCascade, and update all the calls
        to it.

        Covered by existent tests.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::drawGlyphBuffer const):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawGlyphs):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/displaylists/DisplayListItems.cpp:
        (WebCore::DisplayList::DrawGlyphs::apply const):
        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paintGlyph):
        (WebCore::MathOperator::paint):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::paint):

2018-06-15  Jer Noble  <jer.noble@apple.com>

        Address fullscreen api CSS env feedback
        https://bugs.webkit.org/show_bug.cgi?id=186684

        Reviewed by Simon Fraser.

        Test: fullscreen/fullscreen-env.html

        + Update the phishing alert text to be more explicit about the specific threats
          phishing sites represent.
        + Make the top inset static, rather than dynamic.
        + Add bottom, left, and right insets for completeness.
        + Set the fullscreen animation duration as well as delay.
        + Notify the page when the controls show and hide.

        * English.lproj/Localizable.strings:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText const):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne const):
        * css/SelectorCheckerTestFunctions.h:
        (WebCore::matchesFullScreenControlsHiddenPseudoClass):
        * css/SelectorPseudoClassAndCompatibilityElementMap.in:
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoClassType):
        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty const):
        (WebCore::ConstantPropertyMap::updateConstantsForFullscreenInsets):
        (WebCore::ConstantPropertyMap::didChangeFullscreenInsets):
        (WebCore::ConstantPropertyMap::setFullscreenAutoHideDuration):
        (WebCore::ConstantPropertyMap::setFullscreenInsetTop): Deleted.
        * dom/ConstantPropertyMap.h:
        * dom/Document.cpp:
        (WebCore::Document::areFullscreenControlsHidden const):
        (WebCore::Document::setFullscreenControlsHidden):
        * dom/Document.h:
        * page/Page.cpp:
        (WebCore::Page::setFullscreenInsets):
        (WebCore::Page::setFullscreenAutoHideDuration):
        (WebCore::Page::setFullscreenControlsHidden):
        (WebCore::Page::setFullscreenInsetTop): Deleted.
        * page/Page.h:
        (WebCore::Page::fullscreenInsets const):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setFullscreenInsets):
        (WebCore::Internals::setFullscreenAutoHideDuration):
        (WebCore::Internals::setFullscreenControlsHidden):
        (WebCore::Internals::setFullscreenInsetTop): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-06-21  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Page sometimes ends up with an incorrect zoom level after entering fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=186822

        Reviewed by Simon Fraser.

        * dom/Document.cpp:
        (WebCore::Document::setOverrideViewportArguments):
        (WebCore::Document::updateViewportArguments):
        * dom/Document.h:

2018-06-20  Said Abou-Hallawa  <sabouhallawa@apple.com>

        RenderSVGInline has to be inline always regardless of its css display value
        https://bugs.webkit.org/show_bug.cgi?id=186656

        Reviewed by Zalan Bujtas.

        According to https://www.w3.org/TR/SVG2/text.html#TextLayout, the <text>
        element has to be laid out as if it were a block element and any <tspan>,
        <textPath>, <a> and <tref> descendants were inline elements.

        If a css rule, which contains the property "display: block;", is applied
        to any of children of a <text> element, this property has to be ignored.

        We currently ignore this property in RenderSVGInline::updateFromStyle()
        by forcing setInline(true). But we do not do the same thing in 
        RenderTreeBuilder::normalizeTreeAfterStyleChange(). In fact we allow
        making the children of the <text> element to be non-inline. This puts
        the render tree in weired state and causes many assertions to fire while
        laying out RenderSVGText. 

        Test: svg/dom/svg-inline-text-display-block-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::normalizeTreeAfterStyleChange):

2018-06-20  Zalan Bujtas  <zalan@apple.com>

        Do not reuse generated inline renderer for the first letter.
        https://bugs.webkit.org/show_bug.cgi?id=186657
        <rdar://problem/41157892>

        Reviewed by Simon Fraser.

        When the first letter pseudo element is present, we construct a dedicated subtree for its content like this:

        <div><span>foobar</span></div> -> with ::first-letter on the <div>
        DIV RenderBlock
            SPAN RenderInline
                RenderInline (generated wrapper for the first letter content)
                    RenderText (fist letter content)
                RenderText (remaining text content)

        "display: contents" on the <span> forces us not to construct a RenderInline for the <span> (or just come up with a wrapper at best).
        FirstLetter::createRenderers logic needs to check for such cases and pick the correct parent for the first letter subtree accordingly.

        Test: fast/text/first-letter-with-display-contents-crash.html
              imported/w3c/web-platform-tests/css/css-display/display-contents-first-letter-002.html is not crashing anymore either.

        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

2018-06-21  Chris Dumez  <cdumez@apple.com>

        JSPerformanceObserverCallback creates a GC strongly-referenced Function that is never cleaned up
        https://bugs.webkit.org/show_bug.cgi?id=186873
        <rdar://problem/41271574>

        Reviewed by Simon Fraser.

        Add [IsWeakCallback] to PerformanceObserverCallback interface so that the generated
        JSPerformanceObserverCallback uses a JSC::Weak instead of a JSC::Strong to store the
        js function. To keep the function alive, add [JSCustomMarkFunction] to PerformanceObserver
        interface and have its visitAdditionalChildren() visit the callback's js function.
        Finally, because we want the callback to still be called even if the JS does not keep
        the PerformanceObserver wrapper alive, add [CustomIsReachable] to PerformanceObserver
        interface and have its isReachableFromOpaqueRoots() return true if the observer is
        registered (i.e. it may need to call the callback in the future).

        I have confirmed locally, that the Performance / PerformanceObserver / Document
        objects properly get destroyed if I navigate away from a page that had a performance
        observer and trigger a memory pressure warning. Also,
        `notifyutil -p com.apple.WebKit.showAllDocuments` no longer shows the old document.

        Tests: performance-api/performance-observer-callback-after-gc.html
               performance-api/performance-observer-no-document-leak.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSPerformanceObserverCustom.cpp: Added.
        (WebCore::JSPerformanceObserver::visitAdditionalChildren):
        (WebCore::JSPerformanceObserverOwner::isReachableFromOpaqueRoots):
        * bindings/js/ScriptController.cpp:
        * page/PerformanceObserver.cpp:
        (WebCore::PerformanceObserver::disassociate):
        * page/PerformanceObserver.h:
        (WebCore::PerformanceObserver::isRegistered const):
        (WebCore::PerformanceObserver::callback):
        * page/PerformanceObserver.idl:
        * page/PerformanceObserverCallback.h:
        * page/PerformanceObserverCallback.idl:

2018-06-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_animation-ready.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183830
        <rdar://problem/40997539>

        Reviewed by Dean Jackson.

        The CSS Animations Level 2 spec explains how the Web Animations API and CSS Animations interact and requires
        pending styles changes on the target element of a CSS Animation to be flushed when using a Web Animations API
        on it in order to ensure that any animation- CSS property is accounted for.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::bindingsStartTime const):
        (WebCore::CSSAnimation::setBindingsStartTime):
        (WebCore::CSSAnimation::bindingsCurrentTime const):
        (WebCore::CSSAnimation::setBindingsCurrentTime):
        (WebCore::CSSAnimation::bindingsPlayState const):
        (WebCore::CSSAnimation::bindingsPending const):
        (WebCore::CSSAnimation::bindingsReady):
        (WebCore::CSSAnimation::bindingsFinished):
        (WebCore::CSSAnimation::bindingsPlay):
        (WebCore::CSSAnimation::bindingsPause):
        (WebCore::CSSAnimation::flushPendingStyleChanges const):
        * animation/CSSAnimation.h:
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::bindingsPlayState const):
        (WebCore::WebAnimation::bindingsPending const):
        (WebCore::WebAnimation::bindingsReady):
        (WebCore::WebAnimation::bindingsFinished):
        (WebCore::WebAnimation::bindingsPlay):
        (WebCore::WebAnimation::bindingsPause):
        * animation/WebAnimation.idl:

2018-06-21  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] Suspend page (and pause video) while phishing warning is presented
        https://bugs.webkit.org/show_bug.cgi?id=186856
        <rdar://problem/41212444>

        Reviewed by Tim Horton.

        Pause the media element when the page is suspended, and unpause when the page resumes.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        * html/HTMLMediaElement.h:

2018-06-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        Bad optional access in WebCore::ContentSecurityPolicySource::portMatches
        https://bugs.webkit.org/show_bug.cgi?id=186535

        Reviewed by Daniel Bates.

        Make sure the ports have explicit values before dereferencing them.

        This is hard to test. If the layout test script-src-parsing-implicit-and-explicit-port-number
        continues to pass for WebKitLegacy, then I have at least probably not broken anything. To
        reproduce the crash in a layout test that I can run, I think I would need to implement
        internals.registerDefaultPortForProtocol for modern WebKit, which is too much work for this
        crash. Otherwise, we'd need to run the test server on port 80, which would be unfriendly.

        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::portMatches const):

2018-06-21  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GStreamer] ASSERTION FAILED: end.isValid() in PlatformTimeRanges::add
        https://bugs.webkit.org/show_bug.cgi?id=186880

        Reviewed by Xabier Rodriguez-Calvar.

        Bug 180253 has added assertions the arugments `start` and `end` is
        valid MediaTime in PlatformTimeRanges::add. Since then, some
        LayoutTests fail due to the assertion failure.

        The invalid MediaTime is added into the PlatformTimeRanges in
        MediaPlayerPrivateGStreamer::buffered. Before adding MediaTime,
        original implementation checks MediaTime::operator bool() returns
        true. But, this method returns true if the time value is invalid.
        Then, PlatformTimeRanges::add is called with an invalid MediaTime.

        No new tests (No behavior change).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::buffered const): Check
        maxTimeLoaded() is valid before adding to `timeRanges`.

2018-06-20  David Kilzer  <ddkilzer@apple.com>

        Fix leaks in WebCore found by clang static analyzer in deep mode
        <https://webkit.org/b/186865>

        Reviewed by Joseph Pecoraro.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::mapHostNames): Fix leak of an empty NSMutableArray
        during an early return.  RetainPtr<> is not used here since
        a pointer to the NSMutableArray * is passed around.
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        Fix leak of a CGDisplayModeRef during an early return.

2018-06-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the watchOS build after r233016.

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

        Move this helper out of the ENABLE(DRAG_SUPPORT) guard.

        * page/EventHandler.h:

2018-06-20  Simon Fraser  <simon.fraser@apple.com>

        AnimationList wastes 60KB of vector capacity
        https://bugs.webkit.org/show_bug.cgi?id=186701

        Reviewed by Chris Dumez.

        AnimationList was the second most wasteful call site for Vector capacity on theverge.com,
        wasting almost 60KB. Lists had between 1 and 3 entries, so give AnimationList's vector of
        Animations a min capacity of zero so it doesn't grow in increments of 16.
        
        Also shrink Animation from 88 bytes to 72 bytes by optimizing packing.

        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        (WebCore::Animation::operator=):
        (WebCore::Animation::animationsMatch const):
        * platform/animation/Animation.h:
        (WebCore::Animation::animationMode const):
        (WebCore::Animation::setAnimationMode):
        * platform/animation/AnimationList.h:

2018-06-20  Simon Fraser  <simon.fraser@apple.com>

        ContentSecurityPolicySourceList wastes 51KB of Vector capacity on cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=186706

        Reviewed by Chris Dumez.

        Make ContentSecurityPolicySourceList::parse() call shrinkToFit() on m_list
        after parsing to eliminate wasted vector capacity.
        
        Shrink ContentSecurityPolicySource down to 40 bytes by optimizing packing.

        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::ContentSecurityPolicySource):
        * page/csp/ContentSecurityPolicySource.h:
        * page/csp/ContentSecurityPolicySourceList.cpp:
        (WebCore::ContentSecurityPolicySourceList::matches const):
        (WebCore::ContentSecurityPolicySourceList::parse):
        (WebCore::ContentSecurityPolicySourceList::matches): Deleted.
        * page/csp/ContentSecurityPolicySourceList.h:

2018-06-20  Megan Gardner  <megan_gardner@apple.com>

        Restrict Selection in contenteditable the extent of that contenteditable
        https://bugs.webkit.org/show_bug.cgi?id=186792

        Reviewed by Wenson Hsieh.

        My system currently will not allow me to run tests. I will add one when I can update.

        Expose the already existing funcitonality to restrict a selection to a single contentenditable

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectionExtentRespectingEditingBoundary):
        (WebCore::selectionExtentRespectingEditingBoundary): Deleted.
        * page/EventHandler.h:
        * rendering/HitTestResult.h:

2018-06-20  Simon Fraser  <simon.fraser@apple.com>

        CSSFontFace wastes 59KB of Vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186708

        Reviewed by Anders Carlsson.

        Most CSSFontFace have one or two CSSFontFaceSource so don't allocate
        vector capacity in the default 16-size chunks.

        * css/CSSFontFace.h:

2018-06-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-transitions/test_element-get-animations.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183841
        <rdar://problem/40998101>

        Reviewed by Dean Jackson.

        We must ignore CSS Animations with "animation-name: none".

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):

2018-06-20  Miguel Gomez  <magomez@igalia.com>

        [GTK][ThreadedRendering][Nicosia] Themed elements cannot be rendered using threaded rendering
        https://bugs.webkit.org/show_bug.cgi?id=186840

        Reviewed by Carlos Garcia Campos.

        Disable threaded rendering for GTK port.

        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp:
        (Nicosia::PaintingEngine::create):

2018-06-20  Yusuke Suzuki  <utatane.tea@gmail.com>

        [GTK][WPE][Nicosia] Add name for Nicosia Painting Threads
        https://bugs.webkit.org/show_bug.cgi?id=186836

        Reviewed by Carlos Garcia Campos.

        Use "PaintingThread" name.

        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        (Nicosia::PaintingEngineThreaded::PaintingEngineThreaded):

2018-06-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_pseudoElement-get-animations.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183818
        <rdar://problem/40997015>

        Reviewed by Dean Jackson.

        We add a new opt-in flag to return sorted animations when calling AnimationTimeline::animationsForElement() so that
        Element::getAnimations() can opt into returning animations sorted by the rules defined by the CSS Transitions spec.
        The rule is that CSS Transitions must be sorted prior to CSS Animations and regular Web Animations, and then sorted
        by the time they were generated and, if generated at the same time, sorted alphabetically based on the transitioned
        property. To be able to accomodate this, we add a new generationTime() method to CSSTransition.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationsForElement const):
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/AnimationTimeline.h:
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create):
        (WebCore::CSSTransition::CSSTransition):
        * animation/CSSTransition.h:
        * dom/Element.cpp:
        (WebCore::Element::getAnimations):

2018-06-19  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Allow passing contents of Root CA data directly.
        https://bugs.webkit.org/show_bug.cgi?id=185782

        Currently the data must be in a file and set by its path. This patch
        allow application to set root CA data by passing binary data directly.

        Reviewed by Yusuke Suzuki.

        No new tests. Tested internally.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::CurlSSLHandle):
        (WebCore::CurlSSLHandle::getCACertPathEnv):
        (WebCore::CurlSSLHandle::setCACertPath):
        (WebCore::CurlSSLHandle::setCACertData):
        (WebCore::CurlSSLHandle::clearCACertInfo):
        * platform/network/curl/CurlSSLHandle.h:
        (WebCore::CurlSSLHandle::getCipherList const):
        (WebCore::CurlSSLHandle::getSignatureAlgorithmsList const):
        (WebCore::CurlSSLHandle::getCurvesList const):
        (WebCore::CurlSSLHandle::setCipherList):
        (WebCore::CurlSSLHandle::setSignatureAlgorithmsList):
        (WebCore::CurlSSLHandle::setCurvesList):
        (WebCore::CurlSSLHandle::setIgnoreSSLErrors):
        (WebCore::CurlSSLHandle::getCACertInfo const):
        (WebCore::CurlSSLHandle::getCACertPath const): Deleted.
        (WebCore::CurlSSLHandle::setCACertPath): Deleted.
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):

2018-06-19  Dean Jackson  <dino@apple.com>

        ARKit badge drop shadow updates its blur radius based on page zoom
        https://bugs.webkit.org/show_bug.cgi?id=186829
        <rdar://problem/40738779>

        Reviewed by Tim Horton.

        We need to make sure the shadow blur radius takes into account the
        current zoom. Thankfully, the GraphicsContext platform code already
        does this, so just use it.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):

2018-06-19  Dean Jackson  <dino@apple.com>

        Blank viewer comes up and then auto-dismisses when device is not connected to Internet
        https://bugs.webkit.org/show_bug.cgi?id=186825
        <rdar://problem/40294170>

        Reviewed by Tim Horton.

        Export isSuccessful() to WebKit.

        * platform/network/ResourceResponseBase.h:

2018-06-19  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Enable Proxy Authentication.
        https://bugs.webkit.org/show_bug.cgi?id=185266

        Add support for Proxy Authentication to curl network layer.

        Reviewed by Alex Christensen.

        No new tests in public. Tested internally.

        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::protectionSpaceServerTypeFromURI):
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        (WebCore::AuthenticationChallenge::determineProxyPort):
        (WebCore::AuthenticationChallenge::authenticationSchemeFromCurlAuth):
        (WebCore::AuthenticationChallenge::parseRealm):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableProxyIfExists):
        (WebCore::CurlHandle::getProxyUrl):
        (WebCore::CurlHandle::getProxyAuthAvail):
        (WebCore::CurlHandle::getPrimaryPort): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::setDefaultProxyAuthMethod):
        (WebCore::CurlContext::setProxyAuthMethod):
        * platform/network/curl/CurlProxySettings.cpp:
        (WebCore::determineAuthMethod):
        (WebCore::CurlProxySettings::setAuthMethod):
        (WebCore::protocolIsInSocksFamily):
        * platform/network/curl/CurlProxySettings.h:
        (WebCore::CurlProxySettings::setDefaultAuthMethod):
        (WebCore::CurlProxySettings::authMethod const):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveHeader):
        * platform/network/curl/CurlResponse.h:
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/ResourceResponse.h:
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::isProxyAuthenticationRequired const):

2018-06-19  Tim Horton  <timothy_horton@apple.com>

        Unpainted area while scrolling in Reader is white
        https://bugs.webkit.org/show_bug.cgi?id=186541
        <rdar://problem/40471363>

        Reviewed by Timothy Hatcher.

        New test: tiled-drawing/simple-document-with-dynamic-background-color.html

        For platforms that do not use the overhang layer, we depend on
        RenderView's background color to fill unpainted space.

        RenderView's background color is only updated inside updateRootLayerConfiguration,
        and it is possible with a simple enough page to change the document's
        background color without running that code.

        * page/FrameView.cpp:
        (WebCore::FrameView::setTransparent):
        (WebCore::FrameView::setBaseBackgroundColor):
        Make use of the newly added rootBackgroundColorOrTransparencyChanged.

        (WebCore::FrameView::calculateExtendedBackgroundMode const):
        Update a comment, since the function it mentioned is no longer.

        (WebCore::FrameView::updateTilesForExtendedBackgroundMode):
        Remove this code that clears the root extended background color
        if using tiles to extend in both directions. Two reasons:
        1) it seems harmless to also have a root extended background color
        2) this just gets clobbered by the call in RenderView::paintBoxDecorations

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        Add a bit that will do a updateConfiguration() on the root layer if no
        other work needs to be done, so that we can update the root layer's
        transparency or background color without doing a full layer rebuild.

        (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged):
        Make use of the newly added rootBackgroundColorOrTransparencyChanged.

        (WebCore::RenderLayerCompositor::rootBackgroundColorOrTransparencyChanged):
        Change rootBackgroundTransparencyChanged to also cover color changes.
        Fold setRootExtendedBackgroundColor in here, and make use of
        setRootLayerConfigurationNeedsUpdate() instead of doing a full rebuild.
        Previously, we would bail if the transparency state hadn't changed;
        now, we'll also update the root layer's background color and the
        exposed-to-WebKit extended background color if they change too.

        (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged): Deleted.
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor): Deleted.

        * rendering/RenderLayerCompositor.h:
        Add setRootLayerConfigurationNeedsUpdate, remove setRootExtendedBackgroundColor,
        and add both a bit indicating that the root layer configuration needs updating
        and the cached view background color to make the early return in
        rootBackgroundColorOrTransparencyChanged possible.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        Make use of the newly added rootBackgroundColorOrTransparencyChanged.

2018-06-19  Youenn Fablet  <youenn@apple.com>

        Need to properly handle removal of worker in SWServer::unregisterServiceWorkerClient timer lambda
        https://bugs.webkit.org/show_bug.cgi?id=186674
        <rdar://problem/40974812>

        Reviewed by Chris Dumez.

        While looping over the running workers map and trying to terminate some of the workers,
        there is a chance that the map will be modified synchronously which may affect iterating the map.
        This patch removes that potential threat.

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

2018-06-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_animation-playstate.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183828
        <rdar://problem/40997469>

        Reviewed by Dean Jackson.

        We need to ensure pending styles have been resolved prior to returning the play state for a CSS Animation since
        it can be controlled by the animation-play-state CSS property. To that end we expose a specific bindings-only
        method which we override for CSSAnimation to force a style update.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::bindingsPlayState const):
        * animation/CSSAnimation.h:
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::bindingsPlayState const):
        * animation/WebAnimation.idl:

2018-06-19  David Kilzer  <ddkilzer@apple.com>

        Revert: Add logging when splashboardd enables WebThread
        <https://webkit.org/b/186793>
        <rdar://problem/41213255>

        Turns out this isn't needed, so reverting r232959.

        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isSplashBoardd): Deleted.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable):

2018-06-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Vend username text content type when using scribble in login fields
        https://bugs.webkit.org/show_bug.cgi?id=186791
        <rdar://problem/41226935>

        Reviewed by Beth Dakin.

        Expose AutofillElements' autofillable username input element. See WebKit ChangeLog for more details.

        * editing/ios/AutofillElements.h:
        (WebCore::AutofillElements::username const):

2018-06-19  Chris Dumez  <cdumez@apple.com>

        WebCoreNSURLSessionDataTaskClient::redirectReceived() calls WebCore on non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=186805
        <rdar://problem/36960714>

        Reviewed by Youenn Fablet.

        Make sure WebCoreNSURLSessionDataTaskClient::redirectReceived() dispatches to the main
        thread before calling its completion handler. Otherwise, we end up calling into WebCore
        on a NSOperationQueue background thread and we crash.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):

2018-06-19  Chris Dumez  <cdumez@apple.com>

        HTTPHeaderMap wastes 226KB of HashTable capacity on cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=186735
        <rdar://problem/41189164>

        Reviewed by Geoffrey Garen.

        Resource requests and responses normally do not have a large amount of HTTP headers
        (local testing shows 6 common headers on average and 0.3 uncommon ones).
        As a result, move the internal representation of HTTPHeaderMap from HashMaps to
        Vectors. Given the number of headers, the impact on performance should be negligible.
        However, the new implementation uses a lot less memory. In a follow-up, we can save
        even more memory by calling HTTPHeaderMap::shrinkToFit() when possible.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAccessControlPreflightRequest):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse const):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::isolatedCopy const):
        (WebCore::HTTPHeaderMap::get const):
        (WebCore::HTTPHeaderMap::set):
        (WebCore::HTTPHeaderMap::add):
        (WebCore::HTTPHeaderMap::append):
        (WebCore::HTTPHeaderMap::addIfNotPresent):
        (WebCore::HTTPHeaderMap::contains const):
        (WebCore::HTTPHeaderMap::remove):
        * platform/network/HTTPHeaderMap.h:
        (WebCore::HTTPHeaderMap::CommonHeader::isolatedCopy const):
        (WebCore::HTTPHeaderMap::CommonHeader::operator== const):
        (WebCore::HTTPHeaderMap::UncommonHeader::isolatedCopy const):
        (WebCore::HTTPHeaderMap::UncommonHeader::operator== const):
        (WebCore::HTTPHeaderMap::HTTPHeaderMapConstIterator::HTTPHeaderMapConstIterator):
        (WebCore::HTTPHeaderMap::HTTPHeaderMapConstIterator::updateKeyValue):
        (WebCore::HTTPHeaderMap::shrinkToFit):
        (WebCore::HTTPHeaderMap::commonHeaders const):
        (WebCore::HTTPHeaderMap::uncommonHeaders const):
        (WebCore::HTTPHeaderMap::commonHeaders):
        (WebCore::HTTPHeaderMap::uncommonHeaders):
        (WebCore::HTTPHeaderMap::CommonHeader::encode const):
        (WebCore::HTTPHeaderMap::CommonHeader::decode):
        (WebCore::HTTPHeaderMap::UncommonHeader::encode const):
        (WebCore::HTTPHeaderMap::UncommonHeader::decode):
        (WebCore::HTTPHeaderMap::encode const):
        (WebCore::HTTPHeaderMap::decode):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::filter):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFields):

2018-06-19  Youenn Fablet  <youenn@apple.com>

        Network Preflights do not show in WebInspector after moving CORS checks to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=186312
        <rdar://problem/40495434>

        Reviewed by Chris Dumez.

        Test: http/wpt/fetch/inspect-preflight.html

        No change of behavior in regular conditions.
        All intermediate requests/responses are now buffered in NetworkProcess if Web inspector shows up.
        Add NetworkLoadInformation and NetworkIntermediateLoadInformation for that purpose.

        Add a new LoaderStrategy method to grab this information from NetworkProcess synchronously.
        Add Internals API for testing the storage by the Network Process and the sending to WebProcess.

        * WebCore.xcodeproj/project.pbxproj:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::intermediateLoadInformationFromResourceLoadIdentifier):
        * loader/LoaderStrategy.h:
        * platform/network/NetworkLoadInformation.h: Added.
        (WebCore::NetworkTransactionInformation::encode const):
        (WebCore::NetworkTransactionInformation::decode):
        * testing/Internals.cpp:
        (WebCore::Internals::setCaptureExtraNetworkLoadMetricsEnabled):
        (WebCore::Internals::ongoingLoadDescriptions):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-06-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-transitions/test_animation-cancel.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183821
        <rdar://problem/40997034>

        Reviewed by Dean Jackson.

        If an element gets a "display: none" style RenderTreeUpdater::tearDownRenderers() will be called with a RendererUpdateCancelingAnimations
        teardown type on all of its children. We need to ensure all declarative animations, and only those since regular Web Animations should be
        kept active regardless of their target's style, are canceled in this situation.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForElement):
        * animation/AnimationTimeline.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-06-19  David Kilzer  <ddkilzer@apple.com>

        Add logging when splashboardd enables WebThread
        <https://webkit.org/b/186793>
        <rdar://problem/41213255>

        Reviewed by Daniel Bates.

        * platform/RuntimeApplicationChecks.h:
        (WebCore::IOSApplication::isSplashBoardd): Add declaration.
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isSplashBoardd): Add implementation.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable): Call RELEASE_LOG_FAULT() if this is called by
        splashboardd.

2018-06-19  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE][Nicosia] Add environment variable to enable threaded rendering and set the number of painting threads
        https://bugs.webkit.org/show_bug.cgi?id=186801

        Reviewed by Carlos Garcia Campos.

        Add and environment variable to enable the usage of the threaded renderer and define the number
        of painting threads.

        No new tests.

        * platform/graphics/nicosia/NicosiaPaintingEngine.cpp:
        (Nicosia::PaintingEngine::create):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        (Nicosia::PaintingEngineThreaded::PaintingEngineThreaded):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.h:

2018-06-19  Youenn Fablet  <youenn@apple.com>

        RTCRtpSender.replaceTrack(null) ends current track
        https://bugs.webkit.org/show_bug.cgi?id=184911
        <rdar://problem/40758138>

        Reviewed by Eric Carlson.

        Before the patch, when replacing the sender track by null, the previous track was stopped.
        Instead of doing that, the track now stays alive and it is the realtime source that is stopped.
        This ensures that the data is no longer sent while the track can still be used elsewhere.

        Covered by updated and rebased tests.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addTransceiver):
        (WebCore::RTCPeerConnection::enqueueReplaceTrackTask):
        (WebCore::RTCPeerConnection::replaceTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::updateTrackSource):
        (WebCore::LibWebRTCPeerConnectionBackend::replaceTrack):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2018-06-18  Chris Dumez  <cdumez@apple.com>

        Better pack ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=186717

        Reviewed by Darin Adler.

        Better pack ResourceRequest to reduce its size from 240 to 232 bytes
        on Mac.

        * platform/network/ResourceRequestBase.h:

2018-06-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement "Starting of transitions" section from CSS Transitions
        https://bugs.webkit.org/show_bug.cgi?id=186517
        <rdar://problem/41000798>

        Reviewed by Dean Jackson.

        We implement the whole section at https://drafts.csswg.org/css-transitions-1/#starting so that we have spec-compliant starting of CSS Transitions.
        To correctly implement this we now maintain two maps of transitions for a given property, a set of running transitions (m_elementToRunningCSSTransitionByCSSPropertyID)
        and a set of completed transition (m_elementToCompletedCSSTransitionByCSSPropertyID).

        * animation/AnimationTimeline.cpp:
        (WebCore::removeCSSTransitionFromMap): Add a utility to remove a CSSTransition from one of the two HashMap<Element*, HashMap<CSSPropertyID, RefPtr<CSSTransition>>>
        managed by AnimationTimeline (m_elementToRunningCSSTransitionByCSSPropertyID and m_elementToCompletedCSSTransitionByCSSPropertyID).
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): Use the new removeCSSTransitionFromMap() utility.
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): We rename "oldStyle" to "currentStyle" to align with the naming used by updateCSSAnimationsForElement().
        We also remove an initial check that has been pushed up to Style::TreeResolver::createAnimatedElementUpdate().
        (WebCore::propertyInStyleMatchesValueForTransitionInMap): When running the steps mandated by the spec we often need to check whether a given property has a transition
        in an AnimationList that matches the value used in a given RenderStyle.
        (WebCore::transitionCombinedDuration): We need to compute the combined duration twice while running the steps mandated by the spec, so we have a dedicated utility.
        (WebCore::transitionMatchesProperty): New utility that indicates whether a WebCore::Animation matches a given property, by virtue of targeting it directly, targeting
        a shorthand for which this property is a longhand, or targeting "all".
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): This is where all of the new implementation for starting transitions happens. We implement the steps
        as they appear in the spec.
        (WebCore::shouldBackingAnimationBeConsideredForCSSTransition): Deleted.
        * animation/AnimationTimeline.h:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation): Since only CSS Animations respect the delay and duration values as parsed directly in a WebCore:Animation
        object, we move code that was previously in DeclarativeAnimation::syncPropertiesWithBackingAnimation to this method. CSS Transitions set those values based on the
        delay and duration parameters passed to CSSTransition::create() and computed in AnimationTimeline::updateCSSTransitionsForElement().
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create): Since the transition's delay and duration is computed in AnimationTimeline::updateCSSTransitionsForElement(), we now require them
        to be passed when creating a CSSTransition and pass those to the new setTimingProperties() function. We also expect a target style and reversing-adjusted start style,
        as well as a reversing-shortening factor.
        (WebCore::CSSTransition::CSSTransition): 
        (WebCore::CSSTransition::resolve): We need to be able to query the last style computed by a call to resolve() from AnimationTimeline::updateCSSTransitionsForElement(),
        we subclass this newly-virtual WebAnimation method and clone the style after we blended the property targeted by this transition.
        (WebCore::CSSTransition::setTimingProperties): Set the transition delay and duration as provided in the call to create().
        (WebCore::CSSTransition::canBeListed const): Fix a crash that was found while working on this bug where we could access a null effect.
        (WebCore::CSSTransition::initialize): Deleted.
        (WebCore::CSSTransition::matchesBackingAnimationAndStyles const): Deleted.
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::syncPropertiesWithBackingAnimation): This virtual method now has an empty definition since the timing properties are now only set
        for CSSAnimation.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const): Deleted.
        * animation/KeyframeEffectReadOnly.h:
        * animation/WebAnimation.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::AnimationPropertyWrapperBase::canInterpolate const): Since we need to be able to determine whether some property values can be interpolated, we add a new
        canInterpolate() method to the base wrapper class so the cases where we can't interpolate values (length with an "auto" type) may return false.
        (WebCore::LengthPropertyWrapper::LengthPropertyWrapper): Lengths can only be interpolated if both the start and end values are not "auto".
        (WebCore::LengthVariantPropertyWrapper::LengthVariantPropertyWrapper):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::CSSPropertyAnimation::canPropertyBeInterpolated):
        * page/animation/CSSPropertyAnimation.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate): Move a check found in both updateCSSAnimationsForElement() and updateCSSTransitionsForElement() to their
        shared call site.

2018-06-18  Nan Wang  <n_wang@apple.com>

        AX: [macOS] When zoom is enabled, focus doesn't follow text cursor
        https://bugs.webkit.org/show_bug.cgi?id=186697

        Reviewed by Darin Adler.

        Now that web process doesn't have access to NSScreen. The conversion of the 
        rects is wrong. Fixed this by using the right function that's available in
        WebCore to get the rects.

        * editing/mac/FrameSelectionMac.mm:
        (WebCore::accessibilityConvertScreenRect):

2018-06-18  Youenn Fablet  <youenn@apple.com>

        Expose RTCPeerConnectionIceEventInit constructor
        https://bugs.webkit.org/show_bug.cgi?id=186770

        Reviewed by Alex Christensen.

        Add event constructor as per specification.
        Add support for the url attribute.
        For that purpose, we need to pipe that information from LibWebRTCMediaEndpoint
        up to RTCPeerConnectionIceEvent.

        Covered by rebased test.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::fireICECandidateEvent):
        (WebCore::PeerConnectionBackend::disableICECandidateFiltering):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        (WebCore::PeerConnectionBackend::finishedRegisteringMDNSName):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnectionIceEvent.cpp:
        (WebCore::RTCPeerConnectionIceEvent::create):
        (WebCore::RTCPeerConnectionIceEvent::RTCPeerConnectionIceEvent):
        * Modules/mediastream/RTCPeerConnectionIceEvent.h:
        (WebCore::RTCPeerConnectionIceEvent::url const):
        * Modules/mediastream/RTCPeerConnectionIceEvent.idl:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/EventNames.in:

2018-06-18  Simon Fraser  <simon.fraser@apple.com>

        SVGTransformListValues wastes 127KB of Vector capacity on nytimes.com
        https://bugs.webkit.org/show_bug.cgi?id=186704

        Reviewed by Said Abou-Hallawa.

        SVGTransformListValues has inline capacity 1, and every SVGGraphicsElement has
        a SVGSynchronizableAnimatedProperty<WebCore::SVGTransformListValues>, so the inline
        capacity wastes space for every SVGGraphicsElement that doesn't have a transform (i.e.
        most of them).
        
        So make SVGTransformListValues have zero inline capacity, and set its min capacity to
        2, rather than the default 16, since most transform lists are short.

        * svg/SVGTransformListValues.h:

2018-06-18  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Document should not be mutated under SMILTimeContainer::updateAnimations()
        https://bugs.webkit.org/show_bug.cgi?id=186658

        Reviewed by Simon Fraser.

        To update the animation of an SVG <animate> element, we call
        SVGAnimateElementBase::resetAnimatedType(). It ensures the pointer m_animator
        is valid. If it animates a css property, it calls computeCSSPropertyValue()
        which calls resolveStyle() via other calls. resolveStyle() may call delayed
        callbacks through the destructor of PostResolutionCallbackDisabler. These
        callbacks may fire events. These events may execute JS event handlers.
        If one of these event handlers deletes the same SVG <animate> we animate,
        we will end up calling SVGAnimateElementBase::resetAnimatedPropertyType()
        of the same <animate> element. This function  will delete the same m_animator
        which resetAnimatedType() still holds and will use later. This code
        re-entrance is unexpected and unwanted.

        The fix is to disable mutating the DOM while updating the SVG animations.

        Test: svg/dom/css-animate-input-foucs-crash.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):

2018-06-18  Commit Queue  <commit-queue@webkit.org>

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

        This patch broke macOS 32-bit build (Requested by n_wang on
        #webkit).

        Reverted changeset:

        "AX: [macOS] When zoom is enabled, focus doesn't follow text
        cursor"
        https://bugs.webkit.org/show_bug.cgi?id=186697
        https://trac.webkit.org/changeset/232935

2018-06-18  Nan Wang  <n_wang@apple.com>

        AX: [macOS] When zoom is enabled, focus doesn't follow text cursor
        https://bugs.webkit.org/show_bug.cgi?id=186697

        Reviewed by Darin Adler.

        Now that web process doesn't have access to NSScreen. The conversion of the 
        rects is wrong. Fixed this by using the right function that's available in
        WebCore to convert the rects.

        * editing/mac/FrameSelectionMac.mm:
        (WebCore::accessibilityConvertScreenRect):

2018-06-18  Youenn Fablet  <youenn@apple.com>

        Validate Cross-Origin-Resource-Policy for resources cached in the MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=186639
        <rdar://problem/41106984>

        Reviewed by Geoffrey Garen.

        Add a method to check CORP.
        Make use of it to validate any memory cached resource.
        Whitelist CORP header so that it is not filtered out by Network Process.

        Test: http/wpt/cross-origin-resource-policy/image-in-iframe-loads.html

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::shouldCrossOriginResourcePolicyCancelLoad):
        (WebCore::validateCrossOriginResourcePolicy):
        * loader/CrossOriginAccessControl.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isSafeRedirectionResponseHeader):
        (WebCore::isSafeCrossOriginResponseHeader):

2018-06-18  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WTF] Remove workarounds needed to support libstdc++-4
        https://bugs.webkit.org/show_bug.cgi?id=186762

        Reviewed by Michael Catanzaro.

        Revert r226299, r226300 r226301 and r226302.

        No new tests, no change in behaviour.

        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionValue::clampFloat):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentMediaTime const):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):

2018-06-18  Karl Leplat  <karl.leplat_ext@softathome.com>

        [Threaded paintingEngine] Fix rendering glitches
        https://bugs.webkit.org/show_bug.cgi?id=186764

        Reviewed by Žan Doberšek.

        * platform/graphics/nicosia/NicosiaPaintingEngineBasic.cpp:
        (Nicosia::PaintingEngineBasic::paint):
        To keep backwards compatibility with no multi-threaded,
        we call Nicosia::Buffer functions beginPainting() and completePainting().


2018-06-18  Tomas Popela  <tpopela@redhat.com>

        Properly check the sscanf return valua
        https://bugs.webkit.org/show_bug.cgi?id=186757

        Reviewed by Carlos Garcia Campos.

        Check if we matched anything and if we matched the expected amount of
        data.

        * page/linux/ResourceUsageThreadLinux.cpp:
        (WebCore::cpuPeriod):

2018-06-18  Tomas Popela  <tpopela@redhat.com>

        [GTK] Wrong variable used in RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=186756

        Reviewed by Carlos Garcia Campos.

        Use SliderThumbHorizontalPart instead of SliderHorizontalPart.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustSliderThumbSize const):

2018-06-18  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Crash when adding in-band text track with playbin3 enabled
        https://bugs.webkit.org/show_bug.cgi?id=186654

        Reviewed by Xabier Rodriguez-Calvar.

        Text track indexes should be relative to the total amount of
        in-band text tracks. The previous code would induce the creation
        of in-band text tracks with indexes relative to the total amount
        of all in-band (audio, video, text) tracks.

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

2018-06-17  Zalan Bujtas  <zalan@apple.com>

        Anonymous block collapsing can destroy the renderer's parent.
        https://bugs.webkit.org/show_bug.cgi?id=186655
        <rdar://problem/41157554>

        Reviewed by Antti Koivisto.

        While destroying a chain of renderers (text renderer -> first letter renderer), we need to
        check if the anonymous block collapsing destroyed the parent renderer (see webkit.org/b/186746).

        Test: fast/text/first-letter-with-anon-wrapper-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers):

2018-06-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=186442
        <rdar://problem/40879364>

        Reviewed by Darin Adler.

        Rename references to "Extra zoom mode". No change in behavior.

        * page/DisabledAdaptations.cpp:
        (WebCore::watchAdaptationName):
        (WebCore::extraZoomModeAdaptationName): Deleted.
        * page/DisabledAdaptations.h:
        * page/ViewportConfiguration.cpp:
        (WebCore::needsUpdateAfterChangingDisabledAdaptations):
        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthAndShrinkToFit const):
        * page/WindowFeatures.cpp:
        (WebCore::parseDisabledAdaptations):
        * testing/Internals.cpp:
        (WebCore::Internals::extraZoomModeAdaptationName const): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-06-17  Youenn Fablet  <youenn@apple.com>

        Rename Document::hasHadActiveMediaStreamTrack to Document::hasHadCaptureMediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=186743
        rdar://problem/41151193

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Rename setter and getter to be more accurate.
        Move the place to call the setter to when creating a capture stream.

        * Modules/mediastream/MediaDevicesRequest.cpp:
        (WebCore::MediaDevicesRequest::start):
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::statusDidChange):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::mediaStreamIsReady):
        * dom/Document.h:
        (WebCore::Document::setHasCaptureMediaStreamTrack):
        (WebCore::Document::hasHadCaptureMediaStreamTrack const):
        (WebCore::Document::setHasActiveMediaStreamTrack): Deleted.
        (WebCore::Document::hasHadActiveMediaStreamTrack const): Deleted.

2018-06-17  Zalan Bujtas  <zalan@apple.com>

        [LFC] DisplayBox API should be more clear about height/width vs. contentBoxHeight/width
        https://bugs.webkit.org/show_bug.cgi?id=186744

        Reviewed by Antti Koivisto.

        Display::Box::height/width -> border box size.
        Display::Box::contentBoxHeight/width -> content box size.
        Display::Box::top/left/bottom/right -> border box position in the containing box's coordinate system.
        Display::Box::marginBox/borderBox/paddingBox/contentBox -> relative to border box (border box is { 0, 0 })
 
        (This patch also removes the box-sizing logic from Display::Box. FormattingContext::Geometry should set the
        correct contentBoxSize/borderBoxSize based on the CSS property.)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::left const):
        (WebCore::Display::Box::bottom const):
        (WebCore::Display::Box::right const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::bottomRight const):
        (WebCore::Display::Box::size const):
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::rect const):
        (WebCore::Display::Box::setTopLeft):
        (WebCore::Display::Box::setTop):
        (WebCore::Display::Box::setLeft):
        (WebCore::Display::Box::moveHorizontally):
        (WebCore::Display::Box::moveVertically):
        (WebCore::Display::Box::setHasValidContentHeight):
        (WebCore::Display::Box::setHasValidContentWidth):
        (WebCore::Display::Box::setContentBoxHeight):
        (WebCore::Display::Box::setContentBoxWidth):
        (WebCore::Display::Box::contentBoxHeight const):
        (WebCore::Display::Box::contentBoxWidth const):
        (WebCore::Display::Box::setWidth): Deleted.
        (WebCore::Display::Box::setHeight): Deleted.
        (WebCore::Display::Box::setSize): Deleted.

2018-06-17  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GTK] Correct behavior for dark themes
        https://bugs.webkit.org/show_bug.cgi?id=186219

        Reviewed by Michael Catanzaro.

        Override RenderThemeGtk::isControlStyled() to not style
        text inputs if color is set different than default.

        No new tests. Manual theme test and existing layout tests already cover it.

        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::isControlStyled const):
        * rendering/RenderThemeGtk.h:

2018-06-12  Darin Adler  <darin@apple.com>

        [Cocoa] Make some RetainPtr refinements to get more ready for ARC
        https://bugs.webkit.org/show_bug.cgi?id=186526

        Reviewed by Anders Carlsson.

        * platform/ios/UserAgentIOS.mm:
        (WebCore::deviceNameForUserAgent): Drop unnecessary use of RetainPtr.

        * platform/mac/URLMac.mm:
        (WebCore::URL::operator NSURL * const): Use bridgingAutorelease.

2018-06-16  Chris Dumez  <cdumez@apple.com>

        Better pack ResourceResponse
        https://bugs.webkit.org/show_bug.cgi?id=186718

        Reviewed by Simon Fraser.

        Better pack ResourceResponse to reduce its size on Mac from 632 to 616 bytes.

        * platform/network/ResourceResponseBase.h:

2018-06-15  Chris Dumez  <cdumez@apple.com>

        Better pack MediaQuery
        https://bugs.webkit.org/show_bug.cgi?id=186716

        Reviewed by Simon Fraser.

        Better pack MediaQuery to reduce its size from 48 bytes to 40 and save
        some memory.

        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery):
        * css/MediaQuery.h:

2018-06-15  Chris Dumez  <cdumez@apple.com>

        StyleRuleMedia wastes 158KB of Vector capacity on cnn.com
        https://bugs.webkit.org/show_bug.cgi?id=186705
        <rdar://problem/41173637>

        Reviewed by Simon Fraser.

        Call shrinkToFit on RefPtr<StyleRuleBase> vectors in CSSParserImpl, after we're
        done parsing and before constructing StyleRuleMedia, StyleRuleSupports and
        deferred rules in StyleRuleGroup.

        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseDeferredRuleList):
        (WebCore::CSSParserImpl::consumeMediaRule):
        (WebCore::CSSParserImpl::consumeSupportsRule):

2018-06-15  Chris Dumez  <cdumez@apple.com>

        MediaQuerySet wastes a lot of vector capacity
        https://bugs.webkit.org/show_bug.cgi?id=186696
        <rdar://problem/41172850>

        Reviewed by Simon Fraser.

        Call shrinkToFit() on the MediaQuerySet after we're done parsing it
        to avoid wasting memory.

        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::parseInternal):

2018-06-15  Chris Dumez  <cdumez@apple.com>

        CachedRawResource wastes 57K of Vector capacity
        https://bugs.webkit.org/show_bug.cgi?id=186703
        <rdar://problem/41173515>

        Reviewed by Simon Fraser.

        Use 0 as minimum capacity for CachedRawResource::m_redirectChain, instead of the
        default value of 16. m_redirectChain usually contains very few items so 16 is
        wasteful, especially considering that m_redirectChain contains fairly large
        objects (std::pair<ResourceRequest, ResourceResponse>). CachedRawResource are
        stored in the memory cache so it is important to not use more memory than
        necessary.

        We are also not worried about the performance cost of allocations here since
        this vector is only populated on HTTP redirects.

        * loader/cache/CachedRawResource.h:

2018-06-15  Antti Koivisto  <antti@apple.com>

        Semantic colors should not be transformed by color-filter
        https://bugs.webkit.org/show_bug.cgi?id=186566
        <rdar://problem/40705739>

        Reviewed by Simon Fraser.

        Test: css3/color-filters/color-filter-ignore-semantic.html

        * platform/graphics/Color.h:
        (WebCore::Color::Color):
        (WebCore::Color::isSemantic const):
        (WebCore::Color::setIsSemantic):

        Add a bit to Color to indicate it originated from a semantic color name.
        Note that a color compares unequal to the semantic version of the same color.

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::semanticColorFromNSColor):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

        Set the bit for semantic system colors.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

        Fix up the output to avoid unneccary render tree dump changes.

2018-06-15  Chris Dumez  <cdumez@apple.com>

        Add API test coverage for SW RegistrationDatabase destruction and fix issues found by the test
        https://bugs.webkit.org/show_bug.cgi?id=186681

        Reviewed by Brady Eidson.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::RegistrationDatabase):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/RegistrationDatabase.h:
        Rename m_session to m_sessionID for clarity.

        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::~RegistrationStore):
        Drop bad assertion now that the RegistrationDatabase is refcounted
        and can outlive the RegistrationStore. The RegistrationDatabase will
        take care of closing / destroying the SQLiteDatabase on the background
        thread when destroyed.

2018-06-15  Timothy Hatcher  <timothy@apple.com>

        REGRESSION (r232799): Form controls are blank in dark mode.

        https://bugs.webkit.org/show_bug.cgi?id=186677
        rdar://problem/41162899

        Reviewed by Wenson Hsieh.

        * rendering/RenderThemeMac.mm:
        (-[WebCoreTextFieldCell _adjustedCoreUIDrawOptionsForDrawingBordersOnly:]):
        Dark mode controls don't have borders, just a semi-transparent background of shadows.
        In the dark mode case we can't disable borders, or we will not paint anything for the control.

2018-06-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Fix static position left/top
        https://bugs.webkit.org/show_bug.cgi?id=186640

        Reviewed by Antti Koivisto.

        In visual formatting model, we normally go like [top, left] while LayoutPoint takes [x, y]. Let's make this less error prone.

        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::Geometry::Position::operator LayoutPoint const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):

2018-06-15  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::SWServer::registrationStoreImportComplete()
        https://bugs.webkit.org/show_bug.cgi?id=186644
        <rdar://problem/40982257>

        Reviewed by Brady Eidson.

        Fix lifetime management issues with RegistrationDatabase. RegistrationDatabase
        was previously subclassing CrossThreadTaskHandler. CrossThreadTaskHandler
        currently is not safe for objects that can get destroyed (such as
        RegistrationDatabase). This is because it does not keep the object alive
        when going to the background thread or back to the main thread. This would
        cause crashes such as the one in the radar.

        To address the issue, stop subclassing CrossThreadTaskHandler and use a
        simple WorkQueue instead. RegistrationDatabase is now ThreadSafeRefCounted
        and we take care of ref'ing it whenever we dispatch a task to the work queue
        or back to the main thread. Because the RegistrationDatabase can now outlive
        the RegistrationStore, m_store is now a WeakPtr.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::RegistrationDatabase):
        (WebCore::RegistrationDatabase::~RegistrationDatabase):
        (WebCore::RegistrationDatabase::postTaskToWorkQueue):
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::importRecordsIfNecessary):
        (WebCore::RegistrationDatabase::pushChanges):
        (WebCore::RegistrationDatabase::clearAll):
        (WebCore::RegistrationDatabase::importRecords):
        (WebCore::RegistrationDatabase::addRegistrationToStore):
        (WebCore::RegistrationDatabase::databaseFailedToOpen):
        (WebCore::RegistrationDatabase::databaseOpenedAndRecordsImported):
        * workers/service/server/RegistrationDatabase.h:
        (WebCore::RegistrationDatabase::create):
        * workers/service/server/RegistrationStore.cpp:
        (WebCore::RegistrationStore::RegistrationStore):
        (WebCore::RegistrationStore::~RegistrationStore):
        (WebCore::RegistrationStore::pushChangesToDatabase):
        (WebCore::RegistrationStore::clearAll):
        * workers/service/server/RegistrationStore.h:

2018-06-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Align compute functions styles.
        https://bugs.webkit.org/show_bug.cgi?id=186649

        Reviewed by Antti Koivisto.

        Improve code readability.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::FormattingContext::Geometry::computedValueIfNotAuto):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        (WebCore::Layout::computedValueIfNotAuto): Deleted.
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):

2018-06-15  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add FormattingContextLayout logging channel
        https://bugs.webkit.org/show_bug.cgi?id=186637

        Reviewed by Antti Koivisto.

        Add some basic layout logging (-WebCoreLogging "FormattingContextLayout").

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::shrinkToFitWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):
        (WebCore::Layout::verifyAndOutputSubtree):
        (WebCore::Layout::LayoutContext::verifyAndOutputMismatchingLayoutTree const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::outputLayoutBox):
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::TreeBuilder::showLayoutTree):
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * layout/layouttree/LayoutTreeBuilder.h:
        * platform/Logging.h:

2018-06-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] CSS Animations should take precedence over CSS Transitions
        https://bugs.webkit.org/show_bug.cgi?id=186651

        Reviewed by Dean Jackson.

        Ensure CSS Animations override CSS Transitions by modifying the order in which animations are returned by animationsForElement().

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationsForElement const):

2018-06-14  Youenn Fablet  <youenn@apple.com>

        Make NetworkProcess get cache storage parameters at creation of the CacheStorage engine
        https://bugs.webkit.org/show_bug.cgi?id=186166

        Reviewed by Alex Christensen.

        Covered by existing tests.

        * platform/network/NetworkStorageSession.h:
        (WebCore::NetworkStorageSession::cacheStorageDirectory const): Deleted.
        (WebCore::NetworkStorageSession::setCacheStorageDirectory): Deleted.
        (WebCore::NetworkStorageSession::cacheStoragePerOriginQuota const): Deleted.
        (WebCore::NetworkStorageSession::setCacheStoragePerOriginQuota): Deleted.

2018-06-14  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r232823.

        This caused both test timeouts and api failures.

        Reverted changeset:

        "[Mail] Use the Mail Viewer width as the base for resolving
        horizontal viewport units"
        https://bugs.webkit.org/show_bug.cgi?id=186585
        https://trac.webkit.org/changeset/232823

2018-06-14  Nan Wang  <n_wang@apple.com>

        AX: Crash in AccessibilityNodeObject::textUnderElement(WebCore::AccessibilityTextUnderElementMode) const + 536
        https://bugs.webkit.org/show_bug.cgi?id=186629

        Reviewed by Chris Fleizach.

        This crashed when we passed a null node to ancestorsOfType. Fixed it
        by adding a null check.

        Test: accessibility/hidden-object-text-value-crash.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement const):

2018-06-14  Timothy Hatcher  <timothy@apple.com>

        Expose more semantic system colors.

        https://bugs.webkit.org/show_bug.cgi?id=186609
        rdar://problem/39287277

        Reviewed by Tim Horton.

        Add the following semantic colors:
         -apple-system-control-accent
         -apple-system-even-alternating-content-background
         -apple-system-odd-alternating-content-background
         -apple-system-selected-content-background
         -apple-system-unemphasized-selected-content-background
         -apple-system-selected-text
         -apple-system-unemphasized-selected-text
         -apple-system-selected-text-background
         -apple-system-unemphasized-selected-text-background
         -apple-system-placeholder-text
         -apple-system-find-highlight-background
         -apple-system-separator

        * css/CSSValueKeywords.in:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2018-06-14  Eric Carlson  <eric.carlson@apple.com>

        [iOS] WebAVPlayerController isPlayingOnSecondScreen should be declared read-write
        https://bugs.webkit.org/show_bug.cgi?id=186621
        <rdar://problem/40243303>

        Reviewed by Jer Noble.

        * platform/ios/WebAVPlayerController.h:

2018-06-13  Zalan Bujtas  <zalan@apple.com>

        [LFC] Miscellaneous fixes to be able to layout <div> with fixed width/height
        https://bugs.webkit.org/show_bug.cgi?id=186616

        Reviewed by Antti Koivisto.

        1. Move box horizontally/vertically when relevant margin is computed.
        2. Fix isStretchedToViewport() logic and make sure that the width/height is adjusted with the margin when the box is stretchy.
        3. Fix isPaddingApplicable() and add "GenericElement" for elements that don't need special handling.

        With this patch LFC produces the correct geometry for the following content:
        <html><body><div style="width: 100px; height: 100px;"></div></body></html>

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidthAndMargin const):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::isStretchedToViewport):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::moveHorizontally):
        (WebCore::Display::Box::moveVertically):
        (WebCore::Display::Box::Rect::setWidth):
        (WebCore::Display::Box::Rect::setHeight):
        (WebCore::Display::Box::Rect::moveHorizontally):
        (WebCore::Display::Box::Rect::moveVertically):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isPaddingApplicable const):
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-06-13  Chris Dumez  <cdumez@apple.com>

        Crash under SWServer::unregisterConnection(Connection&)
        https://bugs.webkit.org/show_bug.cgi?id=186584
        <rdar://problem/40931680>

        Reviewed by Youenn Fablet.

        The crash was due to SWServer::Connection objects outliving their SWServer, even
        though SWServer::Connection::m_server is a C++ reference. This was possible because
        SWServer does not own the connections, StorageToWebProcessConnection does. This
        started crashing recently, after r232423, because SWServer can get destroyed now.
        The SWServer might get destroyed before the StorageToWebProcessConnection, in which
        case the SWServer::Connection objects will get destroyed later. We were crashing
        because the SWServer::Connection destructor tries to unregister the connection from
        the SWServer (which is dead).

        To address the issue, the SWServer now owns the connections. StorageToWebProcessConnection
        merely has weak pointers to the connections.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::Connection):
        (WebCore::SWServer::addConnection):
        (WebCore::SWServer::removeConnection):
        (WebCore::SWServer::resolveRegistrationReadyRequests):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::Connection::~Connection):
        (WebCore::SWServer::Connection::server):
        (WebCore::SWServer::connection):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::forEachConnection):
        (WebCore::SWServerRegistration::notifyClientsOfControllerChange):
        (WebCore::SWServerRegistration::controlClient):

2018-06-13  Zalan Bujtas  <zalan@apple.com>

        [Mail] Use the Mail Viewer width as the base for resolving horizontal viewport units
        https://bugs.webkit.org/show_bug.cgi?id=186585
        <rdar://problem/30685325>

        Reviewed by Tim Horton.

        Use the existing "override viewport size for viewport units" mechanism to compute the preferred
        viewport unit values for the Mail Viewer html content. 

        Test: fast/dynamic/mail-autosize-viewport-unit.html

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::enableAutoSizeMode):
        (WebCore::FrameView::clearViewportSizeOverrideForCSSViewportUnits):
        (WebCore::FrameView::setViewportSizeForCSSViewportUnits):
        (WebCore::FrameView::overrideViewportSizeForCSSViewportUnits):
        (WebCore::FrameView::viewportSizeForCSSViewportUnits const):
        * page/FrameView.h:

2018-06-13  Dean Jackson  <dino@apple.com>

        Disable AR support in WKWebView clients
        https://bugs.webkit.org/show_bug.cgi?id=186611
        <rdar://problem/39544684>

        Reviewed by Jon Lee.

        Since it hasn't been adequately tested, System Preview (AR) should
        be disabled by default for WKWebViews.

        Add a new RuntimeEnabledFeature to control this, and guard for
        this case everywhere we use system previews.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const):
        (WebCore::HTMLAnchorElement::handleClick):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isSystemPreviewImage const):
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::isSystemPreviewImage const):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSystemPreviewEnabled):
        (WebCore::RuntimeEnabledFeatures::systemPreviewEnabled const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):

2018-06-13  Youenn Fablet  <youenn@apple.com>

        Supported plugin check should be based on plugin identifier
        https://bugs.webkit.org/show_bug.cgi?id=186578
        <rdar://problem/40523828>

        Reviewed by Darin Adler.

        Rename SupportedPluginName in SupportedPluginIdentifier.
        Add cross-platform support for plug-in identifier.

        Update built-in PDF plug-in to check its identifier instead of its name.
        This is stronger as the name may change according localization.

        * loader/EmptyClients.cpp:
        * plugins/PluginData.cpp:
        (WebCore::isBuiltInPDFPlugIn):
        (WebCore::PluginData::initPlugins):
        * plugins/PluginData.h:
        (WebCore::operator==):
        (WebCore::isSupportedPlugin):
        (WebCore::SupportedPluginIdentifier::decode):
        (WebCore::SupportedPluginIdentifier::encode const):
        (WebCore::SupportedPluginName::decode): Deleted.
        (WebCore::SupportedPluginName::encode const): Deleted.
        * plugins/PluginInfoProvider.h:

2018-06-13  Chris Dumez  <cdumez@apple.com>

        PSON: http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-collusion.html ASSERTS with process swap enabled
        https://bugs.webkit.org/show_bug.cgi?id=186545

        Reviewed by Brady Eidson.

        Move frame navigation logging for ITP purposes from the WebProcess to the UIProcess.
        This information was previously logged in DocumentLoader::willSendRequest() and was getting
        sync'd to the UIProcess at regular intervals or when the layout tests call testRunner's
        statisticsNotifyObserver(). We now do the logging directly in the UIProcess, in
        WebPageProxy::decidePolicyForNavigationAction (which was getting called via IPC from
        DocumentLoader::willSendRequest()).

        This is more efficient and will also be needed soon due to the way process swap on navigation
        deals with cross-origin redirects. On cross-origin redirect of the main frame, PSON cancels
        the load and started a new load to the redirected to URL in the new WebProcess. As a result,
        the new WebProcess is not aware that the load is a redirect, which is information that ITP
        requires. By moving the ITP logging to the UIProcess, we still have access to this
        information. 

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        Stop logging the navigation now that it is logged in the UIProcess.

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:
        We now pass the full redirect request to the decidePolicyForNavigationAction
        delegate instead of a simple isRedirect boolean, so that we have the redirect
        response URL in the UIProcess for ITP logging.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::areDomainsAssociated):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::areDomainsAssociated):
        (WebCore::ResourceLoadStatistics::reduceTimeResolution):
        * loader/ResourceLoadStatistics.h:
        - Remove ResourceLoadObserver::logFrameNavigation() now that it is on the WebResourceLoadStatisticsStore.
        - Move some code from ResourceLoadObserver to ResourceLoadStatistics so that it can
          be called from the UIProcess and to avoid code duplication.

2018-06-13  Mark Lam  <mark.lam@apple.com>

        FloatingPointEnvironment is only needed for ARM CPUs.
        https://bugs.webkit.org/show_bug.cgi?id=186567
        <rdar://problem/40929441>

        Reviewed by Michael Saboff.

        No new tests.  This behavior is already covered by existing tests.

        * platform/ios/wak/FloatingPointEnvironment.cpp:
        * platform/ios/wak/FloatingPointEnvironment.h:
        (WebCore::FloatingPointEnvironment::enableDenormalSupport):
        (WebCore::FloatingPointEnvironment::saveMainThreadEnvironment):
        (WebCore::FloatingPointEnvironment::propagateMainThreadEnvironment):
        (WebCore::FloatingPointEnvironment::singleton):

2018-06-13  Timothy Hatcher  <timothy@apple.com>

        Input form controls have a white background in dark mode, when they should not.

        https://bugs.webkit.org/show_bug.cgi?id=186577
        rdar://problem/39258325

        Reviewed by Tim Horton.

        * DerivedSources.make: Allow WTF_PLATFORM_MAC ifdefs to preprocess in html.css.
        * css/CSSValueKeywords.in: Added -apple-system-control-background.
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent): Allow dark mode media query in user agent stylesheets.
        (WebCore::isFeatureValidWithoutValue): Ditto.
        * css/MediaQueryParserContext.cpp:
        (WebCore::MediaQueryParserContext::MediaQueryParserContext): Transfer the CSSParserMode from CSSParserContext.
        * css/MediaQueryParserContext.h:
        * css/html.css: Set color and background-color to semantic colors for input, textarea, and select.
        Make input background-color transparent in dark mode to match AppKit.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const): Added -apple-system-control-background.
        (WebCore::RenderThemeMac::paintTextField): Adjust the drawing rect to match new artwork in macOS 10.14.

2018-06-13  Said Abou-Hallawa  <sabouhallawa@apple.com>

        TileFirstPaint strategy for async image decoding should be disabled for non root RenderLayers
        https://bugs.webkit.org/show_bug.cgi?id=186336
        <rdar://problem/40808099>

        Reviewed by Simon Fraser.

        When showing a composited RenderLayer for the first time, the images in 
        this layer have to be decoded synchronously to avoid unwanted flashing.

        To create a layout test for this patch, FrameDecodingDurationForTesting
        needs to be generalized for large and animated images. The decoding thread
        now forces the decoding time to be at least equal to 
        FrameDecodingDurationForTesting.

        Test: fast/images/async-image-composited-show.html

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::shouldUseAsyncDecodingForAnimatedImages const):
        (WebCore::BitmapImage::internalStartAnimation):
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::startAsyncDecodingQueue):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::setFrameDecodingDurationForTesting):
        (WebCore::ImageSource::frameDecodingDurationForTesting const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):

2018-06-13  Wenson Hsieh  <wenson_hsieh@apple.com>

        CSS "background-color" style no longer affects natively rendered text fields
        https://bugs.webkit.org/show_bug.cgi?id=186597
        <rdar://problem/41050528>

        Reviewed by Tim Horton.

        AppKit currently does not support rendering background color to the edges of a text field cell. This means that
        in WebCore, when natively rendering text inputs with background color, we need to only draw the bezels of a text
        field, such that the background color we paint behind the text field will be shown. Currently, the way we
        accomplish this is by intercepting an internal NSTextField method that computes drawing options for CoreUI, and
        inserting a `"borders only" => true` entry.

        However, in a recent build of macOS Mojave, AppKit tweaked -_coreUIDrawOptionsWithFrame:inView:includeFocus: to
        add an extra argument (such that it's now -_coreUIDrawOptionsWithFrame:inView:includeFocus:maskOnly:), which
        negates the above workaround. To fix this in the short term, augment the workaround to apply to the latest macOS
        Mojave as well. A longer-term fix is already tracked in <rdar://problem/11385461>, which would allow WebKit to
        simply specify a background color on the text field cell, and have AppKit render it properly to the edges of the
        bezels.

        Covered by a test that is currently failing on Mojave: fast/forms/hidpi-textfield-background-bleeding.html

        * rendering/RenderThemeMac.mm:
        (-[WebCoreTextFieldCell _adjustedCoreUIDrawOptionsForDrawingBordersOnly:]):
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:maskOnly:]):

2018-06-13  Thibault Saunier  <tsaunier@igalia.com>

        [WPE] Build getUserMedia support
        https://bugs.webkit.org/show_bug.cgi?id=186547

        Reviewed by Alejandro G. Castro.

        Enable mediastream tests.

        * PlatformWPE.cmake: Build MediaStream support.
        * SourcesGTK.txt: Moved GStreamer related files to GStreamer.cmake.
        * SourcesWPE.txt: Removed `platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp`
        which is now in GStreamer.cmake.
        * platform/GStreamer.cmake: Build more MediaStream/webrtc related files.
        * platform/graphics/ImageBuffer.cpp: Handle the fact that toBGRAData is
        now built directly into the Cairo backend and not GTK anymore.
        * platform/graphics/cairo/ImageBufferCairo.cpp: Implement `toBGRAData`
        * platform/graphics/gtk/ImageBufferGtk.cpp: Removed `toBGRAData` as it is
        now implemented in the Cairo backend itself.
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: Switch an
        ASSERT to RELEASE_ASSERT when adding the GhostPad to itself. This was making
        test fail when built in RELEASE mode.
        (WebCore::webkitMediaStreamSrcChain): Minor variable name change to make it
        more accurate.
        (WebCore::webkitMediaStreamSrcAddPad): Now add the ghost pad to the element
        before setting its chain function, making things clearer.
        (WebCore::webkitMediaStreamSrcSetupSrc): Remove extra new line.

2018-06-13  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fast/canvas/webgl crashes
        https://bugs.webkit.org/show_bug.cgi?id=186590

        Reviewed by Carlos Alberto Lopez Perez.

        After r232747 the sample managed by the player can be empty,
        without buffer. So we need to check for this before mapping video
        frames. Also use the GstVideoFrameHolder in more places to reduce
        copy-paste churn.

        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):

2018-06-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed GTK build fix for --cmakeargs=-DUSE_GSTREAMER_GL=OFF

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):

2018-06-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Video freezes when GStreamerGL is not installed
        https://bugs.webkit.org/show_bug.cgi?id=184925

        Reviewed by Žan Doberšek.

        At runtime when the GStreamer opengl plugin isn't available the
        player will fallback to the internal WebKit video sink. The
        VideoFrameHolder was refactored to handle both cases (opengl,
        non-opengl).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::GstVideoFrameHolder::GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::~GstVideoFrameHolder):
        (WebCore::GstVideoFrameHolder::frame const):
        (WebCore::GstVideoFrameHolder::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::GstVideoFrameHolder::isValid const): Deleted.
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2018-06-12  Zalan Bujtas  <zalan@apple.com>

        Complex text handling should opt out of bounded text layout.
        https://bugs.webkit.org/show_bug.cgi?id=186571
        <rdar://problem/41060908>

        Reviewed by Tim Horton.

        Test: fast/text/complex-long-text-crash.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2018-06-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232774.

        Breaks internal builds.

        Reverted changeset:

        "Complex text handling should opt out of bounded text layout."
        https://bugs.webkit.org/show_bug.cgi?id=186571
        https://trac.webkit.org/changeset/232774

2018-06-12  Ryosuke Niwa  <rniwa@webkit.org>

        iOS WK1: Occasional crash in FrameView::setScrollPosition
        https://bugs.webkit.org/show_bug.cgi?id=186575

        Reviewed by David Kilzer.

        The bug was caused by ScrollView::platformSetScrollPosition releasing the web thread lock
        and DumpRenderTree requesting a new page load thereby destroying FrameView.

        Fixed the crash by keeping FrameView alive while scrollToFocusedElementTimerFired is getting called.

        No new tests since the bug is caught by existing layout tests under guard malloc.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollToFocusedElementTimerFired):

2018-06-12  Zalan Bujtas  <zalan@apple.com>

        Complex text handling should opt out of bounded text layout.
        https://bugs.webkit.org/show_bug.cgi?id=186571
        <rdar://problem/40801429>

        Reviewed by Tim Horton.

        Test: fast/text/complex-long-text-crash.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2018-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the Windows build after r232757

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemoveNodePreservingChildren):

2018-06-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r228724): Occasional crash when executing ReplaceSelectionCommand at the end of the document
        https://bugs.webkit.org/show_bug.cgi?id=186555
        <rdar://problem/39703004>

        Reviewed by Ryosuke Niwa.

        r228724 removed a null check for m_lastNodeInserted in InsertedNodes::pastLastLeaf(). This null check was
        guarding against the case where m_firstNodeInserted might exist, but m_lastNodeInserted is null, which may
        happen when inserting content at the end of the document, since InsertedNodes::willRemoveNodePreservingChildren
        may cause m_lastNodeInserted to be null. This is because the removed node may be at the very end of the document
        _and also_ not have any children, which means that both `node->lastChild()` as well as
        `NodeTraversal::nextSkippingChildren(*node)` will be null.

        After getting into this state, we subsequently crash when attempting to compute InsertedNodes::pastLastLeaf().
        To fix this, avoid accidentally clearing out m_lastNodeInserted; if the last inserted node has neither a child
        nor a next node, seek backwards to the previous node in the DOM instead, and clamp to the first inserted node,
        such that the last inserted node's document position is at or after the first inserted node's position.

        Test: editing/execCommand/insert-apple-style-span-at-document-end.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::willRemoveNodePreservingChildren):

2018-06-12  Jianjun Zhu  <jianjun.zhu@intel.com>

        Hash deviceId and groupId of MediaTrackCapabilities.
        https://bugs.webkit.org/show_bug.cgi?id=186471

        Reviewed by Eric Carlson.

        This change makes the identifier for the source of the MediaStreamTrack
        has the same value returned by enumerateDevices(). It also prevents real
        device ID being leaked.

        (WebCore::MediaStreamTrack::getCapabilities const):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrack.idl:

2018-06-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed WPE build fix after r232749.

        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:

2018-06-12  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add vertical margin computation for inflow non-replaced box and for the (10.6.6) complicated cases.
        https://bugs.webkit.org/show_bug.cgi?id=186469

        Reviewed by Antti Koivisto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):

2018-06-12  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Bump required version to 1.8.3
        https://bugs.webkit.org/show_bug.cgi?id=186558

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/GStreamer.cmake: Remove useless file.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcChangeState): Remove useless version check.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        Removed. createDecryptor() is dead code since the decryptors moved
        to the MSE playback pipeline.
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        (WebCore::GStreamerEMEUtilities::keySystemToUuid):

2018-06-11  Philippe Normand  <philn@igalia.com>

        [GStreamer] flush video sample upon DRAIN query
        https://bugs.webkit.org/show_bug.cgi?id=186481

        Reviewed by Xabier Rodriguez-Calvar.

        Use the appsink sink pad pad probe for both event and drain query
        management. This patch is partially based on
        https://github.com/WebPlatformForEmbedded/WPEWebKit/commit/d3a336523d123119fe1dd53da5d9006c92cf078c
        by Enrique Ocaña González <eocanha@igalia.com>.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink):

2018-06-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] Replace HorizontalGeometry::width and margin with WidthAndMargin (Vertical too)
        https://bugs.webkit.org/show_bug.cgi?id=186556

        Reviewed by Sam Weinig.

        HorizontalGeometry::width and margin -> WidthAndMargin
        VerticalGeometry::height and margin -> HeightAndMargin

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):

2018-06-11  Youenn Fablet  <youenn@apple.com>

        Improve error messages in case FetchEvent.respondWith has a rejected promise
        https://bugs.webkit.org/show_bug.cgi?id=186368

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        Introduce a new error domain for service worker ResourceError.
        Used this domain to log in the console any such error.

        Update FetchEvent implementation to get meaningful error messages for respondWith error cases.
        In particular, convert the rejected promise JS value as a string to populate the error message.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFail):
        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::waitForFetchEventToFinish):
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::~FetchEvent):
        (WebCore::FetchEvent::createResponseError):
        (WebCore::FetchEvent::onResponse):
        (WebCore::FetchEvent::respondWithError):
        (WebCore::FetchEvent::processResponse):
        (WebCore::FetchEvent::promiseIsSettled):
        * workers/service/FetchEvent.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):

2018-06-11  Chris Dumez  <cdumez@apple.com>

        http/tests/security/xss-DENIED-script-inject-into-inactive-window2.html times out with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=186546

        Reviewed by Brady Eidson.

        Add a hasOpenedFrames flag to NavigationAction, which we'll use in the UIProcess when deciding
        to process swap on navigation or not.

        Test: http/tests/security/xss-DENIED-script-inject-into-inactive-window2-pson.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::hasOpenedFrames const):
        (WebCore::NavigationAction::setHasOpenedFrames):

2018-06-11  Tim Horton  <timothy_horton@apple.com>

        Link drag image is inconsistently unreadable in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=186472

        Reviewed by Timothy Hatcher.

        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink):
        Use LocalDefaultSystemAppearance so that NSColors used inside
        createDragImageForLink are interpreted correctly. This function
        always follows the system appearance regardless of what the preference
        is set to, because it's generating UI that isn't part of the page.

        Use controlBackgroundColor to get a consistently contrasting background
        for the link drag image.

2018-06-11  Chris Dumez  <cdumez@apple.com>

        http/tests/security/cors-post-redirect-307.html fails with PSON enabled
        https://bugs.webkit.org/show_bug.cgi?id=186441

        Reviewed by Brady Eidson.

        When we are continuing a load in a new process, we currently bypass the navigation policy
        check. We now also bypass the adding of headers such as the Origin one since the request
        was already processed in the previous process. This is important because in the case of
        a cross-origin redirect, the previous process has removed the Origin header from the
        request and we do not want the new process to add it again.

        Test: http/tests/security/cors-post-redirect-307-pson.html

        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldTreatAsContinuingLoad):
        (WebCore::FrameLoadRequest::shouldTreatAsContinuingLoad const):
        (WebCore::FrameLoadRequest::setShouldCheckNavigationPolicy): Deleted.
        (WebCore::FrameLoadRequest::shouldCheckNavigationPolicy const): Deleted.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::addExtraFieldsToRequest):
        (WebCore::FrameLoader::addHTTPOriginIfNeeded):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        * loader/FrameLoader.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::setDefersLoading):
        (WebCore::HistoryController::recursiveGoToItem):
        * loader/HistoryController.h:
        * loader/ShouldTreatAsContinuingLoad.h: Renamed from Source/WebCore/loader/NavigationPolicyCheck.h.
        * page/Page.cpp:
        (WebCore::Page::goToItem):
        * page/Page.h:

2018-06-11  Youenn Fablet  <youenn@apple.com>

        Accept request header values should be more tightly checked after r232572 in case of CORS load
        https://bugs.webkit.org/show_bug.cgi?id=186533
        <rdar://problem/40933880>

        Reviewed by Darin Adler.

        Covered by updated test.

        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidAcceptHeaderValue): Checking that Accept header value conforms with RFC7370.
        If not, this will trigger preflighting for CORS cross origin loads.
        Current checks for Accept-Language and Content-Language are sufficient to ensure values conform with RFC7370.

2018-06-11  Chris Dumez  <cdumez@apple.com>

        Crash under com.apple.WebKit.Networking at WebCore: WebCore::NetworkStorageSession::hasStorageAccess const
        https://bugs.webkit.org/show_bug.cgi?id=186433
        <rdar://problem/40750907>

        Reviewed by Geoffrey Garen.

        Do some hardening in NetworkStorageSession::hasStorageAccess() to make sure
        we do not try and do a HashMap lookup with a null firstPartyDomain, as this
        would crash.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::hasStorageAccess const):

2018-06-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] Remove redundant position functions for out-of-flow elements
        https://bugs.webkit.org/show_bug.cgi?id=186525

        Reviewed by Antti Koivisto.

        Position is computed as part of the Horizontal/Vertical geometry computation.
        (see outOfFlow(Non)ReplacedHorizontalGeometry/outOfFlow(Non)ReplacedVerticalGeometry functions)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::outOfFlowNonReplacedPosition): Deleted.
        (WebCore::Layout::outOfFlowReplacedPosition): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowPosition): Deleted.

2018-06-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge top, bottom, height and vertical margin computation for out-of-flow replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=186524

        Reviewed by Antti Koivisto.

        Implement https://www.w3.org/TR/CSS22/visudet.html#abs-replaced-height
        (10.6.5 Absolutely positioned, replaced elements)

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):

2018-06-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge left, right, width and horizontal margin computation for out-of-flow replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=186475

        Reviewed by Antti Koivisto.

        Implement https://www.w3.org/TR/CSS22/visudet.html#abs-replaced-width
        (10.3.8 Absolutely positioned, replaced elements)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidthAndMargin const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::computedValueIfNotAuto):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowWidthAndMargin): Deleted.

2018-06-11  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge left, right, width and horizontal margin computation for out-of-flow non-replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=186474

        Reviewed by Antti Koivisto.

        Implement https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width 
        (10.3.7 Absolutely positioned, non-replaced elements)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidthAndMargin const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidthAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowWidthAndMargin): Deleted.

2018-06-10  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge top, bottom, height and vertical margin computation for out-of-flow non-replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=186476

        Reviewed by Antti Koivisto.

        Implement https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-height
        (10.6.4 Absolutely positioned, non-replaced elements)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::computedValueIfNotAuto):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHeightAndMargin): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHeightAndMargin): Deleted.

2018-06-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] Add API run run javascript from a WebKitWebView in an isolated world
        https://bugs.webkit.org/show_bug.cgi?id=186192

        Reviewed by Michael Catanzaro.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld): Add ExceptionDetails parameter.
        * bindings/js/ScriptController.h:

2018-06-10  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] paypal.com requires user agent quirk
        https://bugs.webkit.org/show_bug.cgi?id=186466

        Reviewed by Carlos Garcia Campos.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2018-06-09  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up and modernize some build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=186463

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/FeatureDefines.xcconfig: Simplified the definitions of ENABLE_APPLE_PAY and
          ENABLE_VIDEO_PRESENTATION_MODE now macOS 10.12 is the earliest supported version.
        * Configurations/Version.xcconfig: Removed definition for macOS 10.11.
        * Configurations/WebCore.xcconfig: Simplified the definition of WK_PRIVATE_FRAMEWORKS_DIR
          now that WK_XCODE_SUPPORTS_TEXT_BASED_STUBS is true for all supported Xcode versions.
        * Configurations/WebKitTargetConditionals.xcconfig: Removed definitions for macOS 10.11.

2018-06-09  Dan Bernstein  <mitz@apple.com>

        Added missing file references to the Configuration group.

        * WebCore.xcodeproj/project.pbxproj:

2018-06-09  Zalan Bujtas  <zalan@apple.com>

        REGRESSION (r230480): Cannot adjust photo position on LinkedIn's profile page
        https://bugs.webkit.org/show_bug.cgi?id=186464
        <rdar://problem/40369448>

        Reviewed by Simon Fraser.

        The optimization logic for skipping image layout when we only need overflow computation should check if the image actually needs
        simplified layout only. The needsSimplifiedNormalFlowLayout() flag means that the overflow information needs to be updated but
        it does not mean that overflow is the only property that we need to recompute.

        Test: fast/images/positioned-image-when-transform-is-present.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::needsSimplifiedNormalFlowLayoutOnly const):

2018-06-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(macOS Mojave): move-by-word-visually-multi-line.html fails
        https://bugs.webkit.org/show_bug.cgi?id=186454

        Reviewed by Darin Adler.

        Like r232635, this patch fixes a selection test failure caused by the change in ICU's behavior in macOS Mojave,
        which caused isWordTextBreak to return true in more cases.

        In this particular failing test case, previousTextOrLineBreakBox and nextTextOrLineBreakBox were failing to find
        an inline text box when it found an inline box for a BR, which was mentioned by an existing FIXME comment.
        Consequently, visualWordPosition were erroneously detecting the end of a word followed by a blank line created by
        a BR as a valid word boundary to move when the Windows editing behavior is enacted.

        Addressed the FIXME comment by finding the next inline text box skipping all inline boxes for BRs. Renamed
        misleadingly named previousBoxInDifferentBlock and nextBoxInDifferentBlock to previousBoxInDifferentLine and
        nextBoxInDifferentLine respectively, and set them to true as they're really indicating whether line boxes
        belong to a distinct line or not; whether an inline box belong to two (render) blocks or not is irrelevant.

        Finally, this patch fixes a bug in visualWordPosition that it was failing to skip blank lines when a word break is
        found as we traversed past a line break. In those cases, we must skip all line breaks before stopping.

        Tests: editing/selection/move-by-word-visually-mac.html
               editing/selection/move-by-word-visually-multi-line.htm

        * editing/VisibleUnits.cpp:
        (WebCore::CachedLogicallyOrderedLeafBoxes::previousTextOrLineBreakBox):
        (WebCore::CachedLogicallyOrderedLeafBoxes::nextTextOrLineBreakBox):
        (WebCore::CachedLogicallyOrderedLeafBoxes::boxIndexInLeaves const):
        (WebCore::logicallyPreviousBox):
        (WebCore::logicallyNextBox):
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):

2018-06-09  Zalan Bujtas  <zalan@apple.com>

        [LFC] MarginCollapse functions should be able to resolve non-fixed margin values
        https://bugs.webkit.org/show_bug.cgi?id=186461

        Reviewed by Antti Koivisto.

        We need the containing block's computed width to resolve vertical and horizontal margins.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBottom):
        (WebCore::Layout::collapsedMarginTopFromFirstChild): Deleted.
        (WebCore::Layout::nonCollapsedMarginTop): Deleted.

2018-06-08  Darin Adler  <darin@apple.com>

        [Cocoa] Remove all uses of NSAutoreleasePool as part of preparation for ARC
        https://bugs.webkit.org/show_bug.cgi?id=186436

        Reviewed by Anders Carlsson.

        * bridge/objc/objc_class.mm: Use import instead of include.

        * bridge/objc/objc_instance.h: Replaced _pool member to hold an object with
        m_autoreleasePool member to hold a token from objc_autoreleasePoolPush. Also
        initialize all data members here in the class definition.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::ObjcInstance): Moved most initialization to class definition.
        (ObjcInstance::virtualBegin): Use objc_autoreleasePoolPush instead of
        NSAutoreleasePool class.
        (ObjcInstance::virtualEnd): Use objc_autoreleasePoolPop.

        * bridge/objc/objc_runtime.mm: Use import instead of include.
        * bridge/objc/objc_utility.mm: Ditto.

        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource): Use @autoreleasepool.

        * platform/ios/wak/WebCoreThread.mm: Re-sorted includes. Removed declaration of
        autorelease pool SPI and use FoundationSPI.h instead.

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformLazyInit): Use @autoreleasepool.

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

        [WebKit on watchOS] Upstream watchOS source additions to OpenSource (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=186442
        <rdar://problem/40879364>

        Reviewed by Tim Horton.

        No change in behavior.

        * Configurations/FeatureDefines.xcconfig:
        * page/DisabledAdaptations.cpp:
        (WebCore::extraZoomModeAdaptationName):

2018-06-08  Per Arne Vollan  <pvollan@apple.com>

        Only display refresh monitors having requested display refresh callback should get notified on screen updates.
        https://bugs.webkit.org/show_bug.cgi?id=186397
        <rdar://problem/40897835>

        Reviewed by Brent Fulgham.

        Since all display refresh monitors in the WebContent process share a single UI process display link,
        we should make sure that only the monitors having requested callback are getting notified on screen
        updates. I have not been able to reproduce a case where a monitor is being notified without having
        requested updates, but we should safeguard the code for future code changes.

        No new tests, since this is a safeguarding measure.

        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::hasRequestedRefreshCallback const):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::displayWasUpdated):

2018-06-07  Jer Noble  <jer.noble@apple.com>

        REGRESSION:  Cannot listen to audio on Google Translate with side switch set to "vibrate"
        https://bugs.webkit.org/show_bug.cgi?id=186415
        <rdar://problem/40584651>

        Reviewed by Eric Carlson.

        Test: platform/mac/media/audio-session-category-audio-autoplay.html

        Make sure that the PlatformMediaSession's state has already been set when calling updateSessionStates().

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

2018-06-08  Dean Jackson  <dino@apple.com>

        'setRenderPipelineState:' is unavailable: not available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=186449
        <rdar://problem/40880602>

        Reviewed by Simon Fraser.

        Be more explicit about the protocol type to avoid
        the compiler getting confused by a similar signature.

        * platform/graphics/cocoa/GPURenderCommandEncoderMetal.mm:
        (WebCore::GPURenderCommandEncoder::setRenderPipelineState):

2018-06-08  Darin Adler  <darin@apple.com>

        Fix iOS build.

        * platform/ios/QuickLookSoftLink.mm: Removed QLPreviousScheme, which I said I did in the
        change log but looks like it didn't happen.

2018-06-08  Darin Adler  <darin@apple.com>

        [Cocoa] Make more of our soft linking ARC-compatible
        https://bugs.webkit.org/show_bug.cgi?id=186437

        Reviewed by Daniel Bates.

        * editing/cocoa/DataDetection.mm:
        (WebCore::removeResultLinksFromAnchor): Fix comment referring to unused constant DDURLScheme.

        * platform/cocoa/DataDetectorsCoreSoftLink.h: Removed unused DDURLScheme.
        * platform/cocoa/DataDetectorsCoreSoftLink.mm: Ditto.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        Use SOFT_LINK_CONSTANT_MAY_FAIL for NSString constants instead of using
        SOFT_LINK_POINTER_OPTIONAL. Required moving iOS-specific items inside the
        #if PLATFORM(IOS) section.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Use the
        canLoad functions instead of checking for null to handle possibly-missing string constants.
        (WebCore::metadataType): Ditto.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Removed unused
        AVMediaTypeVideo, AVMediaTypeAudio, and AVMediaTypeText soft linking.

        * platform/ios/QuickLook.mm:
        (WebCore::isQuickLookPreviewURL): Removed unneeded assertion.

        * platform/ios/QuickLookSoftLink.h: Removed unneeded QLPreviousScheme, which was used only
        for an assertion, one we can do without.
        * platform/ios/QuickLookSoftLink.mm: Ditto.

        * platform/mediastream/mac/AVVideoCaptureSource.mm: Removed unused soft linking of
        AVCaptureVideoPreviewLayer class and AVCaptureSessionPresetLow string constant. Use
        SOFT_LINK_CONSTANT_MAY_FAIL for NSString constants instead of using
        SOFT_LINK_POINTER_OPTIONAL.
        (WebCore::AVVideoCaptureSource::initializeCapabilities): Use the canLoad functions
        instead of checking for null to handle possibly-missing string constants.
        (WebCore::sizeForPreset): Ditto.
        (WebCore::AVVideoCaptureSource::bestSessionPresetForVideoDimensions const): Ditto.

2018-06-08  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Allow TextFieldInputType to show and hide suggestions
        https://bugs.webkit.org/show_bug.cgi?id=186151

        Reviewed by Tim Horton.

        TextFieldInputTypes with a list attribute should be able to display suggestions as the user
        interacts with the input field. In order to display suggestions for an input field with a list
        attribute, we need provide certain information - including the items to suggest and the location
        to present the suggestions. TextFieldInputType can now provide this information by conforming to
        the DataListSuggestionsClient interface.

        In this initial patch, the suggestions can be shown in two ways. The first is by clicking on the
        input field. The other is by typing text in the field. In a later patch, we will add a third way
        to display suggestions, using a button. These ways to activate the suggestions are enumerated in
        DataListSuggestionInformation.

        We hide the suggestions if there are no more to show, or if the input has blurred.

        Tests to be added once work has been done in the UIProcess.

        * WebCore.xcodeproj/project.pbxproj:
        * html/DataListSuggestionInformation.h: Added. Contains the information necessary to display suggestions.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::~TextFieldInputType):
        (WebCore::TextFieldInputType::handleClickEvent): Show suggestions when the element is clicked.
        (WebCore::TextFieldInputType::handleKeydownEvent): Allow users to interact with the suggestions using the keyboard.
        (WebCore::TextFieldInputType::elementDidBlur): Hide the suggestions.
        (WebCore::TextFieldInputType::shouldRespectListAttribute):
        (WebCore::TextFieldInputType::didSetValueByUserEdit): Update the suggestions if the text has changed.
        (WebCore::TextFieldInputType::elementRectRelativeToRootView const): Provide the location where the suggestions should be shown.
        (WebCore::TextFieldInputType::suggestions const): Provide the list of suggestions.
        (WebCore::TextFieldInputType::didSelectDataListOption): Update the text once an suggestion has been selected.
        (WebCore::TextFieldInputType::didCloseSuggestions):
        (WebCore::TextFieldInputType::displaySuggestions):
        (WebCore::TextFieldInputType::closeSuggestions):
        * html/TextFieldInputType.h:
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::createDataListSuggestionPicker):
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::createDataListSuggestionPicker):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/DataListSuggestionPicker.h: Added.
        (WebCore::DataListSuggestionPicker::close):
        (WebCore::DataListSuggestionPicker::handleKeydownWithIdentifier):
        (WebCore::DataListSuggestionPicker::displayWithActivationType):
        * platform/DataListSuggestionsClient.h: Added.

2018-06-07  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(macOS Mojave): move-by-word-visually-inline-block-positioned-element.html fails
        https://bugs.webkit.org/show_bug.cgi?id=186424

        Reviewed by Wenson Hsieh.

        The test failure is ultimately caused by the change in ICU's behavior. With the CPU in the latest macOS Mojave,
        ubrk_getRuleStatus returns 200 / UBRK_WORD_LETTER at the end of a buffer given to UBreakIterator. This caused
        isWordTextBreak to return true instead of false in isLogicalStartOfWord at the end of the buffer.

        This ICU behavior shouldn't have caused a problem in theory. However, WebKit had a bug in visualWordPosition which
        caused UBreakIterator to not include the succeeding word when traversing words to the left (backwards in LTR text)
        at the beginning of the last block element with exactly one line box after an non-statically positioned element.

        In this case, visualWordPosition invokes wordBreakIteratorForMaxOffsetBoundary (because adjacentCharacterPosition
        is now at the end of the last word in the non-statically positioned element) to setup UBreakIterator. Because
        there are no line boxes left in the current line (in the last block element with exactly one line box),
        logicallyNextBox enters the while loop and invoke nextRootInlineBoxCandidatePosition to find the next root line box.
        However, the visible position given to this function is at the beginning of the first word in the block element.
        As a result, nextRootInlineBoxCandidatePosition skips over this entire line and finds no line box after the one
        we had in the non-statically positioned element.

        Let us consider the following concrete example in which a position: static div is followed by another div, and each
        div contains text nodes "hello" and "world" respectively:
        - div position: static (1)
            - "hello"
        - div (2)
            - "world"
        Suppose we're at the offset 0 of "world", and trying to move to the left. In this case, adjacentCharacterPosition is
        at offset 5 of "world". The next line box should be that of "world". However, because we invoke logicallyNextBox via
        wordBreakIteratorForMaxOffsetBoundary with the visible position at offset 0 of "world", it skips this line and return
        nullptr.

        This patch addresses this test failure by fixing visualWordPosition by passing adjacentCharacterPosition (at offset 5
        of "hello") as the visible position to find the next text box so that nextRootInlineBoxCandidatePosition invoked in
        logicallyNextBox would not skip the line ("world") from which we started the traversal to find the next line box.

        Tests: editing/selection/move-by-word-visually-inline-block-positioned-element.html

        * editing/VisibleUnits.cpp:
        (WebCore::visualWordPosition):

2018-06-08  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION (r230930): Link drag image is very blurry
        https://bugs.webkit.org/show_bug.cgi?id=186435
        <rdar://problem/40797202>

        Reviewed by Tim Horton.

        Tell NSImage the proper display scale factor it needs when performing a 'lockFocus' by passing
        the correct scaling transform as an NSImageHintCTM.

        I reviewed the other drag operations (selection, image, and attachment) and confirmed through
        manual testing that these operations already properly scale the images. It appears that links
        were the only place where we relied on NSImage to determine and use the relevant device scale
        factor.

        * SourcesCocoa.txt: Add new WebKitNSImageExtras.mm file.
        * WebCore.xcodeproj/project.pbxproj: Update for new files.
        * platform/graphics/mac/WebKitNSImageExtras.h: Added.
        * platform/graphics/mac/WebKitNSImageExtras.mm: Added.
        (-[NSImage _web_lockFocusWithTransform:]): Helper method that takes a device scale factor, creates the
        relevant scaling NSAffineTransform and passes it to the internal NSImage 'lockFocusWithRect' as the
        NSImageHintCTM hint.
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageForLink): Use the new helper function.

2018-06-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add vertical margin computation for inline, block-level, inline-block and floating replaced elements
        https://bugs.webkit.org/show_bug.cgi?id=186432

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin): Use the computed non-auto values when margin is not auto.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue):
        (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue):

2018-06-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add WorkerPool
        https://bugs.webkit.org/show_bug.cgi?id=174569

        Reviewed by Carlos Garcia Campos.

        We start using WorkerPool for NicosiaPaintingEngineThreaded instead of glib thread pool.
        This makes NicosiaPaintingEngineThreaded platform-independent and usable for WinCairo.

        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        (Nicosia::PaintingEngineThreaded::PaintingEngineThreaded):
        (Nicosia::PaintingEngineThreaded::~PaintingEngineThreaded):
        (Nicosia::PaintingEngineThreaded::paint):
        (Nicosia::s_threadFunc): Deleted.
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.h:

2018-06-08  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Wrong result when calling ImageBufferCairo's getImageData()
        https://bugs.webkit.org/show_bug.cgi?id=186384

        Reviewed by Michael Catanzaro.

        Fix calculations so the result is the expected one.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::getImageData):

2018-06-07  Fujii Hironori  <Hironori.Fujii@sony.com>

        Add base class to get WeakPtrFactory member and avoid some boilerplate code
        https://bugs.webkit.org/show_bug.cgi?id=186407
        <rdar://problem/40922716>

        Unreviewed WinCairo build fix

        MediaPlayerPrivateMediaFoundation.cpp(1726): error C2039: 'makeWeakPtr': is not a member of 'WebCore::MediaPlayerPrivateMediaFoundation'

        No new tests (No behavior change).

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

2018-06-07  Chris Dumez  <cdumez@apple.com>

        Add base class to get WeakPtrFactory member and avoid some boilerplate code
        https://bugs.webkit.org/show_bug.cgi?id=186407

        Reviewed by Brent Fulgham.

        Add CanMakeWeakPtr base class to get WeakPtrFactory member and its getter, in
        order to avoid some boilerplate code in every class needing a WeakPtrFactory.
        This also gets rid of old-style createWeakPtr() methods in favor of the newer
        makeWeakPtr().

        * Modules/credentialmanagement/CredentialsMessenger.h:
        * Modules/credentialmanagement/NavigatorCredentials.cpp:
        (WebCore::NavigatorCredentials::credentials):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::doSupportedConfigurationStep):
        (WebCore::CDM::getConsentStatus):
        * Modules/encryptedmedia/CDM.h:
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::generateRequest):
        (WebCore::MediaKeySession::load):
        (WebCore::MediaKeySession::update):
        (WebCore::MediaKeySession::close):
        (WebCore::MediaKeySession::remove):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.cpp:
        (WebCore::MediaKeys::createSession):
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/gamepad/GamepadManager.cpp:
        (WebCore::GamepadManager::platformGamepadDisconnected):
        (WebCore::GamepadManager::makeGamepadVisible):
        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices):
        * Modules/mediastream/MediaDevices.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::applyConstraints):
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/webauthn/cocoa/LocalAuthenticator.h:
        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticator::makeCredential):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::setParent):
        * crypto/SubtleCrypto.cpp:
        (WebCore::SubtleCrypto::encrypt):
        (WebCore::SubtleCrypto::decrypt):
        (WebCore::SubtleCrypto::sign):
        (WebCore::SubtleCrypto::verify):
        (WebCore::SubtleCrypto::digest):
        (WebCore::SubtleCrypto::generateKey):
        (WebCore::SubtleCrypto::deriveKey):
        (WebCore::SubtleCrypto::deriveBits):
        (WebCore::SubtleCrypto::importKey):
        (WebCore::SubtleCrypto::exportKey):
        (WebCore::SubtleCrypto::wrapKey):
        (WebCore::SubtleCrypto::unwrapKey):
        * crypto/SubtleCrypto.h:
        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::CSSFontFace):
        (WebCore::CSSFontFace::wrapper):
        (WebCore::CSSFontFace::setWrapper):
        * css/DeprecatedCSSOMValue.h:
        * css/FontFace.cpp:
        * css/FontFace.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):
        * css/StyleSheetContents.h:
        * css/parser/CSSDeferredParser.cpp:
        (WebCore::CSSDeferredParser::CSSDeferredParser):
        * dom/DataTransferItemList.cpp:
        (WebCore::DataTransferItemList::add):
        (WebCore::DataTransferItemList::ensureItems const):
        (WebCore::DataTransferItemList::didSetStringData):
        * dom/DataTransferItemList.h:
        * dom/Document.cpp:
        (WebCore::Document::postTask):
        (WebCore::Document::hasStorageAccess):
        (WebCore::Document::requestStorageAccess):
        * dom/Document.h:
        (WebCore::Document::setContextDocument):
        * dom/MessagePort.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::setPictureElement):
        * html/HTMLInputElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerCreateResourceLoader):
        * html/HTMLMediaElement.h:
        * html/HTMLPictureElement.h:
        * html/parser/HTMLResourcePreloader.h:
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::style const):
        * loader/FormState.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::preconnectIfNeeded):
        * loader/LinkLoader.h:
        * loader/LinkPreloadResourceClients.cpp:
        (WebCore::LinkPreloadResourceClient::LinkPreloadResourceClient):
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::MediaResourceLoader):
        * loader/MediaResourceLoader.h:
        * page/DOMWindow.h:
        * page/EventHandler.cpp:
        (WebCore::widgetForElement):
        (WebCore::EventHandler::updateLastScrollbarUnderMouse):
        * platform/GenericTaskQueue.cpp:
        (WebCore::TaskDispatcher<Timer>::postTask):
        * platform/GenericTaskQueue.h:
        (WebCore::GenericTaskQueue::enqueueTask):
        (WebCore::GenericTaskQueue::cancelAllTasks):
        * platform/ScrollView.h:
        * platform/ScrollableArea.h:
        * platform/Scrollbar.h:
        * platform/Widget.cpp:
        (WebCore::Widget::setParent):
        * platform/Widget.h:
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::decodeAudioForBusCreation):
        * platform/audio/mac/AudioHardwareListenerMac.cpp:
        (WebCore::AudioHardwareListenerMac::AudioHardwareListenerMac):
        * platform/audio/mac/AudioHardwareListenerMac.h:
        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::requestLicense):
        (WebCore::CDMInstanceClearKey::updateLicense):
        (WebCore::CDMInstanceClearKey::loadSession):
        (WebCore::CDMInstanceClearKey::closeSession):
        (WebCore::CDMInstanceClearKey::removeSessionData):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:
        * platform/graphics/FontCascade.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didProvideRequest):
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        (WebCore::CDMSessionAVFoundationObjC::CDMSessionAVFoundationObjC):
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::checkPlayability):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createSession):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::requestNotificationWhenReadyForVideoData):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::scheduleDeferredTask):
        * platform/graphics/cv/TextureCacheCV.h:
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore::DisplayRefreshMonitorMac::displayLinkFired):
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setMaskLayer):
        (WebCore::TextureMapperLayer::setReplicaLayer):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::endCreatedMediaSource):
        (WebCore::MediaPlayerPrivateMediaFoundation::endGetEvent):
        (WebCore::MediaPlayerPrivateMediaFoundation::CustomVideoPresenter::processInputNotify):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.h:
        * platform/ios/RemoteCommandListenerIOS.h:
        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListenerIOS::RemoteCommandListenerIOS):
        * platform/mac/RemoteCommandListenerMac.h:
        * platform/mac/RemoteCommandListenerMac.mm:
        (WebCore::RemoteCommandListenerMac::RemoteCommandListenerMac):
        * platform/mediastream/MediaStreamPrivate.cpp:
        (WebCore::MediaStreamPrivate::scheduleDeferredTask):
        * platform/mediastream/MediaStreamPrivate.h:
        * platform/mediastream/RealtimeMediaSource.cpp:
        (WebCore::RealtimeMediaSource::scheduleDeferredTask):
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        * platform/vr/VRPlatformDisplay.h:
        * platform/vr/openvr/VRPlatformManagerOpenVR.cpp:
        (WebCore::VRPlatformManagerOpenVR::getVRDisplays):
        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::setOriginatingLine):
        * rendering/RenderObject.h:
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathSegWithContext.h:
        (WebCore::SVGPathSegWithContext::SVGPathSegWithContext):
        (WebCore::SVGPathSegWithContext::setContextAndRole):
        * svg/SVGTransformList.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedListPropertyTearOff::animVal):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        * svg/properties/SVGMatrixTearOff.h:
        * svg/properties/SVGPropertyTearOff.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::createCDM):
        (WebCore::MockCDM::createInstance):
        * testing/MockCDMFactory.h:
        * workers/service/ExtendableEvent.h:
        * workers/service/FetchEvent.cpp:
        (WebCore::FetchEvent::respondWith):
        * workers/service/server/SWServer.h:
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::DOMParser):

2018-06-07  Chris Dumez  <cdumez@apple.com>

        PopStateEvent should not be cancelable by default
        https://bugs.webkit.org/show_bug.cgi?id=186420

        Reviewed by Darin Adler.

        PopStateEvent should not be cancelable by default:
        - https://github.com/web-platform-tests/wpt/pull/11355
        - https://html.spec.whatwg.org/#history-traversal

        All other browsers agree with the specification.

        No new tests, updated existing tests.

        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent):

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

        Remove a log that was left in by mistake.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):

2018-06-07  Antoine Quint  <graouts@apple.com>

        [ASan / StressGC] DumpRenderTree crashed in com.apple.WebCore: WebCore::EventTarget::ref + 16
        https://bugs.webkit.org/show_bug.cgi?id=186207
        <rdar://problem/40568747>

        Reviewed by Dean Jackson.

        Ensure that we clear the DOM event queue for declarative animations once an animation is cleared for
        an element since the element can be deleted before events get dispatched asynchronouly for this animation.

        We also only call AnimationTimeline::removeAnimationsForElement() from RenderTreeUpdater::tearDownRenderers()
        in the case where we're tearing down the whole document as otherwise this would yield early clearing of the event
        queue in the case where an element would get a "display: none" style.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::removeAnimationsForElement):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::~DeclarativeAnimation):
        (WebCore::DeclarativeAnimation::prepareAnimationForRemoval):
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::prepareAnimationForRemoval):
        * animation/WebAnimation.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-06-07  Don Olmstead  <don.olmstead@sony.com>

        [CoordGraphics] Fix compilation errors around USE(COORDINATED_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=186374

        Reviewed by Žan Doberšek.

        No new tests. No change in behavior.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileScrollingState):
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        * page/scrolling/coordinatedgraphics/ScrollingTreeFixedNode.cpp:
        * page/scrolling/coordinatedgraphics/ScrollingTreeStickyNode.cpp:
        * platform/PlatformWheelEvent.h:
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp:
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:

2018-06-07  Thibault Saunier  <tsaunier@igalia.com> and Alejandro G. Castro  <alex@igalia.com>

        [GTK][WPE] Start implementing MediaStream API
        https://bugs.webkit.org/show_bug.cgi?id=185787

        Reviewed by Philippe Normand.

        We are adding all the required classes to make the
        MediaStream API work, that means our own RealtimeMediaSourceCenterLibWebRTC
        for the platform, the GStreamerCaptureDeviceManager, the audio/video capturers
        and their respective audio/video sources as well as a dedicated GStreamer Source
        that adds support for using MediaStream stream inside playbin3.
        We are using the GstDeviceMonitor to list devices on the devices.

        Enable mediastream tests.

        * platform/GStreamer.cmake: Added the new files to the compilation.
        * platform/audio/AudioStreamDescription.h: Added new GStreamer type.
        * platform/audio/PlatformAudioData.h: Added new GStreamer type for
        the GStreamerAudioData class.
        * platform/graphics/gstreamer/GStreamerCommon.cpp:
        (WebCore::simpleBusMessageCallback): This function and the next
        one help us to connect a monitoring callback to a pipeline for
        debugging.
        (WebCore::connectSimpleBusMessageCallback): Ditto.
        * platform/graphics/gstreamer/GStreamerCommon.h: Ditto
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Make use of the loadFull() method.
        (WebCore::MediaPlayerPrivateGStreamer::loadFull): Very similar to load()
        but allows specifying what pipeline type to use (null to let the function determine
        which one should be used). This is required as we force to always use playbin3 for the
        mediastream source as it relies on the GstStream API.
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const): Style fix.
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize const): Added, use MediaStream specific information if available.
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Some style fixes.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Enhance dotfiles names.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry): Minor formatting fix.
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup): Set MediaStream on WebKitMediaStreamSource when setting it up.
        (WebCore::MediaPlayerPrivateGStreamer::supportsType): Advertise that we support MediaStream if support is built.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Make sure playbin3 is forced when loading a MediaStream.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add a reference to the MediaStream object and declare loadFull and naturalSize override.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::registerWebKitGStreamerElements): Register the new MediaStreamSrc element.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer): Make sure that MediaStream MAIN tracks are selected by default. We have no way to do it in MediaStreamSrc now as the GstStreamCollection is recreated by parsebin.
        * platform/mediastream/RealtimeMediaSource.h: Make CaptureFailed a virtual method as in our mocks we require need to make
        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::singleton): Remove the code
        used for compilation for the platform when we do not have a
        RealtimeMediaSourceCenterLibWebRTC. Now we return the proper class
        for the platform.
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
        Added class representing the RealtimeMediaSource for the Audio
        with GStreamer.
        * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
        Ditto.
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.cpp: Added
        this class that represents the GStreamer pipeline that captures
        audio from the system devices, it inherits from GStreamerCapturer.
        * platform/mediastream/gstreamer/GStreamerAudioCapturer.h: Dito.
        * platform/mediastream/gstreamer/GStreamerAudioData.h: Added this
        class implementing PlatformAudioData for the GStreamer platform,
        used to pass the samples information.
        * platform/mediastream/gstreamer/GStreamerAudioStreamDescription.h:
        Added this class implementing AudioStreamDescription to export the
        information about the audio stream to libwebrtc.
        * platform/mediastream/gstreamer/GStreamerCaptureDevice.h: Added
        this base class for the audio and video capturing devices, it
        implements general WebKit CaptureDevice class.
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
        Added this class that implements the system monitor to get the
        list of available devices in the system. It uses GstDeviceMonitor
        to handle the operation. It uses two singleton device managers one
        for audio and another one for video, as required by the
        RealtimeMediaSourceCenter design.
        * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h: Ditto.
        * platform/mediastream/gstreamer/GStreamerCapturer.cpp: Added this
        base class representing how GStreamer captures the media from the
        input devices in the system. Two classes inherit from this one to
        capture audio and video. It setups the GStreamer pipeline and adds
        functions to control it.
        * platform/mediastream/gstreamer/GStreamerCapturer.h: Ditto.
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: Added.
        Implements a subclass of GstBin as a source element that will contain several
        GstAppSrc, basically one per MediaStreamTrackPrivate of the MediaStreamPrivate
        passed in parameter. It adds Observers on the MediaStreamTracks and
        pushes the data to the sources as required. The element implements the GstURIHandler
        interface so it can be used in playbin. The MediaPlayerPrivateGStreamer is responsible
        for passing the MediaStreamPrivate object to the source when required.
        (WebCore::webkitMediaStreamSrcPadProbeCb): Event probe that fixes stream_start events (setting the ID etc)
        and finally add src pads to the pipeline.
        * platform/mediastream/gstreamer/GStreamerMediaStreamSource.h: Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
        Added this RealtimeMediaSource representing the source of the
        video data for the GStreamer platform. It handles the settings and
        capabilities of the source and creates the capturer used to
        control the operation of the stream.
        * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h: Ditto.
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp: Added
        this class that inherits from the GStreamerCapturer and controls
        the GStreamer pipelines of the video streams of the system.
        * platform/mediastream/gstreamer/GStreamerVideoCapturer.h: Ditto.
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.cpp: Added. Implementation of a Mock capturer for audio stream.
        Subclasses GStreamerAudioCapturer and wraps a MockRealtimeAudioSource so that the behaviour is the same a MockRealtimeAudioSource
        but still the GStreamer implementation code paths are tested.
        * platform/mediastream/gstreamer/MockGStreamerAudioCaptureSource.h: Ditto.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.cpp: Added. Implementation of a Mock capturer for video stream.
        Subclasses GStreamerVideoCapturer and wraps a MockRealtimeVideoSource so that the behaviour is the same a MockRealtimeVideoSource
        but still the GStreamer implementation code paths are tested.
        * platform/mediastream/gstreamer/MockGStreamerVideoCaptureSource.h: Ditto.
        * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
        Added this class that implements the key RealtimeMediaSourceCenter
        functions to configure the base class for the platform, using the
        other GStreamer classes.
        * platform/mock/MockRealtimeAudioSource.cpp: Do not build ::create if GStreamer implementation is built
        * platform/mock/MockRealtimeVideoSource.cpp: Do not build ::create if GStreamer implementation is built

2018-06-07  Brent Fulgham  <bfulgham@apple.com>

        Handle Storage Access API calls in the absence of an attached frame
        https://bugs.webkit.org/show_bug.cgi?id=186373
        <rdar://problem/40028265>

        Reviewed by Daniel Bates.

        Tests: http/tests/storageAccess/has-storage-access-crash.html
               http/tests/storageAccess/request-storage-access-crash.html

        The new frame-specific storage access checks were done without confirming a
        frame was present, although the frame state was validated in other parts of
        the same method.
        
        This patch checks for a non-null frame before making frame-specific calls.

        * dom/Document.cpp:
        (WebCore::Document::hasStorageAccess):
        (WebCore::Document::requestStorageAccess):

2018-06-07  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge height and vertical margin computation
        https://bugs.webkit.org/show_bug.cgi?id=186394

        Reviewed by Antti Koivisto.

        To match the spec (and the width/horizontal margin computation). -currently with default values.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeightAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin):
        (WebCore::Layout::outOfFlowNonReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHeight): Deleted.
        (WebCore::Layout::floatingNonReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeight): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeightAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeHeight const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeight): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeight): Deleted.

2018-06-07  Antti Koivisto  <antti@apple.com>

        Don't start service worker fetch when there is substitute data
        https://bugs.webkit.org/show_bug.cgi?id=186349
        <rdar://problem/38881568>

        Reviewed by Youenn Fablet.

        Loading content via WKWebView.loadData may also end up starting a main resource service worker fetch.
        This breaks DocumentWriter assumptions.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::tryLoadingRequestFromApplicationCache):
        (WebCore::DocumentLoader::tryLoadingSubstituteData):

        Factor substitute resource loading out from tryLoadingRequestFromApplicationCache.

        (WebCore::DocumentLoader::startLoadingMainResource):

        If we have substitute data already (typically from WKWebView.loadData), allow service worker registration
        but load the main resource using the substitute data.

        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon): Deleted.

        Merge to tryLoadingSubstituteData.

        * loader/DocumentLoader.h:

2018-06-07  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix the way GstStreamCollection is handled
        https://bugs.webkit.org/show_bug.cgi?id=184588

        Reviewed by Philippe Normand.

        The stream collection message replaces the collection of stream previously
        advertised, this means that we should rebuild our set of Track from scratch
        and not update previously exposed tracks.

        In the end, this simplifies the code as we do not care about what
        tracks existed previously, we just need to expose what GStreamer tells
        us, deleting any previous state.

        Handle the STREAM_COLLECTION message from the sync handler so that tracks
        are updated before we mark the pipeline as READY for the live case (everything
        happen synchronously with the call to the `load()` method in that case),
        the update still always happens on the main thread.

        No new tests is added as this is mostly refactoring, it is already tested and it
        will fix MediaStream tests that are currently disabled as the support is being
        implemented in #185787.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::clearTracks): Removes all tracks.
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Updates configured tracks from the new GstStreamColection track.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Stop handling GST_STREAM_COLLECTION event.
        (WebCore::MediaPlayerPrivateGStreamer::handleSyncMessage): Handle stream collection event synchronously.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add handleSyncMessage

2018-06-07  Michael Catanzaro  <mcatanzaro@igalia.com>

        Remove unused image encoders
        https://bugs.webkit.org/show_bug.cgi?id=186365

        Reviewed by Carlos Garcia Campos.

        * platform/image-encoders/JPEGImageEncoder.cpp: Removed.
        * platform/image-encoders/JPEGImageEncoder.h: Removed.
        * platform/image-encoders/PNGImageEncoder.cpp: Removed.
        * platform/image-encoders/PNGImageEncoder.h: Removed.

2018-06-06  Youenn Fablet  <youenn@apple.com>

        HTTP Header values validation is too strict
        https://bugs.webkit.org/show_bug.cgi?id=167112

        Reviewed by Alex Christensen.

        Moving header values and names from DOMString to ByteString as per spec.
        Updating WebCore::isValidHTTPHeaderValue as per https://fetch.spec.whatwg.org/#terminology-headers.

        Covered by rebased and updated tests.
        Updated test is now also passing in other browsers.

        * platform/network/HTTPParsers.cpp:
        (WebCore::isValidHTTPHeaderValue):

2018-06-06  Youenn Fablet  <youenn@apple.com>

        Add Accept-Encoding: identity to Range requests
        https://bugs.webkit.org/show_bug.cgi?id=186335
        <rdar://problem/40837190>

        Reviewed by Eric Carlson.

        Tests: imported/w3c/web-platform-tests/fetch/range/general.any.html
               imported/w3c/web-platform-tests/fetch/range/general.any.worker.html

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateAcceptEncodingHeader):
        * loader/cache/CachedResourceRequest.h:

2018-06-06  Per Arne Vollan  <pvollan@apple.com>

        Display links are sometimes not notifying WebCore when fired.
        https://bugs.webkit.org/show_bug.cgi?id=186367
        <rdar://problem/40439109>

        Reviewed by Brent Fulgham.

        When the WebContent process is receiving an IPC message notifying about a screen update, all display refresh monitors
        are notified by the manager in DisplayRefreshMonitorManager::displayWasUpdated(). The manager checks that the monitor
        is scheduled before notifying. This is a problem, since the scheduled flag is always set to false in the
        DisplayRefreshMonitor::displayDidRefresh() method, when the monitor is first notified about a screen update. This can
        lead to display links running without notifying the monitors, causing extra CPU usage. It can also prevent them from
        being deleted, since the monitors are not notified. Instead, we can check that the display refresh monitor is active
        before notifying it. This matches the original display link implementation used when the WebContent process has
        WindowServer access, where the monitors are always notified.

        No new tests, since I have not been able to reproduce this in a test case yet.

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

2018-06-06  Antoine Quint  <graouts@apple.com>

        Rename color-filter to -apple-color-filter and do not expose it to Web content
        https://bugs.webkit.org/show_bug.cgi?id=186306
        <rdar://problem/39874167>

        Reviewed by Simon Fraser.

        Rename the color-filter CSS property to -apple-color-filter.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::checkForMatchingColorFilterFunctionLists):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::computeStops):
        (WebCore::CSSGradientValue::knownToBeOpaque const):
        * css/CSSProperties.json:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::checkForMatchingColorFilterFunctionLists):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::checkForMatchingColorFilterFunctionLists):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint const):
        (WebCore::RenderStyle::visitedDependentColorWithColorFilter const):
        (WebCore::RenderStyle::colorByApplyingColorFilter const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::mutableAppleColorFilter):
        (WebCore::RenderStyle::appleColorFilter const):
        (WebCore::RenderStyle::hasAppleColorFilter const):
        (WebCore::RenderStyle::setAppleColorFilter):
        (WebCore::RenderStyle::initialAppleColorFilter):
        (WebCore::RenderStyle::mutableColorFilter): Deleted.
        (WebCore::RenderStyle::colorFilter const): Deleted.
        (WebCore::RenderStyle::hasColorFilter const): Deleted.
        (WebCore::RenderStyle::setColorFilter): Deleted.
        (WebCore::RenderStyle::initialColorFilter): Deleted.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        (WebCore::StyleRareInheritedData::hasColorFilters const):
        * rendering/style/StyleRareInheritedData.h:

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

        REGRESSION (r231817?): Layout Test media/track/track-delete-during-setup.html is a flaky timeout
        https://bugs.webkit.org/show_bug.cgi?id=185889
        <rdar://problem/40583180>

        Reviewed by Eric Carlson.

        Explicitly update the network and ready states when detaching the AVPlayerItem
        from the AVPlayer.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData):

2018-06-06  Antoine Quint  <graouts@apple.com>

        Use the default label for snapshotted plug-ins if no mime-type is available
        https://bugs.webkit.org/show_bug.cgi?id=186348

        Reviewed by Jon Lee.

        In case the mime-type is not available, use the default labels otherwise we'd crash trying to look up the empty string in the HashMap.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::titleText):
        (WebCore::subtitleText):

2018-06-06  Timothy Hatcher  <timothy@apple.com>

        Wrong NSVisualEffectMaterial used for exit full screen overlay in dark mode.

        https://bugs.webkit.org/show_bug.cgi?id=186350
        rdar://problem/39135535

        Reviewed by Anders Carlsson.

        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        (-[WebCoreFullScreenPlaceholderView initWithFrame:]):
        Use the NSVisualEffectMaterialFullScreenUI on macOS 10.14 and don't
        set an explicit NSAppearance.

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

        Regions outside of the fullscreen window are exposed during zoom operations
        https://bugs.webkit.org/show_bug.cgi?id=186330
        <rdar://problem/34698009>

        Reviewed by Simon Fraser.

        Test: fullscreen/full-screen-layer-dump.html

        Introduce the concept of "requiresBackgroundLayer" to RenderLayerBacking, for use by
        RenderFullScreen. Previously, the backgroundLayer in RenderLayerBacking was only used
        by the root renderer with fixed backgrounds. Give the RenderFullScreen a background layer
        that's approximately 3x as tall and wide as the renderer itself, so nothing is exposed
        during pinch operations.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::updateConfiguration):
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::RenderLayerBacking::updateDrawsContent):
        (WebCore::RenderLayerBacking::setRequiresBackgroundLayer):
        (WebCore::RenderLayerBacking::updateBackgroundLayer):
        (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundColor):
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLayerBacking.h:

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

        Set the AVAssetResourceLoaderRequest's contentType to AVStreamingKeyDeliveryContentKeyType in the case of a FPS key request.
        https://bugs.webkit.org/show_bug.cgi?id=186328
        <rdar://problem/40829228>

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::attemptToDecryptWithInstance):

2018-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add margin computation for floating, replaced elements.
        https://bugs.webkit.org/show_bug.cgi?id=186337

        Reviewed by Antti Koivisto.

        If 'margin-left' or 'margin-right' are computed as 'auto', their used value is '0'.

        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):

2018-06-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add margin computation for floating, no-replaced elements.
        https://bugs.webkit.org/show_bug.cgi?id=186334

        Reviewed by Antti Koivisto.

        If 'margin-left', or 'margin-right' are computed as 'auto', their used value is '0'.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):

2018-06-06  Antti Koivisto  <antti@apple.com>

        Use minimal coverage rect for tiled layers when under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=186185
        <rdar://problem/40713608>

        Reviewed by Darin Adler.

        We do this for the main content layer already.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::adjustTiledLayerVisibleRect):

2018-06-05  Antoine Quint  <graouts@apple.com>

        [Web Animations] Only expose CSSAnimation and CSSTransition if the WebAnimationsCSSIntegration runtime flag is enabled
        https://bugs.webkit.org/show_bug.cgi?id=186305

        Reviewed by Dean Jackson.

        * animation/CSSAnimation.idl:
        * animation/CSSTransition.idl:

2018-06-05  Per Arne Vollan  <pvollan@apple.com>

        Move OpenGL display mask to screen data struct.
        https://bugs.webkit.org/show_bug.cgi?id=186198
        <rdar://problem/40724854>

        Reviewed by Brent Fulgham.

        Currently, the OpenGL display mask is a global in the WebContent process. This is not correct in all cases, since
        it is possible to have two Web views in the same WebContent process, displayed on different displays. This can be
        resolved by moving the OpenGL display mask to a new ScreenData struct, containing information specific to each
        display. The display ID of the host window is used to find the OpenGL display mask when needed. This patch makes
        the host window available when creating an IOSurface, in order to find the right OpenGL display mask. If no host
        window is available, the OpenGL display mask of the main display is used.

        No new tests, since testing this requires two Web views in the same WebContent process, displayed on
        two different monitors.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer const):
        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const):
        (WebCore::ScreenProperties::decode):
        (WebCore::ScreenData::encode const):
        (WebCore::ScreenData::decode):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::create):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::allowOfflineRenderers const):
        (WebCore::GraphicsContext3D::setOpenGLDisplayMask): Deleted.
        (WebCore::GraphicsContext3D::getOpenGLDisplayMask): Deleted.
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenProperties):
        (WebCore::collectScreenProperties):
        (WebCore::setScreenProperties):
        (WebCore::screenData):
        (WebCore::primaryOpenGLDisplayMask):
        (WebCore::displayMaskForDisplay):
        (WebCore::getScreenProperties):
        (WebCore::screenIsMonochrome):
        (WebCore::screenHasInvertedColors):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenRectForDisplay):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenColorSpace):
        (WebCore::screenSupportsExtendedColor):

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

        REGRESSION (231817): Videos permanently blank out after switching out of a tab and back in
        https://bugs.webkit.org/show_bug.cgi?id=186326
        <rdar://problem/40778157>

        Reviewed by Eric Carlson.

        Check whether the element is visible in the viewport when the web view itself becomes visible, and if so, clear the m_elementIsHiddenUntilVisibleInViewport flag.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::visibilityChanged):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

2018-06-05  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move inflow, replaced width and margin computation to a dedicated function.
        https://bugs.webkit.org/show_bug.cgi?id=186327

        Reviewed by Sam Weinig.

        I was searching for the function inFlowReplacedWidthAndMargin() and there was none.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):

2018-06-05  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add missing margins for inflow, non replaced block and replaced inline elements
        https://bugs.webkit.org/show_bug.cgi?id=186332

        Reviewed by Darin Adler.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):

2018-06-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Spelling errors in the middle of an inserted paragraph are not displayed
        https://bugs.webkit.org/show_bug.cgi?id=185584
        <rdar://problem/38676081>

        Reviewed by Ryosuke Niwa.

        Currently when typing, we only consider the range of adjacent words when determining where to place spelling
        correction markers, even though we provide NSSpellChecker with the full context of the sentence (and get back
        results encompassing the full range). In macOS Mojave, NSSpellChecker may now return spell checking results that
        include correctly spelled words that are misused in the context of the sentence. This means that while typing a
        sentence, a different part of the sentence may gain or lose spelling markers as a result.

        To support this, WebKit needs to mark or unmark spelling corrections in the full range of the sentence whenever
        a full word is typed (since the context of other words within the sentence may have changed, resulting in
        different platform spellchecking results). In markMisspellingsAfterTypingToWord, we expand the spell checking
        range past the adjacent words so that it encompasses the largest subrange of the full sentence that includes the
        start of the typed word, and does not include any position that is under an element with `spellcheck=false`.

        This guarantees that we don't erroneously place spelling document markers under elements where spellchecking is
        disabled, while allowing for sentence retro corrections when spellchecking is enabled. However, this doesn't
        handle the case where an element with spellchecking disabled lies between a sentence retro correction range and
        the currently typed word. In the future, we could fix this by refactoring SpellCheckRequest to track a list of
        non-contiguous spelling correction ranges — see the FIXME in markMisspellingsAfterTypingToWord for more detail.

        Covered by 2 new layout tests, as well as an existing spell-checking test that should now be passing.

        Tests: editing/spelling/retro-correction-spelling-markers.html
               editing/spelling/spelling-markers-after-pasting-sentence.html

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        * testing/Internals.h:
        * testing/Internals.idl:

        Add an internal testing helper to determine whether retro sentence corrections are enabled.

2018-06-05  Darin Adler  <darin@apple.com>

        [Cocoa] Retire DispatchPtr, and add more move semantics and simpler #ifs to other smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=186324

        Reviewed by Anders Carlsson.

        * platform/FileMonitor.h: Use OSObjectPtr instead of DispatchPtr.
        * platform/cocoa/FileMonitorCocoa.mm:
        (WebCore::FileMonitor::FileMonitor): Ditto.

2018-06-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, fix the macOS build with recent SDKs.

        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::paintContents):

2018-06-05  Brent Fulgham  <bfulgham@apple.com>

        Adjust compile and runtime flags to match shippable state of features
        https://bugs.webkit.org/show_bug.cgi?id=186319
        <rdar://problem/40352045>

        Reviewed by Maciej Stachowiak, Jon Lee, and others.

        * Configurations/FeatureDefines.xcconfig: Don't build ENABLE_INPUT_TYPE_COLOR
        or ENABLE_INPUT_TYPE_COLOR_POPOVER.

2018-06-05  Timothy Hatcher  <timothy@apple.com>

        Clean up LocalDefaultSystemAppearance and prefers-dark-interface media query

        https://bugs.webkit.org/show_bug.cgi?id=186323
        rdar://problem/38382252

        Reviewed by Tim Horton.

        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersDarkInterfaceEvaluate):
        (WebCore::defaultAppearanceEvaluate): Deleted.
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):

2018-06-05  Darin Adler  <darin@apple.com>

        [Cocoa] Improve some soft linking compatibility with ARC
        https://bugs.webkit.org/show_bug.cgi?id=186309

        Reviewed by Anders Carlsson.

        * platform/audio/ios/AudioSessionIOS.mm: Use SOFT_LINK_CONSTANT instead of SOFT_LINK_POINTER
        for NSString constants.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Ditto.
        * platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm: Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::synchronizeTextTrackState): Use __bridge for
        some bridging casts.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: Use
        SOFT_LINK_CONSTANT instead of SOFT_LINK_POINTER for NSString constants.
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm: Ditto.
        * platform/mediastream/mac/AVCaptureDeviceManager.mm: Ditto.
        * platform/mediastream/mac/AVMediaCaptureSource.mm: Ditto.
        * platform/mediastream/mac/AVVideoCaptureSource.mm: Ditto.

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

        ServiceWorker registration should store any script fetched through importScripts
        https://bugs.webkit.org/show_bug.cgi?id=182444
        <rdar://problem/37164835>

        Reviewed by Chris Dumez.

        Covered by added test http/wpt/service-workers/persistent-importScripts.html.

        Update importScripts implementation to look for/update the resource map in case of service worker scope.
        This resource map is stored persistently and sent when running the service worker.

        Add support to persistent storage of this resource map.
        This requires updating the schema database.
        The schema version is bumped to 2 and we delete any data related to old registrations.

        When updating the service worker, the resource map is currently flushed so that all scripts will be retrieved from the network.

        Did some limited refactoring to put more loading handling in WorkerScriptLoader.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::script):
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::ImportedScript::isolatedCopy const):
        (WebCore::ServiceWorkerContextData::ImportedScript::encode const):
        (WebCore::ServiceWorkerContextData::ImportedScript::decode):
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::scriptResource const):
        (WebCore::ServiceWorkerGlobalScope::setScriptResource):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/context/SWContextManager.h:
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::v1RecordsTableSchema):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::updateWorker):
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::setScriptResource):
        * workers/service/server/SWServerToContextConnection.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::m_scriptResourceMap):
        (WebCore::SWServerWorker::contextData const):
        (WebCore::SWServerWorker::setScriptResource):
        * workers/service/server/SWServerWorker.h:

2018-06-05  Brent Fulgham  <bfulgham@apple.com>

        Revise DEFAULT_EXPERIMENTAL_FEATURES_ENABLED to work properly on Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=186286
        <rdar://problem/40782992>

        Reviewed by Dan Bernstein.

        Use the WK_RELOCATABLE_FRAMEWORKS flag (which is always defined for non-production builds)
        to define ENABLE(EXPERIMENTAL_FEATURES) so that we do not need to manually
        change this flag when preparing for a production release.

        * Configurations/FeatureDefines.xcconfig: Use WK_RELOCATABLE_FRAMEWORKS to determine
        whether experimental features should be enabled, and use it to properly define the
        feature flag.

2018-06-05  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r232511.
        https://bugs.webkit.org/show_bug.cgi?id=186304

        * platform/ios/WebItemProviderPasteboard.mm: Add missing include.

2018-06-05  Antoine Quint  <graouts@apple.com>

        Fix the iOS build after r232496
        https://bugs.webkit.org/show_bug.cgi?id=186304

        Reviewed by Brent Fulgham.

        The changes in r232496 changed the InputType::element() signature from HTMLInputElement&
        to HTMLInputElement* and some call sites did not expect that.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::didChooseValue):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeydownEvent):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleKeypressEvent):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::accessKeyAction):
        (WebCore::BaseChooserOnlyDateAndTimeInputType::isMouseFocusable const):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::setValueAsDate const):
        (WebCore::BaseDateAndTimeInputType::valueAsDouble const):
        (WebCore::BaseDateAndTimeInputType::setValueAsDecimal const):
        (WebCore::BaseDateAndTimeInputType::typeMismatch const):
        (WebCore::BaseDateAndTimeInputType::serializeWithComponents const):
        (WebCore::BaseDateAndTimeInputType::localizeValue const):
        (WebCore::BaseDateAndTimeInputType::visibleValue const):
        (WebCore::BaseDateAndTimeInputType::valueMissing const):
        (WebCore::BaseDateAndTimeInputType::isKeyboardFocusable const):
        * html/DateInputType.cpp:
        (WebCore::DateInputType::createStepRange const):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::createStepRange const):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::valueAsDate const):
        (WebCore::MonthInputType::createStepRange const):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::createStepRange const):
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::createStepRange const):

2018-06-03  Darin Adler  <darin@apple.com>

        Simplify and remove some unused video element code (helpful for ARC-compatibility)
        https://bugs.webkit.org/show_bug.cgi?id=186258

        Reviewed by Daniel Bates.

        My main mission was to remove the PlatformMedia struct, which had a union
        of Objective-C object pointers in it, which doesn't work in ARC. However, I
        found some other unused code to remove and simple mistakes to fix.

        * Modules/mediasource/VideoPlaybackQuality.cpp:
        (WebCore::VideoPlaybackQuality::create): Use unsigned instead of unsigned long,
        since IDL "unsigned long" really means unsigned.
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality): Ditto.
        * Modules/mediasource/VideoPlaybackQuality.h: Updated for the above.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::platformMedia const): Deleted.
        * html/HTMLMediaElement.h: Updated for the above.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer): Moved initialization of many data members
        to the class definition.
        (WebCore::MediaPlayer::load): Use nullptr instead of 0.
        (WebCore::MediaPlayer::platformMedia const): Deleted.
        (WebCore::MediaPlayer::videoPlaybackQualityMetrics): Updated name of return type.
        (WebCore::MediaPlayer::objCAVFoundationAVPlayer const): Added. Replaces
        platformMedia for the one case where it was being used.
        * platform/graphics/MediaPlayer.h: Removed unneeded includes. Re-sorted things.
        Updated for the above. Removed PlatformMedia struct and NoPlatformMedia constant.
        Removed explicit constructor in MediaEngineSupportParameters. Renamed
        PlatformVideoPlaybackQualityMetrics struct to VideoPlaybackQualityMetrics,
        removed its constructor, and changed types from unsigned long to unsigned.
        Un-nested #if statements. Removed some Chromium-specific comments.

        * platform/graphics/MediaPlayerPrivate.h: Removed unneeded includes and
        forward declarations. Removed platformMedia. Updated return type for
        videoPlaybackQualityMetrics. Added objCAVFoundationAVPlayer.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        Removed platformMedia.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::platformMedia const): Deleted.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        Updated for the above.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        Added override of objCAVFoundationAVPlayer. Removed platformMedia.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMedia const): Deleted.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        Removed platformMedia. Updated return type for videoPlaybackQualityMetrics.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformMedia const): Deleted.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::videoPlaybackQualityMetrics):
        Updated return type, changed to use aggregate initialization instead of
        calling a constructor, and added casts to unsigned.

        * platform/graphics/cocoa/WebCoreDecompressionSession.h: Switched from
        unsigned long to unsigned for frame counts and from long to int for
        quality of service tier.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::platformMedia): Deleted.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Updated for the above.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        Removed videoPlaybackQualityMetrics since it was overriding a derived function
        without changing its behavior, and the type has changed.

        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::load): Pass two references.
        (WebCore::MockMediaPlayerMediaSource::videoPlaybackQualityMetrics):
        Updated return type.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h: Updated for the above.

        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::create): Return a Ref, take references.
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Moved most data
        member initialization into the class definition. Take references.
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate): Use a modern for loop.
        (WebCore::MockMediaSourcePrivate::durationChanged): Update since m_player is a
        reference.
        (WebCore::MockMediaSourcePrivate::markEndOfStream): Ditto.
        (WebCore::MockMediaSourcePrivate::readyState): Ditto.
        (WebCore::MockMediaSourcePrivate::setReadyState): Ditto.
        (WebCore::MockMediaSourcePrivate::waitForSeekCompleted): Ditto.
        (WebCore::MockMediaSourcePrivate::seekCompleted): Ditto.
        (WebCore::MockMediaSourcePrivate::removeSourceBuffer): Use Vector::removeFirst
        instead of find/remove pairs.
        (WebCore::MockMediaSourcePrivate::sourceBufferPrivateDidChangeActiveState): Ditto.
        (WebCore::MockMediaSourcePrivate::seekToTime): Use modern for loop.
        (WebCore::MockMediaSourcePrivate::videoPlaybackQualityMetrics): Updated return
        type, changed to use aggregate initialization instead of calling a constructor.
        * platform/mock/mediasource/MockMediaSourcePrivate.h: Updated for the above.

        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::readyState): Updated since player is now
        a reference.
        (WebCore::MockSourceBufferPrivate::setReadyState): Ditto.

2018-06-04  Darin Adler  <darin@apple.com>

        [Cocoa] Improve smart pointer support for ARC (OSObjectPtr/DispatchPtr)
        https://bugs.webkit.org/show_bug.cgi?id=186300

        Reviewed by Daniel Bates.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm: Removed unnecessary
        include of OSObjectPtr.h.
        * platform/ios/WebItemProviderPasteboard.mm: Ditto.

2018-06-05  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for new blockquote, caption, and paragraph ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=186274

        Reviewed by Chris Fleizach.

        Add the three new ARIA roles to the internal rolemap so that they are treated in
        the same fashion as their HTML element counterparts. Also ensure that an element
        with an explicit caption role does not get pruned from the macOS accessibility tree.

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

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject const):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):

2018-06-05  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge width and margin computation for block-level, replaced elements in normal flow
        https://bugs.webkit.org/show_bug.cgi?id=186270

        Reviewed by Sam Weinig.

        https://www.w3.org/TR/CSS22/visudet.html#block-replaced-width
        10.3.4 Block-level, replaced elements in normal flow

        The used value of 'width' is determined as for inline replaced elements.
        Then the rules for non-replaced block-level elements are applied to determine the margins.

        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):

2018-06-04  Enrique Ocaña González  <eocanha@igalia.com>

        [GStreamer][MSE] MediaPlayerPrivateGStreamerMSE.h includes and forward declares PlaybackPipeline
        https://bugs.webkit.org/show_bug.cgi?id=186190

        Reviewed by Xabier Rodriguez-Calvar.

        This is just a compilation improvement.

        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:

2018-06-03  Darin Adler  <darin@apple.com>

        [Cocoa] Update more code to be more ARC-compatible to prepare for future ARC adoption
        https://bugs.webkit.org/show_bug.cgi?id=186245

        Reviewed by Daniel Bates.

        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertToNSArray): Explicitly cast to WebAccessibilityObjectWrapperBase so we don't
        make method calls on WebAccessibilityObjectWrapper, a forward-declared class.
        (-[WebAccessibilityObjectWrapperBase convertPathToScreenSpace:]): Use CFAutorelease
        for the CGPathRef return value instead of Objective-C autorelease. Another option
        would be to use RetainPtr for the return type instead.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXObjectIsTextMarker): Use __bridge for bridging typecast.
        (AXObjectIsTextMarkerRange): Ditto.
        (AXTextMarkerRange): Ditto.
        (AXTextMarkerRangeStart): Ditto.
        (AXTextMarkerRangeEnd): Ditto.
        (isTextMarkerIgnored): Ditto.
        (accessibilityObjectForTextMarker): Ditto.
        (-[WebAccessibilityObjectWrapper characterOffsetForTextMarker:]): Ditto.
        (-[WebAccessibilityObjectWrapper visiblePositionForTextMarker:]): Ditto.
        (visiblePositionForStartOfTextMarkerRange): Ditto.
        (visiblePositionForEndOfTextMarkerRange): Ditto.
        (AXAttributeStringSetFont): Ditto. Also use @{} syntax to make NSDictionary
        and @() to make NSNumber.
        (AXAttributeStringSetColor): Use __bridge for bridging typecast, rearranging
        code so that the typecasts are on function arguments, not local variables,
        which makes lifetimes clearer.
        (AXAttributeStringSetElement): Use __bridge for bridging typecast.
        (WebTransformCGPathToNSBezierPath):
        (-[WebAccessibilityObjectWrapper bezierPathFromPath:]): Added a bridging
        typecast when passing an NSBezierPath through as a void* context argument;
        silent conversion to void* is not compatible with ARC.
        (createAccessibilityRoleMap): Use __unsafe_unretained for a table of
        NSString constants.

        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget): Use __bridge
        for bridging typecast.

        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::classForIsA): Added bridging typecasts
        to convert a Class into a CFTypeRef.
        (JSC::Bindings::ObjcClass::methodNamed const): Use __bridge for bridging
        typecast.
        (JSC::Bindings::ObjcClass::fieldNamed const): Ditto.
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeObjcMethod): Ditto.
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance const): Ditto.
        (JSC::Bindings::ObjcField::setValueToInstance const): Ditto.
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertObjcValueToValue): Ditto. Also add a missing const
        to make it clearer to the compiler that the code is correct.
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey): Ditto.
        (WebCore::findMasterKey): Ditto.
        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItemAtPositionWithRange): Ditto.
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::fontAttributesForSelectionStart const): Ditto.
        * editing/cocoa/HTMLConverter.mm:
        (_font): Ditto.
        (fileWrapperForElement): Ditto.
        * fileapi/FileCocoa.mm:
        (WebCore::File::shouldReplaceFile): Ditto.
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createResourceResponseFromMacArchivedData): Ditto.
        * page/mac/TextIndicatorWindow.mm:
        (-[WebTextIndicatorView initWithFrame:textIndicator:margin:offset:]): Ditto.
        (createContentCrossfadeAnimation): Ditto.
        * platform/cocoa/LocalizedStringsCocoa.mm:
        (WebCore::localizedString): Ditto.
        * platform/cocoa/SharedBufferCocoa.mm:
        (WebCore::SharedBuffer::create): Ditto.
        (WebCore::SharedBuffer::append): Ditto.
        * platform/graphics/FontPlatformData.h:
        (WebCore::toCTFont): Ditto.
        (WebCore::toNSFont): Ditto.
        * platform/graphics/avfoundation/objc/AVAssetTrackUtilities.mm:
        (WebCore::assetTrackMeetsHardwareDecodeRequirements): Ditto.
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateLastImage): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateCurrentFrameImage): Ditto.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::MediaDescriptionAVFObjC::MediaDescriptionAVFObjC): Ditto.
        (WebCore::bufferWasConsumedCallback): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm:
        (WebCore::VideoFullscreenLayerManagerObjC::updateVideoFullscreenInlineImage): Ditto.
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenLayer): Ditto.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::create): Ditto.
        (PlatformCALayer::platformCALayer): Ditto.
        (PlatformCALayerCocoa::superlayer const): Ditto.
        (PlatformCALayerCocoa::contents const): Ditto.
        (PlatformCALayerCocoa::setContents): Ditto.
        * platform/graphics/cocoa/IOSurface.h: Ditto.
        * platform/graphics/cocoa/TextTrackRepresentationCocoa.mm:
        (TextTrackRepresentationCocoa::update): Ditto.
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::ensureDecompressionSessionForSample): Ditto.
        (WebCore::WebCoreDecompressionSession::resetQosTier): Ditto.
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer display]): Ditto.
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::nsImage): Ditto.
        (WebCore::BitmapImage::snapshotNSImage): Ditto.
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer drawInContext:]): Ditto.
        (-[WebSimpleLayer setNeedsDisplay]): Ditto.
        (-[WebSimpleLayer setNeedsDisplayInRect:]): Ditto.
        (-[WebSimpleLayer display]): Ditto.
        (-[WebSimpleLayer drawInContext:]): Ditto.

        * platform/mac/CursorMac.mm:
        (WebCore::cursor): Mark pointer __strong to match the globals it points to.

        * platform/mac/FileSystemMac.mm:
        (WebCore::FileSystem::setMetadataURL): Use RetainPtr instead of autorelease.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::bufferForType): Use __bridge for bridging
        typecast.
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::speechSynthesisGetVoiceIdentifiers): Ditto.
        (WebCore::speechSynthesisGetDefaultVoiceIdentifierForLocale): Ditto.

        * platform/mac/PluginBlacklist.h: Use RetainPtr instead of explicit retain
        and release for NSDictionary and NSSet.
        * platform/mac/PluginBlacklist.mm:
        (WebCore::PluginBlacklist::create): Use __bridge for bridging typecast.
        (WebCore::PluginBlacklist::~PluginBlacklist): Remove explicit CFRelease calls.
        (WebCore::PluginBlacklist::PluginBlacklist): Add adoptNS calls and remove
        explciit CFRetain/release pairs.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::isPublicSuffix): Use __bridge for bridging typecast.
        * platform/mac/RemoteCommandListenerMac.mm:
        (WebCore::RemoteCommandListenerMac::RemoteCommandListenerMac): Ditto.
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        (WebCore::jsValueWithDictionaryInContext): Ditto.
        * platform/mac/URLMac.mm:
        (WebCore::URL::URL): Ditto.
        (WebCore::URL::createCFURL const): Ditto.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::collectRangesThatNeedMapping): Mark pointer __strong to match the
        local variable it eventually points to.
        (WebCore::stringByTrimmingWhitespace): Use __bridge for bridging typecast.
        (WebCore::URLByTruncatingOneCharacterBeforeComponent): Use
        CFBridgingRelease instead of autorelease, reducing typecasts.
        (WebCore::URLByRemovingComponentAndSubsequentCharacter): Ditto.
        (WebCore::userVisibleString): Use __bridge for bridging typecast.
        (WebCore::isUserVisibleURL): Ditto.

        * platform/mac/WebGLBlacklist.mm:
        (WebCore::WebGLBlacklist::create): Use __bridge for bridging typecast.
        * platform/mediastream/mac/AVVideoCaptureSource.mm:
        (WebCore::AVVideoCaptureSource::setPreset): Ditto.
        (WebCore::AVVideoCaptureSource::setupCaptureSession): Ditto. Also use @()
        instead of NSNumber.
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): Ditto.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody): Ditto.

        * platform/network/cocoa/ResourceResponseCocoa.mm: Use CFStringRef and
        CFSTR for constant string array commonHeaderFields rather than using
        NSString * and then relying on implicit bridging conversion.

        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::dump const): Use __bridge for bridging typecast.
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::createHTTPBodyNSInputStream): Ditto.
        (WebCore::httpBodyFromStream): Ditto.
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::ResourceError): Ditto.
        (WebCore::ResourceError::cfError const): Ditto.

        * rendering/RenderThemeMac.mm:
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        Use CFSTR("") instead of @"" for a string that is passed to CFDIctionaryRef.
        (WebCore::AttachmentLayout::layOutTitle): Use __bridge for bridging typecast.
        (WebCore::AttachmentLayout::layOutSubtitle): Ditto.

        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData): Use __bridge for
        bridging typecast.
        (WebCoreTestSupport::supportedNonImageMIMETypes): Deleted.
        (WebCoreTestSupport::convertWebResourceDataToString): Use the
        MIMETypeRegistry::isSupportedNonImageMIMEType function directly instead of
        building a CFArray out of MIMETypeRegistry::getSupportedNonImageMIMETypes
        and using CFArrayContainsValue. This is both much more direct and much more
        efficient as well.

2018-06-04  Timothy Hatcher  <timothy@apple.com>

        [Win] REGRESSION(r232486) 'WebCore::RenderTheme::activeListBoxSelectionBackgroundColor': function does not take 0 arguments
        https://bugs.webkit.org/show_bug.cgi?id=186296

        Unreviewed build fix.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor const):

2018-06-04  Chris Dumez  <cdumez@apple.com>

        Rename "Cross-Origin-Options" HTTP header to "Cross-Origin-Window-Policy"
        https://bugs.webkit.org/show_bug.cgi?id=186287
        <rdar://problem/40783352>

        Reviewed by Youenn Fablet.

        Tests: http/wpt/cross-origin-window-policy/allow-postmessage-from-deny.html
               http/wpt/cross-origin-window-policy/allow-postmessage.html
               http/wpt/cross-origin-window-policy/cross-origin-window-policy-header.html
               http/wpt/cross-origin-window-policy/navigation-from-opener-via-open-target.html
               http/wpt/cross-origin-window-policy/navigation-from-subframe-via-anchor-target.html

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindowGivenMinimumCrossOriginWindowPolicy):
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::effectiveCrossOriginWindowPolicyForAccess):
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::addCrossOriginWindowPropertyNames):
        (WebCore::addScopedChildrenIndexes):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GetCrossOriginsOptionsFromExtendedAttributeValue):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        * bindings/scripts/IDLAttributes.json:
        * dom/Document.cpp:
        (WebCore::Document::canNavigate):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/AbstractDOMWindow.cpp:
        (WebCore::AbstractDOMWindow::AbstractDOMWindow):
        * page/AbstractDOMWindow.h:
        (WebCore::AbstractDOMWindow::crossOriginWindowPolicy):
        (WebCore::AbstractDOMWindow::setCrossOriginWindowPolicy):
        * page/DOMWindow.idl:
        * page/Settings.yaml:
        * platform/network/HTTPHeaderNames.in:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginWindowPolicyHeader):
        * platform/network/HTTPParsers.h:

2018-06-04  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r231291): InputType should hold a WeakPtr to its HTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=186096
        <rdar://problem/40651015>

        Reviewed by Ryosuke Niwa.

        Now that the InputType may be kept alive as part of in-flight form submissions, we
        shouldn't assume that the referenced HTMLInputElement is still valid before using it.

        The only time we should be lacking a referencing element is in cases where the InputType
        is changing, either through a change in the HTMLInputElement's type attribute. In those
        cases we should check for a valid HTMLInputElement. In other cases, we should ASSERT.

        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::createInputRenderer):
        (WebCore::BaseButtonInputType::setValue):
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::saveFormControlState const):
        (WebCore::BaseCheckableInputType::restoreFormControlState):
        (WebCore::BaseCheckableInputType::appendFormData const):
        (WebCore::BaseCheckableInputType::handleKeydownEvent):
        (WebCore::BaseCheckableInputType::accessKeyAction):
        (WebCore::BaseCheckableInputType::setValue):
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::attributeChanged): Add a nullptr check
        here, since this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        * html/BaseClickableWithKeyInputType.cpp:
        (WebCore::BaseClickableWithKeyInputType::handleKeydownEvent):
        (WebCore::BaseClickableWithKeyInputType::handleKeypressEvent):
        (WebCore::BaseClickableWithKeyInputType::accessKeyAction):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::attributeChanged): Add a nullptr check
        here, since this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch const):
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::valueMissing const):
        (WebCore::CheckboxInputType::willDispatchClick):
        (WebCore::CheckboxInputType::didDispatchClick):
        (WebCore::CheckboxInputType::shouldAppearIndeterminate const):
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::valueAsColor const):
        (WebCore::ColorInputType::createShadowSubtree):
        (WebCore::ColorInputType::handleDOMActivateEvent):
        (WebCore::ColorInputType::didChooseColor):
        (WebCore::ColorInputType::updateColorSwatch):
        (WebCore::ColorInputType::shadowColorSwatch const):
        (WebCore::ColorInputType::elementRectRelativeToRootView const):
        (WebCore::ColorInputType::shouldShowSuggestions const):
        (WebCore::ColorInputType::suggestions const):
        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::typeMismatchFor const):
        (WebCore::EmailInputType::typeMismatch const):
        (WebCore::EmailInputType::typeMismatchText const):
        (WebCore::EmailInputType::sanitizeValue const):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData const):
        (WebCore::FileInputType::attributeChanged): Add a nullptr check here, since
        this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        (WebCore::FileInputType::valueMissing const):
        (WebCore::FileInputType::valueMissingText const):
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::createInputRenderer):
        (WebCore::FileInputType::setValue):
        (WebCore::FileInputType::createShadowSubtree):
        (WebCore::FileInputType::disabledAttributeChanged):
        (WebCore::FileInputType::multipleAttributeChanged):
        (WebCore::FileInputType::allowsDirectories const):
        (WebCore::FileInputType::setFiles):
        (WebCore::FileInputType::iconLoaded):
        (WebCore::FileInputType::receiveDroppedFiles):
        (WebCore::FileInputType::defaultToolTip const):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::weakPtrFactory const):
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::saveFormControlState const):
        (WebCore::HiddenInputType::restoreFormControlState):
        (WebCore::HiddenInputType::setValue):
        (WebCore::HiddenInputType::appendFormData const):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData const):
        (WebCore::ImageInputType::handleDOMActivateEvent):
        (WebCore::ImageInputType::createInputRenderer):
        (WebCore::ImageInputType::altAttributeChanged):
        (WebCore::ImageInputType::srcAttributeChanged):
        (WebCore::ImageInputType::attach):
        (WebCore::ImageInputType::height const):
        (WebCore::ImageInputType::width const):
        * html/InputType.cpp:
        (WebCore::InputType::saveFormControlState const):
        (WebCore::InputType::restoreFormControlState):
        (WebCore::InputType::isFormDataAppendable const):
        (WebCore::InputType::appendFormData const):
        (WebCore::InputType::sizeShouldIncludeDecoration const):
        (WebCore::InputType::validationMessage const):
        (WebCore::InputType::createInputRenderer):
        (WebCore::InputType::blur):
        (WebCore::InputType::destroyShadowSubtree):
        (WebCore::InputType::dispatchSimulatedClickIfActive const):
        (WebCore::InputType::chrome const):
        (WebCore::InputType::isKeyboardFocusable const):
        (WebCore::InputType::isMouseFocusable const):
        (WebCore::InputType::accessKeyAction):
        (WebCore::InputType::setValue):
        (WebCore::InputType::visibleValue const):
        (WebCore::InputType::applyStep):
        (WebCore::InputType::stepUpFromRenderer):
        * html/InputType.h:
        (WebCore::InputType::InputType):
        (WebCore::InputType::element const):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::attributeChanged): Add a nullptr check here, since
        this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        (WebCore::NumberInputType::setValue):
        (WebCore::NumberInputType::valueAsDouble const):
        (WebCore::NumberInputType::setValueAsDouble const):
        (WebCore::NumberInputType::setValueAsDecimal const):
        (WebCore::NumberInputType::typeMismatch const):
        (WebCore::NumberInputType::createStepRange const):
        (WebCore::NumberInputType::sizeShouldIncludeDecoration const):
        (WebCore::NumberInputType::decorationWidth const):
        (WebCore::NumberInputType::localizeValue const):
        (WebCore::NumberInputType::visibleValue const):
        (WebCore::NumberInputType::convertFromVisibleValue const):
        (WebCore::NumberInputType::hasBadInput const):
        (WebCore::NumberInputType::minOrMaxAttributeChanged):
        (WebCore::NumberInputType::stepAttributeChanged):
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissing const):
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::handleKeyupEvent):
        (WebCore::RadioInputType::isKeyboardFocusable const):
        (WebCore::RadioInputType::shouldSendChangeEventAfterCheckedChanged):
        (WebCore::RadioInputType::willDispatchClick):
        (WebCore::RadioInputType::didDispatchClick):
        (WebCore::RadioInputType::matchesIndeterminatePseudoClass const):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::attributeChanged): Add a nullptr check here, since
        this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        (WebCore::RangeInputType::valueAsDouble const):
        (WebCore::RangeInputType::setValueAsDecimal const):
        (WebCore::RangeInputType::createStepRange const):
        (WebCore::RangeInputType::handleMouseDownEvent):
        (WebCore::RangeInputType::handleTouchEvent):
        (WebCore::RangeInputType::handleKeydownEvent):
        (WebCore::RangeInputType::createShadowSubtree):
        (WebCore::RangeInputType::sliderTrackElement const):
        (WebCore::RangeInputType::createInputRenderer):
        (WebCore::RangeInputType::accessKeyAction):
        (WebCore::RangeInputType::minOrMaxAttributeChanged):
        (WebCore::RangeInputType::setValue):
        (WebCore::RangeInputType::updateTickMarkValues):
        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::handleDOMActivateEvent):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult):
        (WebCore::SearchInputType::maxResultsAttributeChanged):
        (WebCore::SearchInputType::createInputRenderer):
        (WebCore::SearchInputType::createShadowSubtree):
        (WebCore::SearchInputType::handleKeydownEvent):
        (WebCore::SearchInputType::startSearchEventTimer):
        (WebCore::SearchInputType::searchEventTimerFired):
        (WebCore::SearchInputType::searchEventsShouldBeDispatched const):
        (WebCore::SearchInputType::didSetValueByUserEdit):
        (WebCore::SearchInputType::sizeShouldIncludeDecoration const):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::appendFormData const):
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attributeChanged): Add a nullptr check here, since
        this is called directly by code that causes the old InputType to be removed,
        which could leave us with a nullptr element().
        (WebCore::TextFieldInputType::isKeyboardFocusable const):
        (WebCore::TextFieldInputType::isMouseFocusable const):
        (WebCore::TextFieldInputType::valueMissing const):
        (WebCore::TextFieldInputType::setValue):
        (WebCore::TextFieldInputType::handleKeydownEvent):
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton):
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::elementDidBlur):
        (WebCore::TextFieldInputType::handleFocusEvent):
        (WebCore::TextFieldInputType::handleBlurEvent):
        (WebCore::TextFieldInputType::createInputRenderer):
        (WebCore::TextFieldInputType::shouldHaveSpinButton const):
        (WebCore::TextFieldInputType::shouldHaveCapsLockIndicator const):
        (WebCore::TextFieldInputType::createShadowSubtree):
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):
        (WebCore::TextFieldInputType::updatePlaceholderText):
        (WebCore::TextFieldInputType::appendFormData const):
        (WebCore::TextFieldInputType::subtreeHasChanged):
        (WebCore::TextFieldInputType::didSetValueByUserEdit):
        (WebCore::TextFieldInputType::updateInnerTextValue):
        (WebCore::TextFieldInputType::focusAndSelectSpinButtonOwner):
        (WebCore::TextFieldInputType::shouldSpinButtonRespondToMouseEvents):
        (WebCore::TextFieldInputType::shouldSpinButtonRespondToWheelEvents):
        (WebCore::TextFieldInputType::shouldDrawCapsLockIndicator const):
        (WebCore::TextFieldInputType::shouldDrawAutoFillButton const):
        (WebCore::TextFieldInputType::autoFillButtonElementWasClicked):
        (WebCore::TextFieldInputType::createContainer):
        (WebCore::TextFieldInputType::createAutoFillButton):
        (WebCore::TextFieldInputType::updateAutoFillButton):
        * html/URLInputType.cpp:
        (WebCore::URLInputType::typeMismatch const):

2018-06-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix with recent SDKs.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2018-06-04  Dean Jackson  <dino@apple.com>

        AR Badging on transparent thumbnail images makes the glyph look really dark
        https://bugs.webkit.org/show_bug.cgi?id=186289
        <rdar://problem/40627111>

        Reviewed by Anders Carlsson.

        Clip out the shape for the drop shadow, so that it isn't visible if
        there is transparent pixel data on top of it.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):

2018-06-04  Timothy Hatcher  <timothy@apple.com>

        Selection color is dark when using Safari in dark mode.

        https://bugs.webkit.org/show_bug.cgi?id=186288
        rdar://problem/38438625

        Reviewed by Simon Fraser.

        Pass StyleColor::Options to all of the selection color functions.
        Removed supportsSelectionForegroundColors() from RenderThemeMac,
        to get the default of true, since the forground colors in dark mode
        can be different now. Use new semantic color methods on NSColor.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        (WebCore::RenderElement::selectionBackgroundColor const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::activeSelectionBackgroundColor const):
        (WebCore::RenderTheme::inactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveSelectionForegroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::activeListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::inactiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformActiveSelectionForegroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderTheme::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionForegroundColor const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeGtk::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionForegroundColor const):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeIOS::platformInactiveSelectionBackgroundColor const):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::platformActiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformInactiveSelectionBackgroundColor const):
        (WebCore::RenderThemeWin::platformActiveSelectionForegroundColor const):
        (WebCore::RenderThemeWin::platformInactiveSelectionForegroundColor const):
        * rendering/RenderThemeWin.h:

2018-06-04  Chris Dumez  <cdumez@apple.com>

        Update Fetch code to provide more useful exception messages
        https://bugs.webkit.org/show_bug.cgi?id=186156

        Reviewed by Youenn Fablet.

        Provide more useful error messages in our Loading / Fetch code.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::arrayBuffer):
        (WebCore::FetchBodyOwner::blob):
        (WebCore::FetchBodyOwner::consumeOnceLoadingFinished):
        (WebCore::FetchBodyOwner::formData):
        (WebCore::FetchBodyOwner::json):
        (WebCore::FetchBodyOwner::text):
        * Modules/fetch/FetchHeaders.cpp:
        (WebCore::canWriteHeader):
        (WebCore::FetchHeaders::get const):
        (WebCore::FetchHeaders::has const):
        * Modules/fetch/FetchRequest.cpp:
        (WebCore::FetchRequest::setBody):
        (WebCore::FetchRequest::clone):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::redirect):
        (WebCore::FetchResponse::clone):
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        * workers/service/context/ServiceWorkerFetch.h:

2018-06-04  Daniel Bates  <dabates@apple.com>

        Update Strong Password appearance
        https://bugs.webkit.org/show_bug.cgi?id=186239
        <rdar://problem/38183795>

        Reviewed by Brent Fulgham.

        Fix up the gradient mask to start half-way through the visible text and size it to the
        width of the visible text. Also change the color of the Strong Password label to 80% black.

        We achieve sizing of the gradient to the width of the visible text by changing the CSS display
        of the inner text element to be an inline-block and specifying "max-width: 100%" so that
        its maximum width is less than or equal to the width of its containing block. Additionally,
        only apply strong password-specific inner text element styles when the field is not disabled
        or read-only and has a strong password appearance. Otherwise these styles, specifically the
        display type, will adversely effect rendering of the text when the field is disabled or readonly.

        * css/html.css:
        (input::-webkit-strong-password-auto-fill-button):
        * html/HTMLInputElement.cpp:
        (WebCore::autoFillStrongPasswordMaskImage):
        (WebCore::HTMLInputElement::createInnerTextStyle):

2018-06-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [WebKit on watchOS] Remove all uses of the EXTRA_ZOOM_MODE compiler flag
        https://bugs.webkit.org/show_bug.cgi?id=186279

        Reviewed by Tim Horton.

        Replaces uses of ENABLE(EXTRA_ZOOM_MODE) with PLATFORM(WATCHOS). No change in behavior.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::compactMode const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState):
        * page/Page.cpp:
        (WebCore::relevantViewRect):
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::defaultMinimumZoomFontSize):
        (WebCore::SettingsBase::defaultDownloadableBinaryFontsEnabled):
        * page/ViewportConfiguration.cpp:
        (WebCore::platformDeviceWidthOverride):
        (WebCore::shouldOverrideShrinkToFitArgument):
        (WebCore::needsUpdateAfterChangingDisabledAdaptations):
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
        (-[WebMediaSessionHelper dealloc]):
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged):
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewController initWithFullscreenInterface:]):
        (-[WebAVPlayerViewController enterFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController exitFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController MY_NO_RETURN]):
        (-[WebAVPlayerViewController isPictureInPicturePossible]):
        (-[WebAVPlayerViewController isPictureInPictureActive]):
        (-[WebAVPlayerViewController pictureInPictureActive]):
        (-[WebAVPlayerViewController pictureInPictureWasStartedWhenEnteringBackground]):
        (-[WebAVPlayerViewController showsPlaybackControls]):
        (-[WebAVPlayerViewController setShowsPlaybackControls:]):
        (-[WebAVPlayerViewController setAllowsPictureInPicturePlayback:]):
        (-[WebAVPlayerViewController setDelegate:]):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        (WebCore::supportsPictureInPicture):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::willExitFullscreen):
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:

2018-06-04  Youenn Fablet  <youenn@apple.com>

        [WK1] Add an option to restrict communication to localhost sockets
        https://bugs.webkit.org/show_bug.cgi?id=186249

        Reviewed by Eric Carlson.

        Covered by existing tests.
        Set explicitly webrtc socket IP address to 127.0.0.1 in testing mode.
        For that purpose, we need WK1 to create a wrapper around a socket factory,
        this wrapper being responsible of setting or not the IP address to 127.0.0.1.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::prepareSocketAddress):
        (WebCore::BasicPacketSocketFactory::BasicPacketSocketFactory):
        (WebCore::BasicPacketSocketFactory::setDisableNonLocalhostConnections):
        (WebCore::BasicPacketSocketFactory::CreateClientTcpSocket):
        (WebCore::LibWebRTCProvider::createPeerConnection):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2018-06-04  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge width and margin computation for block-level, non-replaced and inline,replaced element in normal flow
        https://bugs.webkit.org/show_bug.cgi?id=186225

        Reviewed by Antti Koivisto.

        This patch merges the width and horizontal margin computation for
        https://www.w3.org/TR/CSS22/visudet.html#inline-replaced-width and https://www.w3.org/TR/CSS22/visudet.html#blockwidth

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):

2018-06-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Merge width and horizontal margin computation
        https://bugs.webkit.org/show_bug.cgi?id=186217

        Reviewed by Antti Koivisto.

        We could certainly compute width and maring separately, but to match each steps defined
        at https://www.w3.org/TR/CSS22/visudet.html, we should just merge width and horizontal margin computations
        (followed by height and vertical margins).
        Use 0 computed marings for now.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingWidthAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidthAndMargin const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const): Deleted.
        (WebCore::Layout::FormattingContext::computeFloatingWidth const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        (WebCore::Layout::outOfFlowNonReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidth): Deleted.
        (WebCore::Layout::floatingNonReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidth): Deleted.
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidthAndMargin const):
        (WebCore::Layout::BlockFormattingContext::computeWidth const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeMargin const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidth): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidth): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::computedMargin): Deleted.
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::setHasValidVerticalMargin):
        (WebCore::Display::Box::setHasValidHorizontalMargin):
        (WebCore::Display::Box::invalidateMargin):
        (WebCore::Display::Box::setHorizontalMargin):
        (WebCore::Display::Box::setVerticalMargin):
        (WebCore::Display::Box::marginTop const):
        (WebCore::Display::Box::marginLeft const):
        (WebCore::Display::Box::marginBottom const):
        (WebCore::Display::Box::marginRight const):
        (WebCore::Display::Box::Edges::Edges): Deleted.
        (WebCore::Display::Box::setHasValidMargin): Deleted.
        (WebCore::Display::Box::setMargin): Deleted.

2018-06-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r232338): [GTK] Broke a few layout tests
        https://bugs.webkit.org/show_bug.cgi?id=186244

        Unreviewed, also rollout r232392.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::adjustListboxStyle const): Deleted.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustListboxStyle const): Deleted.
        * rendering/RenderThemeGtk.h:

2018-06-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        REGRESSION(r232338): [GTK] Broke a few layout tests
        https://bugs.webkit.org/show_bug.cgi?id=186244

        Unreviewed, rollout r232338.

        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::RenderThemeGadget::RenderThemeGadget):
        (WebCore::baseStyleContext): Deleted.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle const):
        (WebCore::RenderThemeGtk::adjustTextFieldStyle const):
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle const):
        (WebCore::styleColor):
        (WebCore::RenderThemeGtk::adjustTextAreaStyle const): Deleted.
        * rendering/RenderThemeGtk.h:

2018-06-03  Eric Carlson  <eric.carlson@apple.com>

        [iOS] MediaPlayer.framework is not always available
        https://bugs.webkit.org/show_bug.cgi?id=186220
        <rdar://problem/40571286>

        Reviewed by Tim Horton.

        * platform/ios/RemoteCommandListenerIOS.mm:
        (WebCore::RemoteCommandListener::create):

2018-06-02  Darin Adler  <darin@apple.com>

        [Cocoa] Update some code to be more ARC-compatible to prepare for future ARC adoption
        https://bugs.webkit.org/show_bug.cgi?id=186227

        Reviewed by Dan Bernstein.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::~ObjcInstance): Use @autoreleasepool instead of NSAutoreleasePool.
        * platform/ios/wak/WAKView.mm:
        (-[WAKView _appendDescriptionToString:atLevel:]): Ditto.

2018-06-03  Zan Dobersek  <zdobersek@igalia.com>

        [WebGL] GL_EXT_robustness utilization should depend on CONTEXT_ROBUST_ACCESS value
        https://bugs.webkit.org/show_bug.cgi?id=186187

        Reviewed by Carlos Garcia Campos.

        Don't utilize the GL_EXT_robustness extension for reading pixels from
        the GPU if the underlying OpenGL context did not enable robust access
        support upon creation. For EGL contexts, this would be done by passing
        EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT and EGL_TRUE key-value pair in the
        attribute list passed to eglCreateContext() (as specified in the
        EGL_EXT_create_context_robustness extension), but at the moment this
        capability is not utilized.

        As such, on drivers that implement GL_EXT_robustness support, pixel
        reads done in WebGLRenderingContextBase end up using glReadnPixels(),
        but that fails to successfully read anything due to the context
        rejecting such calls.

        GL_EXT_robustness is specific to OpenGL ES versions, so to fix this,
        Extensions3DOpenGLES overrides the isEnabled() method. That override
        returns false immediately if the inherited isEnabled() implementation
        returns false. Otherwise it returns true, unless the tested extension
        is GL_EXT_robustness, in which case we now check that the context's
        CONTEXT_ROBUST_ACCESS state value is true, meaning the context was
        created with robust access support enabled.

        No new tests are possible because this is optional driver-provided
        functionality that Web content cannot have effect on.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::isEnabled):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:

2018-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        Editor can hold references to Documents after you navigate away
        https://bugs.webkit.org/show_bug.cgi?id=186215

        Reviewed by Simon Fraser.

        Clear the various member variables that can hold onto a document in Editor::clear and FrameSelection::prepareForDestruction.

        Test: editing/selection/navigation-clears-editor-state.html

        * editing/Editor.cpp:
        (WebCore::Editor::clear):
        * editing/Editor.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::prepareForDestruction):
        * editing/FrameSelection.h:

2018-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        ResourceLoader::cancel() shouldn't synchronously fire load event on document
        https://bugs.webkit.org/show_bug.cgi?id=185284

        Revert the erroneous change to SSFontSelector::beginLoadTimerFired(), which broke CancelLoading.CancelFontSubresource.
        FrameLoader::loadDone calls checkCompleted, not checkLoadComplete so we still need to call checkLoadComplete here.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired): 

2018-06-01  Jeremy Jones  <jeremyj@apple.com>

        Keyboard focus should exit fullscreen.
        https://bugs.webkit.org/show_bug.cgi?id=185617
        rdar://problem/34697938

        Reviewed by Ryosuke Niwa.

        No opensource test because feature is not enabled.

        While in element fullscreen, initiating keyboard focus should exit fullscreen in iOS.

        Improve fullscreen testability by exposing isAnimatingFullScreen.

        * dom/Document.h:
        * testing/Internals.cpp:
        (WebCore::Internals::isAnimatingFullScreen const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-06-01  Jeremy Jones  <jeremyj@apple.com>

        Don't continue playing in background when auto-picture-in-picture is disabled.
        https://bugs.webkit.org/show_bug.cgi?id=186089
        rdar://problem/40314314

        Reviewed by Eric Carlson.

        No new tests because we don't have a way to test auto-pip.

        With the refactoring work done in VideoFullscreenInterfaceAVKit, HTMLMediaElement no longer has to anticipate 
        auto-pip when if it should pause on suspend. Instead VideoFullscreenInterfaceAVKit proactively updates 
        videoFullscreenMode, so checking for PIP is sufficient.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::shouldOverrideBackgroundPlaybackRestriction const):

2018-06-01  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r231456): Colloquy is broken
        https://bugs.webkit.org/show_bug.cgi?id=186197
        <rdar://problem/40722960>

        Reviewed by Timothy Hatcher.

        Restore pre-r231456 behavior for Colloquy app so that it works again.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        * page/Settings.yaml:

2018-06-01  Chris Dumez  <cdumez@apple.com>

        Regression(r230567): Unable to log into twitter.com in private sessions
        https://bugs.webkit.org/show_bug.cgi?id=186205
        <rdar://problem/40670799>

        Reviewed by Youenn Fablet.

        We were using the same SWServer for all private sessions and the SWServer's sessionID would
        be legacyPrivateSessionID(). As a result, the service worker's sessionID would be legacyPrivateSessionID()
        as well and would not match the sessionID of its client pages. This sessionID mismatch was
        causing the breakage.

        Instead of using the same SWServer of all private sessions, we now go back to using a SWServer
        per private session. However, we now make sure that the SWServer gets destroyed whenever its
        corresponding session gets destroyed.

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

2018-06-01  Youenn Fablet  <youenn@apple.com>

        Add an option to restrict communication to localhost sockets
        https://bugs.webkit.org/show_bug.cgi?id=186208

        Reviewed by Eric Carlson.

        Covered by existing tests.
        Add an option in LibWebRTCProvider to restrict to localhost sockets.
        Use that option when Internals is used.

        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2018-06-01  Ryosuke Niwa  <rniwa@webkit.org>

        ResourceLoader::cancel() shouldn't synchronously fire load event on document
        https://bugs.webkit.org/show_bug.cgi?id=185284

        Reviewed by Antti Koivisto.

        Because a resource loading can be canceled as a node is removed a document or CachedResource is destructed,
        it's not safe to synchronously fire load event on document upon cancelation. This patch makes the cancellation
        of a resource load schedule m_checkTimer in FrameLoader to fire a load event asynchronously instead.

        Specifically, this patch makes FrameLoader::loadDone call FrameLoader::scheduleCheckCompleted when the load
        had failed or cancled instead of calling FrameLoader::checkCompleted which can synchronously fire load event.
        To differentiate the two cases, new enum LoadCompletionType has been added to FrameLoader::loadDone and related
        functions. To avoid calling the navigation delegate too early, the same abstraction for checkLoadComplete()
        has been added in the form of FrameLoader::subresourceLoadDone.

        Unfortunately, delaying calls to checkCompleted() and checkLoadComplete() by a timer can result in client
        callbacks such as didFinishLoadForFrame and didFailLoadWithError to never get called when the frame gets
        detached from the parent after the last resource had stopped loading but before the timer fires. To preserve
        these deleagte callbacks, this patch expedites the timer in FrameLoader::frameDetached and Page::goToItem by
        by invoking newly added stopAllLoadersAndCheckCompleteness, which stops all loading and then immediately invokes
        checkCompleted() and checkLoadComplete() synchronously if m_checkTimer had been started.

        Tests: http/tests/preload/dynamic_removing_preload.html

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired): Removed superfluous call to checkLoadComplete since
        cachedResourceLoader's loadDone would call checkLoadComplete anyway.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::disconnectContentFrame): Removed the misleading comment added in r140090.
        Firefox DOES indeed fire unload event in the content document of a removed frame. While this comment made
        it sound like this function isn't called when a frame is removed from the tree when in reality we simply
        remove a frame prior to removing the node via disconnectSubframesIfNeeded.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::removeSubresourceLoader):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::loadDone):
        (WebCore::FrameLoader::subresourceLoadDone):
        (WebCore::FrameLoader::checkCompleted): Added a release assert that this function is only called when it's safe
        to execute scripts.
        (WebCore::FrameLoader::checkTimerFired):
        (WebCore::FrameLoader::checkCompletenessNow):Extracted from checkTimerFired.
        (WebCore::FrameLoader::stopAllLoaders): Removed the code to stop m_checkTimer introduced in r53655.
        Stopping the timer here would prevent FrameLoader::frameDetached to detect the case when stopping the loader
        scheduled a load completion check. Also stopping this timer without clearing the corresponding booleans:
        m_checkingLoadCompleteForDetachment and m_checkingLoadCompleteForDetachment is problematic. The assertion
        r53655 addressed is now addressed by explicitly checking & clearing the timer in frameDetached.
        (WebCore::FrameLoader::stopAllLoadersAndCheckCompleteness): Added.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Avoid an early exit when the newly added boolean
        m_checkingLoadCompleteForDetachment is set since m_isStopping is no longer set in frameDetached in order
        to invoke didFailLoadWithError when detaching a frame.
        (WebCore::FrameLoader::frameDetached): Call checkCompletenessNow in the case the frame had already been
        completed loading. Also call stopAllLoadersAndCheckCompleteness in the case stopping loading would complete
        the loading before stopping active DOM objects.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::m_checkingLoadCompleteForDetachment): Added.
        * loader/FrameLoaderTypes.h:
        (WebCore::LoadCompletionType): Added.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):
        (WebCore::SubresourceLoader::notifyDone):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone):
        * loader/cache/CachedResourceLoader.h:
        * page/Page.cpp:
        (WebCore::Page::goToItem): Call stopAllLoadersAndCheckCompleteness instead of stopAllLoaders since stopping
        loading here may complete loading.

2018-06-01  Sihui Liu  <sihui_liu@apple.com>

        Stop using StorageTracker.db in LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=186104

        Reviewed by Geoffrey Garen.

        No behavior change.

        * platform/sql/SQLiteFileSystem.h:

2018-06-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Simplify the formatting class implementation by pushing down some of the logic to the Geometry class
        https://bugs.webkit.org/show_bug.cgi?id=186179

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::outOfFlowNonReplacedHeight):
        (WebCore::Layout::outOfFlowNonReplacedWidth):
        (WebCore::Layout::outOfFlowReplacedHeight):
        (WebCore::Layout::outOfFlowReplacedWidth):
        (WebCore::Layout::floatingNonReplacedHeight):
        (WebCore::Layout::floatingNonReplacedWidth):
        (WebCore::Layout::floatingReplacedHeight):
        (WebCore::Layout::floatingReplacedWidth):
        (WebCore::Layout::outOfFlowNonReplacedPosition):
        (WebCore::Layout::outOfFlowReplacedPosition):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowHeight):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowWidth):
        (WebCore::Layout::FormattingContext::Geometry::floatingHeight):
        (WebCore::Layout::FormattingContext::Geometry::floatingWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowPosition):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeight):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidth):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidth): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedPosition): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedPosition): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::replacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::replacedWidth): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::inFlowNonReplacedHeight):
        (WebCore::Layout::inFlowNonReplacedWidth):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeight):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidth):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeight): Deleted.
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidth): Deleted.

2018-06-01  Zalan Bujtas  <zalan@apple.com>

        [LFC] Push FormattingContext::computeWidth/computeHeight logic from the base to the subclasses.
        https://bugs.webkit.org/show_bug.cgi?id=186172

        Reviewed by Antti Koivisto.

        FormattingContext::computeWidth/computeHeight virtual functions have very little benefit and in the long run
        it's better if we keep the number of virtual functions to the minimum necessary.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeStaticPosition const): Deleted.
        (WebCore::Layout::FormattingContext::computeInFlowPositionedPosition const): Deleted.
        (WebCore::Layout::FormattingContext::computeWidth const): Deleted.
        (WebCore::Layout::FormattingContext::computeHeight const): Deleted.
        (WebCore::Layout::FormattingContext::computeMargin const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHeight):
        (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedWidth):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeight):
        (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidth):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeight):
        (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidth):
        (WebCore::Layout::FormattingContext::Geometry::replacedHeight): Deleted.
        (WebCore::Layout::FormattingContext::Geometry::replacedWidth): Deleted.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeWidth const):
        (WebCore::Layout::BlockFormattingContext::computeHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeStaticPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowWidth const): Deleted.
        (WebCore::Layout::InlineFormattingContext::computeInFlowHeight const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-06-01  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GTK] Difficult to read combo box text in dark theme
        https://bugs.webkit.org/show_bug.cgi?id=165072

        Reviewed by Carlos Garcia Campos.

        Set listbox foreground color to theme color to fix hard-to-read
        text color in combo box while using dark theme.

        No new tests required. ManualTests/gtk/theme.html already covers it.
        See the "Option Lists" section.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        Adjust style for ListboxPart as well.
        * rendering/RenderTheme.h: Add adjustListboxStyle()
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustListboxStyle const):
        Set color to the theme foreground color.
        * rendering/RenderThemeGtk.h: adjustListboxStyle() overriden.

2018-06-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Switch to use a popup window with a tree view instead of a menu for option menu default implementation
        https://bugs.webkit.org/show_bug.cgi?id=186146

        Reviewed by Michael Catanzaro.

        Make it possible to use GUniquePtr with GtkTreePath.

        * platform/gtk/GUniquePtrGtk.h:

2018-05-31  Per Arne Vollan  <pvollan@apple.com>

        Add OpenGL display mask to WebPage creation parameters.
        https://bugs.webkit.org/show_bug.cgi?id=186163
        <rdar://problem/40634504>

        Reviewed by Brent Fulgham.

        To make sure the OpenGL display mask is always available, include it in the WebPage creation parameters.
        The OpenGL display mask is sent to the WebProcess when the platform display ID changes, but that is not
        early enough in all cases. If the OpenGL display mask is not set, only OpenGL software rendering is offered
        on some hardware configurations.
 
        No new tests, since it is not trivial to test whether OpenGL rendering is hardware accelerated.

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayID):

2018-05-31  Megan Gardner  <megan_gardner@apple.com>

        Add setting to allow override screen size to be disabled.
        https://bugs.webkit.org/show_bug.cgi?id=186109

        Reviewed by Andy Estes.

        Not Testable, and for debug only.

        Pipe settings and use them to ignore override screen size if setting is set. 

        * page/DeprecatedGlobalSettings.cpp:
        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::setDisableScreenSizeOverride):
        (WebCore::DeprecatedGlobalSettings::disableScreenSizeOverride):
        * page/Settings.yaml:
        * platform/ios/PlatformScreenIOS.mm:

2018-05-31  Brent Fulgham  <bfulgham@apple.com>

        REGRESSION(r216119): DocumentLoader::detachFromFrame still encounters nullptr frame
        https://bugs.webkit.org/show_bug.cgi?id=186081
        <rdar://problem/34918109>

        Reviewed by David Kilzer.

        The nullptr check that was removed in r216119 was still needed because when the DocumentLoader
        is in 'm_waitingForNavigationPolicy' or in 'm_waitingForContentPolicy', a call to the policy checker
        to stopCheck we will clear the frame as part of the cleanup phase.

        If m_frame is nullptr after cancelPolicyCheckIfNeeded, our work is already done so just return.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::detachFromFrame):

2018-05-31  Dean Jackson  <dino@apple.com>

        Don't paint the System Preview badge if the image isn't fully decoded
        https://bugs.webkit.org/show_bug.cgi?id=186158
        <rdar://problem/40454866>

        Reviewed by Antoine Quint.

        Only paint the system preview badge if the image itself said
        that it succeeded in drawing.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect): Check the ImageDrawResult.

2018-05-31  David Kilzer  <ddkilzer@apple.com>

        Implement checked cast for DDResultRef once DDResultGetCFTypeID() is available
        <https://webkit.org/b/184554>
        <rdar://problem/36241894>

        Reviewed by Brent Fulgham.

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItemAtPositionWithRange): Implement checked cast
        for DDResultRef.

2018-05-31  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r232246.
        https://bugs.webkit.org/show_bug.cgi?id=186024

        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift const):

2018-05-31  Chris Dumez  <cdumez@apple.com>

        Fix memory leak under NetworkStateNotifier::updateStateWithoutNotifying()
        https://bugs.webkit.org/show_bug.cgi?id=186149
        <rdar://problem/40674537>

        Reviewed by Geoffrey Garen.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):

2018-05-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Layout code needs to know the type of the Element associated with a Layout::Box
        https://bugs.webkit.org/show_bug.cgi?id=186117

        Reviewed by Antti Koivisto.

        Since these attributes don't change during layout, we could just pass them in to Layout::Box instead
        of keep querying the Element.

        * layout/layouttree/LayoutBlockContainer.cpp:
        (WebCore::Layout::BlockContainer::BlockContainer):
        * layout/layouttree/LayoutBlockContainer.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        (WebCore::Layout::Box::isPaddingApplicable const):
        (WebCore::Layout::Box::isDocumentBox const): Deleted.
        (WebCore::Layout::Box::isBodyBox const): Deleted.
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isAnonymous const):
        (WebCore::Layout::Box::isDocumentBox const):
        (WebCore::Layout::Box::isBodyBox const):
        (WebCore::Layout::Box::ElementAttributes::ElementAttributes):
        (WebCore::Layout::Box::setPreviousSibling):
        (WebCore::Layout::Box::setIsAnonymous): Deleted.
        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::Container):
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutInlineBox.cpp:
        (WebCore::Layout::InlineBox::InlineBox):
        * layout/layouttree/LayoutInlineBox.h:
        * layout/layouttree/LayoutInlineContainer.cpp:
        (WebCore::Layout::InlineContainer::InlineContainer):
        * layout/layouttree/LayoutInlineContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createLayoutTree):
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-05-31  Chris Dumez  <cdumez@apple.com>

        Unreviewed iOS build fix after r232335.

        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/BaseDateAndTimeInputType.h:

2018-05-31  Chris Dumez  <cdumez@apple.com>

        Unreviewed, apply review comments from Darin after r232310.

        * platform/ReferrerPolicy.cpp:
        (WebCore::parseReferrerPolicy):

2018-05-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Margin box is border box + margins.
        https://bugs.webkit.org/show_bug.cgi?id=186124

        Reviewed by Antti Koivisto.

        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):

2018-05-31  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add quirks mode setter/getting to LayoutContext
        https://bugs.webkit.org/show_bug.cgi?id=186122

        Reviewed by Antti Koivisto.

        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::setInQuirksMode):
        (WebCore::Layout::LayoutContext::inQuirksMode const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):

2018-05-30  Carlos Eduardo Ramalho  <cadubentzen@gmail.com>

        [GTK] Hardcoded text color in input fields
        https://bugs.webkit.org/show_bug.cgi?id=126907

        Reviewed by Carlos Garcia Campos.

        Set text color in input fields to foreground theme color.
        Also, set "window.background" as base GtkStyleContext to mimic
        GTK applications and fix some theme bugs.

        No new tests required. ManualTests/gtk/theme.html already covers it.

        * platform/gtk/RenderThemeGadget.cpp:
        (WebCore::baseStyleContext): Added.
        (WebCore::RenderThemeGadget::RenderThemeGadget):
        Use "window.background" GtkStyleContext instead of
        null parent for RenderThemeGadgets.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle const):
        Set color as foreground theme color.
        (WebCore::RenderThemeGtk::adjustTextFieldStyle const): Ditto.
        (WebCore::RenderThemeGtk::adjustTextAreaStyle const): Ditto.
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle const): Ditto.
        * rendering/RenderThemeGtk.h: adjustTextAreaStyle() overriden.

2018-05-30  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Pass VM& parameter as much as possible
        https://bugs.webkit.org/show_bug.cgi?id=186085

        Reviewed by Saam Barati.

        No behavior change.

        * bindings/js/JSCSSRuleListCustom.cpp:
        (WebCore::JSCSSRuleListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        (WebCore::JSDOMBuiltinConstructorBase::callFunctionWithCurrentArguments):
        * bindings/js/JSDOMConvertScheduledAction.h:
        (WebCore::Converter<IDLScheduledAction>::convert):
        * bindings/js/JSDOMIterator.h:
        (WebCore::iteratorForEach):
        * bindings/js/JSDOMMapLike.cpp:
        (WebCore::forwardFunctionCallToBackingMap):
        (WebCore::forwardForEachCallToBackingMap):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::callFunction):
        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::createRejectedPromiseWithTypeError):
        * bindings/js/JSDeprecatedCSSOMValueCustom.cpp:
        (WebCore::JSDeprecatedCSSOMValueOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementCustomPut):
        (WebCore::callPlugin):
        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::setWindow):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStreamInternal::callFunction):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::callFunction):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::getProperty):
        (WebCore::CloneSerializer::serialize):
        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBufferView):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript):
        * bridge/NP_jsobject.cpp:
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * testing/Internals.cpp:
        (WebCore::Internals::cloneArrayBuffer):
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2018-05-28  Darin Adler  <darin@apple.com>

        Straighten out HTMLInputElement attribute handling
        https://bugs.webkit.org/show_bug.cgi?id=186043

        Reviewed by Daniel Bates.

        * dom/RadioButtonGroups.cpp:
        (WebCore::RadioButtonGroup::requiredStateChanged): Renamed from requiredAttributeChanged,
        and changed to take a reference.
        (WebCore::RadioButtonGroups::requiredStateChanged): Ditto.
        * dom/RadioButtonGroups.h: Updated for changes above.

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::createShadowSubtree): Call
        updateInnerTextValue by its new name.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::updateInnerTextValue): Renamed
        from updateAppearance.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::setValue): Call
        updateInnerTextValue by its new name.
        (WebCore::BaseChooserOnlyDateAndTimeInputType::attributeChanged): Override this
        instead of valueAttributeChanged.
        * html/BaseChooserOnlyDateAndTimeInputType.h: Tighten up inheritance a bit.
        Also use final a bit more and update for changes above.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::attributeChanged): Replaced
        minOrMaxAttributeChanged with this override, checking for the attribute names.
        * html/BaseDateAndTimeInputType.h: Updated for changes above.

        * html/FileInputType.cpp:
        (WebCore::FileInputType::disabledStateChanged): Renamed from disabledAttributeChanged.
        (WebCore::FileInputType::attributeChanged): Replaced
        multipleAttributeChanged with this override, checking for the attribute names.
        * html/FileInputType.h: Updated for changes above.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::parseAttribute): Updated function names to say
        "state changed" rather than "attribute changed" if they are called only when the
        computed value is changed, not the raw attribute value.
        (WebCore::HTMLFormControlElement::readOnlyStateChanged): Updated name.
        (WebCore::HTMLFormControlElement::requiredStateChanged): Ditto.
        * html/HTMLFormControlElement.h: Updated for changes above.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute): Removed the code to call lots of specific
        attribute changed functions that have now been deleted. Also removed empty code for a
        couple of attributes.
        (WebCore::HTMLInputElement::disabledStateChanged): Added. Forward call to input type.
        (WebCore::HTMLInputElement::readOnlyStateChanged): Ditto.
        (WebCore::HTMLInputElement::requiredStateChanged): Renamed from requiredAttributeChanged.
        * html/HTMLInputElement.h: Updated for changes above.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::readOnlyStateChanged): Renamed from
        readOnlyAttributeChanged. Also fixed incorrect call to base class. This may have
        fixed a bug: With some work we could probably create a test case to demonstrate that.
        * html/HTMLTextFormControlElement.h: Updated for changes above.

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::attributeChanged): Replaced
        altAttributeChanged and srcAttributeChanged with this override, checking for the
        attribute names.
        * html/ImageInputType.h: Updated for changes above.

        * html/InputType.cpp:
        (WebCore::InputType::altAttributeChanged): Deleted.
        (WebCore::InputType::srcAttributeChanged): Deleted.
        (WebCore::InputType::maxResultsAttributeChanged): Deleted.
        (WebCore::InputType::minOrMaxAttributeChanged): Deleted.
        (WebCore::InputType::stepAttributeChanged): Deleted.
        (WebCore::InputType::valueAttributeChanged): Deleted.
        (WebCore::InputType::attributeChanged): Moved to header as an inline so derived
        classes can call through to the base class with the empty function inlined.
        (WebCore::InputType::multipleAttributeChanged): Deleted.
        (WebCore::InputType::disabledAttributeChanged): Moved to header as an inline.
        (WebCore::InputType::readonlyAttributeChanged): Ditto.
        (WebCore::InputType::requiredAttributeChanged): Ditto.
        * html/InputType.h: Updated for changes above.

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::attributeChanged): Replaced
        minOrMaxAttributeChanged and stepAttributeChanged with this override, checking
        for the attribute names.
        * html/NumberInputType.h: Updated for changes above.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::disabledStateChanged): Renamed from
        disabledAttributeChanged.
        (WebCore::RangeInputType::attributeChanged): Replaced
        minOrMaxAttributeChanged with this override, checking for the attribute names.
        * html/RangeInputType.h: Updated for changes above.

        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType): Removed unneeded initialization of
        RefPtr data members to nullptr.
        (WebCore::updateResultButtonPseudoType): Removed unneeded if statement; the two
        cases above cover 0, and less than 0, so there is no need to check for greater
        than 0 for the third case.
        (WebCore::SearchInputType::attributeChanged): Replaced
        maxResultsAttributeChanged with this override, checking for the attribute name.
        * html/SearchInputType.h: Updated for changes above and marked more
        member functions final.

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::attributeChanged): Added a call through to the
        base class to match the style of other overrides of this function.
        (WebCore::TextFieldInputType::disabledStateChanged): Renamed from disabledAttributeChanged.
        (WebCore::TextFieldInputType::readOnlyStateChanged): Renamed from readonlyAttributeChanged.
        * html/TextFieldInputType.h: Updated for changes above. Also made attributeChanged no
        longer be marked final since derived classes now override it.

        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): Moved some data member initialization
        from this constructor to the class definition.
        (WebCore::SliderThumbElement::hostDisabledStateChanged): Renamed from disabledAttributeChanged.
        * html/shadow/SliderThumbElement.h: Updated for changes above and marked more
        member functions final.

2018-05-30  Nan Wang  <n_wang@apple.com>

        AX: VoiceOver on macOS does not announce fieldset description from aria-describedby when focussing inputs
        https://bugs.webkit.org/show_bug.cgi?id=185246
        <rdar://problem/39939028>

        Reviewed by Chris Fleizach.

        Exposed the fieldset's description to its form control children.

        Test: accessibility/mac/aria-describedby-fieldset.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::helpText const):

2018-05-30  Chris Fleizach  <cfleizach@apple.com>

        AX: Expose link rel type to voiceover
        https://bugs.webkit.org/show_bug.cgi?id=186084
        <rdar://problem/40640871>

        Reviewed by Sam Weinig.

        Make the link rel attribute available to accessibility clients.

        Test: accessibility/mac/linkrel.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::linkRelValue const):
        * accessibility/AccessibilityObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLinkRelationshipType]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2018-05-30  Brady Eidson  <beidson@apple.com>

        REGRESSION (r224684): User-agent seen by page does not change when modified by the develop menu options after reloading.
        <rdar://problem/34918109> and https://bugs.webkit.org/show_bug.cgi?id=186111

        Reviewed by Andy Estes.

        Test: http/tests/navigation/useragent-reload.php

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeRequest const): Use setUserAgent() for consistency.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource): Clear the user agent from the original DocumentLoader request
          before adding additional fields, as reloads should pick up user agent changes.

2018-05-30  Dean Jackson  <dino@apple.com>

        WebContent crashes with system preview content
        https://bugs.webkit.org/show_bug.cgi?id=186118

        Reviewed by Myles Maxfield.

        We were receiving crash reports on iOS devices when getting
        platformContext() from a GraphicsContext. This usually
        occurred when the page was invisible. Debugging showed that
        it was trying to draw with a disabled context.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge): Early
        return if the context has painting disabled.

2018-05-30  Daniel Bates  <dabates@apple.com>

        Web Inspector: Annotate Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=184897
        <rdar://problem/35178209>

        Reviewed by Brian Burg.

        Store and retrieve the Same-Site cookie policy from CFNetwork.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::cookieSameSitePolicyJSON): Added.
        (WebCore::buildObjectForCookie): Modified to include cookie Same-Site policy. 
        * platform/Cookie.h:
        (WebCore::Cookie::encode const): Encode Same-Site policy.
        (WebCore::Cookie::decode): Decode Same-Site policy.
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::portStringFromVector):
        (WebCore::coreSameSitePolicy):
        (WebCore::nsSameSitePolicy):
        (WebCore::Cookie::operator NSHTTPCookie * _Nullable  const):
        (WebCore::Cookie::operator NSHTTPCookie * const): Deleted.

2018-05-30  Daniel Bates  <dabates@apple.com>

        NavigationAction does not need to hold initiating DOM Event
        https://bugs.webkit.org/show_bug.cgi?id=185958
        <rdar://problem/40531539>

        Reviewed by Simon Fraser.

        Take a similar approach as was done in <https://bugs.webkit.org/show_bug.cgi?id=185712>
        and have NavigationAction hold only as many details of the initiating DOM Event as
        necessary to support WebKit functionality. Retaining a DOM Event effectively retains
        the document that associated with the event. And DocumentLoader always keeps around
        the NavigationAction of the last navigation for the "benefit of the various policy handlers".
        Therefore, having NavigationAction hold only the relevant details of the DOM Event
        instead of the DOM Event itself we avoid keeping the document we navigated from alive
        longer than necessary. 

        * dom/MouseRelatedEvent.h:
        * dom/UIEventWithKeyState.h:
        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::UIEventWithKeyStateData::UIEventWithKeyStateData): Added.
        (WebCore::NavigationAction::MouseEventData::MouseEventData): Added.
        (WebCore::keyStateDataForFirstEventWithKeyState): Added.
        (WebCore::mouseEventDataForFirstMouseEvent): Added.
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::keyStateEventData const): Added.
        (WebCore::NavigationAction::mouseEventData const): Added
        (WebCore::NavigationAction::event const): Deleted.

2018-05-30  Youenn Fablet  <youenn@apple.com>

        Revert changes made to URLWithUserTypedString made in https://trac.webkit.org/changeset/232281
        https://bugs.webkit.org/show_bug.cgi?id=186108
        <rdar://problem/40663065>

        Reviewed by Alex Christensen.

        Covered by existing API tests.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLWithUserTypedString):
        Return early if WebCore::URL is not able to create a CFURL.
        Use CFURL otherwise to keep the existing behavior as much as possible.

2018-05-30  Youenn Fablet  <youenn@apple.com>

        Rename FromOrigin runtime flag to CrossOriginResourcePolicy and enable it by default
        https://bugs.webkit.org/show_bug.cgi?id=186082

        Reviewed by Chris Dumez.

        No change of behavior.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCrossOriginResourcePolicyEnabled):
        (WebCore::RuntimeEnabledFeatures::crossOriginResourcePolicyEnabled const):
        (WebCore::RuntimeEnabledFeatures::setFromOriginResponseHeaderEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::fromOriginResponseHeaderEnabled const): Deleted.

2018-05-30  Chris Dumez  <cdumez@apple.com>

        Referrer-Policy response header is ignored
        https://bugs.webkit.org/show_bug.cgi?id=186037
        <rdar://problem/40600335>

        Reviewed by Youenn Fablet.

        Add support for Referrer-Policy HTTP response header:
        - https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-header

        Tests: http/tests/security/referrer-policy-header-and-meta-tag-emptyString.html
               http/tests/security/referrer-policy-header-and-meta-tag.html
               http/tests/security/referrer-policy-header.html

        * dom/Document.cpp:
        (WebCore::Document::setReferrerPolicy):
        (WebCore::Document::processReferrerPolicy):
        * dom/Document.h:
        (WebCore::Document::referrerPolicy const):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::updateReferrerPolicy):
        * platform/ReferrerPolicy.cpp:
        (WebCore::parseReferrerPolicyToken):
        (WebCore::parseReferrerPolicy):
        * platform/ReferrerPolicy.h:

2018-05-30  Youenn Fablet  <youenn@apple.com>

        Rename CrossOriginResourcePolicy same to same-origin
        https://bugs.webkit.org/show_bug.cgi?id=186080

        Reviewed by Chris Dumez.

        Covered by updated tests.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginResourcePolicyHeader):
        * platform/network/HTTPParsers.h:

2018-05-30  Aditya Keerthi  <akeerthi@apple.com>

        Fix the ENABLE(DATALIST_ELEMENT) build
        https://bugs.webkit.org/show_bug.cgi?id=186105

        Reviewed by Wenson Hsieh.

        * WebCore.xcodeproj/project.pbxproj:
        * html/ColorInputType.cpp:
        (WebCore::ColorInputType::suggestions const):
        * html/HTMLInputElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):

2018-05-30  Alex Christensen  <achristensen@webkit.org>

        Reduce String allocations
        https://bugs.webkit.org/show_bug.cgi?id=186059

        Reviewed by Darin Adler.

        Don't allocate Strings just to convert it to another form.
        Based mostly on Darin's feedback on bug 185986.

        No change in behavior.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::hostName):
        (WebCore::WebSocketHandshake::host const):
        * css/parser/CSSSelectorParser.cpp:
        (WebCore::CSSSelectorParser::consumePseudo):
        (WebCore::CSSSelectorParser::consumeANPlusB):
        * loader/mac/LoaderNSURLExtras.mm:
        (suggestedFilenameWithMIMEType):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::fromURL):
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::wildcardMatches):
        (WebCore::ContentSecurityPolicySource::hostMatches const):
        * platform/URL.cpp:
        (WebCore::URL::hostAndPort const):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::createStreams):

2018-05-30  Jer Noble  <jer.noble@apple.com>

        Media elements outside fullscreen should not be considered main content.
        https://bugs.webkit.org/show_bug.cgi?id=186063
        <rdar://problem/40630437>

        Reviewed by Eric Carlson.

        Test: platform/mac/media/video-best-element-for-playback-controls-purpose.html

        Media elements outside the current fullscreen element are not visible, and thus should not be considered
        main content.

        Drive-by fix: set the m_hasEverNotifiedAboutPlaying before dispatching the 'playing' event, so that
        tests can check bestMediaElementForShowingPlaybackControlsManager() in the 'playing' handler.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::notifyAboutPlaying):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager const):
        * testing/Internals.cpp:
        (WebCore::Internals::bestMediaElementForShowingPlaybackControlsManager):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-05-30  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence a -Wreturn-type warning

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::glyphOrientationToCSSPrimitiveValue):

2018-05-30  Alexey Proskuryakov  <ap@apple.com>

        Build fix attempt after https://trac.webkit.org/r232198

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection): Added some toString() calls.

2018-05-30  Zalan Bujtas  <zalan@apple.com>

        [LFC] Miscellaneous fixes to get closer to geometry correctness
        https://bugs.webkit.org/show_bug.cgi?id=186083

        Reviewed by Antti Koivisto.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::isStretchedToViewport):
        (WebCore::Layout::initialContainingBlock):
        (WebCore::Layout::computedInFlowNonReplacedComputedHeight):
        (WebCore::Layout::inFlowNonReplacedComputedWidth):
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeight): lambda should capture the specification part. 
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidth):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDocumentBox const):
        (WebCore::Layout::Box::isBodyBox const):
        * layout/layouttree/LayoutBox.h:
        * rendering/style/BorderValue.h: ignore border-width when type is hidden or none. 
        (WebCore::BorderValue::boxModelWidth const):

2018-05-30  Stephen McGruer  <smcgruer@chromium.org>

        iOS: setting 'defaultValue' of input type=date from script should cause a UI update
        https://bugs.webkit.org/show_bug.cgi?id=185982

        Reviewed by Darin Adler.

        Test: fast/forms/date/date-appearance-defaultValue.html

        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::valueAttributeChanged):
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/InputType.cpp:
        (WebCore::InputType::valueAttributeChanged):
        * html/InputType.h:

2018-05-29  Nan Wang  <n_wang@apple.com>

        Unreviewed, follow-up after r232285
        https://bugs.webkit.org/show_bug.cgi?id=180871

        Removed redundant null check.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isExpanded const):

2018-05-29  Nan Wang  <n_wang@apple.com>

        AX: macOS VoiceOver doesn't announce when details element is expanded when using role group
        https://bugs.webkit.org/show_bug.cgi?id=180866
        <rdar://problem/36074338>

        Reviewed by Chris Fleizach.

        We should use is<HTMLDetailsElement> to check for the details parent instead
        of using the role.

        Added test cases to the existing test.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isExpanded const):

2018-05-29  Youenn Fablet  <youenn@apple.com>

        Add a consistency check between URL and CFURL
        https://bugs.webkit.org/show_bug.cgi?id=186057
        <rdar://problem/40258457>

        Reviewed by Geoff Garen.

        It is important that WebCore::URL used in WebCore and CFURL that gets serialized in the network pipe remain consistent.
        Otherwise, we will end-up with odd bugs.

        We add such a check when creating a CFURL from an URL.
        To make things more consistent, we also rely now more on WebCore::URL instead of directly creating a CFURL.

        * platform/URL.h:
        * platform/cf/CFURLExtras.cpp:
        (WebCore::isCFURLSameOrigin):
        * platform/cf/CFURLExtras.h:
        * platform/cf/URLCF.cpp:
        (WebCore::URL::createCFURL const):
        * platform/mac/URLMac.mm:
        (WebCore::URL::createCFURL const):
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::URLWithUserTypedString):

2018-05-29  Timothy Hatcher  <timothy@apple.com>

        Printing does not apply the right colors in all cases.

        https://bugs.webkit.org/show_bug.cgi?id=186066
        rdar://problem/40274975

        Reviewed by Tim Horton.

        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setEmulatedMedia): Call RenderTheme::platformColorsDidChange
        to invalidate the color cache.
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustMediaTypeForPrinting): Ditto.
        * page/Page.cpp:
        (WebCore::Page::defaultAppearance const): Added. Use default when not screen.
        * page/Page.h:
        (WebCore::Page::defaultAppearance const): Deleted.

2018-05-29  Per Arne Vollan  <pvollan@apple.com>

        Create typedef for HashMap<PlatformDisplayID, ScreenProperties>
        https://bugs.webkit.org/show_bug.cgi?id=186056

        Reviewed by Brent Fulgham.

        No new tests, no change in behavior.

        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenProperties):
        (WebCore::getScreenProperties):
        (WebCore::setScreenProperties):

2018-05-29  Ryosuke Niwa  <rniwa@webkit.org>

        iOS WK1: Occasional crash in sanitizedMarkupForFragmentInDocument
        https://bugs.webkit.org/show_bug.cgi?id=186011

        Reviewed by David Kilzer.

        The crash was caused by the HTML parser in sanitizedMarkupForFragmentInDocument yielding in the web thread
        when _WebThreadLock() sets webThreadShouldYield to true in the main thread.

        No new tests. This is occasionally caught by existing tests.

        * editing/markup.cpp:
        (WebCore::createPageForSanitizingWebContent): Fixed the bug by making the HTML parser never yield.
        Also release-assert that the body is never null here.
        (WebCore::sanitizedMarkupForFragmentInDocument): Removed superflous call to WTFMove since appendChild
        takes a reference, not a Ref.
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::overlayPage): Deployed the same fix.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::insertDataSynchronously): Added.
        * loader/DocumentWriter.h:

2018-05-29  Chris Dumez  <cdumez@apple.com>

        Avoid unnecessary String allocation in isPublicSuffix(const String&)
        https://bugs.webkit.org/show_bug.cgi?id=186054

        Reviewed by Sam Weinig.

        Avoid unnecessary String allocation in isPublicSuffix(const String&) by calling directly
        the decodeHostName() overload taking in a NSString*. This overload returns a NSString*,
        which is what we need. We would previously call the overloading taking in a String, which
        would return a String, which we would have to convert back to a NSString*.

        * platform/mac/PublicSuffixMac.mm:
        (WebCore::isPublicSuffix):

2018-05-29  Alex Christensen  <achristensen@webkit.org>

        Do even fewer allocations in URL host operations
        https://bugs.webkit.org/show_bug.cgi?id=186003

        Reviewed by Geoffrey Garen.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::primaryDomain):
        * loader/ResourceLoadStatistics.h:
        * platform/URL.cpp:
        (WebCore::URL::hostIsIPAddress):
        * platform/URL.h:
        * platform/mac/URLMac.mm:
        (WebCore::URL::hostIsIPAddress):
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::hostIsIPAddress):

2018-05-29  Tadeu Zagallo  <tzagallo@apple.com>

        Don't assert on m_actionsStart when setting actions on DFA nodes
        https://bugs.webkit.org/show_bug.cgi?id=185979
        <rdar://problem/39669458>

        Reviewed by Geoffrey Garen.

        DFANode::setActions is called immediately after the node is created, and once again to set
        the actions of catch-all regular expressions (.*) on the root node. That works because
        m_actionsStart is initially 0, since the root was the first node to be created, but may fail
        after minimizing the DFA, when the root may no longer be the first node, and therefore
        m_actionsStart would not be 0, even if there are no actions attached to that node.

        Test: http/tests/contentextensions/root-actions.html

        * contentextensions/DFANode.h:

2018-05-29  Nan Wang  <n_wang@apple.com>

        AX: setValue on contenteditable should preserve whitespace
        https://bugs.webkit.org/show_bug.cgi?id=185897

        Reviewed by Ryosuke Niwa.

        We should mimic typing when setting value to a contenteditable from accessibility
        instead of mutating the DOM by using setInnerText.

        Updated tests to cover this change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2018-05-29  Zalan Bujtas  <zalan@apple.com>

        [LFC] Miscellaneous fixes to ensure no assertion in LayoutContext::layout
        https://bugs.webkit.org/show_bug.cgi?id=186052

        Reviewed by Antti Koivisto.

        With this patch, LayoutContext::layout() does not assert on <html><body><div></div></body></html> anymore.

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::initializeRoot): New context root is always a layout root.
        * layout/LayoutContext.h:
        * layout/Verification.cpp:
        (WebCore::Layout::outputMismatchingBoxInformationIfNeeded):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const): we need computed margin/border/padding for width computation  
        * layout/displaytree/DisplayBox.cpp: Add clone() method to be able to carry over the 'hasValid*' bits.
        (WebCore::Display::Box::Style::Style):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::Rect::operator LayoutRect const):
        (WebCore::Display::Box::setSize):
        (WebCore::Display::Box::setHasValidMargin):
        (WebCore::Display::Box::setHasValidBorder):
        (WebCore::Display::Box::setHasValidPadding):
        (WebCore::Display::Box::Rect::setHasValidPosition):
        (WebCore::Display::Box::Rect::setHasValidSize):
        (WebCore::Display::Box::Rect::setSize):
        (WebCore::Display::Box::Rect::clone const):
        (WebCore::Display::Box::setMargin):
        (WebCore::Display::Box::setBorder):
        (WebCore::Display::Box::setPadding):
        (WebCore::Display::Box::Rect::Rect): Deleted.

2018-05-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] "Significant area painted" rendering progress event is rarely fired
        https://bugs.webkit.org/show_bug.cgi?id=186042
        <rdar://problem/40604182>

        Reviewed by Tim Horton.

        Makes a minor tweak to the size of the relevant view rect in extra zoom mode, such that it's no wider than the
        visible content rect. Previously, the width of this rect has hard-coded to a value optimized for macOS (980),
        which makes it difficult for content laid out at device width in extra zoom mode to cover a significant portion
        of the relevant view rect.

        Test: RenderingProgressTests.FirstPaintWithSignificantArea

        * page/Page.cpp:
        (WebCore::relevantViewRect):

2018-05-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] Handle relative length units
        https://bugs.webkit.org/show_bug.cgi?id=186047

        Reviewed by Dean Jackson.

        In order to correctly handle relative units, such as "em", "vw" and "vh", we need to do two things.

        First, because we need to apply the cascade to correctly compute relative lengths, we need to delay the computation of
        "blending keyframes" to when we have both keyframes data and a valid target. This also means that we need to reset blending
        keyframes when the target changes. As a result, old call sites of updateBlendingKeyframes() have been replaced by a call to
        m_blendingKeyframes.clear() and the method now gets called as part of apply() with the RenderStyle of the targeted element
        as a parameter.

        Second, and as a result of the first change, we need to update the accelerated animation state based on animation
        progress rather than when calling specific methods, such as Animation.play() and Animation.pause(), since blending
        keyframes may not be available at those more specific call sites. We now have a new updateAcceleratedAnimationState()
        method that gets called as part of apply(). We also rename animationPlayStateDidChange() to animationSuspensionStateDidChange()
        since this method was specific to suspension and had a confusing name.

        * animation/AnimationEffectReadOnly.h: Rename animationPlayStateDidChange() to animationSuspensionStateDidChange().
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::getKeyframes): Fix a crash that revealed itself after other changes in this patch. We would later
        call into ComputedStyleExtractor::animationSuspensionStateDidChange() and this would yield an assertion because we'd call potentially
        call it with a custom CSS property.
        (WebCore::KeyframeEffectReadOnly::processKeyframes): Reset blending keyframes instead of calling updateBlendingKeyframes() since
        blending keyframes is now performed asynchronously upon style resolution.
        (WebCore::KeyframeEffectReadOnly::updateBlendingKeyframes): Take the target's RenderStyle as a parameter and use it to reset the
        associated StyleResolver's state, just like we do in StyleResolver::keyframeStylesForAnimation(), so that the CSS cascade is correctly
        accounted for when computing values using relative length units. Since blending keyframes can now be computed several times for a
        given set of keyframes, since the effect's target may change, we also need to create a copy of the MutableStyleProperties to pass
        to StyleRuleKeyframe::create().
        (WebCore::KeyframeEffectReadOnly::setTarget): Reset blending keyframes instead of calling updateBlendingKeyframes() since
        blending keyframes is now performed asynchronously upon style resolution.
        (WebCore::KeyframeEffectReadOnly::apply): Update blending keyframes and the accelerated animation state.
        (WebCore::KeyframeEffectReadOnly::getAnimatedStyle): Make sure we have blending keyframes with a call to updateBlendingKeyframes()
        in case the animation hasn't naturally progressed when this method is called.
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle): Make sure we have blending keyframes with a call to
        updateBlendingKeyframes() in case the animation hasn't naturally progressed when this method is called.
        (WebCore::KeyframeEffectReadOnly::updateAcceleratedAnimationState): Account for the animation's local time and play state to update
        the accelerated animation state.
        (WebCore::KeyframeEffectReadOnly::addPendingAcceleratedAction): Record the last accelerated action in a member variable which we can
        use to determine if we're running accelerated accounting for uncommited changes.
        (WebCore::KeyframeEffectReadOnly::animationDidSeek): Only record an AcceleratedAction::Seek action if we're already running accelerated.
        (WebCore::KeyframeEffectReadOnly::animationSuspensionStateDidChange): Only record an AcceleratedAction::Pause or AcceleratedAction::Play
        action if we're already running accelerated.
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions): Ensure we clone and clear the list of accelerated actions and check that
        we have any cloned actions before proceeding any further. Then we can stop accounting for m_startedAccelerated since the list of accelerated
        actions already account for animation state changes.
        (WebCore::KeyframeEffectReadOnly::animationPlayStateDidChange): Deleted.
        * animation/KeyframeEffectReadOnly.h:
        (WebCore::KeyframeEffectReadOnly::isRunningAccelerated const): Account for the m_lastRecordedAcceleratedAction to identify whether we're running.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::play): Stop calling animationPlayStateDidChange() directly since the accelerated animation state is now updated when
        the animation's effect is applied.
        (WebCore::WebAnimation::pause): Stop calling animationPlayStateDidChange() directly since the accelerated animation state is now updated when
        the animation's effect is applied.
        (WebCore::WebAnimation::resolve): Make sure we update the finished state prior to applying the animation's effect since the play state can
        change when updating the finished state and KeyframeEffectReadOnly::updateAcceleratedAnimationState(), which is called when calling into
        KeyframeEffectReadOnly::apply(), relies on it to correctly update the accelerated animation state.
        (WebCore::WebAnimation::setSuspended): Rename animationPlayStateDidChange() to animationSuspensionStateDidChange().
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::setNewStateWithElement): Add a new public method to reset a StyleResolver's state such that we can call it when creating
        blending keyframes for JS-originated animations just like we do when creating blending keyframes for CSS Animations in keyframeStylesForAnimation().
        (WebCore::StyleResolver::keyframeStylesForAnimation): Use the new setNewStateWithElement() method.
        * css/StyleResolver.h:

2018-05-29  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Update "qtdemux: Clarify field name about stream-encryption-system" patch
        https://bugs.webkit.org/show_bug.cgi?id=186040

        Reviewed by Xabier Rodriguez-Calvar.

        s/avalaible-stream-encryption-systems/available-stream-encryption-systems/g

        Tests: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-*

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::extractEventsAndSystemsFromMessage):

2018-05-28  Zalan Bujtas  <zalan@apple.com>

        Unreviewed build fix.

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::Rect::operator LayoutRect const):

2018-05-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add Rect interface to Display::Box
        https://bugs.webkit.org/show_bug.cgi?id=186019

        Reviewed by Antti Koivisto.

        Having a dedicated Rect class and moving the geometry invalidation to it enables us to call
        displayBox.contentBox().left() even when the widht/height are not computed yet.
        Also having Rect with top/left/bottom/right interface is more aligned with the rest of the layout code than x/y/maxX/maxY.

        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::Rect::invalidateTop):
        (WebCore::Display::Box::Rect::invalidateLeft):
        (WebCore::Display::Box::Rect::invalidateWidth):
        (WebCore::Display::Box::Rect::invalidateHeight):
        (WebCore::Display::Box::Rect::hasValidPosition const):
        (WebCore::Display::Box::Rect::hasValidSize const):
        (WebCore::Display::Box::Rect::hasValidGeometry const):
        (WebCore::Display::Box::rect const):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::left const):
        (WebCore::Display::Box::bottom const):
        (WebCore::Display::Box::right const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::bottomRight const):
        (WebCore::Display::Box::size const):
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::setTopLeft):
        (WebCore::Display::Box::setTop):
        (WebCore::Display::Box::setLeft):
        (WebCore::Display::Box::setWidth):
        (WebCore::Display::Box::setHeight):
        (WebCore::Display::Box::Rect::invalidatePosition):
        (WebCore::Display::Box::Rect::setHasValidPosition):
        (WebCore::Display::Box::Rect::Rect):
        (WebCore::Display::Box::Rect::top const):
        (WebCore::Display::Box::Rect::left const):
        (WebCore::Display::Box::Rect::bottom const):
        (WebCore::Display::Box::Rect::right const):
        (WebCore::Display::Box::Rect::topLeft const):
        (WebCore::Display::Box::Rect::bottomRight const):
        (WebCore::Display::Box::Rect::size const):
        (WebCore::Display::Box::Rect::width const):
        (WebCore::Display::Box::Rect::height const):
        (WebCore::Display::Box::Rect::setTopLeft):
        (WebCore::Display::Box::Rect::setTop):
        (WebCore::Display::Box::Rect::setLeft):
        (WebCore::Display::Box::Rect::setWidth):
        (WebCore::Display::Box::Rect::setHeight):
        (WebCore::Display::Box::Rect::shiftLeftTo):
        (WebCore::Display::Box::Rect::shiftRightTo):
        (WebCore::Display::Box::Rect::shiftTopTo):
        (WebCore::Display::Box::Rect::shiftBottomTo):
        (WebCore::Display::Box::Rect::expand):
        (WebCore::Display::Box::invalidateTop): Deleted.
        (WebCore::Display::Box::invalidateLeft): Deleted.
        (WebCore::Display::Box::invalidateWidth): Deleted.
        (WebCore::Display::Box::invalidateHeight): Deleted.
        (WebCore::Display::Box::hasValidPosition const): Deleted.
        (WebCore::Display::Box::hasValidSize const): Deleted.
        (WebCore::Display::Box::hasValidGeometry const): Deleted.
        (WebCore::Display::Box::invalidatePosition): Deleted.
        (WebCore::Display::Box::setHasValidPosition): Deleted.

2018-05-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add formatting context testing codepath in FrameViewLayoutContext
        https://bugs.webkit.org/show_bug.cgi?id=186036

        Reviewed by Antti Koivisto.

        This is to verify the formatting context layout correctness.

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::LayoutContext):
        (WebCore::Layout::LayoutContext::initializeRoot):
        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::displayBoxForLayoutBox const):
        * page/FrameViewLayoutContext.cpp:
        (WebCore::layoutUsingFormattingContext):
        (WebCore::FrameViewLayoutContext::layout):

2018-05-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add layout tree verification.
        https://bugs.webkit.org/show_bug.cgi?id=186018

        Reviewed by Antti Koivisto.

        Compare layout and render tree geometry and output the mismtaching rectangles.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj: Add missing headers and make then private.
        * layout/LayoutContext.h:
        * layout/Verification.cpp: Added.
        (WebCore::Layout::outputMismatchedBoxInformationIfNeeded):
        (WebCore::Layout::verifySubtree):
        (WebCore::Layout::LayoutContext::verifyAndOutputLayoutTree const):

2018-05-28  Sam Weinig  <sam@webkit.org>

        Modernize SVGRenderStyleDefs.h
        https://bugs.webkit.org/show_bug.cgi?id=186024

        Reviewed by Daniel Bates.

        Modernized the set of enums in SVGRenderStyleDefs.h and WindRule.h by:
            - Converting them to enum classes
            - Renaming them to remove unnecessary prefix 'E's
            - Renaming values to take advantage of enum class scoping (e.g. StyleDifferenceEqual -> StyleDifference::Equal)
            - Renaming to match modern conventions (e.g BNONE -> None)

        Modernizes the following enums:
            SVGPaintType
            BaselineShift (renamed from EBaselineShift)
            TextAnchor (renamed from ETextAnchor)
            ColorInterpolation (renamed from EColorInterpolation)
            ColorRendering (renamed from EColorRendering)
            ShapeRendering (renamed from EShapeRendering)
            GlyphOrientation (renamed from EGlyphOrientation)
            AlignmentBaseline (renamed from EAlignmentBaseline)
            DominantBaseline (renamed from EDominantBaseline)
            VectorEffect (renamed from EVectorEffect)
            BufferedRendering (renamed from EBufferedRendering)
            MaskType (renamed from EMaskType)
            WindRule

        * css/CSSBasicShapes.cpp:
        (WebCore::buildPathString):
        (WebCore::buildPolygonString):
        * css/CSSBasicShapes.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator WindRule const):
        (WebCore::CSSPrimitiveValue::operator AlignmentBaseline const):
        (WebCore::CSSPrimitiveValue::operator BufferedRendering const):
        (WebCore::CSSPrimitiveValue::operator ColorInterpolation const):
        (WebCore::CSSPrimitiveValue::operator ColorRendering const):
        (WebCore::CSSPrimitiveValue::operator DominantBaseline const):
        (WebCore::CSSPrimitiveValue::operator ShapeRendering const):
        (WebCore::CSSPrimitiveValue::operator TextAnchor const):
        (WebCore::CSSPrimitiveValue::operator VectorEffect const):
        (WebCore::CSSPrimitiveValue::operator MaskType const):
        (WebCore::CSSPrimitiveValue::operator EAlignmentBaseline const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBufferedRendering const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EColorInterpolation const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EColorRendering const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EDominantBaseline const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EShapeRendering const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETextAnchor const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EVectorEffect const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EMaskType const): Deleted.
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::glyphOrientationToCSSPrimitiveValue):
        (WebCore::ComputedStyleExtractor::adjustSVGPaintForCurrentColor const):
        (WebCore::ComputedStyleExtractor::svgPropertyValue):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGlyphOrientation):
        (WebCore::StyleBuilderConverter::convertGlyphOrientationOrAuto):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueBaselineShift):
        (WebCore::StyleBuilderCustom::applyValueFill):
        (WebCore::StyleBuilderCustom::applyValueStroke):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeBasicShapePolygon):
        (WebCore::consumeBasicShapePath):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::toWindRule):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::PropertyWrapperSVGPaint::PropertyWrapperSVGPaint):
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygon::contains const):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::shapeLayerWindRule const):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::operator<<):
        * platform/graphics/Path.h:
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        * platform/graphics/WindRule.h:
        (): Deleted.
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (PlatformCALayerCocoa::shapeWindRule const):
        (PlatformCALayerCocoa::setShapeWindRule):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::calculateDrawingMode):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::contains const):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawAnimation):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeClipPath const):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::windRule const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::fillPaintType const):
        (WebCore::RenderStyle::setFillPaintColor):
        (WebCore::RenderStyle::strokePaintType const):
        (WebCore::RenderStyle::setStrokePaintColor):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialAlignmentBaseline):
        (WebCore::SVGRenderStyle::initialDominantBaseline):
        (WebCore::SVGRenderStyle::initialBaselineShift):
        (WebCore::SVGRenderStyle::initialVectorEffect):
        (WebCore::SVGRenderStyle::initialBufferedRendering):
        (WebCore::SVGRenderStyle::initialClipRule):
        (WebCore::SVGRenderStyle::initialColorInterpolation):
        (WebCore::SVGRenderStyle::initialColorInterpolationFilters):
        (WebCore::SVGRenderStyle::initialColorRendering):
        (WebCore::SVGRenderStyle::initialFillRule):
        (WebCore::SVGRenderStyle::initialShapeRendering):
        (WebCore::SVGRenderStyle::initialTextAnchor):
        (WebCore::SVGRenderStyle::initialGlyphOrientationHorizontal):
        (WebCore::SVGRenderStyle::initialGlyphOrientationVertical):
        (WebCore::SVGRenderStyle::initialFillPaintType):
        (WebCore::SVGRenderStyle::initialStrokePaintType):
        (WebCore::SVGRenderStyle::initialMaskType):
        (WebCore::SVGRenderStyle::setAlignmentBaseline):
        (WebCore::SVGRenderStyle::setDominantBaseline):
        (WebCore::SVGRenderStyle::setBaselineShift):
        (WebCore::SVGRenderStyle::setVectorEffect):
        (WebCore::SVGRenderStyle::setBufferedRendering):
        (WebCore::SVGRenderStyle::setClipRule):
        (WebCore::SVGRenderStyle::setColorInterpolation):
        (WebCore::SVGRenderStyle::setColorInterpolationFilters):
        (WebCore::SVGRenderStyle::setColorRendering):
        (WebCore::SVGRenderStyle::setFillRule):
        (WebCore::SVGRenderStyle::setShapeRendering):
        (WebCore::SVGRenderStyle::setTextAnchor):
        (WebCore::SVGRenderStyle::setGlyphOrientationHorizontal):
        (WebCore::SVGRenderStyle::setGlyphOrientationVertical):
        (WebCore::SVGRenderStyle::setMaskType):
        (WebCore::SVGRenderStyle::alignmentBaseline const):
        (WebCore::SVGRenderStyle::dominantBaseline const):
        (WebCore::SVGRenderStyle::baselineShift const):
        (WebCore::SVGRenderStyle::vectorEffect const):
        (WebCore::SVGRenderStyle::bufferedRendering const):
        (WebCore::SVGRenderStyle::clipRule const):
        (WebCore::SVGRenderStyle::colorInterpolation const):
        (WebCore::SVGRenderStyle::colorInterpolationFilters const):
        (WebCore::SVGRenderStyle::colorRendering const):
        (WebCore::SVGRenderStyle::fillRule const):
        (WebCore::SVGRenderStyle::shapeRendering const):
        (WebCore::SVGRenderStyle::textAnchor const):
        (WebCore::SVGRenderStyle::glyphOrientationHorizontal const):
        (WebCore::SVGRenderStyle::glyphOrientationVertical const):
        (WebCore::SVGRenderStyle::fillPaintType const):
        (WebCore::SVGRenderStyle::strokePaintType const):
        (WebCore::SVGRenderStyle::maskType const):
        (WebCore::SVGRenderStyle::visitedLinkFillPaintType const):
        (WebCore::SVGRenderStyle::visitedLinkStrokePaintType const):
        (WebCore::SVGRenderStyle::hasStroke const):
        (WebCore::SVGRenderStyle::hasFill const):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::StyleFillData::create):
        (WebCore::StyleFillData::operator!= const):
        (WebCore::StyleStrokeData::create):
        (WebCore::StyleStrokeData::operator!= const):
        (WebCore::StyleStopData::create):
        (WebCore::StyleStopData::operator!= const):
        (WebCore::StyleTextData::create):
        (WebCore::StyleTextData::operator!= const):
        (WebCore::StyleMiscData::create):
        (WebCore::StyleMiscData::operator!= const):
        (WebCore::StyleShadowSVGData::create):
        (WebCore::StyleShadowSVGData::operator!= const):
        (WebCore::StyleResourceData::create):
        (WebCore::StyleResourceData::operator!= const):
        (WebCore::StyleInheritedResourceData::create):
        (WebCore::StyleInheritedResourceData::operator!= const):
        (WebCore::StyleLayoutData::create):
        (WebCore::StyleLayoutData::operator!= const):
        (): Deleted.
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint):
        * rendering/svg/RenderSVGShape.h:
        (WebCore::RenderSVGShape::hasNonScalingStroke const):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::writeSVGInlineTextBox):
        * rendering/svg/SVGResources.cpp:
        (WebCore::paintingResourceFromSVGPaint):
        * rendering/svg/SVGTextChunk.cpp:
        (WebCore::SVGTextChunk::SVGTextChunk):
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift const):
        (WebCore::SVGTextLayoutEngineBaseline::dominantBaselineToAlignmentBaseline const):
        (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift const):
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle const):
        * rendering/svg/SVGTextLayoutEngineBaseline.h:

2018-05-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Web Animations] Test webanimations/css-animations.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=186031

        Reviewed by Antoine Quint.

        This is another case of std::optional value being used while it's nullopt, I guess this started to fail when we
        stopped using the WTF implementation of std::optional. The problem is that we try to get the current iteration
        of a declarative animation when the active time is unresolved.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::invalidateDOMEvents): Use value_or(0) instead of value() to get the current
        iteration of the effect.

2018-05-28  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Handle changes in the "drm-preferred-decryption-system-id" NEED_CONTEXT message.
        https://bugs.webkit.org/show_bug.cgi?id=185948

        Reviewed by Xabier Rodriguez-Calvar.

        - The "stream-encryption-systems" field of the "drm-preferred-decryption-system-id" query was renamed to
          "avalaible-stream-encryption-systems"
        - It can now be NULL, meaning there is no decryptor avalaible.

        Tests: imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-*

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::extractEventsAndSystemsFromMessage): Handle NULL value for "avalaible-stream-encryption-systems",
        moved some code to make the order of the Arrays in the pair clearer.

2018-05-27  Dan Bernstein  <mitz@apple.com>

        Reverted the changes made for https://webkit.org/b/186016

        They broke the USE(APPLE_INTERNAL_SDK) Sierra build.

2018-05-27  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix warnings about leaks found by clang static analyzer
        <https://webkit.org/b/186009>
        <rdar://problem/40574267>

        Reviewed by Daniel Bates.

        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticator::makeCredential):
        (WebCore::LocalAuthenticator::getAssertion):
        (WebCore::LocalAuthenticator::issueClientCertificate const):
        - Don't leak CF objects in early return paths, and get rid of
          `retained*` variables, by making original variables use
          RetainPtr<>.
        * bridge/objc/WebScriptObject.mm:
        (+[WebUndefined allocWithZone:]): Modernize WebUndefined by
        using NeverDestroyed<RetainPr<WebUndefined>> type.  Explicitly
        retain the object returned on each call.
        (+[WebUndefined undefined]): Explicitly autorelease the object
        returned.  Note that neither of these changes fixes the static
        analyzer warnings in this source file.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer): Use RetainPtr<> to
        stop leaking NSString objects in a loop.
        * platform/ios/wak/WAKWindow.h:
        (-[WAKWindow _newFirstResponderAfterResigning]): Mark as
        NS_RETURNS_NOT_RETAINED like the corresponding AppKit method
        since this doesn't return a new object.  This fixes some
        false-positive leaks warnings.

2018-05-27  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Avoid importing directly from subumbrella frameworks
        https://bugs.webkit.org/show_bug.cgi?id=186016

        Reviewed by Sam Weinig.

        * Configurations/WebCore.xcconfig: Removed -iframework options from OTHER_CFLAGS and
          OTHER_CPLUSPLUSFLAGS.
        * editing/mac/DictionaryLookup.mm: Import Quartz.h instead of a PDFKit header.
        * html/HTMLKeygenElement.cpp: Removed "using namespace WebCore" from this WebCore
          implementation file.
        * platform/mac/PlatformEventFactoryMac.mm: Import Carbon.h instead of HIToolbox headers.
        * platform/mac/PlatformScreenMac.mm: Import ApplicationServices.h instead of ColorSync.h
          when using SDKs earlier than 10.13.
        * platform/mediastream/CaptureDeviceManager.cpp: Enclosed the definitions in the WebCore
          namespace and removed "using namespace WebCore" from this WebCore implementation file.
        * platform/text/mac/TextEncodingRegistryMac.mm: Import Carbon.h instead of CarbonCore.h.

2018-05-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r232198) [WinCairo] cannot convert from 'WTF::StringView' to 'const WTF::String'
        https://bugs.webkit.org/show_bug.cgi?id=186027

        Unreviewed build fix

        No new tests (No behavior change).

        * platform/network/curl/AuthenticationChallengeCurl.cpp:
        (WebCore::AuthenticationChallenge::protectionSpaceFromHandle):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::willSetupSslCtx):

2018-05-27  Sam Weinig  <sam@webkit.org>

        Modernize RenderStyleConstants.h - Part 3
        https://bugs.webkit.org/show_bug.cgi?id=186015

        Reviewed by Yusuke Suzuki.

        Modernized the third and final set of enums in RenderStyleConstants.h by:
            - Converting them to enum classes
            - Renaming them to remove unnecessary prefix 'E's
            - Renaming values to take advantage of enum class scoping (e.g. StyleDifferenceEqual -> StyleDifference::Equal)

        Modernizes the following enums:
            TextDecoration
            TextDecorationSkip (renamed from TextDecorationSkipItems)
            TextUnderlinePosition
            HangingPunctuation
            SpeakAs (renamed from ESpeakAs)
            TextEmphasisPosition (renamed from TextEmphasisPositions)

        This final set of enums are mostly (TextUnderlinePosition isn't really) used as bitmasks,
        so this change also converts their uses to use OptionSet. 

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::speakAsProperty const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::speakAsProperty const):
        (WebCore::AccessibilityRenderObject::hasPlainText const):
        (WebCore::AccessibilityRenderObject::hasUnderline const):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetStyle):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilitySpeechHint]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue):
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::speakAsToCSSValue):
        (WebCore::hangingPunctuationToCSSValue):
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator HangingPunctuation const):
        (WebCore::CSSPrimitiveValue::operator TextDecoration const):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition const):
        (WebCore::CSSPrimitiveValue::operator SpeakAs const):
        (WebCore::CSSPrimitiveValue::operator ESpeakAs const): Deleted.
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextDecoration):
        (WebCore::StyleBuilderConverter::valueToEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextEmphasisPosition):
        (WebCore::StyleBuilderConverter::convertTextUnderlinePosition):
        (WebCore::StyleBuilderConverter::valueToDecorationSkip):
        (WebCore::StyleBuilderConverter::convertTextDecorationSkip):
        (WebCore::StyleBuilderConverter::convertSpeakAs):
        (WebCore::StyleBuilderConverter::convertHangingPunctuation):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getTextDecorationAttributesRespectingTypingStyle const):
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::maxLogicalBottomForTextDecorationLine const):
        (WebCore::InlineFlowBox::minLogicalTopForTextDecorationLine const):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::emphasisPositionHasNeitherLeftNorRight):
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::enclosingRendererWithTextDecoration const):
        * rendering/RenderElement.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::TextDecorationPainter):
        (WebCore::TextDecorationPainter::paintTextDecoration):
        (WebCore::collectStylesForRenderer):
        (WebCore::TextDecorationPainter::stylesForRenderer):
        * rendering/TextDecorationPainter.h:
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::changeAffectsVisualOverflow const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::textDecorationsInEffect const):
        (WebCore::RenderStyle::textDecoration const):
        (WebCore::RenderStyle::textDecorationSkip const):
        (WebCore::RenderStyle::hangingPunctuation const):
        (WebCore::RenderStyle::textEmphasisPosition const):
        (WebCore::RenderStyle::speakAs const):
        (WebCore::RenderStyle::addToTextDecorationsInEffect):
        (WebCore::RenderStyle::setTextDecorationsInEffect):
        (WebCore::RenderStyle::setTextDecoration):
        (WebCore::RenderStyle::setTextDecorationSkip):
        (WebCore::RenderStyle::setSpeakAs):
        (WebCore::RenderStyle::setTextEmphasisPosition):
        (WebCore::RenderStyle::setHangingPunctuation):
        (WebCore::RenderStyle::initialHangingPunctuation):
        (WebCore::RenderStyle::initialTextDecoration):
        (WebCore::RenderStyle::initialTextDecorationSkip):
        (WebCore::RenderStyle::initialTextUnderlinePosition):
        (WebCore::RenderStyle::initialSpeakAs):
        (WebCore::RenderStyle::initialTextEmphasisPosition):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::operator|): Deleted.
        (WebCore::operator|=): Deleted.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleVisualData.cpp:
        (WebCore::StyleVisualData::StyleVisualData):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::positionOffsetForDecoration):
        (WebCore::thicknessForDecoration):
        (WebCore::findRendererDefininingTextDecoration):
        (WebCore::SVGInlineTextBox::paintDecoration):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGInlineTextBox.h:
        * style/InlineTextBoxStyle.cpp:
        (WebCore::computeUnderlineOffset):
        (WebCore::visualOverflowForDecorations):

2018-05-26  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement margin computation
        https://bugs.webkit.org/show_bug.cgi?id=186008

        Reviewed by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeMargin const):
        (WebCore::Layout::FormattingContext::marginTop const): Deleted.
        (WebCore::Layout::FormattingContext::marginLeft const): Deleted.
        (WebCore::Layout::FormattingContext::marginBottom const): Deleted.
        (WebCore::Layout::FormattingContext::marginRight const): Deleted.
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeMargin const):
        (WebCore::Layout::BlockFormattingContext::marginTop const): Deleted.
        (WebCore::Layout::BlockFormattingContext::marginBottom const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeight):
        (WebCore::Layout::BlockFormattingContext::Geometry::computedMargin):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::_isMarginBottomCollapsedWithParent):
        (WebCore::Layout::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom):
        (WebCore::Layout::BlockMarginCollapse::marginTop): Deleted.
        (WebCore::Layout::BlockMarginCollapse::marginBottom): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithParent): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithParentMarginBottom): Deleted.
        * layout/blockformatting/BlockMarginCollapse.h: Removed.

2018-05-25  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Delete unnecessary WebCascadeList in ComplexTextController
        https://bugs.webkit.org/show_bug.cgi?id=186007

        Reviewed by Zalan Bujtas.

        Inside ComplexTextController::collectComplexTextRuns(), we chop up text based on which fonts should be
        used to render which grapheme clusters. For each grapheme cluster, we run through the font-family list
        in FontCascade::fontForCombiningCharacterSequence() and find the first font that can render the cluster.
        If no items can render the cluster, we construct a WebCascadeList and let CoreText try to figure out
        which fonts can render which clusters.

        Except there's no point, because we just determined that no font in the list can be used to render the
        cluster. CoreText isn't magic; it isn't going to somehow disagree with us. WebCascadeList is just
        useless code.

        No new tests because there is no behavior change.

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        (-[WebCascadeList initWithFont:character:]): Deleted.
        (-[WebCascadeList count]): Deleted.
        (-[WebCascadeList objectAtIndex:]): Deleted.

2018-05-25  Myles C. Maxfield  <mmaxfield@apple.com>

        Improve the performance of Font::canRenderCombiningCharacterSequence()
        https://bugs.webkit.org/show_bug.cgi?id=185933

        Reviewed by Ryosuke Niwa.

        We don't need to create a whole CTLine just to determine whether or not a font supports rendering a grapheme cluster.
        Instead, the right way to do it is just see if the font's cmap table supports every code point in the cluster.

        This patch reports a 2% progression on the attached PerformanceTest.

        Test: Layout/ComplexLongUnique.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::canRenderCombiningCharacterSequence const):
        * platform/graphics/Font.h:
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::provideStringAndAttributes): Deleted.
        (WebCore::Font::canRenderCombiningCharacterSequence const): Deleted.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::canRenderCombiningCharacterSequence const): Deleted.

2018-05-25  Eric Carlson  <eric.carlson@apple.com>

        Captions are sized incorrectly in PiP mode
        https://bugs.webkit.org/show_bug.cgi?id=186005
        <rdar://problem/39729718>

        Reviewed by Dean Jackson.

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Only sync text track bounds 
        when the size actually changes.

        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm:
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenFrame): Call syncTextTrackBounds.
        (WebCore::VideoFullscreenLayerManagerObjC::syncTextTrackBounds): Set the text track layer size
        to m_videoFullscreenFrame, it is always set the size of the PiP/Fullscreen layer.

2018-05-25  Timothy Hatcher  <timothy@apple.com>

        Setting drawsBackground to YES on a WKView doesn't take effect immediately
        https://bugs.webkit.org/show_bug.cgi?id=185885
        rdar://problem/39706506

        Reviewed by Simon Fraser.

        * page/Frame.cpp:
        (WebCore::Frame::createView): Always call updateBackgroundRecursively, it handles
        invalid colors correctly already.
        * page/FrameView.cpp:
        (WebCore::FrameView::setTransparent): Call setNeedsLayout() since base background color
        and transparent is used to update layers.
        (WebCore::FrameView::setBaseBackgroundColor): Ditto.
        (WebCore::FrameView::updateBackgroundRecursively): Schedule layout if needed.
        * page/FrameView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::viewHasTransparentBackground const): Use baseBackgroundColor
        instead of hardcoding white.
        (WebCore::RenderLayerCompositor::rootBackgroundTransparencyChanged): Fixed incorrect changed logging.

2018-05-25  Youenn Fablet  <youenn@apple.com>

        Migrate From-Origin to Cross-Origin-Resource-Policy
        https://bugs.webkit.org/show_bug.cgi?id=185840

        Reviewed by Chris Dumez.

        Tests: http/wpt/cross-origin-resource-policy/fetch-in-iframe.html
               http/wpt/cross-origin-resource-policy/fetch.html
               http/wpt/cross-origin-resource-policy/iframe-loads.html
               http/wpt/cross-origin-resource-policy/image-loads.html
               http/wpt/cross-origin-resource-policy/script-loads.html

        * platform/network/HTTPHeaderNames.in:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginResourcePolicyHeader):
        * platform/network/HTTPParsers.h:

2018-05-25  Daniel Bates  <dabates@apple.com>

        NavigationAction should not hold a strong reference to a Document
        https://bugs.webkit.org/show_bug.cgi?id=185712
        <rdar://problem/40320916>

        Reviewed by Brent Fulgham.

        Have NavigationAction store all the relevant details callers need to know about the document
        that initiated the navigation in an independent data structure, called NavigationAction::Requester,
        as opposed to holding a RefPtr to the document itself. The benefit of this approach is that it
        is a step towards ensuring that NavigationAction does not keep the document alive after navigating
        to a new document given that DocumentLoader stores the NavigationAction for the last navigation.

        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::Requester::Requester): Track all relevant details of the document that
        requested this navigation that are needed to support WebKit API/SPI. We hold the SecurityOrigin in
        a RefPtr to avoid the need to explicitly define a copy constructor and copy-assignment constructor
        because Requester needs to be copyable as NavigationAction, which owns a Requester, is copyable.
        (WebCore::shouldTreatAsSameOriginNavigation): Fix some style nits.
        (WebCore::NavigationAction::NavigationAction): Instantiate a Requester from the specified document.
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::Requester::url const): Added.
        (WebCore::NavigationAction::Requester::securityOrigin const): Added.
        (WebCore::NavigationAction::Requester::pageID const): Added.
        (WebCore::NavigationAction::Requester::frameID const): Added.
        (WebCore::NavigationAction::requester const): Returns details about the document that requested
        this navigation, if applicable.
        (WebCore::NavigationAction::isEmpty const): Update criterion for being empty to consider the
        requester.
        (WebCore::NavigationAction::setOpener): Extracted out the datatype of the parameter into a
        type alias to avoid duplication and updated this code to use the alias.
        (WebCore::NavigationAction::opener const): Ditto.
        (WebCore::NavigationAction::sourceDocument const): Deleted.

2018-05-25  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen element can be clipped by ancestor.
        https://bugs.webkit.org/show_bug.cgi?id=185980
        rdar://problem/40320006

        Reviewed by Jer Noble.

        Adds style to fullscreen css to prevent the fullscreen element from being clipped by an ancestor element.

        * css/fullscreen.css:
        (:-webkit-full-screen-ancestor:not(iframe)):

2018-05-25  Jeremy Jones  <jeremyj@apple.com>

        Use correct AVKit delegate for picture in picture failure.
        https://bugs.webkit.org/show_bug.cgi?id=185981
        rdar://problem/40549652

        Reviewed by Eric Carlson.

        No new tests since we don't have a way to simulate picture-in-picture failure.

        Use the new name for this delegate callback.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate playerViewController:failedToStartPictureInPictureWithError:]):
        (-[WebAVPlayerViewControllerDelegate playerViewControllerFailedToStartPictureInPicture:withError:]): Deleted.

2018-05-25  Zalan Bujtas  <zalan@apple.com>

        iBooks: text can disappear/flash during finger drag highlight
        https://bugs.webkit.org/show_bug.cgi?id=185993
        <rdar://problem/34026943>

        Reviewed by Simon Fraser.

        Reuse existing tiles when override rect is fully covered by the active grid.
        Also, recover dropped tiles if override rect forces us to create new ones. 

        Unable to create a reproducible test case.

        * platform/ios/LegacyTileCache.h:
        * platform/ios/LegacyTileCache.mm:
        (WebCore::LegacyTileCache::setOverrideVisibleRect):
        * platform/ios/LegacyTileLayer.mm:
        (-[LegacyTileHostLayer renderInContext:]):

2018-05-25  Eric Carlson  <eric.carlson@apple.com>

        Encode ISOWebVTTCue "strings" when logging
        https://bugs.webkit.org/show_bug.cgi?id=185991
        <rdar://problem/40563902>

        Reviewed by Jer Noble.

        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::toJSONString const): Use encodeWithURLEscapeSequences for all Strings
        taken from ISO boxes.

2018-05-25  Alex Christensen  <achristensen@webkit.org>

        URL::host should return a StringView to reduce allocations
        https://bugs.webkit.org/show_bug.cgi?id=185986

        Reviewed by Geoff Garen.

        No change in behaviour.  Just fewer allocations.

        * Modules/plugins/YouTubePluginReplacement.cpp:
        (WebCore::isYouTubeURL):
        (WebCore::processAndCreateYouTubeURL):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::hostName):
        (WebCore::WebSocketHandshake::host const):
        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::populateConditionCacheIfNeeded):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const):
        (WebCore::needsSeekingSupportQuirk):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::restartSimilarPlugIns):
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot):
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::finishedParsing):
        * html/URLUtils.h:
        (WebCore::URLUtils<T>::hostname const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFirstPartyForCookies):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::primaryDomain):
        * loader/mac/LoaderNSURLExtras.mm:
        (suggestedFilenameWithMIMEType):
        * page/Chrome.cpp:
        (WebCore::Chrome::mouseDidMoveOverElement):
        * page/Location.cpp:
        (WebCore::Location::hostname const):
        * page/Page.cpp:
        (WebCore::Page::mainFrameLoadStarted):
        * page/PerformanceMonitor.cpp:
        (WebCore::reportPageOverPostLoadResourceThreshold):
        * page/SecurityOrigin.cpp:
        (WebCore::isLoopbackIPAddress):
        (WebCore::shouldTreatAsPotentiallyTrustworthy):
        (WebCore::SecurityOrigin::isLocalHostOrLoopbackIPAddress):
        * page/SecurityOrigin.h:
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::fromURL):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesHost const):
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::hostMatches const):
        * platform/PublicSuffix.h:
        * platform/URL.cpp:
        (WebCore::URL::host const):
        (WebCore::URL::hostAndPort const):
        (WebCore::URL::isMatchingDomain const):
        * platform/URL.h:
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/network/ResourceRequestBase.h:
        (WebCore::registrableDomainsAreEqual):
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::getPartitioningDomain):
        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::createStreams):
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::hostname const):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::performGetOriginsWithRegistrationsCallbacks):

2018-05-24  Dean Jackson  <dino@apple.com>

        Need to provide a way to feature detect support for system preview
        https://bugs.webkit.org/show_bug.cgi?id=185970
        <rdar://problem/40538321>

        Reviewed by Sam Weinig.

        Update the supports function in the DOMTokenList that HTMLAnchorElement
        produces for relList to return true for the system preview token.

        Tested internally.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList const):

2018-05-25  Chris Dumez  <cdumez@apple.com>

        Minor ApplicationCacheStorage clean up
        https://bugs.webkit.org/show_bug.cgi?id=185984

        Reviewed by Youenn Fablet.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getManifestURLs):
        (WebCore::ApplicationCacheStorage::deleteCacheGroup):
        (WebCore::ApplicationCacheStorage::originsWithCache):
        (WebCore::ApplicationCacheStorage::deleteAllCaches):
        (WebCore::ApplicationCacheStorage::deleteCacheForOrigin):
        (WebCore::ApplicationCacheStorage::ApplicationCacheStorage):
        (WebCore::ApplicationCacheStorage::cacheDirectory const): Deleted.
        (WebCore::ApplicationCacheStorage::cacheGroupSize): Deleted.
        (WebCore::ApplicationCacheStorage::getOriginsWithCache): Deleted.
        (WebCore::ApplicationCacheStorage::create): Deleted.
        * loader/appcache/ApplicationCacheStorage.h:
        (WebCore::ApplicationCacheStorage::create):

2018-05-25  Sihui Liu  <sihui_liu@apple.com>

        [WKHTTPCookieStore getAllCookies] returns inconsistent creation time
        https://bugs.webkit.org/show_bug.cgi?id=185041
        <rdar://problem/34684214>

        Reviewed by Geoffrey Garen.

        Set creationtime property when creating Cookie object to keep consistency after conversion.

        New API test: WebKit.WKHTTPCookieStoreCreationTime.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * const):

2018-05-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement border and padding computation
        https://bugs.webkit.org/show_bug.cgi?id=185972

        Reviewed by Antti Koivisto.

        This patch also removes redundant Display::Box methods and adds a lightweight Edge struct.
        (Since padding is optional, if during layout we mistakenly try to access paddingTop/Left/Bottom/Right, Display::Box will assert!)

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp:
        (WebCore::Layout::FormattingContext::Geometry::computedBorder):
        (WebCore::Layout::FormattingContext::Geometry::computedPadding):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::Edges::Edges):
        (WebCore::Display::Box::setHasValidPosition):
        (WebCore::Display::Box::setWidth):
        (WebCore::Display::Box::setHeight):
        (WebCore::Display::Box::setMargin):
        (WebCore::Display::Box::setBorder):
        (WebCore::Display::Box::setPadding):
        (WebCore::Display::Box::marginTop const):
        (WebCore::Display::Box::marginLeft const):
        (WebCore::Display::Box::marginBottom const):
        (WebCore::Display::Box::marginRight const):
        (WebCore::Display::Box::paddingTop const):
        (WebCore::Display::Box::paddingLeft const):
        (WebCore::Display::Box::paddingBottom const):
        (WebCore::Display::Box::paddingRight const):
        (WebCore::Display::Box::borderTop const):
        (WebCore::Display::Box::borderLeft const):
        (WebCore::Display::Box::borderBottom const):
        (WebCore::Display::Box::borderRight const):
        (WebCore::Display::Box::invalidateSize): Deleted.
        (WebCore::Display::Box::setHasValidSize): Deleted.
        (WebCore::Display::Box::setHasValidGeometry): Deleted.
        (WebCore::Display::Box::setRect): Deleted.
        (WebCore::Display::Box::setSize): Deleted.
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isPaddingEnabled const):
        * layout/layouttree/LayoutBox.h:

2018-05-25  David Kilzer  <ddkilzer@apple.com>

        Fix issues with -dealloc methods found by clang static analyzer
        <https://webkit.org/b/185887>

        Reviewed by Joseph Pecoraro.

        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController dealloc]): Release `_minTiming` and
        `_maxTiming` to fix leaks.
        * platform/ios/WebBackgroundTaskController.mm:
        (-[WebBackgroundTaskController dealloc]): Release
        `_backgroundTaskStartBlock` and `_backgroundTaskEndBlock` to fix
        leaks.
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderRegistrationInfoList dealloc]): Release
        `_teamData` to fix leak.

2018-05-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] WebAnimation objects never get destroyed
        https://bugs.webkit.org/show_bug.cgi?id=185917
        <rdar://problem/39539371>

        Reviewed by Dean Jackson and Antti Koivisto.

        The AnimationTimeline class keeps references to WebAnimation objects organized in various ways. First, there
        are three main maps across which all animations are stored, one for non-subclass WebAnimation objects
        (m_elementToAnimationsMap), one for CSSSAnimation objects (m_elementToCSSAnimationsMap) and one for CSSTranstion
        objects (m_elementToCSSTransitionsMap). On top of that, we also keep a map to access CSSAnimation objects for
        a given element by CSS animation name (m_elementToCSSAnimationByName) and another map to access CSSTransition 
        objects for a given element by CSS property (m_elementToCSSTransitionByCSSPropertyID).

        None of the RefPtr<WebAnimation> stored in these maps would get cleared when the document would get torn down,
        which would also prevent the AnimationTimeline (and its DocumentTimeline subclass) from being destroyed.

        We now ensure that element and document tear-down correctly removes animations and clears those maps, which
        in turn allows the DocumentTimeline to be destroyed, fixing the significant memory leak introduced by Web Animations
        so far.

        Finally, we change the collection type for those maps to be ListHashRef instead of Vector to guarantee we only
        add an animation once per collection due to changes in how setEffect() and setTimeline() operate.

        Test: animations/leak-document-with-css-animation.html

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::~AnimationTimeline): There is no need to clear those tables as they'll need to be empty
        for the AnimationTimeline to even be destroyed.
        (WebCore::AnimationTimeline::relevantMapForAnimation): Change to use ListHashRef instead of Vector.
        (WebCore::AnimationTimeline::animationWasAddedToElement): Change to use ListHashRef instead of Vector.
        (WebCore::AnimationTimeline::animationWasRemovedFromElement): When an animation is removed from an element, ensure that
        references to this animation stored in the m_elementToCSSAnimationByName and m_elementToCSSTransitionByCSSPropertyID maps
        are cleared.
        (WebCore::AnimationTimeline::animationsForElement const): Change to use ListHashRef instead of Vector.
        (WebCore::AnimationTimeline::removeAnimationsForElement): Instead of just calling cancel() on all known declarative animations
        (this method used to be called cancelDeclarativeAnimationsForElement()), we now set the effect of known animations, declarative
        or not, for the provided element which will in turn call animationWasRemovedFromElement() and remove the animation from all
        maps that might keep a reference to it.
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): Replace call to removeDeclarativeAnimation() with a simple call
        to removeAnimation() which will remove references for this animation from the relevant maps.
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation): Ditto.
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForElement): Deleted.
        (WebCore::AnimationTimeline::removeDeclarativeAnimation): Deleted.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::elementToAnimationsMap): Change to use ListHashRef instead of Vector.
        (WebCore::AnimationTimeline::elementToCSSAnimationsMap): Change to use ListHashRef instead of Vector.
        (WebCore::AnimationTimeline::elementToCSSTransitionsMap): Change to use ListHashRef instead of Vector.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect): In the case of a declarative animation, we don't want to remove the animation from the relevant
        maps because while the effect was set via the API, the element still has a transition or animation set up and we must not break the
        timeline-to-animation relationship.
        (WebCore::WebAnimation::setEffectInternal): Factor parts of setEffect() out into a new method that can be called from
        AnimationTimeline::removeAnimationsForElement() to reset the m_effect member and correctly call animationWasRemovedFromElement()
        without all the Web Animations machinery of setEffect(), which is a public API that has unwanted side effects (such as rejecting
        promises).
        (WebCore::WebAnimation::setTimeline): In the case of a declarative animation, we don't want to remove the animation from the
        relevant maps because, while the timeline was set via the API, the element still has a transition or animation set up and we must
        not break the relationship.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::~DocumentTimeline):
        (WebCore::DocumentTimeline::detachFromDocument): Close the GenericTaskQueues when detaching from the document as it's too late to
        perform this work in the destructor. We also cancel the schedule timer which we had forgotten to do before.
        * animation/WebAnimation.h:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Avoid doing unnecessary work in Document::shouldEnforceContentDispositionAttachmentSandbox() when setting is disabled
        https://bugs.webkit.org/show_bug.cgi?id=185964

        Reviewed by Geoffrey Garen.

        * dom/Document.cpp:
        (WebCore::Document::shouldEnforceContentDispositionAttachmentSandbox const):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        [iOS] Avoid dlopening QuickLooks in the common case where the main resource is HTML or plain text
        https://bugs.webkit.org/show_bug.cgi?id=185966

        Reviewed by Geoffrey Garen.

        Avoid dlopening QuickLooks in the common case where the main resource is HTML or plain text
        for performance reasons.

        * loader/ios/PreviewLoader.mm:
        (WebCore::PreviewLoader::shouldCreateForMIMEType):

2018-05-24  Sam Weinig  <sam@webkit.org>

        Modernize RenderStyleConstants.h - Part 2
        https://bugs.webkit.org/show_bug.cgi?id=185901

        Reviewed by Simon Fraser.

        Modernized the second set of enums in RenderStyleConstants.h by:
            - Converting them to enum classes
            - Renaming them to remove unnecessary prefix 'E's
            - Renaming values to take advantage of enum class scoping (e.g. StyleDifferenceEqual -> StyleDifference::Equal)
            - Renaming to match modern conventions (e.g BNONE -> None)
            - Reformatting them so that each value is on its own line.

        Modernizes the following enums:
            PseudoId
            ListStyleType (renamed from EListStyleType)
            BorderFit (renamed from EBorderFit)
            AnimationFillMode (renamed from EAnimationFillMode)
            AnimationPlayState (renamed from EAnimPlayState)
            WhiteSpace (renamed from EWhiteSpace)
            TextAlignMode (renamed from ETextAlign)
            TextTransform (renamed from ETextTransform)
            TextDecorationStyle
            TextAlignLast
            TextJustify
            TextZoom
            BreakBetween
            BreakInside
            EmptyCell (renamed from EEmptyCell)
            CaptionSide (renamed from ECaptionSide)
            ListStylePosition (renamed from EListStylePosition)
            Visibility (renamed from EVisibility)
            CursorType (renamed from ECursor)
            CursorVisibility
            DisplayType (renamed from EDisplay)
            InsideLink (renamed from EInsideLink)
            PointerEvents (renamed from EPointerEvents)
            Hyphens
            TextEmphasisFill
            TextEmphasisMark
            ImageResolutionSource
            ImageResolutionSnap
            Order
            ColumnAxis
            ColumnProgression
            LineSnap
            LineAlign
            RubyPosition
            AutoRepeatType
            CSSBoxType

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::isNodeVisible const):
        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::determineAccessibilityRole):
        * accessibility/AccessibilityMediaControls.cpp:
        (WebCore::AccessibilityMediaControl::computeAccessibilityIsIgnored const):
        (WebCore::AccessibilityMediaTimeDisplay::computeAccessibilityIsIgnored const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isDOMHidden const):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
        (WebCore::AccessibilityRenderObject::isUnvisited const):
        (WebCore::AccessibilityRenderObject::isVisited const):
        (WebCore::AccessibilityRenderObject::setValue):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable const):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement):
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement):
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize):
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::backingAnimationForCompositedRenderer const):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationStyleFlagsToCSSValue):
        (WebCore::convertToPageBreak):
        (WebCore::convertToColumnBreak):
        (WebCore::ComputedStyleExtractor::styledElement const):
        (WebCore::ComputedStyleExtractor::styledRenderer const):
        (WebCore::computeRenderStyleForProperty):
        (WebCore::shapePropertyValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator CaptionSide const):
        (WebCore::CSSPrimitiveValue::operator CursorType const):
        (WebCore::CSSPrimitiveValue::operator CursorVisibility const):
        (WebCore::CSSPrimitiveValue::operator DisplayType const):
        (WebCore::CSSPrimitiveValue::operator EmptyCell const):
        (WebCore::CSSPrimitiveValue::operator ListStylePosition const):
        (WebCore::CSSPrimitiveValue::operator ListStyleType const):
        (WebCore::CSSPrimitiveValue::operator BreakBetween const):
        (WebCore::CSSPrimitiveValue::operator BreakInside const):
        (WebCore::CSSPrimitiveValue::operator TextAlignMode const):
        (WebCore::CSSPrimitiveValue::operator TextAlignLast const):
        (WebCore::CSSPrimitiveValue::operator TextJustify const):
        (WebCore::CSSPrimitiveValue::operator TextDecorationStyle const):
        (WebCore::CSSPrimitiveValue::operator TextTransform const):
        (WebCore::CSSPrimitiveValue::operator Visibility const):
        (WebCore::CSSPrimitiveValue::operator WhiteSpace const):
        (WebCore::CSSPrimitiveValue::operator RubyPosition const):
        (WebCore::CSSPrimitiveValue::operator TextEmphasisFill const):
        (WebCore::CSSPrimitiveValue::operator TextEmphasisMark const):
        (WebCore::CSSPrimitiveValue::operator PointerEvents const):
        (WebCore::CSSPrimitiveValue::operator Hyphens const):
        (WebCore::CSSPrimitiveValue::operator LineSnap const):
        (WebCore::CSSPrimitiveValue::operator LineAlign const):
        (WebCore::CSSPrimitiveValue::operator Order const):
        (WebCore::CSSPrimitiveValue::operator BorderFit const):
        (WebCore::CSSPrimitiveValue::operator ColumnAxis const):
        (WebCore::CSSPrimitiveValue::operator ColumnProgression const):
        (WebCore::CSSPrimitiveValue::operator CSSBoxType const):
        (WebCore::CSSPrimitiveValue::operator TextZoom const):
        (WebCore::CSSPrimitiveValue::operator ECaptionSide const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ECursor const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EDisplay const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EEmptyCell const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EListStylePosition const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EListStyleType const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETextAlign const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETextTransform const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EVisibility const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EWhiteSpace const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EPointerEvents const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBorderFit const): Deleted.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationFillMode):
        (WebCore::CSSToStyleMap::mapAnimationPlayState):
        * css/CSSValueKeywords.in:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match const):
        (WebCore::SelectorChecker::matchHostPseudoClass const):
        (WebCore::hasScrollbarPseudoElement):
        (WebCore::SelectorChecker::matchRecursively const):
        * css/SelectorChecker.h:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertTextAlign):
        (WebCore::StyleBuilderConverter::convertClipPath):
        (WebCore::StyleBuilderConverter::convertShapeValue):
        (WebCore::StyleBuilderConverter::createGridTrackList):
        (WebCore::StyleBuilderConverter::csstoLengthConversionDataWithTextZoomFactor):
        (WebCore::StyleBuilderConverter::convertPageBreakBetween):
        (WebCore::StyleBuilderConverter::convertPageBreakInside):
        (WebCore::StyleBuilderConverter::convertColumnBreakBetween):
        (WebCore::StyleBuilderConverter::convertColumnBreakInside):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueImageResolution):
        (WebCore::computeBaseSpecifiedFontSize):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextZoom):
        (WebCore::StyleBuilderCustom::isValidDisplayValue):
        (WebCore::StyleBuilderCustom::applyInheritDisplay):
        (WebCore::StyleBuilderCustom::applyValueDisplay):
        (WebCore::StyleBuilderCustom::applyValueWebkitTextEmphasisStyle):
        (WebCore::StyleBuilderCustom::applyValueCursor):
        (WebCore::StyleBuilderCustom::applyValueContent):
        (WebCore::StyleBuilderCustom::determineRubyTextSizeMultiplier):
        (WebCore::StyleBuilderCustom::applyValueAlt):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForElement):
        (WebCore::equivalentBlockDisplay):
        (WebCore::doesNotInheritTextDecoration):
        (WebCore::StyleResolver::adjustStyleForInterCharacterRuby):
        (WebCore::adjustDisplayContentsStyle):
        (WebCore::StyleResolver::adjustSVGElementStyle):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::isCacheableInMatchedPropertiesCache):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::elementLinkState const):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::constructFragmentsInternal):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateMarkPseudoStyleForPseudoElement):
        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        (WebCore::Document::isPageBoxVisible):
        (WebCore::Document::setVisuallyOrdered):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::isFocusable const):
        (WebCore::Element::hasDisplayContents const):
        (WebCore::Element::storeDisplayContentsStyle):
        (WebCore::Element::rendererIsNeeded):
        (WebCore::beforeOrAfterPseudoElement):
        (WebCore::Element::computedStyle):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle):
        * dom/Node.h:
        (WebCore::Node::isPseudoElement const):
        (WebCore::Node::isBeforePseudoElement const):
        (WebCore::Node::isAfterPseudoElement const):
        (WebCore::Node::pseudoId const):
        (WebCore::Node::customPseudoId const):
        * dom/Position.cpp:
        (WebCore::Position::upstream const):
        (WebCore::Position::downstream const):
        (WebCore::Position::isCandidate const):
        (WebCore::Position::rendersInDifferentPosition const):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate const):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::pseudoElementNameForEvents):
        (WebCore::PseudoElement::PseudoElement):
        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * dom/VisitedLinkState.h:
        (WebCore::VisitedLinkState::determineLinkState):
        * editing/Editing.cpp:
        (WebCore::isSpecialHTMLElement):
        (WebCore::isNodeRendered):
        * editing/TextIterator.cpp:
        (WebCore::hasVisibleTextNode):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        (WebCore::TextIterator::handleReplacedElement):
        (WebCore::TextIterator::shouldRepresentNodeOffsetZero):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        * editing/VisibleUnits.cpp:
        (WebCore::findStartOfParagraph):
        (WebCore::findEndOfParagraph):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::isFocusable const):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::rendererIsNeeded):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::rendererIsNeeded):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::isFocusable const):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isFocusable const):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::createInnerTextStyle):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::autoplayPermitted const):
        (WebCore::isMainContentForPurposesOfAutoplay):
        * html/RubyElement.cpp:
        (WebCore::RubyElement::createElementRenderer):
        * html/RubyTextElement.cpp:
        (WebCore::RubyTextElement::createElementRenderer):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::resolveCustomStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementData):
        * inspector/agents/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::pseudoElementType):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isInlineBlockBox const):
        (WebCore::Layout::Box::isBlockLevelBox const):
        (WebCore::Layout::Box::isInlineLevelBox const):
        (WebCore::Layout::Box::isBlockContainerBox const):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell):
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        (WebCore::FrameView::updateScrollCorner):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::playStatePlaying const):
        (WebCore::AnimationBase::updatePlayState):
        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToClickEvents):
        * platform/animation/Animation.cpp:
        (WebCore::Animation::Animation):
        * platform/animation/Animation.h:
        (WebCore::Animation::clearPlayState):
        (WebCore::Animation::fillMode const):
        (WebCore::Animation::playState const):
        (WebCore::Animation::setFillMode):
        (WebCore::Animation::setPlayState):
        (WebCore::Animation::fillsBackwards const):
        (WebCore::Animation::fillsForwards const):
        (WebCore::Animation::initialFillMode):
        (WebCore::Animation::initialPlayState):
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/ios/wak/WAKWindow.mm:
        (-[WAKWindow dumpTiles]):
        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):
        * rendering/ClipPathOperation.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::visibleToHitTesting const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment const):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment const):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder const):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove const):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::createTextRun const):
        * rendering/PointerEventsHitRules.cpp:
        (WebCore::PointerEventsHitRules::PointerEventsHitRules):
        * rendering/PointerEventsHitRules.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::shouldPaintSelectionGaps const):
        (WebCore::RenderBlock::adjustLogicalLeftOffsetForLine const):
        (WebCore::RenderBlock::adjustLogicalRightOffsetForLine const):
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths const):
        (WebCore::RenderBlock::firstLineBlock const):
        (WebCore::findFirstLetterBlock):
        (WebCore::RenderBlock::getFirstLetter):
        (WebCore::RenderBlock::createAnonymousBlockWithStyleAndDisplay):
        (WebCore::RenderBlock::childBoxIsUnsplittableForFragmentation const):
        (WebCore::RenderBlock::constructTextRun):
        (WebCore::RenderBlock::layoutExcludedChildren):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
        (WebCore::RenderBlock::createAnonymousBlock const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak):
        (WebCore::RenderBlockFlow::adjustForUnsplittableChild):
        (WebCore::RenderBlockFlow::updateStylesForColumnChildren):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::lowestInitialLetterLogicalBottom const):
        (WebCore::RenderBlockFlow::adjustForBorderFit const):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::lineAtIndex const):
        (WebCore::RenderBlockFlow::lineCount const):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::clearTruncation):
        (WebCore::RenderBlockFlow::findClosestTextAtAbsolutePoint):
        (WebCore::RenderBlockFlow::lineCountForTextAutosizing):
        (WebCore::RenderBlockFlow::setComputedColumnCountAndWidth):
        (WebCore::RenderBlockFlow::updateColumnProgressionFromStyle):
        (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed const):
        (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::constructLine):
        (WebCore::RenderBlockFlow::textAlignmentForLine const):
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForSegment):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::checkFloatInCleanLine):
        (WebCore::RenderBlockFlow::deleteEllipsisLineBoxes):
        (WebCore::RenderBlockFlow::checkLinesForTextOverflow):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior const):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior const):
        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::RenderBox::paintMask):
        (WebCore::RenderBox::paintClippingMask):
        (WebCore::RenderBox::positionLineBox):
        (WebCore::RenderBox::clippedOverflowRectForRepaint const):
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        (WebCore::RenderBox::computeInlineDirectionMargins const):
        (WebCore::RenderBox::skipContainingBlockForPercentHeightCalculation const):
        (WebCore::RenderBox::positionForPoint):
        (WebCore::RenderBox::isUnsplittableForPagination const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        (WebCore::RenderCounter::originalText const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::childDoesNotAffectWidthOrFlexing):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        (WebCore::RenderElement::computeFirstLineStyle const):
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::insertedIntoTree):
        (WebCore::RenderElement::willBeRemovedFromTree):
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        (WebCore::RenderElement::isVisibleInDocumentRect const):
        (WebCore::RenderElement::getCachedPseudoStyle const):
        (WebCore::RenderElement::getUncachedPseudoStyle const):
        (WebCore::RenderElement::selectionPseudoStyle const):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::visibleToHitTesting const):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::repaintOrMarkForLayout):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        (WebCore::updateStyleOfAnonymousBlockContinuations):
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        (WebCore::RenderInline::clippedOverflowRectForRepaint const):
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::createScrollbar):
        (WebCore::styleRequiresScrollbar):
        (WebCore::styleDefinesAutomaticScrollbar):
        (WebCore::computeReferenceBox):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterDescendants):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::scrollbarHasDisplayNone):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
        (WebCore::RenderLayerCompositor::requiresCompositingForFrame const):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintObject):
        (WebCore::itemOffsetForAlignment):
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::createScrollbar):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::computeMarkerStyle const):
        * rendering/RenderListMarker.cpp:
        (WebCore::effectiveListMarkerType):
        (WebCore::listMarkerSuffix):
        (WebCore::listMarkerText):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::updateContent):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMargins):
        (WebCore::RenderListMarker::suffix const):
        (WebCore::RenderListMarker::isInside const):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/RenderListMarker.h:
        * rendering/RenderMediaControlElements.cpp:
        (WebCore::RenderMediaVolumeSliderContainer::layout):
        (WebCore::RenderTextTrackContainerElement::layout):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::if):
        (RenderMenuList::itemStyle const):
        (RenderMenuList::menuStyle const):
        (RenderMenuList::createScrollbar):
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::addAnnotatedRegions):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousBlock const):
        (WebCore::RenderObject::isBeforeContent const):
        (WebCore::RenderObject::isAfterContent const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::clippedOverflowRectForRepaint const):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::textAlignmentForLine const):
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::createRubyBase const):
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        (WebCore::RenderRubyRun::layoutBlock):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine const):
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds const):
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::pseudoForScrollbarPart):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::updateCancelButtonVisibility const):
        (WebCore::RenderSearchField::visibilityForCancelButton const):
        (WebCore::RenderSearchField::menuStyle const):
        (WebCore::RenderSearchField::createScrollbar):
        * rendering/RenderSearchField.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::willInsertTableSection):
        (WebCore::RenderTable::layoutCaptions):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::adjustBorderBoxRectForPainting):
        (WebCore::RenderTable::paintMask):
        (WebCore::RenderTable::recalcSections const):
        (WebCore::RenderTable::createTableWithStyle):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleDidChange):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        (WebCore::RenderTableCell::paintMask):
        (WebCore::RenderTableCell::createTableCellWithStyle):
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::updateFromElement):
        (WebCore::RenderTableCol::isChildAllowed const):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        (WebCore::RenderTableRow::paintOutlineForRowIfNeeded):
        (WebCore::RenderTableRow::createTableRowWithStyle):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::paint):
        (WebCore::RenderTableSection::createTableSectionWithStyle):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::applyTextTransform):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::styleDidChange):
        (WebCore::RenderTextFragment::blockForAccompanyingFirstLetter):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle const):
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustMenuListButtonStyle const):
        * rendering/RenderView.cpp:
        (WebCore::rendererObscuresBackground):
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidget):
        (WebCore::RenderWidget::styleDidChange):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox const):
        (WebCore::RootInlineBox::lineSnapAdjustment const):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::computeCaretRect const):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::updateLineConstrains):
        (WebCore::SimpleLineLayout::createLineRuns):
        (WebCore::SimpleLineLayout::textAlignForLine):
        (WebCore::SimpleLineLayout::closeLineEndingAndAdjustRuns):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        * rendering/SimpleLineLayoutTextFragmentIterator.h:
        * rendering/TextDecorationPainter.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::TextDecorationPainter::paintTextDecoration):
        (WebCore::collectStylesForRenderer):
        * rendering/TextDecorationPainter.h:
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::shouldCollapseWhiteSpace):
        * rendering/line/LineWidth.cpp:
        (WebCore::newFloatShrinksLine):
        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLMath.cpp:
        (WebCore::RenderMathMLMath::layoutBlock):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::paint):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::computeRoundedRectForBoxShape):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::referenceBox):
        (WebCore::ShapeOutsideInfo::setReferenceBoxLogicalSize):
        (WebCore::ShapeOutsideInfo::logicalTopOffset const):
        (WebCore::ShapeOutsideInfo::logicalLeftOffset const):
        * rendering/style/CounterContent.h:
        (WebCore::CounterContent::CounterContent):
        (WebCore::CounterContent::listStyle const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
        (WebCore::RenderStyle::createStyleInheritingFromPseudoStyle):
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::hasUniquePseudoStyle const):
        (WebCore::RenderStyle::getCachedPseudoStyle const):
        (WebCore::RenderStyle::addCachedPseudoStyle):
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::requiresPainting):
        (WebCore::RenderStyle::hyphenString const):
        (WebCore::RenderStyle::textEmphasisMarkString const):
        (WebCore::RenderStyle::visitedDependentColor const):
        (WebCore::RenderStyle::textEmphasisMark const):
        (WebCore::RenderStyle::setColumnStylesFromPaginationMode):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setStyleType):
        (WebCore::RenderStyle::setRTLOrdering):
        (WebCore::RenderStyle::display const):
        (WebCore::RenderStyle::visibility const):
        (WebCore::RenderStyle::textAlign const):
        (WebCore::RenderStyle::textTransform const):
        (WebCore::RenderStyle::whiteSpace const):
        (WebCore::RenderStyle::emptyCells const):
        (WebCore::RenderStyle::captionSide const):
        (WebCore::RenderStyle::listStyleType const):
        (WebCore::RenderStyle::listStylePosition const):
        (WebCore::RenderStyle::cursor const):
        (WebCore::RenderStyle::insideLink const):
        (WebCore::RenderStyle::borderFit const):
        (WebCore::RenderStyle::pointerEvents const):
        (WebCore::RenderStyle::setDisplay):
        (WebCore::RenderStyle::setOriginalDisplay):
        (WebCore::RenderStyle::setVisibility):
        (WebCore::RenderStyle::setTextAlign):
        (WebCore::RenderStyle::setTextTransform):
        (WebCore::RenderStyle::setTextDecorationStyle):
        (WebCore::RenderStyle::setTextDecorationSkip):
        (WebCore::RenderStyle::setTextUnderlinePosition):
        (WebCore::RenderStyle::setDirection):
        (WebCore::RenderStyle::setTextZoom):
        (WebCore::RenderStyle::setWhiteSpace):
        (WebCore::RenderStyle::setEmptyCells):
        (WebCore::RenderStyle::setCaptionSide):
        (WebCore::RenderStyle::setListStyleType):
        (WebCore::RenderStyle::setListStylePosition):
        (WebCore::RenderStyle::setCursor):
        (WebCore::RenderStyle::setCursorVisibility):
        (WebCore::RenderStyle::setInsideLink):
        (WebCore::RenderStyle::setHyphens):
        (WebCore::RenderStyle::setBorderFit):
        (WebCore::RenderStyle::setColumnAxis):
        (WebCore::RenderStyle::setColumnProgression):
        (WebCore::RenderStyle::setTextEmphasisFill):
        (WebCore::RenderStyle::setTextEmphasisMark):
        (WebCore::RenderStyle::setRubyPosition):
        (WebCore::RenderStyle::setBreakBefore):
        (WebCore::RenderStyle::setBreakAfter):
        (WebCore::RenderStyle::setBreakInside):
        (WebCore::RenderStyle::setHangingPunctuation):
        (WebCore::RenderStyle::setLineSnap):
        (WebCore::RenderStyle::setLineAlign):
        (WebCore::RenderStyle::setPointerEvents):
        (WebCore::RenderStyle::initialDisplay):
        (WebCore::RenderStyle::initialBreakBetween):
        (WebCore::RenderStyle::initialBreakInside):
        (WebCore::RenderStyle::initialCaptionSide):
        (WebCore::RenderStyle::initialColumnAxis):
        (WebCore::RenderStyle::initialColumnProgression):
        (WebCore::RenderStyle::initialEmptyCells):
        (WebCore::RenderStyle::initialListStylePosition):
        (WebCore::RenderStyle::initialListStyleType):
        (WebCore::RenderStyle::initialTextTransform):
        (WebCore::RenderStyle::initialVisibility):
        (WebCore::RenderStyle::initialWhiteSpace):
        (WebCore::RenderStyle::initialCursor):
        (WebCore::RenderStyle::initialTextAlign):
        (WebCore::RenderStyle::initialTextDecorationStyle):
        (WebCore::RenderStyle::initialTextZoom):
        (WebCore::RenderStyle::initialHyphens):
        (WebCore::RenderStyle::initialBorderFit):
        (WebCore::RenderStyle::initialRTLOrdering):
        (WebCore::RenderStyle::initialPointerEvents):
        (WebCore::RenderStyle::initialTextEmphasisColor):
        (WebCore::RenderStyle::initialTextEmphasisFill):
        (WebCore::RenderStyle::initialTextEmphasisMark):
        (WebCore::RenderStyle::initialRubyPosition):
        (WebCore::RenderStyle::initialImageResolutionSource):
        (WebCore::RenderStyle::initialImageResolutionSnap):
        (WebCore::RenderStyle::initialTextAlignLast):
        (WebCore::RenderStyle::initialTextJustify):
        (WebCore::RenderStyle::initialCursorVisibility):
        (WebCore::RenderStyle::initialGridAutoRepeatType):
        (WebCore::RenderStyle::initialLineSnap):
        (WebCore::RenderStyle::initialLineAlign):
        (WebCore::RenderStyle::NonInheritedFlags::hasAnyPublicPseudoStyles const):
        (WebCore::RenderStyle::originalDisplay const):
        (WebCore::RenderStyle::NonInheritedFlags::hasPseudoStyle const):
        (WebCore::RenderStyle::NonInheritedFlags::setHasPseudoStyle):
        (WebCore::RenderStyle::NonInheritedFlags::setHasPseudoStyles):
        (WebCore::RenderStyle::autoWrap):
        (WebCore::RenderStyle::preserveNewline):
        (WebCore::RenderStyle::collapseWhiteSpace):
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace const):
        (WebCore::RenderStyle::hasInlineColumnAxis const):
        (WebCore::RenderStyle::isDisplayRegionType const):
        (WebCore::RenderStyle::isDisplayReplacedType):
        (WebCore::RenderStyle::isDisplayInlineType):
        (WebCore::RenderStyle::isDisplayFlexibleBox):
        (WebCore::RenderStyle::isDisplayGridBox):
        (WebCore::RenderStyle::isDisplayFlexibleOrGridBox):
        (WebCore::pseudoElementRendererIsNeeded):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        (WebCore::alwaysPageBreak):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::PseudoIdSet::has const):
        (WebCore::PseudoIdSet::add):
        * rendering/style/ShapeValue.h:
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::checkIntersection):
        (WebCore::RenderSVGModelObject::checkEnclosure):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceMasker::calculateMaskContentRepaintRect):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint const):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::paint):
        (WebCore::RenderSVGShape::nodeAtFloatPoint):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintSelectionBackground):
        (WebCore::SVGInlineTextBox::paint):
        (WebCore::SVGInlineTextBox::constructTextRun const):
        (WebCore::SVGInlineTextBox::paintDecoration):
        (WebCore::SVGInlineTextBox::nodeAtPoint):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::processRenderSVGInlineText):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::detach):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::styleForFirstLetter):
        (WebCore::RenderTreeBuilder::FirstLetter::updateAfterDescendants):
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::attachIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Inline::newChildIsInline):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        (WebCore::RenderTreeBuilder::MathML::createMathMLOperator):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::isAnonymousRubyInlineBlock):
        (WebCore::isRubyBeforeBlock):
        (WebCore::isRubyAfterBlock):
        (WebCore::createAnonymousRubyInlineBlock):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::findOrCreateParentForChild):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateBeforeDescendants):
        (WebCore::RenderTreeUpdater::updateAfterDescendants):
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::elementImplicitVisibility):
        (WebCore::CheckForVisibilityChange::CheckForVisibilityChange):
        (WebCore::CheckForVisibilityChange::~CheckForVisibilityChange):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        * style/InlineTextBoxStyle.cpp:
        (WebCore::visualOverflowForDecorations):
        * style/StyleChange.cpp:
        (WebCore::Style::determineChange):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::computedFontSizeFromSpecifiedSize):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleSharingResolver.cpp:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::affectsRenderedSubtree):
        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::resolvePseudoStyle):
        (WebCore::Style::TreeResolver::parentBoxStyle const):
        (WebCore::Style::createInheritedDisplayContentsStyleIfNeeded):
        (WebCore::Style::TreeResolver::resolveComposedTree):
        * svg/SVGElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::createElementRenderer):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Enable subsampling for progressive JPEG images
        https://bugs.webkit.org/show_bug.cgi?id=185956

        Reviewed by Said Abou-Hallawa.

        Enable subsampling for progressive JPEG images now that it is supposed (rdar://problem/5191418).
        I verified locally that such images are still loading and do not cause any hang on iOS.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::frameAllowSubsamplingAtIndex const):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Reduce copying of FontCascadeDescription objects by moving them around
        https://bugs.webkit.org/show_bug.cgi?id=185963

        Reviewed by Simon Fraser.

        Reduce copying of FontCascadeDescription objects by moving them around when possible.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLocale):
        (WebCore::StyleBuilderCustom::applyInitialFontFamily):
        (WebCore::StyleBuilderCustom::applyInheritFontFamily):
        (WebCore::StyleBuilderCustom::applyValueFontFamily):
        (WebCore::StyleBuilderCustom::applyInheritFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyValueFontVariantLigatures):
        (WebCore::StyleBuilderCustom::applyInheritFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyValueFontVariantNumeric):
        (WebCore::StyleBuilderCustom::applyInheritFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyInitialFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyValueFontVariantEastAsian):
        (WebCore::StyleBuilderCustom::applyInitialFontSize):
        (WebCore::StyleBuilderCustom::applyInheritFontSize):
        (WebCore::StyleBuilderCustom::applyInitialFontStyle):
        (WebCore::StyleBuilderCustom::applyInheritFontStyle):
        (WebCore::StyleBuilderCustom::applyValueFontStyle):
        (WebCore::StyleBuilderCustom::applyValueFontSize):
        * css/StyleResolver.cpp:
        (WebCore::checkForOrientationChange):
        (WebCore::StyleResolver::checkForTextSizeAdjust):
        (WebCore::StyleResolver::checkForZoomChange):
        (WebCore::StyleResolver::checkForGenericFamilyChange):
        (WebCore::StyleResolver::initializeFontStyle):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::setFontDescription):
        (WebCore::StyleResolver::setFontDescription):
        * css/makeprop.pl:
        (generateInitialValueSetter):
        (generateInheritValueSetter):
        (generateValueSetter):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * page/DebugPageOverlays.cpp:
        (WebCore::NonFastScrollableRegionOverlay::drawRect):
        * page/linux/ResourceUsageOverlayLinux.cpp:
        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::FontCascade):
        * platform/graphics/FontCascade.h:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::drawTextAtPoint const):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::drawText):
        * platform/win/DragImageWin.cpp:
        (WebCore::dragLabelFont):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineTextIfNeeded):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry const):
        * rendering/RenderListBox.cpp:
        (WebCore::bolder):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::computeMarkerStyle const):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::setFontFromControlSize const):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        (WebCore::TextAutoSizingValue::reset):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setFontDescription):
        (WebCore::RenderStyle::setFontSize):
        (WebCore::RenderStyle::setFontVariationSettings):
        (WebCore::RenderStyle::setFontWeight):
        (WebCore::RenderStyle::setFontStretch):
        (WebCore::RenderStyle::setFontItalic):
        * rendering/style/RenderStyle.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::styleForFirstLetter):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Avoid constructing the string "all" repeatedly in MediaQueryParser
        https://bugs.webkit.org/show_bug.cgi?id=185961

        Reviewed by Simon Fraser.

        Avoid constructing the string "all" repeatedly in MediaQueryParser by:
        - Having MediaQueryData use an std::optional<String> instead of a String
        - Updating MediaQueryParser to use a static to store the default media type
          and use it when the MediaQueryData's media type is std::nullopt.

        Also do some cleanup.

        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::commitMediaQuery):
        (WebCore::MediaQueryParser::MediaQueryData::MediaQueryData):
        (WebCore::MediaQueryParser::MediaQueryData::clear):
        (WebCore::MediaQueryParser::MediaQueryData::addExpression):
        (WebCore::MediaQueryParser::MediaQueryData::lastExpressionValid):
        (WebCore::MediaQueryParser::MediaQueryData::removeLastExpression):
        * css/parser/MediaQueryParser.h:
        (WebCore::MediaQueryParser::MediaQueryData::setMediaType):
        (WebCore::MediaQueryParser::MediaQueryData::restrictor const):
        (WebCore::MediaQueryParser::MediaQueryData::expressions):
        (WebCore::MediaQueryParser::MediaQueryData::mediaType const):
        (WebCore::MediaQueryParser::MediaQueryData::currentMediaQueryChanged const):
        (WebCore::MediaQueryParser::MediaQueryData::restrictor):
        (WebCore::MediaQueryParser::MediaQueryData::setRestrictor):
        (WebCore::MediaQueryParser::MediaQueryData::setMediaFeature):
        (WebCore::MediaQueryParser::MediaQueryData::setMediaQueryParserContext):

2018-05-24  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Hard link AppSupport instead of soft linking
        https://bugs.webkit.org/show_bug.cgi?id=185959
        <rdar://problem/40506538>

        Reviewed by Timothy Horton.

        * Configurations/WebCore.xcconfig:
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        (-[WebNetworkStateObserver initWithBlock:]):
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Cache navigator.userAgent for performance
        https://bugs.webkit.org/show_bug.cgi?id=185952

        Reviewed by Geoffrey Garen.

        Cache navigator.userAgent for performance. Previously, we would ask the client 5 times
        while loading apple.com.

        * page/Navigator.cpp:
        (WebCore::Navigator::userAgent const):
        * page/Navigator.h:
        * page/NavigatorBase.h:
        * page/NavigatorID.idl:
        * page/WorkerNavigator.cpp:
        (WebCore::WorkerNavigator::userAgent const):
        * page/WorkerNavigator.h:

2018-05-24  Chris Dumez  <cdumez@apple.com>

        Some of the work in initializeLogChannelsIfNecessary() is unnecessary for release builds
        https://bugs.webkit.org/show_bug.cgi?id=185951

        Reviewed by Geoffrey Garen.

        Some of the work in initializeLogChannelsIfNecessary() is unnecessary for release builds and slows down
        launch time. In particular, it is unnecessary to read NSDefaults to figure out which logging channels
        should be enabled.

        * platform/mac/LoggingMac.mm:
        (WebCore::logLevelString):
        * platform/unix/LoggingUnix.cpp:
        (WebCore::logLevelString):
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2018-05-24  Chris Dumez  <cdumez@apple.com>

        [iOS WK2] Layout Test imported/w3c/web-platform-tests/service-workers/service-worker/update-after-navigation-fetch-event.https.html is a flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=181499
        <rdar://problem/36443428>

        Reviewed by Youenn Fablet.

        After resolving a registration promise, we send an IPC back to the StorageProcess
        for synchronization purposes, to make sure the registration does not get updated
        before the promise's JS code has been executed. However, resolving a promise
        schedules a microtask to run the JS and we would therefore send the IPC back too
        early, thus causing flakiness. We now only send the IPC back back only after that
        microtask has run and the JS has been executed.

        * bindings/js/JSDOMPromiseDeferred.cpp:
        (WebCore::DeferredPromise::callFunction):
        (WebCore::DeferredPromise::whenSettled):
        * bindings/js/JSDOMPromiseDeferred.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):

2018-05-24  Jinho Bang  <zino@chromium.org>

        [PaymentRequest] Remove currencySystem member
        https://bugs.webkit.org/show_bug.cgi?id=185860

        Reviewed by Andy Estes.

        After a long discussion, Web Payment Working Group decided to remove
        the `currencySystem` member[1]. The currency code should be well-formed
        3-letter alphabetic code and is allowed even if that is not part of
        the official ISO 4217 list.

        [1] https://github.com/w3c/payment-request/pull/694

        Test: http/tests/inspector/paymentrequest/payment-request-internal-properties.https.html

        * Modules/paymentrequest/PaymentCurrencyAmount.h:
        * Modules/paymentrequest/PaymentCurrencyAmount.idl:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::checkAndCanonicalizeAmount):
        (WebCore::checkAndCanonicalizeTotal):
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::objectForPaymentCurrencyAmount):

2018-05-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement position computation for inflow positioned elements
        https://bugs.webkit.org/show_bug.cgi?id=185936

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowPositionedPosition const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp:
        (WebCore::Layout::BlockFormattingContext::Geometry::inFlowPositionedPosition):

2018-05-24  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement FormattingContext::placeInFlowPositionedChildren
        https://bugs.webkit.org/show_bug.cgi?id=185934

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):

2018-05-23  Joseph Pecoraro  <pecoraro@apple.com>

        Use ASCIILiteral with applicationBundleIsEqualTo in RuntimeApplicationChecksCocoa
        https://bugs.webkit.org/show_bug.cgi?id=185935

        Reviewed by Yusuke Suzuki.

        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::MacApplication::isSafari):
        (WebCore::MacApplication::isAppleMail):
        (WebCore::MacApplication::isIBooks):
        (WebCore::MacApplication::isITunes):
        (WebCore::MacApplication::isMicrosoftMessenger):
        (WebCore::MacApplication::isAdobeInstaller):
        (WebCore::MacApplication::isAOLInstantMessenger):
        (WebCore::MacApplication::isMicrosoftMyDay):
        (WebCore::MacApplication::isMicrosoftOutlook):
        (WebCore::MacApplication::isQuickenEssentials):
        (WebCore::MacApplication::isAperture):
        (WebCore::MacApplication::isVersions):
        (WebCore::MacApplication::isHRBlock):
        (WebCore::MacApplication::isIAdProducer):
        (WebCore::MacApplication::isSolidStateNetworksDownloader):
        (WebCore::IOSApplication::isMobileMail):
        (WebCore::IOSApplication::isMobileSafari):
        (WebCore::IOSApplication::isWebBookmarksD):
        (WebCore::IOSApplication::isDumpRenderTree):
        (WebCore::IOSApplication::isMobileStore):
        (WebCore::IOSApplication::isSpringBoard):
        (WebCore::IOSApplication::isWebApp):
        (WebCore::IOSApplication::isIBooks):
        (WebCore::IOSApplication::isIBooksStorytime):
        (WebCore::IOSApplication::isTheSecretSocietyHiddenMystery):
        (WebCore::IOSApplication::isCardiogram):
        (WebCore::IOSApplication::isNike):

2018-05-23  Brent Fulgham  <bfulgham@apple.com>

        Avoid keeping FormState alive longer than necessary
        https://bugs.webkit.org/show_bug.cgi?id=185877
        <rdar://problem/39329219>

        Reviewed by Ryosuke Niwa.

        A number of crash fixes were done to prevent FormState objects from being
        accessed after their relevant Frames had been destroyed. Unfortunately, this
        could cause the FormState to persist after the owning Frame had been
        destroyed, resulting in nullptr dereferences.

        This patch does the following:

        1. Uses WeakPtr's for FormState objects passed to completion handlers, rather
           than RefPtr, since those completion handlers might fire as part of the
           clean-up process during Frame destruction. This allows us to use the FormState
           if they are still valid, but gracefully handle cases where a form submission
           is cancelled in-flight.
        2. Moves FormState object as they pass through the loader.
        3. Removes some extraneous WTFMove() calls being made on bare FormState pointers.
        4. Changes FormSubmission to hold a RefPtr so we can move the FormState to the
           loader in the code path that uses it (the FormSubmission is always destroyed
           shortly afterwards).
        5. Changes the trap from Bug 183704 so that it only fires if the FormState object
           is being retained more than once.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Update for new CompletionHandler
        signature.
        * loader/FormState.cpp:
        (WebCore::FormState::willDetachPage): Revise trap to check for retain counts
        above one.
        * loader/FormState.h:
        (WebCore::FormState::weakPtrFactory const): Added.
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::state const): Revised for change to RefPtr.
        (WebCore::FormSubmission::takeState): Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected): Update for new CompletionHandler signature.
        (WebCore::FrameLoader::loadURLIntoChildFrame): Ditto.
        (WebCore::FrameLoader::loadFrameRequest): Ditto.
        (WebCore::FrameLoader::loadURL): Ditto.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::loadWithNavigationAction): Ditto.
        (WebCore::FrameLoader::loadWithDocumentLoader): Ditto.
        (WebCore::FrameLoader::reloadWithOverrideEncoding): Ditto.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        (WebCore::FrameLoader::loadDifferentDocumentItem): Ditto.
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.cpp:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):Revise to use WeakPtr for
        FormState passed to the completion handler. Remove some extraneous WTFMove()
        calls on bare pointers.
        (WebCore::PolicyChecker::checkNewWindowPolicy): Ditto.
        * loader/PolicyChecker.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow): Revise for new signatures.
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.

2018-05-23  Keith Miller  <keith_miller@apple.com>

        Expose $vm if window.internals is exposed
        https://bugs.webkit.org/show_bug.cgi?id=185900

        Reviewed by Mark Lam.

        This is useful for testing vm internals when running LayoutTests.

        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::injectInternalsObject):

2018-05-23  David Kilzer  <ddkilzer@apple.com>

        Don't create the SubimageCache just to clear an image from it
        <https://webkit.org/b/185757>

        Reviewed by Said Abou-Hallawa.

        To fix this we make SubimageCacheWithTimer::clearImage() a
        static class method that checks whether the cache exists before
        removing it.  We also make SubimageCacheWithTimer::getImage() a
        static class method, and move more methods into the
        SubimageCacheWithTimer class and make them private to reduce API
        footprint.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage): Switch to use new
        SubimageCacheWithTimer::getSubimage() static class method.
        * platform/graphics/cg/NativeImageCG.cpp:
        (WebCore::clearNativeImageSubimages): Switch to use new
        SubimageCacheWithTimer::clearImage() static class method which
        returns early if the subimage cache has not been created yet.
        This fixes the bug.

        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::s_cache): Allocate space for
        static class variable.
        (WebCore::SubimageCacheWithTimer::getSubimage): Replace instance
        method with new static class method that gets the subimage cache
        singleton and calls the subimage() instance method.
        (WebCore::SubimageCacheWithTimer::clearImage): Replace instance
        methdod with new static class method that returns early if the
        static cache singleton doesn't exist (fixes the bug), otherwise
        calls the clearImageAndSubimages() instance method.
        (WebCore::SubimageCacheWithTimer::subimage): Rename from
        getSubimage().  Use `auto` after renaming SubimageCache typedef
        to SubimageCacheHashSet.
        (WebCore::SubimageCacheWithTimer::clearImageAndSubimages):
        Rename from clearImage().  Modernize loops.
        (WebCore::SubimageCacheWithTimer::subimageCache): Change
        WebCore::subimageCache() to a static class method that creates
        the subimage cache singleton if it doesn't exist yet, and
        returns it.
        (WebCore::SubimageCacheWithTimer::subimageCacheExists): Add.
        Returns false if the subimage cache singleton has not been
        created yet.

        * platform/graphics/cg/SubimageCacheWithTimer.h:
        - Rename typedef SubimageCache to SubimageCacheHashSet to avoid
          general confusion.
        (WebCore::SubimageCacheWithTimer::getSubimage):
        (WebCore::SubimageCacheWithTimer::clearImage):
        - Change to static class methods.
        (WebCore::SubimageCacheWithTimer::SubimageCacheWithTimer):
        - Make private.
        (WebCore::SubimageCacheWithTimer::subimage):
        - Rename from getSubimage() and make private.
        (WebCore::SubimageCacheWithTimer::clearImageAndSubimages):
        - Rename from clearImage() and make private.
        (WebCore::SubimageCacheWithTimer::subimageCache):
        - Rename from WebCore::subimageCache() and make a private static
          class method.
        (WebCore::SubimageCacheWithTimer::subimageCacheExists):
        - Add private static class method.
        (WebCore::SubimageCacheWithTimer::s_cache):
        - Declare private static variable to hold singleton.

2018-05-23  Eric Carlson  <eric.carlson@apple.com>

        Avoid loading AVFoundation to check supported MIME types if possible
        https://bugs.webkit.org/show_bug.cgi?id=185839
        <rdar://problem/40182010>

        Reviewed by Jer Noble.

        Avoid loading AVFoundation to call +[AVURLAssetClass audiovisualMIMETypes] as long as possible,
        and when they are loaded send the list to the UI process so it can pass it to all extant
        and all new web processes so they can won't have call it at all.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create): Don't call ImageDecoderAVFObjC::canDecodeType if 
        ImageDecoderCG can decode the type so we don't have to load AVFoundation.
        (WebCore::ImageDecoder::supportsMediaType): Return as soon as a decoder class says
        it supports a media type to avoid calling more than one. Call ImageDecoderAVFObjC last.

        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.h:
        (WebCore::AVFoundationMIMETypeCache::setCacheMIMETypesCallback):
        * platform/graphics/avfoundation/objc/AVFoundationMIMETypeCache.mm:
        (WebCore::AVFoundationMIMETypeCache::singleton): Simplify.
        (WebCore::AVFoundationMIMETypeCache::setSupportedTypes): Cache the supplied list of types
        so we won't have to load AVFoundation when asked for types later.
        (WebCore::AVFoundationMIMETypeCache::types):
        (WebCore::AVFoundationMIMETypeCache::supportsContentType): New convenience routine.
        (WebCore::AVFoundationMIMETypeCache::canDecodeType): Ditto.
        (WebCore::AVFoundationMIMETypeCache::isAvailable const): New, check to see if AVFoundation.framework
        is available without actually loading it.
        (WebCore::AVFoundationMIMETypeCache::loadMIMETypes): Load types if possible.
        (WebCore::AVFoundationMIMETypeCache::AVFoundationMIMETypeCache): Deleted.
        (WebCore::AVFoundationMIMETypeCache::loadTypes): Deleted.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::create): Use AVFoundationMIMETypeCache::isAvailable instead
        of loading the frameworks.
        (WebCore::ImageDecoderAVFObjC::supportsMediaType): Ditto.
        (WebCore::ImageDecoderAVFObjC::supportsContentType): Use AVFoundationMIMETypeCache::supportsContentType.
        (WebCore::ImageDecoderAVFObjC::canDecodeType): Use AVFoundationMIMETypeCache::canDecodeType.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine): ASSERT if the 
        AVFoundationMIMETypeCache is empty, it shouldn't be possible to get here in that state.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Use AVFoundationMIMETypeCache::supportsContentType.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsKeySystem): Use AVFoundationMIMETypeCache::canDecodeType.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine): ASSERT if the 
        AVFoundationMIMETypeCache is empty, it shouldn't be possible to get here in that state.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType): Use AVFoundationMIMETypeCache::canDecodeType.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::canDecodeType): New.
        * platform/graphics/cg/ImageDecoderCG.h:

2018-05-23  Chris Dumez  <cdumez@apple.com>

        RenderLayer::scrollRectToVisible() should not propagate a subframe's scroll to its cross-origin parent
        https://bugs.webkit.org/show_bug.cgi?id=185664
        <rdar://problem/36185260>

        Reviewed by Simon Fraser.

        RenderLayer::scrollRectToVisible() should not propagate a subframe's scroll to its
        cross-origin parent. There was logic in FrameLoader::scrollToFragmentWithParentBoundary()
        to temporarily set the 'safeToPropagateScrollToParent' flag to false on the cross-origin
        ancestor frame during the call to FrameView::scrollToFragment(). This would correctly
        prevent RenderLayer::scrollRectToVisible() to propagate the scroll to the cross-origin
        ancestor frame when scrollRectToVisible() is called synchronously. However,
        scrollRectToVisible() can get called asynchronously in case of a dirty layout, as part
        of the post layout tasks.

        To address the issue, we get rid of the safeToPropagateScrollToParent flag on FrameView
        and instead update FrameView::safeToPropagateScrollToParent() to do the cross-origin
        check. FrameView::safeToPropagateScrollToParent() is called by RenderLayer::scrollRectToVisible()
        and this is a lot more robust than relying on a flag which gets temporarily set.

        Test: http/tests/navigation/fragment-navigation-cross-origin-subframe-no-scrolling-parent.html

        * dom/Document.cpp:
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scrollToFragmentWithParentBoundary):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::safeToPropagateScrollToParent const):
        * page/FrameView.h:

2018-05-23  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should check cached redirections
        https://bugs.webkit.org/show_bug.cgi?id=185849

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
       Log the case of a redirection with fetch error mode.

2018-05-23  Nan Wang  <n_wang@apple.com>

        AX: setValue on contenteditable should preserve whitespace
        https://bugs.webkit.org/show_bug.cgi?id=185897

        Reviewed by Chris Fleizach.

        RenderText is using its parent renderer's style to determine if
        whitespace collapsing is necessary. So when setting the innerText
        of the element in setValue, let's also set its style in order to 
        preserve whitespaces.

        Modified an existing test to cover this change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):

2018-05-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Silence GCC 8 warnings
        https://bugs.webkit.org/show_bug.cgi?id=185556

        Reviewed by Žan Doberšek.

        Silence remaining -Wcast-function-type warnings by casting through void (*)(void), aka
        GCallback.

        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
        (webkitAccessibleHyperlinkSetProperty):
        (webkitAccessibleHyperlinkGetType):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetType):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getCredentialFromPersistentStorage):

2018-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move sizing/positioning logic to helper classes
        https://bugs.webkit.org/show_bug.cgi?id=185898

        Reviewed by Antti Koivisto.

        The idea here is to move all the sizing and positioning logic to helper classes so that
        the formatting context code stays lean.
        This is similar to the dedicated BlockMarginCollapse class for the collapsing logic.
        The helper classes have only static functions. These static functions do not mutate the associated DisplayBoxes,
        but instead they simply retun the computed values.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedHeight const): Deleted.
        (WebCore::Layout::FormattingContext::computeFloatingNonReplacedHeight const): Deleted.
        (WebCore::Layout::FormattingContext::computeReplacedHeight const): Deleted.
        (WebCore::Layout::FormattingContext::computeReplacedWidth const): Deleted.
        (WebCore::Layout::FormattingContext::contentHeightForFormattingContextRoot const): Deleted.
        (WebCore::Layout::FormattingContext::computeFloatingNonReplacedWidth const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedWidth const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedHeight const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedWidth const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedPosition const): Deleted.
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedPosition const): Deleted.
        (WebCore::Layout::FormattingContext::shrinkToFitWidth const): Deleted.
        * layout/FormattingContext.h:
        * layout/FormattingContextGeometry.cpp: Copied from Source/WebCore/layout/FormattingContext.cpp.
        (WebCore::Layout::contentHeightForFormattingContextRoot):
        (WebCore::Layout::shrinkToFitWidth):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowNonReplacedHeight):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowNonReplacedWidth):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowReplacedHeight):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowReplacedWidth):
        (WebCore::Layout::FormattingContextGeometry::floatingNonReplacedHeight):
        (WebCore::Layout::FormattingContextGeometry::floatingNonReplacedWidth):
        (WebCore::Layout::FormattingContextGeometry::floatingReplacedHeight):
        (WebCore::Layout::FormattingContextGeometry::floatingReplacedWidth):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowNonReplacedPosition):
        (WebCore::Layout::FormattingContextGeometry::outOfFlowReplacedPosition):
        (WebCore::Layout::FormattingContextGeometry::replacedHeight):
        (WebCore::Layout::FormattingContextGeometry::replacedWidth):
        * layout/FormattingContextGeometry.h: Copied from Source/WebCore/layout/blockformatting/BlockFormattingContext.h.
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowNonReplacedWidth const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeInFlowNonReplacedHeight const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingContextGeometry.cpp: Added.
        (WebCore::Layout::BlockFormattingContextGeometry::inFlowNonReplacedHeight):
        (WebCore::Layout::BlockFormattingContextGeometry::inFlowNonReplacedWidth):
        (WebCore::Layout::BlockFormattingContextGeometry::inFlowReplacedHeight):
        (WebCore::Layout::BlockFormattingContextGeometry::inFlowReplacedWidth):
        (WebCore::Layout::BlockFormattingContextGeometry::staticPosition):
        * layout/blockformatting/BlockFormattingContextGeometry.h: Copied from Source/WebCore/layout/blockformatting/BlockFormattingContext.h.
        * layout/displaytree/DisplayBox.h:

2018-05-23  Antti Koivisto  <antti@apple.com>

        Page keeps reloading when viewing photos in google drive (due to too high canvas memory limits)
        https://bugs.webkit.org/show_bug.cgi?id=185903
        <rdar://problem/38420562>

        Reviewed by Simon Fraser.

        The canvas memory usage limits don't work on iOS since the current 2GB minimum limit is
        larger than the maximum process size.

        * html/HTMLCanvasElement.cpp:
        (WebCore::maxActivePixelMemory):

        Always base this on the reported ramSize() on iOS. Make it still fairly large to not risk breaking
        any currently working content. In practice the limit computes to 448MB on device at the moment.

2018-05-23  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement positioning for replaced out-of-flow elements
        https://bugs.webkit.org/show_bug.cgi?id=185902

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedPosition const):

2018-05-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Text can wrap between hyphens and commas
        https://bugs.webkit.org/show_bug.cgi?id=185899
        <rdar://problem/40118983>

        Reviewed by Zalan Bujtas.

        Chrome, Firefox, and ICU all agree that text shouldn't wrap there.

        Test: fast/text/line-break-hyphen-comma.html

        * rendering/BreakLines.cpp:

2018-05-22  Simon Fraser  <simon.fraser@apple.com>

        Add notifyutil callbacks to dump the memory cache, and the list of live Pages and Documents
        https://bugs.webkit.org/show_bug.cgi?id=185853

        Reviewed by Keith Miller.

        Add a notifyutil callback to dump the PageCache, which dumps the stats, and the list of live pages.
        This can be invoked on iOS and macOS via "notifyutil -p com.apple.WebKit.showPageCache".
        
        Add a notifyutil callback that dumps the list of all Pages, and the list of all Documents, with
        Document pointer address and URL.
        This can be invoked on iOS and macOS via "notifyutil -p com.apple.WebKit.showAllDocuments".

        * history/PageCache.cpp:
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::dump const):
        * history/PageCache.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::numberOfClients const):
        (WebCore::CachedResource::count const): Deleted.
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::MemoryCache):
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        (WebCore::MemoryCache::dumpStats):
        (WebCore::MemoryCache::dumpLRULists const):
        * loader/cache/MemoryCache.h:
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):

2018-05-22  Dean Jackson  <dino@apple.com>

        Optimized path zoom animation needs a valid UIImage and CGRect
        https://bugs.webkit.org/show_bug.cgi?id=185883
        <rdar://problem/40306056>

        Build fix.

        * loader/FrameLoadRequest.h:

2018-05-22  Commit Queue  <commit-queue@webkit.org>

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

        Broke two API tests (Requested by bfulgham_ on #webkit).

        Reverted changeset:

        "Avoid keeping FormState alive longer than necessary"
        https://bugs.webkit.org/show_bug.cgi?id=185877
        https://trac.webkit.org/changeset/232081

2018-05-22  Dean Jackson  <dino@apple.com>

        Optimized path zoom animation needs a valid UIImage and CGRect
        https://bugs.webkit.org/show_bug.cgi?id=185883
        <rdar://problem/40306056>

        Reviewed by Jon Lee.

        Pass the bounding box of the element that was clicked onto
        the UI process, so it can perform an animation from that spot.

        This involved adding an IntRect to the ResourceRequest, and passing
        that info into it from the HTMLAnchorElement, using a new struct
        called SystemPreviewInfo.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::isSystemPreview const):
        (WebCore::FrameLoadRequest::systemPreviewRect const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURL):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::urlSelected):
        * loader/FrameLoaderTypes.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::systemPreviewRect const):
        (WebCore::ResourceRequestBase::setSystemPreviewRect):
        * platform/network/ResourceRequestBase.h:

2018-05-22  Chris Dumez  <cdumez@apple.com>

        [POSIX] Use access() instead of stat() in FileSystem::fileExists()
        https://bugs.webkit.org/show_bug.cgi?id=185882

        Reviewed by Geoffrey Garen.

        Use access() instead of stat() in FileSystem::fileExists(). stat() returns a lot of information we
        do not leverage and local benchmarking on macOS shows access() being > 80% faster than stat():
        stat: 0.31567 (lower is better)
        access: 0.16074 (lower is better)
        stat: 0.303665 (lower is better)
        access: 0.165468 (lower is better)

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::FileSystem::fileExists):

2018-05-22  Brent Fulgham  <bfulgham@apple.com>

        Avoid keeping FormState alive longer than necessary
        https://bugs.webkit.org/show_bug.cgi?id=185877
        <rdar://problem/39329219>

        Reviewed by Ryosuke Niwa.

        A number of crash fixes were done to prevent FormState objects from being
        accessed after their relevant Frames had been destroyed. Unfortunately, this
        could cause the FormState to persist after the owning Frame had been
        destroyed, resulting in nullptr dereferences.

        This patch does the following:

        1. Changes to use WeakPtr's for FormState objects passed to completion handlers,
           rather than RefPtr, since those completion handlers might fire as part of
           the clean-up process during Frame destruction. This allows us to use the FormState
           if they are still valid, but gracefully handle cases where a form submission
           is cancelled in-flight.
        2. Removes some extraneous WTFMove() calls being made on bare FormState pointers.
        3. Changes the trap from Bug 183704 so that it only fires if the FormState object
           is being retained more than once.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Update for new CompletionHandler
        signature.
        * loader/FormState.cpp:
        (WebCore::FormState::willDetachPage): Revise trap to check for retain counts
        above one.
        * loader/FormState.h:
        (WebCore::FormState::weakPtrFactory const): Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest): Revise to use WeakPtr for FormState
        passed to the completion handler.
        (WebCore::FrameLoader::loadURL): Update for new CompletionHandler signature.
        (WebCore::FrameLoader::load): Ditto.
        (WebCore::FrameLoader::loadWithDocumentLoader): Ditto.
        (WebCore::FrameLoader::loadPostRequest): Ditto.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Revise to use WeakPtr for
        FormState passed to the completion handler. Remove some extraneous WTFMove()
        calls on bare pointers.
        (WebCore::PolicyChecker::checkNewWindowPolicy): Ditto.
        * loader/PolicyChecker.h:

2018-05-22  Sihui Liu  <sihui_liu@apple.com>

        Conversion between SecurityOriginData and DatabaseIdentifier is asymmetric when port is null
        https://bugs.webkit.org/show_bug.cgi?id=185715

        Reviewed by Geoffrey Garen.

        Fixed the issue of null port when converting between SecurityOriginData and DatabaseIdentifier.

        Test: WKWebView.LocalStorageFetchDataRecords.

        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::fromDatabaseIdentifier):

2018-05-22  Keith Miller  <keith_miller@apple.com>

        We should have a CoW storage for NewArrayBuffer arrays.
        https://bugs.webkit.org/show_bug.cgi?id=185003

        Reviewed by Filip Pizlo.

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::NumericSequenceConverter::convertArray):
        (WebCore::Detail::SequenceConverter::convertArray):

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] WebDriver: Network process crash when running imported/w3c/webdriver/tests/delete_cookie/delete.py::test_unknown_cookie
        https://bugs.webkit.org/show_bug.cgi?id=185867

        Reviewed by Michael Catanzaro.

        We need to null check the value returned by URL::createSoupURI() before passing it to soup.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getCookies):

2018-05-22  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement positioning for non-replaced out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185858

        Reviewed by Antti Koivisto.

        In certain cases, the out-of-flow element's final position depends on the element's size.
        Call computeOutOfFlowPosition() after width/height are resolved.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedPosition const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedPosition const):
        * layout/FormattingContext.h:

2018-05-22  Olivier Blin  <olivier.blin@softathome.com>

        Fix build without MathML
        https://bugs.webkit.org/show_bug.cgi?id=185865

        Reviewed by Frédéric Wang.

        Regression(r226654): [RenderTreeBuilder] Move MathML addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181443

        Regression(r229694): Put the DOM in IsoHeaps
        https://bugs.webkit.org/show_bug.cgi?id=183546

        No new tests, build fix.

        * mathml/MathMLUnknownElement.cpp:
        * mathml/MathMLUnknownElement.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::attach):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        * rendering/updating/RenderTreeBuilderMathML.h:

2018-05-22  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [GStreamer] Don't set the ReadyState to HaveNothing when an error occurs in playback pipeline
        https://bugs.webkit.org/show_bug.cgi?id=185725

        Reviewed by Philippe Normand.

        The ReadyState should not be set to HaveNothing when an error occurs in playback pipeline, because
        at least we should have the metadata in order to have an error in pipeline.

        Here is the definition of HaveNothing state in W3C spec https://dev.w3.org/html5/spec-preview/media-elements.html#ready-states
        "HAVE_NOTHING (numeric value 0): No information regarding the media resource is available. No data for the current
        playback position is available. Media elements whose networkState attribute is NETWORK_EMPTY are always in the HAVE_NOTHING state."

        In MSE case, this patch fixes the crashes of the followings WPT encrypted-media tests:
        - clearkey-mp4-playback-temporary-clear-encrypted.https.html
        - clearkey-mp4-playback-temporary-multikey-sequential.https.html
        - clearkey-mp4-playback-temporary-multikey-sequential-readyState.https.html

        Here is the cause of the crashes: When an error occurs in playback pipeline like no decipher key, in case of encrypted content,
        the MediaPlayerPrivateGstreamer sets NetworkState to FormatError which causes the detachment of MediaElement from MediaSource,
        then MediaPlayerPrivateGstreamer sets the ReadyState to HaveNothing which causes a trying again to play the same URI,
        thus the crash occurs because the MediaElement is detached from MediaSource, see bugzilla for more details.
        Note: these crashes should be fixed in 185242 but unfortunately it isn't the case. See bug 185242 for more details.

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

2018-05-22  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [MSE][GStreamer] Fix the deadlock caused by bug 185242 (r231351)
        https://bugs.webkit.org/show_bug.cgi?id=185723

        Reviewed by Xabier Rodriguez-Calvar.

        After a detailed investigation, we found that, the patch r231351 doesn't fix the crash that expected to fix,
        it just replaces it by a deadlock. Now the crash is fixed in the bug 185725.

        This Patch will remove a part of r231351 that causes the deadlock.

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcFreeStream):

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

        * Configurations/Base.xcconfig:
        * DerivedSources.make:
        * platform/ios/LegacyTileGrid.mm:
        (WebCore::LegacyTileGrid::dropDistantTiles):

2018-05-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] Box::isDescendantOf() should work with out-of-flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185812

        Reviewed by Antti Koivisto.

        Use the containing block chain instead of the parent chain to check for isDescendantOf().
        (containing block is not always the direct parent)

        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isDescendantOf const):

2018-05-21  Chris Nardi  <cnardi@chromium.org>

        Remove dead exception in MediaList.appendMedium
        https://bugs.webkit.org/show_bug.cgi?id=185278

        Reviewed by Chris Dumez.

        MediaList.appendMedium was able to throw an exception, but MediaQuerySet::add() always
        returned true, making it impossible for that exception to be thrown. This matched the
        spec, as |appendMedium| is not specified to throw an exception. Remove the dead code
        surrounding the exception, and make MediaQuerySet::add() return false if the medium is
        not added.

        No new/modified tests as there should be no functional changes.

        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaList::appendMedium):
        * css/MediaList.h:
        * css/MediaList.idl:

2018-05-21  Chris Dumez  <cdumez@apple.com>

        File's structured serialization should serialize lastModified attribute
        https://bugs.webkit.org/show_bug.cgi?id=185773

        Reviewed by Youenn Fablet.

        Update our implementation for the stuctured serialization of a File to include
        its lastModified attribute, as per:
        - https://w3c.github.io/FileAPI/#file-section

        No new tests, rebaselined existing test.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readFile):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:

2018-05-21  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add FormattingContext::validateGeometryConstraintsAfterLayout
        https://bugs.webkit.org/show_bug.cgi?id=185811

        Reviewed by Antti Koivisto.

        Also implement LayoutDescendantIterator and fix LayoutIterator.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/layouttree/LayoutDescendantIterator.h: Added.
        (WebCore::Layout::LayoutDescendantIterator<T>::LayoutDescendantIterator):
        (WebCore::Layout::LayoutDescendantIterator<T>::operator):
        (WebCore::Layout::LayoutDescendantIteratorAdapter<T>::LayoutDescendantIteratorAdapter):
        (WebCore::Layout::LayoutDescendantIteratorAdapter<T>::begin):
        (WebCore::Layout::LayoutDescendantIteratorAdapter<T>::end):
        (WebCore::Layout::LayoutDescendantIteratorAdapter<T>::at):
        (WebCore::Layout::descendantsOfType):
        * layout/layouttree/LayoutIterator.h:
        (WebCore::Layout::LayoutBoxTraversal::firstChild):
        (WebCore::Layout::LayoutBoxTraversal::nextAncestorSibling):
        (WebCore::Layout::LayoutBoxTraversal::next):
        (WebCore::Layout::LayoutBoxTraversal::nextSkippingChildren):
        (WebCore::Layout::Traversal::firstChild):
        (WebCore::Layout::Traversal::nextSibling):
        (WebCore::Layout::Traversal::previousSibling):
        (WebCore::Layout::Traversal::findAncestorOfType):
        (WebCore::Layout::Traversal::firstWithin):
        (WebCore::Layout::Traversal::next):
        (WebCore::Layout::LayoutIterator<T>::traversePreviousSibling):
        (WebCore::Layout::LayoutIterator<T>::traverseAncestor):
        (WebCore::Layout::Traversal::nextAncestorSibling): Deleted.
        (WebCore::Layout::Traversal::nextWithin): Deleted.

2018-05-21  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bugfix for r231968, Suspend/Resume with WK2
        https://bugs.webkit.org/show_bug.cgi?id=185830

        The flags are needed to be updated even if it is cancelled or finished to cleanup correctly.
        Also fixed trivial bug for very rare case (hard to produce the situation).

        Reviewed by Youenn Fablet.

        No new tests because WK2 is not ready for WinCairo yet in public., tested internaly.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::suspend):
        (WebCore::CurlRequest::resume):
        (WebCore::CurlRequest::pausedStatusChanged):

2018-05-21  Commit Queue  <commit-queue@webkit.org>

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

        "Caused
        TestWebKitAPI.IndexedDB.StructuredCloneBackwardCompatibility
        API test to fail" (Requested by cdumez on #webkit).

        Reverted changeset:

        "File's structured serialization should serialize lastModified
        attribute"
        https://bugs.webkit.org/show_bug.cgi?id=185773
        https://trac.webkit.org/changeset/232030

2018-05-21  Daniel Bates  <dabates@apple.com>

        REGRESSION (r231107): CSP report-only policies are ignored for beacon, importScripts, fetch(), EventSource, and XHR
        https://bugs.webkit.org/show_bug.cgi?id=185789
        <rdar://problem/40380175>

        Reviewed by Andy Estes.

        Fixes an issue where CSP report-only policies were ignored for DocumentThreadableLoader and
        PingLoad initiated loads as a result of moving CSP processing to NetworkProcess.

        Have NetworkLoadChecker implement the ContentSecurityPolicyClient interface and support logging
        console messages, sending CSP reports, and dispatching SecurityPolicyViolation events. To support
        the latter we introduce a new WebPage message, EnqueueSecurityPolicyViolationEvent, to enqueue
        a SecurityPolicyViolationEvent created from an event init dictionary on the document's event
        dispatch queue.

        Additionally, shorten the description for a ResourceError caused by CSP to "Blocked by Content Security Policy"
        because the CSP code run in NetworkProcess can now log its more detailed error description to
        Web Inspector.

        Tests: http/tests/security/contentSecurityPolicy/connect-src-beacon-allowed.html
               http/tests/security/contentSecurityPolicy/connect-src-beacon-blocked.html
               http/tests/security/contentSecurityPolicy/report-only-connect-src-beacon-redirect-blocked.php
               http/tests/security/contentSecurityPolicy/report-only-connect-src-xmlhttprequest-redirect-to-blocked.php

        * WebCore.xcodeproj/project.pbxproj: Change SecurityPolicyViolationEvent.h from a project header to
        a private header so that we can include it in WebKit code.
        * dom/Document.cpp:
        (WebCore::Document::enqueueSecurityPolicyViolationEvent): Added.
        * dom/Document.h:

        * dom/EventInit.h:
        (WebCore::EventInit::encode const):
        (WebCore::EventInit::decode
        * dom/SecurityPolicyViolationEvent.h:
        (WebCore::SecurityPolicyViolationEvent::Init::encode const):
        (WebCore::SecurityPolicyViolationEvent::Init::decode):
        Support encoding and decoding for the event.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::enqueueSecurityPolicyViolationEvent): Formerly named "dispatchSecurityPolicyViolationEvent".
        (WebCore::DocumentLoader::dispatchSecurityPolicyViolationEvent): Deleted; renamed to "enqueueSecurityPolicyViolationEvent".
        * loader/DocumentLoader.h:

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived): While I am here, move the check for whether the loader
        strategy took responsibility for performing security checks to be before we perform the CSP check to avoid doing
        such CSP checks twice in the case that the loader strategy already did them.
        (WebCore::DocumentThreadableLoader::didFail): Remove code that checked the CSP policy if the load failed. When
        the loader strategy (NetworkProcess) is responsible for performing security checks then this code would never
        be executed for a violation of a CSP report-only policy because the loader does not and should not fail the load
        for a report-only violations. As the name implies, a report-only violation is only reported. That is, it is not
        enforced such that the load is blocked; => fail the load.
        (WebCore::DocumentThreadableLoader::reportContentSecurityPolicyError): Update the error description to more
        accurately describe the error and be consistent with the error message used in NetworkProcess. This error
        message is shown for a redirect blocked by CSP regardless of whether the redirect was to a same-origin or
        cross-origin resource. I chose to make the error message more vague than necessary for simplicity because
        the CSP code will log a more detailed message for this error than could ever be captured by error message
        for the ResourceError. Also use ASCIILiteral to efficiently construct the String object for the error
        message.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation const): Build up a SecurityPolicyViolationEvent::Init and
        pass that to the delegate to dispatch.
        * page/csp/ContentSecurityPolicy.h: Export allowScriptFromSource() and allowChildContextFromSource() so that
        we can call them from WebKit.
        * page/csp/ContentSecurityPolicyClient.h: Update for renaming.
        * platform/network/ResourceRequestBase.h: Define a new requester type to be able to differentiate a request
        initiated by importScripts() from other requests. We use this to perform the appropriate CSP checks in NetworkProcess.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously): Set the requester on the ResourceRequest to ResourceRequest::Requester::ImportScripts
        so that we can differentiate this request from other requests. See remark for file ResourceRequestBase.h for
        more details.

2018-05-21  Chris Dumez  <cdumez@apple.com>

        File's structured serialization should serialize lastModified attribute
        https://bugs.webkit.org/show_bug.cgi?id=185773

        Reviewed by Youenn Fablet.

        Update our implementation for the stuctured serialization of a File to include
        its lastModified attribute, as per:
        - https://w3c.github.io/FileAPI/#file-section

        No new tests, rebaselined existing test.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::readFile):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:

2018-05-21  Jer Noble  <jer.noble@apple.com>

        Complete fix for enabling modern EME by default
        https://bugs.webkit.org/show_bug.cgi?id=185770
        <rdar://problem/40368220>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2018-05-21  Olivier Blin  <olivier.blin@softathome.com>

        [CMake][WebCore] fix sqlite include dir variable
        https://bugs.webkit.org/show_bug.cgi?id=185825

        Reviewed by Konstantin Tokarev.

        WebCore's CMakeLists.txt used SQLITE_INCLUDE_DIRS, but only SQLITE_INCLUDE_DIR is defined.

        No new tests, build fix only.

        * CMakeLists.txt: Use SQLITE_INCLUDE_DIR instead of SQLITE_INCLUDE_DIRS.

2018-05-21  Olivier Blin  <olivier.blin@softathome.com>

        Propagate WebCore system include dirs in WebCoreHeaderInterface
        https://bugs.webkit.org/show_bug.cgi?id=185822

        Reviewed by Michael Catanzaro.

        System include directories from WebCore are not propagated anymore to its users.
        For example gcrypt, sqlite and ICU system headers defined in PAL are not properly passed to WebKit build.

        This may have been caused partly by the fix in r230385:
        [CMake] WebKit should link to WebCore as a PRIVATE library if WebCore is a static library
        https://bugs.webkit.org/show_bug.cgi?id=184127

        No new tests, build fix.

        * CMakeLists.txt:

2018-05-21  Olivier Blin  <olivier.blin@softathome.com>

        Fix FrameLoader build without video
        https://bugs.webkit.org/show_bug.cgi?id=185821

        Reviewed by Michael Catanzaro.

        Regression(r231392): Release assert in ScriptController::canExecuteScripts via HTMLMediaElement::~HTMLMediaElement()
        https://bugs.webkit.org/show_bug.cgi?id=185288

        No new tests, build fix only.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): Flag HTMLMediaElement::isRunningDestructor() usage.

2018-05-21  Sam Weinig  <sam@webkit.org>

        Modernize RenderStyleConstants.h - Part 1
        https://bugs.webkit.org/show_bug.cgi?id=185809

        Reviewed by Yusuke Suzuki.
            
        Modernized the first set of enums in RenderStyleConstants.h by:
            - Converting them to enum classes
            - Renaming them to remove unnecessary prefix 'E's
            - Renaming values to take advantage of enum class scoping (e.g. StyleDifferenceEqual -> StyleDifference::Equal)
            - Renaming to match modern conventions (e.g BNONE -> None)
            - Reformatting them so that each value is on its own line.

        Modernizes the following enums:
            PrintColorAdjust
            StyleDifference
            StyleDifferenceContextSensitiveProperty
            ColumnFill
            ColumnSpan
            BorderCollapse (renamed from EBorderCollapse)
            BorderStyle (renamed from EBorderStyle)
            BorderPrecedence (renamed from EBorderPrecedence)
            OutlineIsAuto
            PositionType (renamed from EPosition)
            Float (renamed from EFloat)
            MarginCollapse (renamed from EMarginCollapse)
            BoxDecorationBreak (renamed from EBoxDecorationBreak)
            BoxSizing (renamed from EBoxSizing)
            Overflow (renamed from EOverflow)
            VerticalAlign (renamed from EVerticalAlign)
            Clear (renamed from EClear)
            TableLayoutType (renamed from ETableLayout)
            TextCombine
            FillAttachment (renamed from EFillAttachment)
            FillBox (renamed from EFillBox)
            FillRepeat (renamed from EFillRepeat)
            FillLayerType (renamed from EFillLayerType)
            FillSizeType (renamed from EFillSizeType)
            MaskSourceType (renamed from EMaskSourceType)
            BoxPack (renamed from EBoxPack)
            BoxAlignment (renamed from EBoxAlignment)
            BoxOrient (renamed from EBoxOrient)
            BoxLines (renamed from EBoxLines)
            BoxDirection (renamed from EBoxDirection)
            AlignContent (renamed from EAlignContent)
            FlexDirection (renamed from EFlexDirection)
            FlexWrap (renamed from EFlexWrap)
            ItemPosition
            OverflowAlignment
            ItemPositionType
            ContentPosition
            ContentDistribution (renamed from ContentDistributionType)
            TextSecurity (renamed from ETextSecurity)
            UserModify (renamed from EUserModify)
            UserDrag (renamed from EUserDrag)
            UserSelect (renamed from EUserSelect)
            ObjectFit
            AspectRatioType
            WordBreak (renamed from EWordBreak)
            OverflowWrap (renamed from EOverflowWrap)
            NBSPMode (renamed from ENBSPMode)
            LineBreak
            Resize (renamed from EResize)
            QuoteType
            TransformStyle3D (renamed from ETransformStyle3D)
            BackfaceVisibility (renamed from EBackfaceVisibility)
            LineClamp (renamed from ELineClamp)
            TextOverflow
            ImageRendering (renamed from EImageRendering)
            TextIndentLine
            TextIndentType
            Isolation

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetStyle):
        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate):
        (WebCore::valueForBasicShape):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::sizingBox):
        (WebCore::fillRepeatToCSSValue):
        (WebCore::fillSourceTypeToCSSValue):
        (WebCore::fillSizeToCSSValue):
        (WebCore::valueForItemPositionWithOverflowAlignment):
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator LineClampValue const):
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnFill const):
        (WebCore::CSSPrimitiveValue::operator ColumnSpan const):
        (WebCore::CSSPrimitiveValue::operator PrintColorAdjust const):
        (WebCore::CSSPrimitiveValue::operator BorderStyle const):
        (WebCore::CSSPrimitiveValue::operator OutlineIsAuto const):
        (WebCore::CSSPrimitiveValue::operator BackfaceVisibility const):
        (WebCore::CSSPrimitiveValue::operator FillAttachment const):
        (WebCore::CSSPrimitiveValue::operator FillBox const):
        (WebCore::CSSPrimitiveValue::operator FillRepeat const):
        (WebCore::CSSPrimitiveValue::operator BoxPack const):
        (WebCore::CSSPrimitiveValue::operator BoxAlignment const):
        (WebCore::CSSPrimitiveValue::operator BoxDecorationBreak const):
        (WebCore::CSSPrimitiveValue::operator BoxSizing const):
        (WebCore::CSSPrimitiveValue::operator BoxDirection const):
        (WebCore::CSSPrimitiveValue::operator BoxLines const):
        (WebCore::CSSPrimitiveValue::operator BoxOrient const):
        (WebCore::CSSPrimitiveValue::operator Clear const):
        (WebCore::CSSPrimitiveValue::operator FlexDirection const):
        (WebCore::CSSPrimitiveValue::operator AlignContent const):
        (WebCore::CSSPrimitiveValue::operator FlexWrap const):
        (WebCore::CSSPrimitiveValue::operator Float const):
        (WebCore::CSSPrimitiveValue::operator LineBreak const):
        (WebCore::CSSPrimitiveValue::operator MarginCollapse const):
        (WebCore::CSSPrimitiveValue::operator NBSPMode const):
        (WebCore::CSSPrimitiveValue::operator Overflow const):
        (WebCore::CSSPrimitiveValue::operator PositionType const):
        (WebCore::CSSPrimitiveValue::operator Resize const):
        (WebCore::CSSPrimitiveValue::operator TableLayoutType const):
        (WebCore::CSSPrimitiveValue::operator TextSecurity const):
        (WebCore::CSSPrimitiveValue::operator UserDrag const):
        (WebCore::CSSPrimitiveValue::operator UserModify const):
        (WebCore::CSSPrimitiveValue::operator UserSelect const):
        (WebCore::CSSPrimitiveValue::operator VerticalAlign const):
        (WebCore::CSSPrimitiveValue::operator WordBreak const):
        (WebCore::CSSPrimitiveValue::operator OverflowWrap const):
        (WebCore::CSSPrimitiveValue::operator TextCombine const):
        (WebCore::CSSPrimitiveValue::operator TextOverflow const):
        (WebCore::CSSPrimitiveValue::operator ObjectFit const):
        (WebCore::CSSPrimitiveValue::operator Isolation const):
        (WebCore::CSSPrimitiveValue::operator BorderCollapse const):
        (WebCore::CSSPrimitiveValue::operator ImageRendering const):
        (WebCore::CSSPrimitiveValue::operator TransformStyle3D const):
        (WebCore::CSSPrimitiveValue::operator ItemPosition const):
        (WebCore::CSSPrimitiveValue::operator OverflowAlignment const):
        (WebCore::CSSPrimitiveValue::operator ContentPosition const):
        (WebCore::CSSPrimitiveValue::operator ContentDistribution const):
        (WebCore::CSSPrimitiveValue::operator EBorderStyle const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBackfaceVisibility const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFillAttachment const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFillBox const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFillRepeat const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxPack const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxAlignment const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxDecorationBreak const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxSizing const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxDirection const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxLines const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBoxOrient const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EClear const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFlexDirection const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EAlignContent const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFlexWrap const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EFloat const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EMarginCollapse const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ENBSPMode const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EOverflow const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EPosition const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EResize const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETableLayout const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETextSecurity const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EUserDrag const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EUserModify const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EUserSelect const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EVerticalAlign const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EWordBreak const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EOverflowWrap const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EBorderCollapse const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EImageRendering const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ETransformStyle3D const): Deleted.
        (WebCore::CSSPrimitiveValue::operator ContentDistributionType const): Deleted.
        * css/CSSProperties.json:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapFillAttachment):
        (WebCore::CSSToStyleMap::mapFillSize):
        (WebCore::CSSToStyleMap::mapFillMaskSourceType):
        * css/CSSValueKeywords.in:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertResize):
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueTextIndent):
        (WebCore::StyleBuilderCustom::applyInheritWebkitAspectRatio):
        (WebCore::StyleBuilderCustom::applyValueWebkitAspectRatio):
        (WebCore::StyleBuilderCustom::applyValueContent):
        * css/StyleResolver.cpp:
        (WebCore::isScrollableOverflow):
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/StyleResolver.h:
        * css/makeprop.pl:
        (getFillLayerType):
        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::computeEditabilityFromComputedStyle):
        (WebCore::Node::canStartSelection const):
        * dom/Position.cpp:
        (WebCore::Position::nodeIsUserSelectNone):
        (WebCore::Position::nodeIsUserSelectAll):
        * dom/Range.cpp:
        (WebCore::Range::collectSelectionRectsWithoutUnionInteriorLines const):
        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/Editing.cpp:
        (WebCore::isSpecialHTMLElement):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        * editing/VisibleUnits.cpp:
        (WebCore::backwardSearchForBoundaryWithTextIterator):
        (WebCore::forwardSearchForBoundaryWithTextIterator):
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::fontAttributesForSelectionStart const):
        * editing/cocoa/HTMLConverter.mm:
        (WebCore::editingAttributedStringFromRange):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::shouldTruncateText const):
        (WebCore::HTMLInputElement::createInnerTextStyle):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::RenderSliderContainer::layout):
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::resolveCustomStyle):
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::resolveCustomStyle):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isRelativelyPositioned const):
        (WebCore::Layout::Box::isStickyPositioned const):
        (WebCore::Layout::Box::isAbsolutelyPositioned const):
        (WebCore::Layout::Box::isFixedPositioned const):
        (WebCore::Layout::Box::isFloatingPositioned const):
        (WebCore::Layout::Box::isOverflowVisible const):
        * page/DragController.cpp:
        (WebCore::DragController::draggableElement const):
        * page/Frame.cpp:
        (WebCore::Frame::rangeForPoint):
        * page/FrameView.cpp:
        (WebCore::paginationModeForRenderStyle):
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::applyPaginationToViewport):
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::calculateExtendedBackgroundMode const):
        (WebCore::FrameView::adjustScrollStepForFixedContent):
        * page/SpatialNavigation.cpp:
        (WebCore::canScrollInDirection):
        (WebCore::canBeScrolledIntoView):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::nodeRespondingToScrollWheelEvents):
        * page/mac/EventHandlerMac.mm:
        (WebCore::scrolledToEdgeInDominantDirection):
        * rendering/BorderEdge.cpp:
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::obscuresBackgroundEdge const):
        (WebCore::BorderEdge::obscuresBackground const):
        * rendering/BorderEdge.h:
        (WebCore::BorderEdge::style const):
        (WebCore::BorderEdge::hasVisibleColorAndStyle const):
        * rendering/FlexibleBoxAlgorithm.h:
        (WebCore::FlexLayoutAlgorithm::isMultiline const):
        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::FloatingObject):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):
        (WebCore::GridTrackSizingAlgorithm::stretchAutoTracks):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated const):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::interpolationQualityFromStyle):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::verticalAlign const):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::paintFillLayer):
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::containingBlockInfo const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removePositionedObjectsIfNeeded):
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::isSelfCollapsingBlock const):
        (WebCore::RenderBlock::addOverflowFromPositionedObjects):
        (WebCore::RenderBlock::markFixedPositionObjectForLayoutIfNeeded):
        (WebCore::RenderBlock::isSelectionRoot const):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths const):
        (WebCore::RenderBlock::adjustBorderBoxLogicalHeightForBoxSizing const):
        (WebCore::RenderBlock::adjustContentBoxLogicalHeightForBoxSizing const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::MarginInfo::MarginInfo):
        (WebCore::RenderBlockFlow::willCreateColumns const):
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild const):
        (WebCore::RenderBlockFlow::setMustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::setMustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::mustDiscardMarginBefore const):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfter const):
        (WebCore::RenderBlockFlow::mustDiscardMarginBeforeForChild const):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfterForChild const):
        (WebCore::RenderBlockFlow::mustSeparateMarginBeforeForChild const):
        (WebCore::RenderBlockFlow::mustSeparateMarginAfterForChild const):
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::styleWillChange):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):
        (WebCore::RenderBlockFlow::computeInlinePreferredLogicalWidths const):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::expansionBehaviorForInlineTextBox):
        (WebCore::isCollapsibleSpace):
        (WebCore::RenderBlockFlow::layoutRunsAndFloats):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::updateFromStyle):
        (WebCore::RenderBox::includeVerticalScrollbarSize const):
        (WebCore::RenderBox::includeHorizontalScrollbarSize const):
        (WebCore::RenderBox::intrinsicScrollbarLogicalWidth const):
        (WebCore::RenderBox::hasVerticalScrollbarWithAutoBehavior const):
        (WebCore::RenderBox::hasHorizontalScrollbarWithAutoBehavior const):
        (WebCore::RenderBox::adjustBorderBoxLogicalWidthForBoxSizing const):
        (WebCore::RenderBox::adjustBorderBoxLogicalHeightForBoxSizing const):
        (WebCore::RenderBox::adjustContentBoxLogicalWidthForBoxSizing const):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing const):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const):
        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::RenderBox::foregroundIsKnownToBeOpaqueInRect const):
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer const):
        (WebCore::RenderBox::computeRectForRepaint const):
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        (WebCore::RenderBox::columnFlexItemHasStretchAlignment const):
        (WebCore::RenderBox::isStretchingColumnFlexItem const):
        (WebCore::RenderBox::hasStretchedLogicalWidth const):
        (WebCore::RenderBox::sizesLogicalWidthToFitContent const):
        (WebCore::RenderBox::computeLogicalHeight const):
        (WebCore::RenderBox::computeIntrinsicLogicalContentHeightUsing const):
        (WebCore::RenderBox::createsNewFormattingContext const):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollsOverflowX const):
        (WebCore::RenderBox::scrollsOverflowY const):
        (WebCore::RenderBox::selfAlignmentNormalBehavior const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::calculateFillTileSize const):
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry const):
        (WebCore::styleRequiresClipPolygon):
        (WebCore::borderStyleFillsBorderArea):
        (WebCore::borderStyleHasInnerDetail):
        (WebCore::borderStyleIsDottedOrDashed):
        (WebCore::borderStyleHasUnmatchedColorsAtCorner):
        (WebCore::borderStylesRequireMitre):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator):
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference const):
        (WebCore::RenderElement::shouldRepaintForStyleDifference const):
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::didAttachChild):
        (WebCore::RenderElement::propagateStyleToAnonymousChildren):
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::styleDidChange):
        (WebCore::mustRepaintFillLayers):
        (WebCore::RenderElement::selectionColor const):
        (WebCore::RenderElement::selectionBackgroundColor const):
        (WebCore::RenderElement::drawLineForBoxSide const):
        (WebCore::RenderElement::paintFocusRing):
        (WebCore::RenderElement::paintOutline):
        (WebCore::RenderElement::updateOutlineAutoAncestor):
        (WebCore::includeNonFixedHeight):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::hasHiddenBackface const):
        (WebCore::RenderElement::canContainAbsolutelyPositionedObjects const):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::firstLineBaseline const):
        (WebCore::contentAlignmentNormalBehavior):
        (WebCore::RenderFlexibleBox::styleDidChange):
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems):
        (WebCore::RenderFlexibleBox::isLeftToRightFlow const):
        (WebCore::RenderFlexibleBox::isMultiline const):
        (WebCore::RenderFlexibleBox::adjustChildSizeForMinAndMax):
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution):
        (WebCore::initialJustifyContentOffset):
        (WebCore::justifyContentSpaceBetweenChildren):
        (WebCore::alignmentOffset):
        (WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::staticCrossAxisPositionForPositionedChild):
        (WebCore::RenderFlexibleBox::alignmentForChild const):
        (WebCore::RenderFlexibleBox::needToStretchChildLogicalHeight const):
        (WebCore::RenderFlexibleBox::mainAxisOverflowForChild const):
        (WebCore::RenderFlexibleBox::crossAxisOverflowForChild const):
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):
        (WebCore::RenderFlexibleBox::layoutColumnReverse):
        (WebCore::initialAlignContentOffset):
        (WebCore::alignContentSpaceBetweenChildren):
        (WebCore::RenderFlexibleBox::alignFlexLines):
        (WebCore::RenderFlexibleBox::alignChildren):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::overflowRectForFragmentedFlowPortion):
        * rendering/RenderFullScreen.cpp:
        (WebCore::createFullScreenStyle):
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::selfAlignmentChangedToStretch const):
        (WebCore::RenderGrid::selfAlignmentChangedFromStretch const):
        (WebCore::RenderGrid::styleDidChange):
        (WebCore::contentAlignmentNormalBehaviorGrid):
        (WebCore::computeOverflowAlignmentOffset):
        (WebCore::RenderGrid::isInlineBaselineAlignedChild const):
        (WebCore::RenderGrid::columnAxisPositionForChild const):
        (WebCore::RenderGrid::rowAxisPositionForChild const):
        (WebCore::RenderGrid::resolveAutoStartGridPosition const):
        (WebCore::RenderGrid::resolveAutoEndGridPosition const):
        (WebCore::resolveContentDistributionFallback):
        (WebCore::contentDistributionOffset):
        (WebCore::RenderGrid::computeContentPositionAndDistributionOffset const):
        * rendering/RenderGrid.h:
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::requiresLayer const):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect const):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleWillChange):
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::isContainerForPositioned):
        (WebCore::RenderLayer::enclosingAncestorForPosition const):
        (WebCore::accumulateOffsetTowardsAncestor):
        (WebCore::RenderLayer::canResize const):
        (WebCore::RenderLayer::resize):
        (WebCore::RenderLayer::scrollCornerRect const):
        (WebCore::resizerCornerRect):
        (WebCore::RenderLayer::hasOverflowControls const):
        (WebCore::styleRequiresScrollbar):
        (WebCore::styleDefinesAutomaticScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::paintResizer):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        (WebCore::canDirectlyCompositeBackgroundBackgroundImage):
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer const):
        (WebCore::backgroundRectForBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::isScrollableOverflow):
        (WebCore::styleChangeRequiresLayerRebuild):
        (WebCore::RenderLayerCompositor::layerStyleChanged):
        (WebCore::RenderLayerCompositor::reasonsForCompositing const):
        (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility const):
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason const):
        (WebCore::RenderLayerCompositor::isViewportConstrainedFixedOrStickyLayer const):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition const):
        (WebCore::RenderLayerCompositor::layerHas3DContent const):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::styleWillChange):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::isColumnSpanningDescendant const):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::requiresBalancing const):
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderMultiColumnSpannerPlaceholder.cpp:
        (WebCore::RenderMultiColumnSpannerPlaceholder::createAnonymous):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::propagateRepaintToParentWithOutlineAutoIfNeeded const):
        (WebCore::containerForElement):
        (WebCore::RenderObject::calculateBorderStyleColor):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isFixedPositioned const):
        (WebCore::RenderObject::isAbsolutelyPositioned const):
        (WebCore::RenderObject::setPositionState):
        (WebCore::RenderObject::RenderObjectBitfields::setPositionedState):
        (WebCore::RenderObject::RenderObjectBitfields::clearPositionedState):
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::computeText const):
        (WebCore::RenderQuote::isOpen const):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::setNeedsLayoutIfNeededAfterIntrinsicSizeChange):
        (WebCore::RenderReplaced::replacedContentRect const):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::styleDidChange):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::styleDidChange):
        (WebCore::RenderTable::convertStyleLogicalWidthToComputedWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::calcBorderStart const):
        (WebCore::RenderTable::calcBorderEnd const):
        (WebCore::RenderTable::outerBorderBefore const):
        (WebCore::RenderTable::outerBorderAfter const):
        (WebCore::RenderTable::outerBorderStart const):
        (WebCore::RenderTable::outerBorderEnd const):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::collapseBorders const):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeIntrinsicPadding):
        (WebCore::RenderTableCell::styleDidChange):
        (WebCore::compareBorders):
        (WebCore::chooseBorder):
        (WebCore::emptyBorder):
        (WebCore::RenderTableCell::computeCollapsedStartBorder const):
        (WebCore::RenderTableCell::computeCollapsedEndBorder const):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder const):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder const):
        (WebCore::CollapsedBorders::addBorder):
        (WebCore::RenderTableCell::paintCollapsedBorders):
        (WebCore::RenderTableCell::scrollbarsChanged):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::logicalHeightForRowSizing const):
        (WebCore::RenderTableCell::isBaselineAligned const):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcOuterBorderBefore const):
        (WebCore::RenderTableSection::calcOuterBorderAfter const):
        (WebCore::RenderTableSection::calcOuterBorderStart const):
        (WebCore::RenderTableSection::calcOuterBorderEnd const):
        (WebCore::RenderTableSection::paintRowGroupBorder):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis const):
        (WebCore::isSpaceAccordingToStyle):
        (WebCore::mapLineBreakToIteratorMode):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::setRenderedText):
        (WebCore::RenderText::textWithoutConvertingBackslashToYenSymbol const):
        (WebCore::RenderText::momentarilyRevealLastTypedCharacter):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight const):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::extractControlStatesForRenderer const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::adjustInputElementButtonStyle):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::updateFocusedState):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle const):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::printBorderStyle):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::rendererObscuresBackground):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticalPositionForBox):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForStyle):
        (WebCore::SimpleLineLayout::canUseForWithReason):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/line/BreakingContext.h:
        (WebCore::BreakingContext::handleBR):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::reset):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::clear):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::skipNonBreakingSpace):
        * rendering/line/LineWidth.cpp:
        (WebCore::requiresIndent):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::borderLeftWidth const):
        (WebCore::BorderData::borderRightWidth const):
        (WebCore::BorderData::borderTopWidth const):
        (WebCore::BorderData::borderBottomWidth const):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::nonZero const):
        (WebCore::BorderValue::isVisible const):
        (WebCore::BorderValue::style const):
        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::width const):
        (WebCore::CollapsedBorderValue::style const):
        (WebCore::CollapsedBorderValue::exists const):
        (WebCore::CollapsedBorderValue::precedence const):
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::FillLayer):
        (WebCore::clipMax):
        (WebCore::FillLayer::computeClipMax const):
        (WebCore::FillLayer::hasRepeatXY const):
        (WebCore::FillLayer::hasFixedImage const):
        * rendering/style/FillLayer.h:
        (WebCore::FillSize::FillSize):
        (WebCore::FillLayer::attachment const):
        (WebCore::FillLayer::clip const):
        (WebCore::FillLayer::origin const):
        (WebCore::FillLayer::repeatX const):
        (WebCore::FillLayer::repeatY const):
        (WebCore::FillLayer::sizeType const):
        (WebCore::FillLayer::size const):
        (WebCore::FillLayer::maskSourceType const):
        (WebCore::FillLayer::isSizeSet const):
        (WebCore::FillLayer::setAttachment):
        (WebCore::FillLayer::setClip):
        (WebCore::FillLayer::setOrigin):
        (WebCore::FillLayer::setRepeatX):
        (WebCore::FillLayer::setRepeatY):
        (WebCore::FillLayer::setComposite):
        (WebCore::FillLayer::setBlendMode):
        (WebCore::FillLayer::setSizeType):
        (WebCore::FillLayer::setSize):
        (WebCore::FillLayer::setMaskSourceType):
        (WebCore::FillLayer::clearSize):
        (WebCore::FillLayer::type const):
        (WebCore::FillLayer::initialFillAttachment):
        (WebCore::FillLayer::initialFillClip):
        (WebCore::FillLayer::initialFillOrigin):
        (WebCore::FillLayer::initialFillRepeatX):
        (WebCore::FillLayer::initialFillRepeatY):
        (WebCore::FillLayer::initialFillComposite):
        (WebCore::FillLayer::initialFillBlendMode):
        (WebCore::FillLayer::initialFillSize):
        (WebCore::FillLayer::initialFillXPosition):
        (WebCore::FillLayer::initialFillYPosition):
        (WebCore::FillLayer::initialFillImage):
        (WebCore::FillLayer::initialFillMaskSourceType):
        * rendering/style/LineClampValue.h:
        (WebCore::LineClampValue::LineClampValue):
        (WebCore::LineClampValue::isPercentage const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::resolvedSelfAlignment):
        (WebCore::RenderStyle::resolvedAlignSelf const):
        (WebCore::RenderStyle::resolvedJustifySelf const):
        (WebCore::resolvedContentAlignment):
        (WebCore::resolvedContentAlignmentPosition):
        (WebCore::resolvedContentAlignmentDistribution):
        (WebCore::RenderStyle::resolvedJustifyContentDistribution const):
        (WebCore::RenderStyle::resolvedAlignContentDistribution const):
        (WebCore::RenderStyle::changeRequiresLayout const):
        (WebCore::RenderStyle::changeRequiresPositionedLayoutOnly const):
        (WebCore::RenderStyle::changeRequiresLayerRepaint const):
        (WebCore::RenderStyle::changeRequiresRepaint const):
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline const):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer const):
        (WebCore::RenderStyle::diff const):
        (WebCore::RenderStyle::diffRequiresLayerRepaint const):
        (WebCore::allLayersAreFixed):
        (WebCore::RenderStyle::colorIncludingFallback const):
        (WebCore::RenderStyle::setColumnStylesFromPaginationMode):
        (WebCore::RenderStyle::outlineWidth const):
        (WebCore::RenderStyle::outlineOffset const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::isFloating const):
        (WebCore::RenderStyle::position const):
        (WebCore::RenderStyle::hasOutOfFlowPosition const):
        (WebCore::RenderStyle::hasInFlowPosition const):
        (WebCore::RenderStyle::hasViewportConstrainedPosition const):
        (WebCore::RenderStyle::floating const):
        (WebCore::RenderStyle::borderLeftStyle const):
        (WebCore::RenderStyle::borderRightStyle const):
        (WebCore::RenderStyle::borderTopStyle const):
        (WebCore::RenderStyle::borderBottomStyle const):
        (WebCore::RenderStyle::hasOutline const):
        (WebCore::RenderStyle::outlineStyle const):
        (WebCore::RenderStyle::overflowX const):
        (WebCore::RenderStyle::overflowY const):
        (WebCore::RenderStyle::overflowInlineDirection const):
        (WebCore::RenderStyle::overflowBlockDirection const):
        (WebCore::RenderStyle::verticalAlign const):
        (WebCore::RenderStyle::clear const):
        (WebCore::RenderStyle::tableLayout const):
        (WebCore::RenderStyle::backgroundRepeatX const):
        (WebCore::RenderStyle::backgroundRepeatY const):
        (WebCore::RenderStyle::backgroundAttachment const):
        (WebCore::RenderStyle::backgroundClip const):
        (WebCore::RenderStyle::backgroundOrigin const):
        (WebCore::RenderStyle::backgroundSizeType const):
        (WebCore::RenderStyle::maskRepeatX const):
        (WebCore::RenderStyle::maskRepeatY const):
        (WebCore::RenderStyle::maskClip const):
        (WebCore::RenderStyle::maskOrigin const):
        (WebCore::RenderStyle::maskSizeType const):
        (WebCore::RenderStyle::borderCollapse const):
        (WebCore::RenderStyle::boxAlign const):
        (WebCore::RenderStyle::boxDirection const):
        (WebCore::RenderStyle::boxLines const):
        (WebCore::RenderStyle::boxOrient const):
        (WebCore::RenderStyle::boxPack const):
        (WebCore::RenderStyle::flexDirection const):
        (WebCore::RenderStyle::isColumnFlexDirection const):
        (WebCore::RenderStyle::isReverseFlexDirection const):
        (WebCore::RenderStyle::flexWrap const):
        (WebCore::RenderStyle::boxDecorationBreak const):
        (WebCore::RenderStyle::boxSizing const):
        (WebCore::RenderStyle::userModify const):
        (WebCore::RenderStyle::userDrag const):
        (WebCore::RenderStyle::userSelect const):
        (WebCore::RenderStyle::marginBeforeCollapse const):
        (WebCore::RenderStyle::marginAfterCollapse const):
        (WebCore::RenderStyle::wordBreak const):
        (WebCore::RenderStyle::overflowWrap const):
        (WebCore::RenderStyle::nbspMode const):
        (WebCore::RenderStyle::resize const):
        (WebCore::RenderStyle::columnRuleStyle const):
        (WebCore::RenderStyle::hasTextCombine const):
        (WebCore::RenderStyle::transformStyle3D const):
        (WebCore::RenderStyle::preserves3D const):
        (WebCore::RenderStyle::backfaceVisibility const):
        (WebCore::RenderStyle::textSecurity const):
        (WebCore::RenderStyle::imageRendering const):
        (WebCore::RenderStyle::setIsolation):
        (WebCore::RenderStyle::hasIsolation const):
        (WebCore::RenderStyle::isolation const):
        (WebCore::RenderStyle::setPosition):
        (WebCore::RenderStyle::setFloating):
        (WebCore::RenderStyle::setBackgroundSize):
        (WebCore::RenderStyle::setBorderLeftStyle):
        (WebCore::RenderStyle::setBorderRightStyle):
        (WebCore::RenderStyle::setBorderTopStyle):
        (WebCore::RenderStyle::setBorderBottomStyle):
        (WebCore::RenderStyle::setOutlineStyleIsAuto):
        (WebCore::RenderStyle::setOutlineStyle):
        (WebCore::RenderStyle::setOverflowX):
        (WebCore::RenderStyle::setOverflowY):
        (WebCore::RenderStyle::setVerticalAlign):
        (WebCore::RenderStyle::setVerticalAlignLength):
        (WebCore::RenderStyle::setClear):
        (WebCore::RenderStyle::setTableLayout):
        (WebCore::RenderStyle::setImageRendering):
        (WebCore::RenderStyle::clearBackgroundLayers):
        (WebCore::RenderStyle::clearMaskLayers):
        (WebCore::RenderStyle::setBorderCollapse):
        (WebCore::RenderStyle::setAspectRatioType):
        (WebCore::RenderStyle::setPrintColorAdjust):
        (WebCore::RenderStyle::setBoxAlign):
        (WebCore::RenderStyle::setBoxDirection):
        (WebCore::RenderStyle::setBoxLines):
        (WebCore::RenderStyle::setBoxOrient):
        (WebCore::RenderStyle::setBoxPack):
        (WebCore::RenderStyle::setBoxSizing):
        (WebCore::RenderStyle::setFlexDirection):
        (WebCore::RenderStyle::setFlexWrap):
        (WebCore::RenderStyle::setBoxDecorationBreak):
        (WebCore::RenderStyle::setUserModify):
        (WebCore::RenderStyle::setUserDrag):
        (WebCore::RenderStyle::setUserSelect):
        (WebCore::RenderStyle::setTextOverflow):
        (WebCore::RenderStyle::setMarginBeforeCollapse):
        (WebCore::RenderStyle::setMarginAfterCollapse):
        (WebCore::RenderStyle::setWordBreak):
        (WebCore::RenderStyle::setOverflowWrap):
        (WebCore::RenderStyle::setNBSPMode):
        (WebCore::RenderStyle::setLineBreak):
        (WebCore::RenderStyle::setResize):
        (WebCore::RenderStyle::setColumnFill):
        (WebCore::RenderStyle::setColumnRuleStyle):
        (WebCore::RenderStyle::setColumnSpan):
        (WebCore::RenderStyle::setTextCombine):
        (WebCore::RenderStyle::setObjectFit):
        (WebCore::RenderStyle::setTransformStyle3D):
        (WebCore::RenderStyle::setBackfaceVisibility):
        (WebCore::RenderStyle::setTextSecurity):
        (WebCore::RenderStyle::initialOverflowX):
        (WebCore::RenderStyle::initialOverflowY):
        (WebCore::RenderStyle::initialClear):
        (WebCore::RenderStyle::initialPosition):
        (WebCore::RenderStyle::initialVerticalAlign):
        (WebCore::RenderStyle::initialFloating):
        (WebCore::RenderStyle::initialTableLayout):
        (WebCore::RenderStyle::initialBorderCollapse):
        (WebCore::RenderStyle::initialBorderStyle):
        (WebCore::RenderStyle::initialOutlineStyleIsAuto):
        (WebCore::RenderStyle::initialTextCombine):
        (WebCore::RenderStyle::initialObjectFit):
        (WebCore::RenderStyle::initialBoxAlign):
        (WebCore::RenderStyle::initialBoxDecorationBreak):
        (WebCore::RenderStyle::initialBoxDirection):
        (WebCore::RenderStyle::initialBoxLines):
        (WebCore::RenderStyle::initialBoxOrient):
        (WebCore::RenderStyle::initialBoxPack):
        (WebCore::RenderStyle::initialBoxSizing):
        (WebCore::RenderStyle::initialJustifyItems):
        (WebCore::RenderStyle::initialSelfAlignment):
        (WebCore::RenderStyle::initialDefaultAlignment):
        (WebCore::RenderStyle::initialContentAlignment):
        (WebCore::RenderStyle::initialFlexDirection):
        (WebCore::RenderStyle::initialFlexWrap):
        (WebCore::RenderStyle::initialUserModify):
        (WebCore::RenderStyle::initialUserDrag):
        (WebCore::RenderStyle::initialUserSelect):
        (WebCore::RenderStyle::initialTextOverflow):
        (WebCore::RenderStyle::initialMarginBeforeCollapse):
        (WebCore::RenderStyle::initialMarginAfterCollapse):
        (WebCore::RenderStyle::initialWordBreak):
        (WebCore::RenderStyle::initialOverflowWrap):
        (WebCore::RenderStyle::initialNBSPMode):
        (WebCore::RenderStyle::initialLineBreak):
        (WebCore::RenderStyle::initialResize):
        (WebCore::RenderStyle::initialAspectRatioType):
        (WebCore::RenderStyle::initialColumnFill):
        (WebCore::RenderStyle::initialColumnSpan):
        (WebCore::RenderStyle::initialTransformStyle3D):
        (WebCore::RenderStyle::initialBackfaceVisibility):
        (WebCore::RenderStyle::initialImageRendering):
        (WebCore::RenderStyle::initialPrintColorAdjust):
        (WebCore::RenderStyle::initialTextIndentLine):
        (WebCore::RenderStyle::initialTextIndentType):
        (WebCore::RenderStyle::initialTextSecurity):
        (WebCore::RenderStyle::initialIsolation):
        (WebCore::collapsedBorderStyle):
        (WebCore::RenderStyle::breakOnlyAfterWhiteSpace const):
        (WebCore::RenderStyle::breakWords const):
        (WebCore::RenderStyle::setTextOrientation):
        * rendering/style/RenderStyleConstants.cpp:
        (WebCore::operator<<):
        * rendering/style/RenderStyleConstants.h:
        (WebCore::operator|):
        (WebCore::operator|=):
        (WebCore::operator| ): Deleted.
        (WebCore::operator|= ): Deleted.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff const):
        * rendering/style/StyleBackgroundData.cpp:
        (WebCore::StyleBackgroundData::StyleBackgroundData):
        * rendering/style/StyleBoxData.cpp:
        (WebCore::StyleBoxData::StyleBoxData):
        * rendering/style/StyleBoxData.h:
        (WebCore::StyleBoxData::boxSizing const):
        (WebCore::StyleBoxData::boxDecorationBreak const):
        * rendering/style/StyleContentAlignmentData.h:
        (WebCore::StyleContentAlignmentData::StyleContentAlignmentData):
        (WebCore::StyleContentAlignmentData::setPosition):
        (WebCore::StyleContentAlignmentData::setDistribution):
        (WebCore::StyleContentAlignmentData::setOverflow):
        (WebCore::StyleContentAlignmentData::distribution const):
        * rendering/style/StyleDeprecatedFlexibleBoxData.cpp:
        (WebCore::StyleDeprecatedFlexibleBoxData::StyleDeprecatedFlexibleBoxData):
        * rendering/style/StyleDeprecatedFlexibleBoxData.h:
        * rendering/style/StyleFlexibleBoxData.cpp:
        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
        * rendering/style/StyleFlexibleBoxData.h:
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        * rendering/style/StyleMultiColData.h:
        (WebCore::StyleMultiColData::ruleWidth const):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        * rendering/style/StyleRareNonInheritedData.h:
        * rendering/style/StyleSelfAlignmentData.h:
        (WebCore::StyleSelfAlignmentData::StyleSelfAlignmentData):
        (WebCore::StyleSelfAlignmentData::setPosition):
        (WebCore::StyleSelfAlignmentData::setPositionType):
        (WebCore::StyleSelfAlignmentData::setOverflow):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::styleDidChange):
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::styleDidChange):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleDidChange):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::shouldApplyViewportClip const):
        (WebCore::RenderSVGRoot::styleDidChange):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::isOverflowHidden):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::insertChildToContinuation):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::styleForFirstLetter):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderTreeBuilder::MultiColumn::resolveMovedChild):
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnRelativeWillBeRemoved):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2018-05-21  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Stream::decodebinSinkPad is read but never assigned
        https://bugs.webkit.org/show_bug.cgi?id=185724

        Reviewed by Xabier Rodriguez-Calvar.

        This is a dead code removal patch; except when a Stream instance
        happens to be instantiated in such a place that the non-initialized
        decodeSinkPad is != 0, then it is a crash bug fix.

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcLinkStreamToSrcPad):
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamerPrivate.h:

2018-05-21  Alicia Boya García  <aboya@igalia.com>

        [MSE][GStreamer] Force segment.start = 0 after matroskademux
        https://bugs.webkit.org/show_bug.cgi?id=185740

        Reviewed by Xabier Rodriguez-Calvar.

        This patch ensures that when WebM MSE media segments are appended in
        an out of order fashion their frames are not discarded by opusparse or
        any other potential elements downstream in the AppendPipeline that
        perform segment clipping.

        This patch fixes the following YTTV 2018 tests:

        38. OpusAudioWithOverlap
        39. OpusAudioWithSmallGap
        40. OpusAudioWithLargeGap
        70. VP9VideoWithOverlap
        71. VP9VideoWithSmallGap

        This patch is necessary, but not sufficient for fixing the following
        YTTV 2018 tests:

        36. AppendOpusAudioOutOfOrder
        67. AppendVP9VideoOutOfOrder

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        (WebCore::matroskademuxForceSegmentStartToEqualZero):

2018-05-19  Eric Carlson  <eric.carlson@apple.com>

        Improve NowPlaying "title"
        https://bugs.webkit.org/show_bug.cgi?id=185680
        <rdar://problem/40296700>

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const): Use decodeHostName and 
        topPrivatelyControlledDomain when possible to make the host name more readable.

        * platform/PublicSuffix.h:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::decodeHostName): Expose topPrivatelyControlledDomain method to .cpp functions.

2018-05-19  Commit Queue  <commit-queue@webkit.org>

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

         Broke the GTK build (Requested by eric_carlson on #webkit).

        Reverted changeset:

        "Improve NowPlaying "title""
        https://bugs.webkit.org/show_bug.cgi?id=185680
        https://trac.webkit.org/changeset/231996

2018-05-18  Eric Carlson  <eric.carlson@apple.com>

        Improve NowPlaying "title"
        https://bugs.webkit.org/show_bug.cgi?id=185680
        <rdar://problem/40296700>

        Reviewed by Dean Jackson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaSessionTitle const): Use decodeHostName and 
        topPrivatelyControlledDomain when possible to make the host name more readable.

        * platform/PublicSuffix.h:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::decodeHostName): Expose topPrivatelyControlledDomain method to .cpp functions.

2018-05-18  Rob Buis  <rbuis@igalia.com>

        Cannot unset transition with important
        https://bugs.webkit.org/show_bug.cgi?id=177684

        Reviewed by Chris Dumez.

        Make removeProperty remove the property regardless
        if it was set using !important [1].

        The new behavior is consistent with Firefox, Chrome and Edge.

        [1] https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-removeproperty

        Test: web-platform-tests/cssom/cssom-setProperty-shorthand.html

        * css/StyleProperties.cpp:
        (WebCore::MutableStyleProperties::removePropertiesInSet):

2018-05-18  Commit Queue  <commit-queue@webkit.org>

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

        Caused layout test failures (Requested by realdawei on
        #webkit).

        Reverted changeset:

        "Complete fix for enabling modern EME by default"
        https://bugs.webkit.org/show_bug.cgi?id=185770
        https://trac.webkit.org/changeset/231982

2018-05-18  Jer Noble  <jer.noble@apple.com>

        Complete fix for enabling modern EME by default
        https://bugs.webkit.org/show_bug.cgi?id=185770
        <rdar://problem/40368220>

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2018-05-18  Brent Fulgham  <bfulgham@apple.com>

        Convert ProcessPrivilege assertions to regular debug-only assertions
        https://bugs.webkit.org/show_bug.cgi?id=185775
        <rdar://problem/40372286>

        Reviewed by Geoffrey Garen.

        In Bug 184322 I added a number of RELEASE_ASSERT checks that certain
        UI-only calls were not being made in the WebContent process.

        Measurements have shown that these RELEASE_ASSERTs have regressed performance
        by around 1% on some benchmarks, so we should convert them to normal asserts.

        This patch changes the RELEASE_ASSERTs into ASSERTs.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayID):
        (WebCore::firstScreen):
        (WebCore::window):
        (WebCore::screen):
        (WebCore::getScreenProperties):
        (WebCore::screenIsMonochrome):

2018-05-18  Eric Carlson  <eric.carlson@apple.com>

        Handle failure to extend sandbox gracefully
        https://bugs.webkit.org/show_bug.cgi?id=185779
        <rdar://problem/40316349>

        Reviewed by Brent Fulgham.

        Test: TestWebKitAPI/Tests/WebKitCocoa/UserMediaSimulateFailedSandbox.mm

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::deny): Include the error string in the promise rejection.
        * Modules/mediastream/UserMediaRequest.h:

2018-05-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on for test runners
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Unreviewed. Rolling out the patch for this bug, it caused some flaky timeouts for animation suspension tests.

        Tests: animations/animation-internals-api-multiple-keyframes.html
               animations/animation-internals-api.html
               transitions/transition-drt-api-delay.html
               transitions/transition-drt-api.html

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):
        * page/RuntimeEnabledFeatures.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-05-18  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Bug fix on suspend/resume behavior.
        https://bugs.webkit.org/show_bug.cgi?id=183089

        The flag was not set correctly. Also wrong method was called.

        Reviewed by Youenn Fablet.

        Enable loader tests to cover this case.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::cancel): Remove unnecessary cleanup. Use runXXX method.
        (WebCore::CurlRequest::suspend): Added cancel check.
        (WebCore::CurlRequest::resume): Ditto.
        (WebCore::CurlRequest::callClient): Use runXXX method. Change to move semantics.
        (WebCore::runOnMainThread): Added.
        (WebCore::CurlRequest::runOnWorkerThreadIfRequired): Added.
        (WebCore::CurlRequest::setupTransfer): Bug fix. Call setRequestPaused directly.
        (WebCore::CurlRequest::didReceiveData): Add state flag update.
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile): Use runXXX to simplify.
        (WebCore::CurlRequest::completeDidReceiveResponse): Ditto.
        (WebCore::CurlRequest::setRequestPaused): Protect state change by mutex.
        (WebCore::CurlRequest::setCallbackPaused): Ditto.
        (WebCore::CurlRequest::invokeCancel): Added.
        (WebCore::CurlRequest::pausedStatusChanged): Use runXXX to simplify.
        (WebCore::CurlRequest::updateHandlePauseState): Accessor for m_isHandlePaused.
        (WebCore::CurlRequest::isHandlePaused const): Ditto.
        * platform/network/curl/CurlRequest.h: Add mutex and paused state.
        (WebCore::CurlRequest::shouldBePaused const): Rename from isPaused.
        (WebCore::CurlRequest::isPaused const): Deleted.

2018-05-18  Chris Dumez  <cdumez@apple.com>

        Avoid keeping the frame alive when ref'ing a WindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=185737
        <rdar://problem/40004666>

        Reviewed by Sam Weinig.

        Avoid keeping the frame alive when ref'ing a WindowProxy by making WindowProxy
        manage its own refcount (instead of proxying refcounting to the Frame). As a
        result, a WindowProxy can now be detached from its Frame. When detached, it
        return null when asked for a JSWindowProxy.

        It is important to not extend the lifetime of the Frame because we want script
        to stop running when the Page gets destroyed.

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::toJS):
        (WebCore::toJSWindowProxy):
        * bindings/js/JSWindowProxy.h:
        (WebCore::toJSWindowProxy):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        (WebCore::ScriptController::jsWindowProxy):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::globalObject):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldExecState):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::WindowProxy):
        (WebCore::WindowProxy::~WindowProxy):
        (WebCore::WindowProxy::detachFromFrame):
        (WebCore::WindowProxy::createJSWindowProxy):
        (WebCore::WindowProxy::globalObject):
        (WebCore::WindowProxy::createJSWindowProxyWithInitializedScript):
        (WebCore::WindowProxy::setDOMWindow):
        (WebCore::WindowProxy::window const):
        (WebCore::WindowProxy::ref): Deleted.
        (WebCore::WindowProxy::deref): Deleted.
        * bindings/js/WindowProxy.h:
        (WebCore::WindowProxy::create):
        (WebCore::WindowProxy::frame const):
        (WebCore::WindowProxy::jsWindowProxy):
        * dom/DocumentTouch.cpp:
        (WebCore::DocumentTouch::createTouch):
        * page/AbstractFrame.cpp:
        (WebCore::AbstractFrame::AbstractFrame):
        (WebCore::AbstractFrame::~AbstractFrame):
        * page/AbstractFrame.h:

2018-05-18  Myles C. Maxfield  <mmaxfield@apple.com>

        [iOS] Password fields obscure the text with rectangles instead of circles
        https://bugs.webkit.org/show_bug.cgi?id=185760
        <rdar://problem/38644697>

        Reviewed by Zalan Bujtas.

        Password fields are obscured by drawing U+25CF BLACK CIRCLE. On iOS, we have custom handling
        for this character. However, this custom handling is unnecessary and isn't present on macOS.
        Instead, we should simply unify the password obscuring codepath between iOS and macOS.

        Test: fast/text/black-circle.html

        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::requiresCustomFallbackFont):
        (WebCore::FontCache::getCustomFallbackFont):

2018-05-18  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r231935.

        Caused an accessibility test to fail

        Reverted changeset:

        "RenderLayer::scrollRectToVisible() should not propagate a
        subframe's scroll to its cross-origin parent"
        https://bugs.webkit.org/show_bug.cgi?id=185664
        https://trac.webkit.org/changeset/231935

2018-05-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement height computation for non-replaced floating elements.
        https://bugs.webkit.org/show_bug.cgi?id=185767

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingNonReplacedHeight const):
        (WebCore::Layout::FormattingContext::contentHeightForFormattingContextRoot const):
        * layout/FormattingContext.h:

2018-05-18  Dirk Schulze  <krit@webkit.org>

        Make all SVG shape interfaces inherit from SVGGeometryElement
        https://bugs.webkit.org/show_bug.cgi?id=185600

        Reviewed by Antti Koivisto.

        Make all SVG shape interfaces inherit from SVGGeometryElement
        as defined by SVG2:

        https://svgwg.org/svg2-draft/shapes.html#DOMInterfaces

        Tests: svg/dom/SVGGeometry-circle.xhtml
               svg/dom/SVGGeometry-ellipse.xhtml
               svg/dom/SVGGeometry-line.xhtml
               svg/dom/SVGGeometry-polygon.xhtml
               svg/dom/SVGGeometry-polyline.xhtml
               svg/dom/SVGGeometry-rect.xhtml

        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::getTotalLength const): Added shape
                independent implementation for all methods defined
                by SVGGeometryElement interface. Calculations are
                based on the Path object created and referenced by
                RenderSVGShape.
        (WebCore::RenderSVGShape::getPointAtLength const):
        * rendering/svg/RenderSVGShape.h:
        * svg/SVGCircleElement.cpp:
                Repeating pattern: Change inheritance from
                SVGGraphicsElement to SVGGeometryElement.
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGCircleElement.idl:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        * svg/SVGEllipseElement.idl:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::getTotalLength const):
        (WebCore::SVGGeometryElement::getPointAtLength const):
        * svg/SVGGeometryElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        * svg/SVGLineElement.idl:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.idl:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        * svg/SVGRectElement.idl:

2018-05-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement height computation for replaced elements.
        https://bugs.webkit.org/show_bug.cgi?id=185756

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        (WebCore::Layout::FormattingContext::computeReplacedHeight const):
        (WebCore::Layout::FormattingContext::computeReplacedWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedHeight const):
        * layout/FormattingContext.h:

2018-05-18  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement width computation for non-replaced floating elements.
        https://bugs.webkit.org/show_bug.cgi?id=185759

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingNonReplacedWidth const):
        * layout/FormattingContext.h:

2018-05-18  Antoine Quint  <graouts@apple.com>

        [modern-media-controls] AirPlaySupport should be disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=185658
        <rdar://problem/40272213>

        Reviewed by Simon Fraser.

        We now only enable AirplaySupport if the controls are visible to the user _and_ media has played.

        Test: media/modern-media-controls/airplay-support/airplay-support-disable-event-listeners-until-play.html

        * Modules/modern-media-controls/media/airplay-support.js:
        (AirplaySupport.prototype.enable):
        (AirplaySupport.prototype.controlsUserVisibilityDidChange):
        (AirplaySupport.prototype._shouldBeEnabled):
        (AirplaySupport):

2018-05-18  Tim Horton  <timothy_horton@apple.com>

        Stop softlinking QuickLook when loading from client-registered schemes
        https://bugs.webkit.org/show_bug.cgi?id=185716
        <rdar://problem/40303227>

        Reviewed by Dan Bernstein.

        No new tests, just a performance improvement.

        * dom/Document.cpp:
        * platform/SchemeRegistry.cpp:
        * platform/ios/QuickLook.h:
        * platform/ios/QuickLook.mm:
        (WebCore::isQuickLookPreviewURL):
        (WebCore::QLPreviewProtocol): Deleted.
        Hard-code the QuickLook preview URL scheme, instead of loading the QuickLook
        framework to retrieve it. It will never change, and just in case it does,
        add an ASSERT (which does load QuickLook) so that we'll find out.

2018-05-18  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations with CSS integration on for test runners
        https://bugs.webkit.org/show_bug.cgi?id=184819
        <rdar://problem/39597337>

        Reviewed by Jon Lee.

        We ensure we always call into both CSSAnimationController::cancelAnimations() and
        AnimationTimeline::cancelDeclarativeAnimationsForElement() since we want teardown of animations
        to be performed no matter which animation code path is used. What that in mind, we don't
        conditionalize the CSSAnimationController-related ASSERT() in FrameView::didDestroyRenderTree().

        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):
        * page/RuntimeEnabledFeatures.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-05-17  David Kilzer  <ddkilzer@apple.com>

        Lazily create WebCore::Timer for WebCore::Image
        <https://webkit.org/b/185752>

        Reviewed by Simon Fraser.

        Not every image is an animated image, so lazily creating
        m_animationStartTimer saves 64 bytes per instance of
        WebCore::Image.

        * platform/graphics/Image.cpp:
        (WebCore::Image::Image): Remove default initializer for
        m_animationStartTimer.
        (WebCore::Image::startAnimationAsynchronously): Initialize
        m_animationStartTimer if it's not already created.
        * platform/graphics/Image.h:
        (WebCore::Image::animationPending const): Update to check if
        m_animationStartTimer has been set before dereferencing it.
        (WebCore::Image::m_animationStartTimer): Change type to
        std::unique_ptr<Timer>.

2018-05-17  Nan Wang  <n_wang@apple.com>

        AX: [macOS] Expose the primary screen height through AX API
        https://bugs.webkit.org/show_bug.cgi?id=185742

        Reviewed by Chris Fleizach.

        Added a new attribute to expose the primary screen size on both
        WebAccessibilityObjectWrapper and WKAccessibilityWebPageObject.

        Test: accessibility/mac/primary-screen-height.html

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper primaryScreenHeight]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenRectForPrimaryScreen):

2018-05-17  Chris Dumez  <cdumez@apple.com>

        RenderLayer::scrollRectToVisible() should not propagate a subframe's scroll to its cross-origin parent
        https://bugs.webkit.org/show_bug.cgi?id=185664
        <rdar://problem/36185260>

        Reviewed by Simon Fraser.

        RenderLayer::scrollRectToVisible() should not propagate a subframe's scroll to its
        cross-origin parent. There was logic in FrameLoader::scrollToFragmentWithParentBoundary()
        to temporarily set the 'safeToPropagateScrollToParent' flag to false on the cross-origin
        ancestor frame during the call to FrameView::scrollToFragment(). This would correctly
        prevent RenderLayer::scrollRectToVisible() to propagate the scroll to the cross-origin
        ancestor frame when scrollRectToVisible() is called synchronously. However,
        scrollRectToVisible() can get called asynchronously in case of a dirty layout, as part
        of the post layout tasks.

        To address the issue, we get rid of the safeToPropagateScrollToParent flag on FrameView
        and instead update FrameView::safeToPropagateScrollToParent() to do the cross-origin
        check. FrameView::safeToPropagateScrollToParent() is called by RenderLayer::scrollRectToVisible()
        and this is a lot more robust than relying on a flag which gets temporarily set.

        Test: http/tests/navigation/fragment-navigation-cross-origin-subframe-no-scrolling-parent.html

        * dom/Document.cpp:
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::scrollToFragmentWithParentBoundary):
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::safeToPropagateScrollToParent const):
        * page/FrameView.h:

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

        [Curl] Enable HTTP/2 Multiplexing
        https://bugs.webkit.org/show_bug.cgi?id=185746

        Reviewed by Youenn Fablet.

        Covered by existing tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlMultiHandle::CurlMultiHandle):

2018-05-17  Jeremy Jones  <jeremyj@apple.com>

        Remove unnecessary exit fullscreen call on application resume
        https://bugs.webkit.org/show_bug.cgi?id=185747
        rdar://problem/40345725

        Reviewed by Jer Noble.

        No new tests because no behavior change.

        Auto-PiP doesn't automatically return to fullscreen on app resume,
        so we don't need to keep this vestigial code for handling a corner case of that feature.
        Also, this can cause an unnecessary exit fullscreen that could cause debug asserts.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):

2018-05-17  Jeremy Jones  <jeremyj@apple.com>

        Fullscreen to PiP results in exit fullscreen call failure
        https://bugs.webkit.org/show_bug.cgi?id=185699
        rdar://problem/40310291

        Reviewed by Eric Carlson.

        No new tests because no behavior change.

        Prevent multiple exit fullscreen calls when transitioning from fullscreen to picture-in-picture.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (-[WebAVPlayerViewControllerDelegate playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:]):
        Implement this to prevent AVKit from automatically initiating exit fullscreen on pip.
        
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        Set the return to fullscreen flag here, since this is where exit fullscreen happens.

        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        Don't exit fullscreen here since it is already initiated in didStartPictureInPicture.

2018-05-17  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r231899.

        Caused flakiness in two existing modern-media-controls tests.

        Reverted changeset:

        "[modern-media-controls] AirPlaySupport should be disabled by
        default"
        https://bugs.webkit.org/show_bug.cgi?id=185658
        https://trac.webkit.org/changeset/231899

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

        [iOS] Update AirPlay route monitoring
        https://bugs.webkit.org/show_bug.cgi?id=185706
        <rdar://problem/40230677>

        Unreviewed, fix extra zoom mode build after r231913.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper dealloc]):
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]):

2018-05-17  Jer Noble  <jer.noble@apple.com>

        CRASH in ImageDecoderAVFObjC::sampleAtIndex()
        https://bugs.webkit.org/show_bug.cgi?id=185734
        <rdar://problem/40295094>

        Reviewed by Eric Carlson.

        Test: fast/images/animated-image-mp4-crash.html

        Test the correct size value before iterating over the SampleMap in presentationOrder()

        * Modules/mediasource/SampleMap.h:
        (WebCore::PresentationOrderSampleMap::size const):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjC::sampleAtIndex const):

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

        [Extra zoom mode] Disabled adaptations are not reset upon mainframe navigation
        https://bugs.webkit.org/show_bug.cgi?id=185735
        <rdar://problem/40335311>

        Reviewed by Tim Horton.

        When performing mainframe navigation, we currently don't update the Page's ViewportConfiguration's disabled
        adaptations. This causes disabled adaptations from the previous main document to persist. To fix this, propagate
        the new document's disabled adaptations to the client when it becomes the main document in the page.

        Test: fast/viewport/extrazoom/viewport-adaptations-after-navigation.html

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::processDisabledAdaptations):
        (WebCore::Document::dispatchDisabledAdaptationsDidChangeForMainFrame):
        * dom/Document.h:

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

        [iOS] Update AirPlay route monitoring
        https://bugs.webkit.org/show_bug.cgi?id=185706
        <rdar://problem/40230677>

        Reviewed by Jer Noble.

        Use an AVRouteDetector instead of an MPVolumeView and an MPAVRoutingController for AirPlay
        route detection and availability monitoring.

        No new tests, tested manually.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::hasWirelessPlaybackTargets): No need to update m_hasPlaybackTargets
        manually, it is always updated by the session manager when route availability changes.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper dealloc]): Pull the logic from safelyTearDown inline.
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]): Use the AVRouteDetector.
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]): Ditto.  Simplify logic, there is no
        need to dispatch twice.
        (-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]): Don't release the route detector
        completely, just disable route detection, because AVRouteDetector is a lightweight object so
        it is not worth the overhead of dealloc/realloc to disable/enable route detection.
        (-[WebMediaSessionHelper interruption:]): Use callOnWebThreadOrDispatchAsyncOnMainThread
        instead of WebThreadRun so it works correctly in WK2 as well as in WK1.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): Ditto.
        (-[WebMediaSessionHelper applicationDidBecomeActive:]): Ditto.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.
        (-[WebMediaSessionHelper wirelessRoutesAvailableDidChange:]): Ditto.
        (-[WebMediaSessionHelper applicationDidEnterBackground:]): Ditto.
        (safelyTearDown): Deleted.

2018-05-17  Chris Dumez  <cdumez@apple.com>

        Cross-Origin-Options: deny/allow-postmessage should prevent getting navigated by cross-origin scripts
        https://bugs.webkit.org/show_bug.cgi?id=185681
        <rdar://problem/40296313>

        Reviewed by Geoffrey Garen.

        Update our canNavigate() implementation [1] to take into account the Cross-Origin-Options header.
        If the window being navigated or the window trigerring the navigation have a Cross-Origin-Options
        header value different than 'allow', then the attempt to navigate will be blocked.

        Note that it was already not possible to navigate via setting window.location since trying to set
        it would throw a SecurityError with 'Cross-Origin-Options: deny/allow-postmessage'. However, it was
        possible to trigger a "targeted" navigation via <a target="foo"> or open(url, "foo").

        [1] https://html.spec.whatwg.org/#allowed-to-navigate

        Tests: http/wpt/cross-origin-options/navigation-from-opener-via-open-target.html
               http/wpt/cross-origin-options/navigation-from-subframe-via-anchor-target.html

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

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

        Storage Access API: Allow documents that have been granted storage access to also do a popup
        https://bugs.webkit.org/show_bug.cgi?id=185615
        <rdar://problem/39105791>

        Reviewed by Chris Dumez.

        * dom/Document.cpp:
        (WebCore::Document::consumeTemporaryUserGesture): Added. Clear the document's active one-time user
        activity (for window opening) state.
        (WebCore::Document::enableTemporaryUserGesture): Added. Establish a new active one-time user
        activity (for window opening) state.
        (WebCore::Document::requestStorageAccess): If the user approves Storage Access, establish a new
        UserInteraction scope, then resolve the promise. Also post a task to clear the one-time user
        gesture state.

2018-05-17  Zalan Bujtas  <zalan@apple.com>

        [LFC] Introduce DisplayBox::Style
        https://bugs.webkit.org/show_bug.cgi?id=185733

        Reviewed by Antti Koivisto.

        This is the collection of computed style data needed to paint/hittest the display boxtree.

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::createDisplayBox):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::Style::Style):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:

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

        [modern-media-controls] AirPlaySupport should be disabled by default
        https://bugs.webkit.org/show_bug.cgi?id=185658
        <rdar://problem/40272213>

        Reviewed by Simon Fraser.

        We now only enable AirplaySupport if the controls are visible to the user _and_ media has played.

        Test: media/modern-media-controls/airplay-support/airplay-support-disable-event-listeners-until-play.html

        * Modules/modern-media-controls/media/airplay-support.js:
        (AirplaySupport.prototype.enable):
        (AirplaySupport.prototype.controlsUserVisibilityDidChange):
        (AirplaySupport.prototype._shouldBeEnabled):
        (AirplaySupport):

2018-05-17  Zalan Bujtas  <zalan@apple.com>

        [LFC] Replace ASSERT_NOT_REACHED with ASSERT_NOT_IMPLEMENTED_YET where applicable.
        https://bugs.webkit.org/show_bug.cgi?id=185728

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const): leftover from previous patch.
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedHeight const):
        (WebCore::Layout::FormattingContext::computeReplacedWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedWidth const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::styleChanged):
        (WebCore::Layout::LayoutContext::formattingContext):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowNonReplacedWidth const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowNonReplacedHeight const):
        * layout/layouttree/LayoutTreeBuilder.cpp:
        (WebCore::Layout::TreeBuilder::createSubTree):

2018-05-17  Zalan Bujtas  <zalan@apple.com>

        [LFC] Move replaced logic from Layout::Box to Layout::Replaced class
        https://bugs.webkit.org/show_bug.cgi?id=185711

        Reviewed by Antti Koivisto.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeInFlowReplacedWidth const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isReplaced const): Deleted.
        (WebCore::Layout::Box::hasIntrinsicWidth const): Deleted.
        (WebCore::Layout::Box::hasIntrinsicHeight const): Deleted.
        (WebCore::Layout::Box::hasIntrinsicRatio const): Deleted.
        (WebCore::Layout::Box::intrinsicWidth const): Deleted.
        (WebCore::Layout::Box::intrinsicHeight const): Deleted.
        (WebCore::Layout::Box::intrinsicRatio const): Deleted.
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::replaced const):

2018-05-17  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement width computation for replaced out if flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185701

        Reviewed by Antti Koivisto.
        
        The used value of 'width' is determined as for inline replaced elements.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowReplacedWidth const):
        * layout/FormattingContext.h:

2018-05-17  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer]: Consider GstStream(Collection) as if if was not a GInitiallyUnowned
        https://bugs.webkit.org/show_bug.cgi?id=185657

        Reviewed by Philippe Normand.

        Starting with GStreamer 1.14[1] the reference is sunk at object creation time, making it a normal
        GObject in practice, in our GRefPtr template implementation we should just consider GstStream
        as if it was a normal GObject and not care about its floating reference state as
        the ref is never sunk by anyone before 1.14 though that floating ref is considered
        as a hard reference by the GstStreamCollection (leading to assertions/)

        The exact same issue happens with GstStreamCollection, so fix it at the same time.

        Also do not adoptRef() on the result of gst_stream_collection_get_stream() as this function
        is transfer-none.

        [1] commit f119e93b47efb06ffc68c01d3e094d5346c30041 `gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent`

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::adoptGRef):
        (WTF::refGPtr<GstStream>):
        (WTF::refGPtr<GstStreamCollection>):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):

2018-05-16  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: create a navigation item for toggling the overlay rulers/guides
        https://bugs.webkit.org/show_bug.cgi?id=185644

        Reviewed by Matt Baker.

        This patch is purely a visual change for WebInspector, and doesn't affect anything else.

        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setShowRulers): Added.

        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::shouldShowOverlay):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::setShowRulers): Added.
        (WebCore::InspectorOverlay::drawRulers): Added.
        (WebCore::InspectorOverlay::reset):

        * inspector/InspectorOverlayPage.js:
        (drawNodeHighlight):
        (drawQuadHighlight):
        (drawRulers): Added.
        (_drawBounds): Added.
        (reset):
        (_drawRulers): Deleted.

2018-05-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] SoupNetworkSession.h:68:62: error: unknown type name 'URL'
        https://bugs.webkit.org/show_bug.cgi?id=185378

        Unreviewed, just replace unneeded #include with a forward declaration

        * platform/network/soup/SoupNetworkSession.h:

2018-05-16  Jer Noble  <jer.noble@apple.com>

        CRASH: Exception thrown from -[AVContentKeySession processContentKeyRequestWithIdentifier:initializationData:options:] after -expire called
        https://bugs.webkit.org/show_bug.cgi?id=185690
        <rdar://problem/38297768>

        Reviewed by Eric Carlson.

        Reject all calls to update() after close() has been called on the session.

        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        (WebCore::CDMSessionAVContentKeySession::update):

2018-05-16  Andy VanWagoner  <andy@vanwagoner.family>

        Add support for Intl NumberFormat formatToParts
        https://bugs.webkit.org/show_bug.cgi?id=185375

        Reviewed by Yusuke Suzuki.

        Test: js/intl-numberformat-format-to-parts.html

        Add flag & tests for NumberFormat formatToParts.

        * Configurations/FeatureDefines.xcconfig:

2018-05-16  Eric Carlson  <eric.carlson@apple.com>

        Improve NowPlaying "title"
        https://bugs.webkit.org/show_bug.cgi?id=185680
        <rdar://problem/40296700>

        Reviewed by Jer Noble.
        
        We send NowPlaying the element's title attribute if not empty, else the element's current url.
        Title should be preferred because it is the most specific, but we should use the document
        title if non-empty next, and if falling back to the element's url use just the domain instead
        of the full url because it isn't likely to be useful to the user given the small amount of
        space control center uses to display the title. Further, don't use any title at all when
        in private browsing mode.

        Tests: http/tests/media/now-playing-info-private-browsing.html
               http/tests/media/now-playing-info.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Update NowPlaying when the title attribute changes.
        (WebCore::HTMLMediaElement::finishSeek): Update NowPlaying when a seek completes.
        (WebCore::HTMLMediaElement::mediaSessionTitle const): Update logic.
        (WebCore::HTMLMediaElement::mediaSessionUniqueIdentifier const): Use the hash of the current 
        url as the unique identifier.
        * html/HTMLMediaElement.h:

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::uniqueIdentifier const): New.
        (WebCore::PlatformMediaSessionClient::mediaSessionUniqueIdentifier const): Ditto.
        * platform/audio/PlatformMediaSession.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo): Update m_lastUpdatedNowPlayingInfoUniqueIdentifier.

        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo): Update.

        * testing/Internals.cpp:
        (WebCore::Internals::nowPlayingState const): Expose NowPlaying state.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-05-16  Daniel Bates  <dabates@apple.com>

        Attempt to fix the WinCairo build following r231859
        (https://bugs.webkit.org/show_bug.cgi?id=185654)

        Instantiate Cookie as a struct and set applicable fields.

        * platform/network/curl/CookieJarDB.cpp:
        (WebCore::CookieJarDB::searchCookies):

2018-05-16  Daniel Bates  <dabates@apple.com>

        Cleanup platform Cookie
        https://bugs.webkit.org/show_bug.cgi?id=185654

        Reviewed by Per Arne Vollan.

        Remove unnecessary constructor and use =default for default constructor.
        Simplify Cookie::decode() by having it decode directly into a stack-allocated
        cookie. Remove some unnecessary local variables. Fix style nits.

        * platform/Cookie.h:
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::isNull const):
        (WebCore::Cookie::encode const):
        (WebCore::Cookie::decode):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::getRawCookies):
        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::cookieCreated):
        (WebCore::Cookie::Cookie):
        (WebCore::Cookie::operator== const):
        (WebCore::Cookie::hash const):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::getRawCookies):

2018-05-14  Yusuke Suzuki  <utatane.tea@gmail.com>

        [Win] Use C++17 in MSVC
        https://bugs.webkit.org/show_bug.cgi?id=185232

        Reviewed by Alex Christensen.

        Workaround for MSVC + /std:c++17.

        * Modules/geolocation/Coordinates.h:
        (WebCore::Coordinates::isolatedCopy const):

2018-05-16  Chris Nardi  <cnardi@chromium.org>

        Remove Document#selectedStylesheetSet/preferredStylesheetSet
        https://bugs.webkit.org/show_bug.cgi?id=185381

        Reviewed by Darin Adler.

        Document#selectedStylesheetSet/preferredStylesheetSet are non-standard methods that
        are only implemented WebKit. Blink removed these methods in https://crbug.com/690609.
        The standard versions of these methods are are no longer in the spec. Remove them
        entirely from our implementation.

        Updated existing tests and imported/w3c/web-platform-tests/cssom/historical.html.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        * dom/Document.h:
        * dom/Document.idl:
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::collectActiveStyleSheets):
        * style/StyleScope.h:
        (WebCore::Style::Scope::preferredStylesheetSetName const):

2018-05-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement width computation for replaced inflow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185672

        Reviewed by Antti Koivisto.

        Replaced width for block, inline and float elements compute the same way. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeInFlowReplacedWidth const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::hasIntrinsicWidth const):
        (WebCore::Layout::Box::hasIntrinsicHeight const):
        (WebCore::Layout::Box::hasIntrinsicRatio const):
        (WebCore::Layout::Box::intrinsicWidth const):
        (WebCore::Layout::Box::intrinsicHeight const):
        (WebCore::Layout::Box::intrinsicRatio const):
        * layout/layouttree/LayoutBox.h:

2018-05-16  Zalan Bujtas  <zalan@apple.com>

        [LFC] Make Display::Box box sizing aware
        https://bugs.webkit.org/show_bug.cgi?id=185649

        Reviewed by Antti Koivisto.

        Display::Box::width() == Display::Box::contentBox().width() <= box-sizing: content-box; (initial and default value)
        Display::Box::width() == Display::Box::borderBox().width() <= box-sizing: border-box;

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::createDisplayBox):
        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:

2018-05-16  Antoine Quint  <graouts@apple.com>

        REGRESSION (r230574): Interrupted hardware transitions don't behave correctly
        https://bugs.webkit.org/show_bug.cgi?id=185299
        <rdar://problem/39630230>

        Reviewed by Simon Fraser.

        In r230574, the fix for webkit.org/b/184518, we changed the processing order in GraphicsLayerCA::updateAnimations() to first
        process m_uncomittedAnimations and then m_animationsToProcess, so we are guaranteed animations exist before we attempt to pause
        or seek them. This broke interrupting and resuming hardware animations (such as an interrupted CSS Transition or an animation
        running in a non-visible tab) since a pause operation recorded _before_ an animation was added would be paused anyway since
        the animation was now first added, and then paused. The fix is simply to clear any pending AnimationProcessingAction for a
        newly-uncommitted animation.

        Test: transitions/interrupted-transition-hardware.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation):

2018-05-15  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Check TypeInfo first before calling getCallData when we would like to check whether given object is a function
        https://bugs.webkit.org/show_bug.cgi?id=185601

        Reviewed by Saam Barati.

        No behavior change.

        * Modules/plugins/QuickTimePluginReplacement.mm:
        (WebCore::QuickTimePluginReplacement::ensureReplacementScriptInjected):
        * bindings/js/JSCustomElementRegistryCustom.cpp:
        (WebCore::getCustomElementCallback):
        * bindings/js/JSDOMConstructorBase.h:
        * bindings/js/JSDOMConvertCallbacks.h:
        (WebCore::Converter<IDLCallbackFunction<T>>::convert):
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenSettled):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::pipeTo):
        (WebCore::ReadableStream::tee):
        * bindings/js/ReadableStreamDefaultController.cpp:
        (WebCore::ReadableStreamDefaultController::invoke):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateOverloadDispatcher):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bridge/objc/objc_runtime.h:
        * bridge/runtime_method.h:
        * bridge/runtime_object.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        (WebCore::Internals::cloneArrayBuffer):

2018-05-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: element details hanger in inspector overlay should have better placement logic
        https://bugs.webkit.org/show_bug.cgi?id=128482
        <rdar://problem/16020709>

        Reviewed by Timothy Hatcher.

        When determining the best position for the hovered element details "tooltip",
        perform placement tests in view space, not canvas space, and account for the
        top content inset.

        * inspector/InspectorOverlayPage.js:
        (reset): Drive by fix: added missing `.height`.
        (_drawElementTitle):

2018-05-15  Commit Queue  <commit-queue@webkit.org>

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

        the layout test added with this change is very flaky
        (Requested by realdawei on #webkit).

        Reverted changeset:

        "REGRESSION (r230574): Interrupted hardware transitions don't
        behave correctly"
        https://bugs.webkit.org/show_bug.cgi?id=185299
        https://trac.webkit.org/changeset/231765

2018-05-15  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Add rulers and guides
        https://bugs.webkit.org/show_bug.cgi?id=32263
        <rdar://problem/19281564>

        Reviewed by Matt Baker.

        This patch is purely a visual change for WebInspector, and doesn't affect anything else.

        * inspector/InspectorOverlay.h:
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::reset):
        (WebCore::InspectorOverlay::drawGutter): Deleted.

        * inspector/InspectorOverlayPage.html:
        * inspector/InspectorOverlayPage.js:
        (Bounds): Added.
        (Bounds.prototype.get minX): Added.
        (Bounds.prototype.get minY): Added.
        (Bounds.prototype.get maxX): Added.
        (Bounds.prototype.get maxY): Added.
        (Bounds.prototype.update): Added.
        (drawNodeHighlight):
        (drawQuadHighlight):
        (reset):
        (_isolateActions): Added.
        (_quadToPath): Added.
        (_quadToPath.parseQuadPoint): Added.
        (_drawOutlinedQuad): Added.
        (_drawPath): Added.
        (_drawPath.parsePoints): Added.
        (_drawOutlinedQuadWithClip): Added.
        (_drawElementTitle):
        (_drawShapeHighlight):
        (_drawFragmentHighlight):
        (_drawRulers): Added.
        (quadToPath): Deleted.
        (drawOutlinedQuad): Deleted.
        (pathCommand): Deleted.
        (drawPath): Deleted.
        (drawOutlinedQuadWithClip): Deleted.
        (drawGutter): Deleted.
        * inspector/InspectorOverlayPage.css:
        (#log): Added.
        (#right-gutter): Deleted.
        (#bottom-gutter): Deleted.

2018-05-15  Jer Noble  <jer.noble@apple.com>

        Media continues loading after rendered invisible (removed from DOM; scrolled off screen)
        https://bugs.webkit.org/show_bug.cgi?id=185487

        Reviewed by Eric Carlson.

        Test: media/video-buffering-allowed.html

        When a media element is removed from the dom (e.g. through innerHTML=""), it doesn't
        necessarily stop loading media data; it will continue to do so until its destructor is
        called through garbage collection. Similarly, when a media element is rendered not-visible
        by being scrolled off-screen or being made display:none, media loading continues. There
        are legitimate use cases for out-of-DOM media loading, so only temporarily block loading
        when the element transitions out of the document. Similarly, only block loading for non-visible
        media elements when returning from the "page is hidden" state, and only until the media
        element is asked to play or is otherwise made visible.

        Note: this refactors a lot of code out of PlatformMediaSession and into MediaElementSession,
        since this code is specific to "media elements".

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::insertedIntoAncestor):
        (WebCore::HTMLMediaElement::removedFromAncestor):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::visibilityStateChanged):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::setShouldBufferData):
        (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible):
        (WebCore::HTMLMediaElement::isVisibleInViewportChanged):
        (WebCore::HTMLMediaElement::fullscreenModeChanged):
        (WebCore::HTMLMediaElement::setInActiveDocument):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::shouldBufferData const):
        (WebCore::HTMLMediaElement::elementIsHidden const):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::clientWillBeginAutoplaying):
        (WebCore::MediaElementSession::clientWillBeginPlayback):
        (WebCore::MediaElementSession::clientWillPausePlayback):
        (WebCore::MediaElementSession::visibilityChanged):
        (WebCore::MediaElementSession::isVisibleInViewportChanged):
        (WebCore::MediaElementSession::inActiveDocumentChanged):
        (WebCore::MediaElementSession::scheduleClientDataBufferingCheck):
        (WebCore::MediaElementSession::clientDataBufferingTimerFired):
        (WebCore::MediaElementSession::updateClientDataBuffering):
        (WebCore::MediaElementSession::dataBufferingPermitted const):
        (WebCore::MediaElementSession::wantsToObserveViewportVisibilityForAutoplay const):
        * html/MediaElementSession.h:
        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::PlatformMediaSession::clientWillBeginAutoplaying):
        (WebCore::PlatformMediaSession::clientWillBeginPlayback):
        (WebCore::PlatformMediaSession::clientWillPausePlayback):
        (): Deleted.
        (WebCore::PlatformMediaSession::visibilityChanged): Deleted.
        (WebCore::PlatformMediaSession::scheduleClientDataBufferingCheck): Deleted.
        (WebCore::PlatformMediaSession::clientDataBufferingTimerFired): Deleted.
        (WebCore::PlatformMediaSession::updateClientDataBuffering): Deleted.
        (WebCore::PlatformMediaSession::isHidden const): Deleted.
        * platform/audio/PlatformMediaSession.h:
        (WebCore::PlatformMediaSessionClient::setShouldBufferData): Deleted.
        (WebCore::PlatformMediaSessionClient::elementIsHidden const): Deleted.
        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::sessionCanLoadMedia const): Deleted.
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::sessionCanLoadMedia const): Deleted.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::willBeDestroyed):
        * testing/Internals.cpp:
        (WebCore::Internals::elementShouldBufferData):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-05-15  Charles Vazac  <cvazac@gmail.com>

        Add the PerformanceServerTiming Interface which makes Server-Timing header timing values available to JavaScript running in the browser.
        https://bugs.webkit.org/show_bug.cgi?id=175569

        Reviewed by Youenn Fablet.

        Tests were imported from web-platform-tests: WebKit/LayoutTests/imported/w3c/web-platform-tests/server-timing/*

        * Sources.txt: Added references to HeaderFieldTokenizer.cpp, ServerTiming.cpp, and ServerTimingParser.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added various files.
        * loader/HeaderFieldTokenizer.cpp: Added.
        (WebCore::HeaderFieldTokenizer::HeaderFieldTokenizer): Added class for tokenizing header values.
        (WebCore::HeaderFieldTokenizer::consume): Added method to consume a specified character.
        (WebCore::HeaderFieldTokenizer::consumeQuotedString): Added method to consume a quote-string.
        (WebCore::HeaderFieldTokenizer::consumeToken): Added a method to consume a token.
        (WebCore::HeaderFieldTokenizer::consumeTokenOrQuotedString): Added method to consume a quote-string or quote-string, depending on net character.
        (WebCore::HeaderFieldTokenizer::skipSpaces): Added method to skip whitespace.
        (WebCore::HeaderFieldTokenizer::consumeBeforeAnyCharMatch): Added method to advance the cursor up until any of a list of characters.
        * loader/HeaderFieldTokenizer.h: Added.
        * loader/HTTPHeaderField.cpp: Expose isTokenCharacter and isWhitespace.
        * loader/HTTPHeaderField.h: Expose isTokenCharacter and isWhitespace.
        * loader/PolicyChecker.cpp: Added #include so source compiled on my machine.
        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::ResourceTiming): Added call to initServerTiming to parse the header.
        (WebCore::ResourceTiming::initServerTiming): Added method to parse the header.
        (WebCore::ResourceTiming::populateServerTiming): Added method to populate the server timing entries on a PerformanceResourceTiming object.
        (WebCore::ResourceTiming::isolatedCopy const): Added code to copy over the server timing entries.
        * loader/ResourceTiming.h:
        (WebCore::ResourceTiming::ResourceTiming): Accept collection of server timing entries in c'tor.
        * loader/ServerTiming.cpp: Added.
        (WebCore::ServerTiming::setParameter): Set named parameters, ignoring unrecognized or duplicates.
        (WebCore::ServerTiming::isolatedCopy const): Return a new pointer to the object.
        * loader/ServerTiming.h: Added.
        (WebCore::ServerTiming::ServerTiming): Added struct for the data needed by a server timing entry.
        (WebCore::ServerTiming::name const): Added name field of a server timing entry.
        (WebCore::ServerTiming::duration const): Added duration field of a server timing entry.
        (WebCore::ServerTiming::description const): Added description field of a server timing entry.
        * loader/ServerTimingParser.cpp: Added.
        (WebCore::ServerTimingParser::parseServerTiming): Parses the header generating a collection of server timing structs.
        * loader/ServerTimingParser.h: Added.
        * loader/WorkerThreadableLoader.h: Fix build.
        * page/Performance.cpp:
        (WebCore::Performance::addResourceTiming): Fixed a typo.
        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming): Given a ResourceTiming object, populate our collection of PerformanceServerTiming objects.
        * page/PerformanceResourceTiming.h: Added serverTiming member and getter.
        * page/PerformanceResourceTiming.idl: Added serverTiming member to interface.
        * platform/network/HTTPHeaderNames.in: Added "Server-Timing" to the header enum.
        * platform/network/ResourceResponseBase.cpp: Added "Server-Timing" to isSafeCrossOriginResponseHeader whitelist.

2018-05-15  Brady Eidson  <beidson@apple.com>

        Fix crash after a Worker terminates but there are still IDB transactions the server is trying to open for it.
        <rdar://problem/33744241> and https://bugs.webkit.org/show_bug.cgi?id=185653

        Reviewed by Andy Estes.

        Test: storage/indexeddb/modern/worker-transaction-open-after-worker-stop.html

        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
        (WebCore::IDBClient::IDBConnectionProxy::didStartTransaction): It's okay to not be able to find a pending TX
          that the server has started. e.g. When it was a WebWorker that asked for the TX but it has since terminated.

2018-05-15  Thomas Klausner  <tk@giga.or.at>

        Add missing header to fix build.
        https://bugs.webkit.org/show_bug.cgi?id=185378

        Reviewed by Michael Catanzaro.

        * platform/network/soup/SoupNetworkSession.h:

2018-05-15  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Build failure with RPi userland drivers and gstreamer-gl
        https://bugs.webkit.org/show_bug.cgi?id=185639

        Reviewed by Philippe Normand.

        When building for the RPi with userland drivers (dispmanx) override the
        value of GST_GL_HAVE_GLSYNC to 1 to avoid that the gstreamer-gl headers
        try to redefine the GLsync type that is already defined in libepoxy.

        Defining __gl2_h_ is also needed to avoid other conflicting type
        definitions that happen between libepoxy and RPi GLES2 userland
        headers when the gstreamer-gl headers are included.

        The issue doesn't happen with 1.14.0, so a check for that is added
        as well.

        No new tests, no behavior change. It is a build fix.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2018-05-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r230749

        This did not work as desired.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2018-05-15  Dirk Schulze  <krit@webkit.org>

        Add new SVGDOM SVGFEBLEND constants
        https://bugs.webkit.org/show_bug.cgi?id=185581

        Reviewed by Simon Fraser.

        Provide new SVG DOM constants for the new blend modes added to feBlend.

        https://drafts.fxtf.org/filter-effects-1/#InterfaceSVGFEBlendElement

        * platform/graphics/GraphicsTypes.cpp:
        (WebCore::blendModeName):
        * platform/graphics/GraphicsTypes.h:
        * svg/SVGFEBlendElement.h:
        (WebCore::SVGPropertyTraits<BlendMode>::highestEnumValue):
        (WebCore::SVGPropertyTraits<BlendMode>::toString):
        * svg/SVGFEBlendElement.idl:

2018-05-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose Web Animations CSS integration as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=185647

        Reviewed by Dean Jackson.

        Make the Web Animations CSS integration flag an experimental feature, and only indicate that it is on if the Web Animations
        experimental feature is also enabled.

        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::resume):
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):
        * page/Page.cpp:
        (WebCore::Page::handleLowModePowerChange):
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebAnimationsCSSIntegrationEnabled):
        (WebCore::RuntimeEnabledFeatures::webAnimationsCSSIntegrationEnabled const):
        (WebCore::RuntimeEnabledFeatures::setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled const): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform const):
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const):
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation const):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::webAnimationsCSSIntegrationEnabled):
        (WebCore::InternalSettings::cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled): Deleted.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfActiveAnimations const):
        (WebCore::Internals::animationsAreSuspended const):
        (WebCore::Internals::animationsInterval const):
        (WebCore::Internals::suspendAnimations const):
        (WebCore::Internals::resumeAnimations const):

2018-05-15  David Kilzer  <ddkilzer@apple.com>

        Fix -Wreturn-std-move warnings in WebKit found by new clang compiler
        <https://webkit.org/b/185621>

        Reviewed by Youenn Fablet.

        Fix warnings like the following:

            In file included from DerivedSources/WebCore/unified-sources/UnifiedSource139.cpp:5:
            ./Modules/mediastream/PeerConnectionBackend.cpp:412:16: error: local variable 'sdp' will be copied despite being returned by name [-Werror,-Wreturn-std-move]
                    return sdp;
                           ^~~
            ./Modules/mediastream/PeerConnectionBackend.cpp:412:16: note: call 'std::move' explicitly to avoid copying
                    return sdp;
                           ^~~
                           std::move(sdp)
            1 error generated.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::PeerConnectionBackend::filterSDP const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::rangeClosestToRange):
        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::GenericSequenceConverter::convert):
        (WebCore::Detail::NumericSequenceConverter::convertArray):
        * bindings/js/JSDOMConvertStrings.cpp:
        (WebCore::stringToByteString):
        (WebCore::stringToUSVString):
        - Use WTFMove() in return statements to fix the warnings.

2018-05-14  Dean Jackson  <dino@apple.com>

        Download and present System Preview
        https://bugs.webkit.org/show_bug.cgi?id=185459
        <rdar://problem/40079228>

        Reviewed by Tim Horton.

        If an <a> is a system preview, tell the resource request about it.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

2018-05-15  Antti Koivisto  <antti@apple.com>

        animation-play-state: paused causes very high cpu load because of style invalidation loop
        https://bugs.webkit.org/show_bug.cgi?id=182436
        <rdar://problem/37182562>

        Reviewed by Dean Jackson.

        Test: animations/animation-playstate-paused-style-resolution.html

        If the style of an element with 'animation-play-state: paused' is recomputed so it stays
        paused we would enter zero-duration animation timer loop.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

        Don't move to AnimationState::PausedWaitResponse unless we get AnimationStateInput::StyleAvailable
        (matching the comments). Otherwise just stay in the existing paused state.

        Remove AnimationStateInput::StartAnimation from assertion as the case can't happen.

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

        readableStreamDefaultControllerError should return early if stream is not readable
        https://bugs.webkit.org/show_bug.cgi?id=185602

        Reviewed by Chris Dumez.

        Return early if stream is not readable in @readableStreamDefaultControllerError.
        Update call sites to no longer check for ReadableStream state.
        Covered by unflaked and rebased tests.

        * Modules/streams/ReadableStreamDefaultController.js:
        (error):
        * Modules/streams/ReadableStreamInternals.js:
        (readableStreamDefaultControllerError):
        (readableStreamDefaultControllerCallPullIfNeeded):

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

        [LFC] Implement width computation for non-replaced block level inflow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185641

        Reviewed by Sam Weinig.

        Block level inflow elements participate in block formatting context.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeWidth const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeInFlowWidth const):
        * layout/inlineformatting/InlineFormattingContext.h:

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

        Unreviewed, fix the iOS build after r231779

        Also address a minor in-person review comment by returning "extrazoom" instead of the empty string.

        * page/DisabledAdaptations.cpp:
        (WebCore::extraZoomModeAdaptationName):

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

        [LFC] FormattingContext:computeOutOfFlowNonReplacedHeight/Width should use the computed margins/paddings/borders
        https://bugs.webkit.org/show_bug.cgi?id=185633

        Reviewed by Sam Weinig.

        By the time we start computing height and width, DisplayBox should already have the computed values for margin/padding/border.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedWidth const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::paddingTop const):
        (WebCore::Display::Box::paddingLeft const):
        (WebCore::Display::Box::paddingBottom const):
        (WebCore::Display::Box::paddingRight const):
        (WebCore::Display::Box::borderTop const):
        (WebCore::Display::Box::borderLeft const):
        (WebCore::Display::Box::borderBottom const):
        (WebCore::Display::Box::borderRight const):

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

        [Extra zoom mode] Google search results are excessively zoomed in
        https://bugs.webkit.org/show_bug.cgi?id=185347
        <rdar://problem/39999778>

        Reviewed by Tim Horton.

        It turns out that basing minimum layout size and shrink-to-fit behaviors off of the `shrink-to-fit` viewport
        argument poses compatibility risks with web pages that already specify `shrink-to-fit` to opt out of default
        viewport shrinking behaviors in 1/3 multitasking mode on iPad.

        One way to resolve this is to introduce a new viewport meta content attribute to disable viewport heuristics in
        extra zoom mode. However, combined shrink-to-fit and minimum device width behaviors are difficult to describe
        using a single backwards-compatible viewport meta content attribute, and the need to suppress the default
        behavior of `shrink-to-fit=no` if such an attribute is not disabled further muddles our viewport story.

        After some internal deliberation, we’ve decided to experiment with a new meta tag named "disabled-adaptations".
        The content of this meta tag is a comma-separated list of adaptation names; if an adaptation name matches a
        known adaptation type (for instance, extra zoom mode), we disable the class of behaviors used to adapt web
        content. The first and only known adaptation type is extra zoom mode, which affects `shrink-to-fit` and layout
        size adjustments.

        See per-method changes below for more details.

        Test: fast/viewport/extrazoom/viewport-disable-extra-zoom-adaptations.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::processDisabledAdaptations):
        * dom/Document.h:
        (WebCore::Document::disabledAdaptations const):

        Add disabled adaptations to Document. Changes to disabled adaptations are not propagated if the parsed disabled
        adaptation types don't change; upon changing adaptation types, notify the client to adjust for the new disabled
        adaptations (currently, this only affects the viewport configuration).

        * dom/ViewportArguments.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::StartTagScanner):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):

        Restore the set of disabled adaptations when restoring a page from the cache.

        * page/Chrome.cpp:
        (WebCore::Chrome::dispatchDisabledAdaptationsDidChange const):
        * page/Chrome.h:
        * page/ChromeClient.h:

        Add plumbing for changes to the set of disabled adaptations.

        * page/DisabledAdaptations.cpp: Added.
        (WebCore::extraZoomModeAdaptationName):
        * page/DisabledAdaptations.h: Added.

        Introduce a header containing a new enum for the extra zoom mode adaptation, as well as a helper function to
        return the extra zoom mode adaptation name.

        * page/Page.cpp:
        (WebCore::Page::disabledAdaptations const):

        Returns the mainframe's set of adaptations to disable.

        * page/Page.h:
        * page/RemoteFrame.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDisabledAdaptationsMetaTagEnabled):
        (WebCore::RuntimeEnabledFeatures::disabledAdaptationsMetaTagEnabled const):

        Add a new runtime feature to gate handling the "disabled-adaptations" meta tag.

        * page/ViewportConfiguration.cpp:
        (WebCore::shouldOverrideShrinkToFitArgument):
        (WebCore::needsUpdateAfterChangingDisabledAdaptations):
        (WebCore::ViewportConfiguration::setDisabledAdaptations):
        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthAndShrinkToFit const):

        Consult whether or not extra zoom mode adaptations are disabled, instead of the shrink-to-fit attribute value.

        (WebCore::ViewportConfiguration::updateConfiguration):
        * page/ViewportConfiguration.h:

        Add an OptionSet of disabled adaptation types to ViewportConfiguration. Updates to the adaptation type are
        propagated to the ViewportConfiguration from Document, through the ChromeClient and the client layer (refer to
        changes in WebKit). Once the OptionSet is changed, we recompute the viewport configuration only if needed by the
        platform.

        (WebCore::ViewportConfiguration::viewLayoutSize const):
        (WebCore::ViewportConfiguration::disabledAdaptations const):
        * page/WindowFeatures.cpp:
        (WebCore::parseDisabledAdaptations):
        * page/WindowFeatures.h:

        Add a new helper to parse the meta content of a "disabled-adaptations" tag as an OptionSet of disabled
        adaptation types. The string is parsed by first splitting on the comma character, and then iterating over lower
        case, whitespace-stripped tokens to look for known adaptation names. So far, only extra zoom mode is supported.

        * testing/Internals.cpp:
        (WebCore::Internals::extraZoomModeAdaptationName const):
        * testing/Internals.h:
        * testing/Internals.idl:

        Expose the extra zoom mode adaptation name to the DOM, only when running layout tests.

2018-05-14  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Listbox and Combobox roles embedded in labels should participate in name calculation
        https://bugs.webkit.org/show_bug.cgi?id=185521

        Reviewed by Chris Fleizach.

        Take selected children into account when computing the name in accessibleNameForNode.
        Add ListBox to the roles for which accessibleNameDerivesFromContent returns false so
        that native select elements with size > 1 are treated the same way as ARIA listbox.
        Also add ListBox to the roles which are treated as controls when used in ARIA. Finally,
        prevent labels which contain unrelated controls from being used as an AXTitleUIElement.
        This causes us to build a string from the label and its descendants, ensuring the latter
        participate in the name calculation.

        Test: accessibility/text-alternative-calculation-from-listbox.html

        * accessibility/AccessibilityLabel.cpp:
        (WebCore::childrenContainUnrelatedControls):
        (WebCore::AccessibilityLabel::containsUnrelatedControls const):
        * accessibility/AccessibilityLabel.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::accessibleNameForNode):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::accessibleNameDerivesFromContent const):
        (WebCore::AccessibilityObject::isARIAControl):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement const):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const):

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

        [Web Animations] Tests using the new animation engine may crash under WebCore::FrameView::didDestroyRenderTree when using internals methods
        https://bugs.webkit.org/show_bug.cgi?id=185612
        <rdar://problem/39579344>

        Reviewed by Dean Jackson.

        Add a new internals.pseudoElement() method to obtain a pseudo element matching a given pseudo-id. This is necessary to be able to move off
        internals.pauseTransitionAtTimeOnPseudoElement() and internals.pauseAnimationAtTimeOnPseudoElement() for Web Animations testing.

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

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

        REGRESSION (r230574): Interrupted hardware transitions don't behave correctly
        https://bugs.webkit.org/show_bug.cgi?id=185299
        <rdar://problem/39630230>

        Reviewed by Simon Fraser.

        In r230574, the fix for webkit.org/b/184518, we changed the processing order in GraphicsLayerCA::updateAnimations() to first
        process m_uncomittedAnimations and then m_animationsToProcess, so we are guaranteed animations exist before we attempt to pause
        or seek them. This broke interrupting and resuming hardware animations (such as an interrupted CSS Transition or an animation
        running in a non-visible tab) since a pause operation recorded _before_ an animation was added would be paused anyway since
        the animation was now first added, and then paused. The fix is simply to clear any pending AnimationProcessingAction for a
        newly-uncommitted animation.

        Test: transitions/interrupted-transition-hardware.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation):

2018-05-14  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix style issue in MediaPlayerPrivateGStreamerBase
        https://bugs.webkit.org/show_bug.cgi?id=185510

        Reviewed by Philippe Normand.

        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:629:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:684:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:807:  More than one command on the same line  [whitespace/newline] [4]

        Indentation and style issue fixed only.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):

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

        [LFC] Implement height computation for non-replaced out of flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185585

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedHeight const):
        (WebCore::Layout::FormattingContext::computeHeightForBlockFormattingContextRootWithAutoHeight const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/displaytree/DisplayBox.h:

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

        Renaming of overrides in LayoutBox
        https://bugs.webkit.org/show_bug.cgi?id=185609

        Reviewed by Javier Fernandez.

        The names of the methods for the overrides were not consistent,
        this patch fixes it by using the same structure in all the cases.

        No new tests, no change of behavior.

        * rendering/GridLayoutFunctions.cpp:
        (WebCore::GridLayoutFunctions::hasOverrideContainingBlockContentSizeForChild):
        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithmStrategy::logicalHeightForChild const):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeChildPreferredLogicalWidths const):
        (WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateRubyForJustifiedText):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        (WebCore::RenderBox::hasOverrideContentLogicalHeight const):
        (WebCore::RenderBox::hasOverrideContentLogicalWidth const):
        (WebCore::RenderBox::setOverrideContentLogicalHeight):
        (WebCore::RenderBox::setOverrideContentLogicalWidth):
        (WebCore::RenderBox::clearOverrideContentLogicalHeight):
        (WebCore::RenderBox::clearOverrideContentLogicalWidth):
        (WebCore::RenderBox::clearOverrideContentSize):
        (WebCore::RenderBox::overrideContentLogicalWidth const):
        (WebCore::RenderBox::overrideContentLogicalHeight const):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalWidth const):
        (WebCore::RenderBox::overrideContainingBlockContentLogicalHeight const):
        (WebCore::RenderBox::hasOverrideContainingBlockContentLogicalWidth const):
        (WebCore::RenderBox::hasOverrideContainingBlockContentLogicalHeight const):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalWidth):
        (WebCore::RenderBox::setOverrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::clearOverrideContainingBlockContentSize):
        (WebCore::RenderBox::clearOverrideContainingBlockContentLogicalHeight):
        (WebCore::RenderBox::containingBlockLogicalWidthForContent const):
        (WebCore::RenderBox::containingBlockLogicalHeightForContent const):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight const):
        (WebCore::RenderBox::computeLogicalWidthInFragment const):
        (WebCore::RenderBox::computeLogicalHeight const):
        (WebCore::RenderBox::computePercentageLogicalHeight const):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing const):
        (WebCore::RenderBox::availableLogicalHeightUsing const):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned const):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned const):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::hasAutoHeightOrContainingBlockWithAutoHeight const):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::contentWidthForChild):
        (WebCore::contentHeightForChild):
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeInnerFlexBaseSizeForChild):
        (WebCore::RenderFlexibleBox::crossSizeForPercentageResolution):
        (WebCore::RenderFlexibleBox::mainSizeForPercentageResolution):
        (WebCore::RenderFlexibleBox::constructFlexItem):
        (WebCore::RenderFlexibleBox::setOverrideMainAxisContentSizeForChild):
        (WebCore::RenderFlexibleBox::applyStretchAlignmentToChild):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::applyStretchAlignmentToChildIfNeeded):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::adjustInlineDirectionLineBounds const):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::setOverrideContentLogicalHeightFromRowHeight):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::relayoutCellIfFlexed):

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

        [LFC] Implement width computation for non-replaced out of flow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185598

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowNonReplacedWidth const):
        (WebCore::Layout::FormattingContext::shrinkToFitWidth const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/displaytree/DisplayBox.h:

2018-05-14  Zan Dobersek  <zdobersek@igalia.com>

        Drop the m_compositorTexture member variable in TextureMapperGC3DPlatformLayer.
        It's not used at all inside the class or outside it.

        Rubber-stamped by Michael Catanzaro.

        * platform/graphics/texmap/TextureMapperGC3DPlatformLayer.h:

2018-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] REGRESSION(r231170) Build broken with Clang 5.0
        https://bugs.webkit.org/show_bug.cgi?id=185198

        Reviewed by Michael Catanzaro.

        Avoid gperf files using the register keyword which has been made
        reserved and as such unusable in C++17.

        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * platform/ColorData.gperf:
        * platform/ReferrerPolicy.h: With std::optional forward declaration
        gone, explicitly include the WTF Optional.h header.
        * platform/Theme.h: Ditto.
        * platform/network/create-http-header-name-table:

2018-05-14  Commit Queue  <commit-queue@webkit.org>

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

        It sometimes makes AudioUnitInitialize call to fail in
        CoreAudioCaptureSource (Requested by youenn on #webkit).

        Reverted changeset:

        "Remove CoreAudioCaptureSource speaker configuration"
        https://bugs.webkit.org/show_bug.cgi?id=174512
        https://trac.webkit.org/changeset/219515

2018-05-13  Dirk Schulze  <krit@webkit.org>

        Implement SVGGeometryElement's isPointInFill and isPointInStroke
        https://bugs.webkit.org/show_bug.cgi?id=185580

        Reviewed by Antti Koivisto.

        Implement isPointInFill and isPointInStroke methods for
        SVGGeometryElement interface from SVG2.

        https://svgwg.org/svg2-draft/types.html#InterfaceSVGGeometryElement

        Tests: svg/dom/SVGGeometry-isPointInFill.xhtml
               svg/dom/SVGGeometry-isPointInStroke.xhtml

        * rendering/svg/RenderSVGEllipse.cpp:
        (WebCore::RenderSVGEllipse::shapeDependentStrokeContains): Flag
                to switch between local and "global" coordinate space for hit testing.
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::shapeDependentStrokeContains): Flag
                to switch between local and "global" coordinate space for hit testing.
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::shapeDependentStrokeContains): Flag
                to switch between local and "global" coordinate space for hit testing.
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::shapeDependentStrokeContains): Flag
                to switch between local and "global" coordinate space for hit testing.
        (WebCore::RenderSVGShape::isPointInFill): Take the winding rule given by
                `fill-rule` to test if a given point is in the fill area of a path.
        (WebCore::RenderSVGShape::isPointInStroke): Take stroke properties into
                account to check if a point is on top of the stroke area.
        * rendering/svg/RenderSVGShape.h:
        * svg/SVGGeometryElement.cpp:
        (WebCore::SVGGeometryElement::isPointInFill):
        (WebCore::SVGGeometryElement::isPointInStroke):
        (WebCore::SVGGeometryElement::createElementRenderer): Deleted. This is getting implemented
                by inheriting classes. No need to create RenderSVGPath here.
        * svg/SVGGeometryElement.h:
        * svg/SVGGeometryElement.idl:

2018-05-12  Zalan Bujtas  <zalan@apple.com>

        Use WeakPtr for m_enclosingPaginationLayer in RenderLayer
        https://bugs.webkit.org/show_bug.cgi?id=185566
        <rdar://problem/36486052>

        Reviewed by Simon Fraser.

        Since RenderLayer does not own the enclosing pagination layout, it should
        construct a weak pointer instead of holding on to a raw pointer.

        Unable to create a reliably reproducible test case.

        * page/mac/EventHandlerMac.mm:
        (WebCore::scrollableAreaForEventTarget):
        (WebCore::scrollableAreaForContainerNode):
        (WebCore::EventHandler::platformPrepareForWheelEvents):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::weakPtrFactory const):
        (WebCore::ScrollableArea::createWeakPtr): Deleted.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::updatePagination):
        * rendering/RenderLayer.h:

2018-05-11  Daniel Bates  <dabates@apple.com>

        X-Frame-Options: SAMEORIGIN needs to check all ancestor frames
        https://bugs.webkit.org/show_bug.cgi?id=185567
        <rdar://problem/40175008>

        Reviewed by Brent Fulgham.

        Change the behavior of "X-Frame-Options: SAMEORIGIN" to ensure that all ancestors frames
        are same-origin with the document that delivered this header. This prevents an intermediary
        malicious frame from clickjacking a child frame whose document is same-origin with the top-
        level frame. It also makes the behavior of X-Frame-Options in WebKit more closely match
        the behavior of X-Frame-Options in other browsers, including Chrome and Firefox.
        
        Currently a document delivered with "X-Frame-Options: SAMEORIGIN" must only be same-origin
        with the top-level frame's document in order to be displayed. This prevents clickjacking by
        a malicious page that embeds a page delivered with "X-Frame-Options: SAMEORIGIN". However,
        it does not protect against clickjacking of the "X-Frame-Options: SAMEORIGIN" page (victim)
        if embedded by an intermediate malicious iframe, say a "rogue ad", that was embedded in a
        document same origin with the victim page. We should protect against such attacks. 

        Tests: http/tests/security/XFrameOptions/x-frame-options-ancestors-same-origin-allow.html
               http/tests/security/XFrameOptions/x-frame-options-ancestors-same-origin-deny.html

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

2018-05-11  Daniel Bates  <dabates@apple.com>

        [iOS] Text decoration of dragged content does not paint with opacity
        https://bugs.webkit.org/show_bug.cgi?id=185551
        <rdar://problem/40166867>

        Reviewed by Wenson Hsieh.

        Respect alpha when painting the text decoration for dragged content.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::MarkedTextStyle::areDecorationMarkedTextStylesEqual): Consider alpha when
        comparing decoration styles for equality so that we do not coalesce styles with differing alpha.
        (WebCore::InlineTextBox::paintMarkedTextDecoration): Respect alpha when painting dragged content.

2018-05-11  Nan Wang  <n_wang@apple.com>

        AX: In role=dialog elements with aria-modal=true VoiceOver iOS/macOS can't manually focus or read dialog paragraph description text inside the modal.
        https://bugs.webkit.org/show_bug.cgi?id=185219
        <rdar://problem/39920009>

        Reviewed by Chris Fleizach.

        The text node descendants of a modal dialog are ignored. Fixed it by using AccessibilityObject's 
        node() to determine if it's the descendant of the modal dialog node.

        Test: accessibility/aria-modal-text-descendants.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isModalDescendant const):

2018-05-11  Ryosuke Niwa  <rniwa@webkit.org>

        Tapping after CSS-based table casues an infinite loop in wordRangeFromPosition
        https://bugs.webkit.org/show_bug.cgi?id=185465
        <rdar://problem/35263057>

        Reviewed by Antti Koivisto.

        The bug was caused by TextIterator not emitting a line break when exiting a CSS-based table when an element
        with `display: table-row` has an invisible text node. Specifically, TextIterator::exitNode is never called on
        an element with `table-cell: row` when m_node is a text node with whitespaces which appears after an element
        with `display: table-cell`.

        For example, for a tree structure like:
        table-row (R)
          table-cell (C)
            "text" (1)
          " " (2)
        Getting out of (C) would result in moving onto (2) without generating a line break for (R).

        When this happens in nextBoundary as it tries to find the end of the last word in the table cell, we end up
        finding the end of the document as the end of the word. As a result, nextWordBoundaryInDirection, the caller
        of nextBoundary, ends up infinite looping between the positon at the end of the document and the position
        immediately before the last word in the last table cell when it traverses words backwards.

        This patch fixes the hang by addressing this root cause in TextIterator. Namely, TextIterator now generates
        a line break when exiting a block while walking up ancestors in TextIterator::advance().

        Tests: editing/selection/tapping-in-table-at-end-of-document.html
               editing/text-iterator/table-at-end-of-document.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::advance): Fixed the bug.
        (WebCore::shouldEmitNewlineAfterNode): Do generate a new line at the end of a document when we're trying to
        generate every visible poitions even there are no renderers beyond this point. e.g. a position inside the
        last cell of a table at the end of a document hits this condition.
        (WebCore::shouldEmitExtraNewlineForNode): Don't emit a line break when the render box's height is 0px
        to avoid generating many empty lines for empty paragraph and header elements (this function is used to generate
        a blank line between p's and h1/h2/...'s).
        (WebCore::TextIterator::exitNode):

2018-05-11  Dean Jackson  <dino@apple.com>

        System preview badge doesn't show on <picture> elements
        https://bugs.webkit.org/show_bug.cgi?id=185559
        <rdar://problem/40150066>

        Reviewed by Tim Horton.

        We should also identify <img>s that are the child of a <picture>
        contained inside the appropriate <a> element.

        Tested internally, since the badge is platform specific.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isSystemPreviewImage const): Add logic
        to look for <picture> parents.

2018-05-11  Chris Dumez  <cdumez@apple.com>

        REGRESSION (async policy delegate): Revoking an object URL immediately after triggering download breaks file download
        https://bugs.webkit.org/show_bug.cgi?id=185531
        <rdar://problem/39909589>

        Reviewed by Geoffrey Garen.

        Whenever we start an asynchronous navigation policy decision for a blob URL, create a temporary
        blob URL pointing to the same data, and update the request's URL. This way, if the page's JS revokes
        the URL during the policy decision, the load will still succeed.

        Test: fast/dom/HTMLAnchorElement/anchor-file-blob-download-then-revoke.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::extendBlobURLLifetimeIfNecessary const):
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * loader/PolicyChecker.h:

2018-05-11  Antti Koivisto  <antti@apple.com>

        LinkLoader fails to remove CachedResourceClient in some cases
        https://bugs.webkit.org/show_bug.cgi?id=185553
        <rdar://problem/36879656>

        Reviewed by Geoffrey Garen.

        Test: http/tests/preload/link-preload-client-remove.html

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):

        If there is a link preload already in progress, we fail to clear the client for the ongoing load.
        This may leave the CachedResource client map in a bad state.

2018-05-11  Charles Vazac  <cvazac@gmail.com>

        Runtime feature flag for Server-Timing
        https://bugs.webkit.org/show_bug.cgi?id=184758

        Reviewed by Youenn Fablet.

        * Source/WebCore/CMakeLists.txt: Added reference to PerformanceServerTiming.idl.
        * Source/WebCore/DerivedSources.make: Added reference to PerformanceServerTiming.idl.
        * Source/WebCore/Sources.txt: Added reference to PerformanceServerTiming.cpp and JSPerformanceServerTiming.cpp.
        * Source/WebCore/WebCore.xcodeproj/project.pbxproj: Added references to PerformanceServerTiming.cpp, PerformanceServerTiming.h, and PerformanceServerTiming.idl.
        * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: Added PerformanceServerTiming.
        * Source/WebCore/page/PerformanceResourceTiming.h: Added serverTiming member.
        * Source/WebCore/page/PerformanceResourceTiming.idl: Added serverTiming attribute.
        * Source/WebCore/page/PerformanceServerTiming.cpp: Added.
        * Source/WebCore/page/PerformanceServerTiming.h: Added.
        * Source/WebCore/page/PerformanceServerTiming.idl: Added.

2018-05-11  Brady Eidson  <beidson@apple.com>

        Make sure history navigations reuse the existing process when necessary.
        <rdar://problem/39746516> and https://bugs.webkit.org/show_bug.cgi?id=185532

        Reviewed by Ryosuke Niwa.

        Covered by new API tests.

        In WebCore-land, make sure *all* NavigationActions to a back/forward item are tagged with
        the item identifier.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::logString const):
        * history/HistoryItem.h:

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

        * loader/NavigationAction.cpp:
        (WebCore::NavigationAction::setTargetBackForwardItem):

        * loader/NavigationAction.h:
        (WebCore::NavigationAction::targetBackForwardItemIdentifier const):

2018-05-11  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Handle the protection event in MediaPlayerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=185535

        Reviewed by Xabier Rodriguez-Calvar.

        This patch is based on this calvaris's commit
        https://github.com/WebPlatformForEmbedded/WPEWebKit/commit/d966168b0d2b65f9ca9415426e26d3752c78b03e

        It adds a handler for the protection event in MediaPalyerPrivateGStreamerBase, it extracts the InitData from the event
        and sends the encrypted event to JS via HTMLMediaElement.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializationDataEncountered):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h: Add a new type InitData.

2018-05-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Make the cipher suites, the signing algorithms and the curve lists configurable.
        https://bugs.webkit.org/show_bug.cgi?id=185139

        Add interface to configure the cipher suites, the signing algorithms and the curve lists 
        used by OpenSSL and libcurl to exchange, to sign or to verify keys.

        Reviewed by Youenn Fablet.

        No new tests in public. Have tested internally.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setSslCipherList):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::willSetupSslCtx):
        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::getCACertPathEnv):
        * platform/network/curl/CurlSSLHandle.h:
        (WebCore::CurlSSLHandle::getCipherList const):
        (WebCore::CurlSSLHandle::getSignatureAlgorithmsList const):
        (WebCore::CurlSSLHandle::getCurvesList const):
        (WebCore::CurlSSLHandle::setCipherList):
        (WebCore::CurlSSLHandle::setSignatureAlgorithmsList):
        (WebCore::CurlSSLHandle::setCurvesList):
        (WebCore::CurlSSLHandle::getCACertPath const):
        (WebCore::CurlSSLHandle::setCACertPath):
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):

2018-05-10  Daniel Bates  <dabates@apple.com>

        Use PlatformStrategies to switch between WebKit and WebKitLegacy checking of CSP frame-ancestors and X-Frame-Options
        https://bugs.webkit.org/show_bug.cgi?id=185412

        Reviewed by Ryosuke Niwa.

        Consolidate the knowledge on how to determine whether security checks were performed on a ResourceResponse
        into LoaderStrategy::havePerformedSecurityChecks() (default implementation returns false) and query it
        to determine whether CSP frame-ancestors and X-Frame-Options need to be checked for a ResourceResponse.

        Additionally, rename LoaderStrategy::isDoingLoadingSecurityChecks() to shouldPerformSecurityChecks()
        for consistency with havePerformedSecurityChecks(). Querying shouldPerformSecurityChecks() answers the
        question of whether the loader strategy is responsible for performing security checks when building up
        a ResourceRequest to have the loader strategy load. And LoaderStrategy::havePerformedSecurityChecks()
        is used to determine whether the loader strategy performed these security checks for a given ResourceResponse.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        (WebCore::isResponseProbablyComingFromNetworkProcess): Deleted.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::shouldPerformSecurityChecks):
        (WebCore::DocumentThreadableLoader::shouldSetHTTPHeadersToKeep const):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::redirectReceived):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::isDoingSecurityChecksInNetworkProcess): Deleted.
        (WebCore::isResponseComingFromNetworkProcess): Deleted.
        * loader/LoaderStrategy.cpp:
        * loader/LoaderStrategy.h:
        * page/Settings.yaml: Remove setting networkProcessCSPFrameAncestorsCheckingEnabled as we now make
        use of the loader strategy to determine whether to perform CSP frame-ancestors and X-Frame-Options
        checking in DocumentLoader.
        * platform/network/ResourceResponseBase.h:
        (WebCore::ResourceResponseBase::setSource): Added an ASSERT to catch the programming error of setting
        source to ResourceResponse::Source::Unknown. This source type represents an uninitialized ResourceResponse.

2018-05-10  Tim Horton  <timothy_horton@apple.com>

        Lookup sometimes shows a second yellow highlight on top of WebKit's TextIndicator
        https://bugs.webkit.org/show_bug.cgi?id=185538
        <rdar://problem/38817825>

        Reviewed by Sam Weinig.

        * editing/mac/DictionaryLookup.mm:
        (WebCore::showPopupOrCreateAnimationController):
        Options can be nil, in which case we can't mutableCopy it and add
        LUTermOptionDisableSearchTermIndicator. Instead, create a new dictionary,
        and add the items from options, if it's not nil.

2018-05-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: ASSERT_NOT_REACHED in PageDebuggerAgent::didAddEventListener when page adds attribute event listener
        https://bugs.webkit.org/show_bug.cgi?id=181580
        <rdar://problem/36461309>

        Reviewed by Brian Burg.

        EventTarget should pass newly added EventListeners to InspectorInstrumentation,
        instead of PageDebuggerAgent assuming the last item in the EventListenerVector
        is the most recently added listener. This assumption does not hold when
        the new listener replaces an existing listener.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        (WebCore::EventTarget::setAttributeEventListener):

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didAddEventListenerImpl):

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didAddEventListener):

        * inspector/agents/page/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didAddEventListener):
        * inspector/agents/page/PageDebuggerAgent.h:

2018-05-10  Chris Dumez  <cdumez@apple.com>

        'Cross-Origin-Options header implementation follow-up
        https://bugs.webkit.org/show_bug.cgi?id=185520

        Reviewed by Ryosuke Niwa.

        * dom/Document.cpp:
        * dom/Document.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        Using isNull() check is sufficient here as the header parsing
        function will do the right thing when passed the empty string.
        Also set the options directly on the window instead of the
        document. The window is guaranteed to have been constructed
        by then because didBeginDocument() is called DocumentWriter::begin()
        which calls Document::createDOMWindow() or Document::takeDOMWindowFrom().

        * page/AbstractDOMWindow.cpp:
        (WebCore::AbstractDOMWindow::AbstractDOMWindow):
        * page/AbstractDOMWindow.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::didSecureTransitionTo):
        * page/RemoteDOMWindow.cpp:
        (WebCore::RemoteDOMWindow::RemoteDOMWindow):
        * page/RemoteDOMWindow.h:
        CrossOriginOptions are now stored only on the Window, not the Document.

        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginOptionsHeader):
        Drop strippedHeader local variable as it is not strictly needed.

2018-05-10  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r231393
        https://bugs.webkit.org/show_bug.cgi?id=185519
        <rdar://problem/40131741>

        Reviewed by Simon Fraser.

        * Configurations/WebCore.xcconfig:

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

        Log missing cues correctly
        https://bugs.webkit.org/show_bug.cgi?id=185499
        <rdar://problem/40113821>

        Reviewed by Daniel Bates.

        No new tests, tested manually.

        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::removeGenericCue): Log the cue we searched for, not
        the NULL cue.

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

        [LFC] Implement height computation for non-replaced inflow elements.
        https://bugs.webkit.org/show_bug.cgi?id=185474

        Reviewed by Antti Koivisto.

        Initial implementation. Does not cover all the cases.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeHeight const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowNonReplacedHeight const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithParentMarginBottom):
        (WebCore::Layout::isMarginBottomCollapsedWithParent): Deleted.
        * layout/blockformatting/BlockMarginCollapse.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeInFlowHeight const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::isReplaced const):
        * layout/layouttree/LayoutBox.h:

2018-05-10  Thibault Saunier  <tsaunier@igalia.com>

        [GTK] Implement ImageBuffer::toBGRAData
        https://bugs.webkit.org/show_bug.cgi?id=185511

        Reviewed by Michael Catanzaro.

        This was never implemented but will be required for the MediaStream API
        tests.

        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::toBGRAData const):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toBGRAData const):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toBGRAData const):

2018-05-10  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Add a handler for GStreamer protection event
        https://bugs.webkit.org/show_bug.cgi?id=185245

        Reviewed by Xabier Rodriguez-Calvar.

        Qtdemux sends the protection event when encountered a new PSSH box (encrypted content).

        The Decryptor is moved from AppendPipeline to PlaybackPipeline (see https://bugs.webkit.org/show_bug.cgi?id=181855),
        thus the protection event is no longer handled because the Decryptor is not in the same pipeline as qtdemux.

        AppendPipeline: httpsrc-->qtdemux-->appsink
        PlaybackPipeline: appsrc-->parser--> decryptor-->decoder-->sink

        This patch attaches a probe to the sink pad of the appsink in the appendPipeline in order to
        catch and manage the protection event.

        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::~AppendPipeline):
        (WebCore::appendPipelineAppsinkPadEventProbe):
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        (WebCore::AppendPipeline::playerPrivate):

2018-05-10  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Move the decryptor from AppendPipeline to PlaybackPipeline.
        https://bugs.webkit.org/show_bug.cgi?id=181855

        Reviewed by Xabier Rodriguez-Calvar.

        The goal of this move is to handle the limitation of SVP (Secure Video Path) memory size.

        When the decryptor is in the AppendPipeline and we use SVP, we buffer in MediaSource queue
        the decrypted GstBuffers that are in SVP memory.
        This behavior cause an out-of-memory error, because we are limited in SVP memory size.

        By moving the decryptor in PlaybackPipeline, we avoid to buffer the decrypted GstBuffers
        which use the SVP memory and we buffer the encrypted GstBuffers that are in system memory.

        This new architecture also allows to start the buffering before obtaining the DRM license
        and it makes easier to manage dynamic change of the license or Key.

        The decryptor is auto plugged by GStreamer playbin in PlaybackPipeline.

        SVP: Secure Video Path also named trusted or protected video path, it is a memory which is
        protected by a hardware access control engine, it is not accessible to other unauthorised
        software or hardware components.

        Tests:
            media/encrypted-media/clearKey/clearKey-cenc-audio-playback-mse.html
            media/encrypted-media/clearKey/clearKey-cenc-video-playback-mse.html

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::dumpAppendState):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleNeedContextSyncMessage):
        (WebCore::AppendPipeline::handleAppsrcNeedDataReceived):
        (WebCore::AppendPipeline::setAppendState):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        (WebCore::appendPipelineElementMessageCallback): Deleted.
        (WebCore::AppendPipeline::handleElementMessage): Deleted.
        (WebCore::AppendPipeline::dispatchPendingDecryptionStructure): Deleted.
        (WebCore::AppendPipeline::dispatchDecryptionStructure): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:

2018-05-09  Nan Wang  <n_wang@apple.com>

        AX: VoiceOver iframe scrolling focus jumping bug
        https://bugs.webkit.org/show_bug.cgi?id=176615
        <rdar://problem/34333067>

        Reviewed by Chris Fleizach.

        Scrolling to make elements visible is not working correctly for elements inside an
        offscreen iframe. Fixed it by using RenderLayer::scrollRectToVisible() to handle
        scrolling more properly.

        Test: accessibility/scroll-to-make-visible-iframe-offscreen.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollToMakeVisible const):

2018-05-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: accessibleNameForNode should simplify whitespace when using innerText
        https://bugs.webkit.org/show_bug.cgi?id=185498

        Reviewed by Chris Fleizach.

        Test: accessibility/text-alternative-calculation-from-unrendered-table.html

        Call simplifyWhiteSpace() before returning the innerText value.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::accessibleNameForNode):

2018-05-09  Chris Dumez  <cdumez@apple.com>

        Add initial support for 'Cross-Origin-Options' HTTP response header
        https://bugs.webkit.org/show_bug.cgi?id=184996
        <rdar://problem/39664620>

        Reviewed by Geoff Garen.

        Add initial support for 'Cross-Origin-Options' HTTP response header behind an experimental
        feature flag, on by default. When the HTTP server services this HTTP response header for a
        main resource, we'll set these options on the corresponding Document. This will impact the
        behavior of the Document's associated Window API when cross-origin.

        The HTTP header has 3 possible values:
        - allow: This is the default. Regular cross-origin Window API is available.
        - allow-postmessage: Only postMessage() is available on a cross-origin window, trying to
          access anything else will throw a SecurityError.
        - deny: Trying to do anything with a cross-origin window will throw a SecurityError.

        The header has no effect when accessing same origin windows.

        Note that on cross-origin access from Window A to Window B, we check the cross-origin
        options for both Window A and Window B and use the lowest common denominator as effective
        cross-origin options for the access. So if Window A has 'Cross-Origin-Options: deny' and
        tries to call postMessage() on Window B which has 'Cross-Origin-Options: allow-postmessage',
        we will throw a SecurityError. This is because Window A's more restrictive options (deny)
        apply.

        Tests: http/wpt/cross-origin-options/allow-postmessage-from-deny.html
               http/wpt/cross-origin-options/allow-postmessage.html
               http/wpt/cross-origin-options/cross-origin-options-header.html

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindowGivenMinimumCrossOriginOptions):
        * bindings/js/JSDOMBindingSecurity.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::effectiveCrossOriginOptionsForAccess):
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::addCrossOriginWindowPropertyNames):
        (WebCore::addScopedChildrenIndexes):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        (WebCore::JSDOMWindow::getOwnPropertyNames):
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/js/JSRemoteDOMWindowCustom.cpp:
        (WebCore::JSRemoteDOMWindow::getOwnPropertySlot):
        (WebCore::JSRemoteDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSRemoteDOMWindow::getOwnPropertyNames):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeGetterBodyDefinition):
        (GetCrossOriginsOptionsFromExtendedAttributeValue):
        (GenerateAttributeSetterBodyDefinition):
        (GenerateOperationBodyDefinition):
        * bindings/scripts/IDLAttributes.json:
        * dom/Document.cpp:
        (WebCore::Document::setCrossOriginOptions):
        * dom/Document.h:
        (WebCore::Document::crossOriginOptions const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument):
        * page/AbstractDOMWindow.cpp:
        (WebCore::AbstractDOMWindow::AbstractDOMWindow):
        * page/AbstractDOMWindow.h:
        (WebCore::AbstractDOMWindow::crossOriginOptions):
        (WebCore::AbstractDOMWindow::setCrossOriginOptions):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::didSecureTransitionTo):
        * page/DOMWindow.idl:
        * page/Frame.h:
        * page/RemoteDOMWindow.cpp:
        (WebCore::RemoteDOMWindow::RemoteDOMWindow):
        * page/RemoteDOMWindow.h:
        * page/Settings.yaml:
        * platform/network/HTTPHeaderNames.in:
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseCrossOriginOptionsHeader):
        * platform/network/HTTPParsers.h:

2018-05-09  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in TreeScopeOrderedMap::remove via HTMLImageElement::removedFromAncestor
        https://bugs.webkit.org/show_bug.cgi?id=185493

        Reviewed by Brent Fulgham.

        Fixed the bug that HTMLImageElement::removedFromAncestor and HTMLMapElement::removedFromAncestor
        were calling removeImageElementByUsemap on the document instead of the shadow tree from which it was removed.

        Test: fast/images/imagemap-in-shadow-tree-removed.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::removedFromAncestor):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::removedFromAncestor):

2018-05-09  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Hidden nodes which are not directly referenced should not participate name/description from content
        https://bugs.webkit.org/show_bug.cgi?id=185478

        Reviewed by Chris Fleizach.

        Add a check to AccessibilityNodeObject::textUnderElement() and return early
        if the node is hidden, not referenced by aria-labelledby or aria-describedby,
        not an HTMLLabelElement, and not fallback content for an HTMLCanvasElement.

        Test: accessibility/text-alternative-calculation-hidden-nodes.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textUnderElement const):

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

        Update MediaSession to use release logging
        https://bugs.webkit.org/show_bug.cgi?id=185376
        <rdar://problem/40022203>

        Reviewed by Youenn Fablet.

        No new tests, tested manually.

        * Modules/mediastream/MediaStream.h: hostingDocument() doesn't need to return a const Document.
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::hostingDocument const): Ditto.
        * Modules/webaudio/AudioContext.h:

        * html/HTMLMediaElement.h: Ditto.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::MediaElementSession):
        (WebCore::MediaElementSession::addBehaviorRestriction):
        (WebCore::MediaElementSession::removeBehaviorRestriction):
        (WebCore::MediaElementSession::dataLoadingPermitted const):
        (WebCore::MediaElementSession::fullscreenPermitted const):
        (WebCore::MediaElementSession::pageAllowsDataLoading const):
        (WebCore::MediaElementSession::pageAllowsPlaybackAfterResuming const):
        (WebCore::MediaElementSession::canShowControlsManager const):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):
        (WebCore::MediaElementSession::hasWirelessPlaybackTargets const):
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaElementSession::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaElementSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaElementSession::externalOutputDeviceAvailableDidChange):
        (WebCore::MediaElementSession::setShouldPlayToPlaybackTarget):
        (WebCore::MediaElementSession::mediaEngineUpdated):
        (WebCore::MediaElementSession::willLog const): Deleted.
        (WebCore::MediaElementSession::logger const): Deleted.
        (WebCore::MediaElementSession::logIdentifier const): Deleted.
        (WebCore::MediaElementSession::logChannel const): Deleted.
        * html/MediaElementSession.h:

        * platform/audio/PlatformMediaSession.cpp:
        (WebCore::nextLogIdentifier):
        (WebCore::convertEnumerationToString):
        (WebCore::PlatformMediaSession::PlatformMediaSession):
        (WebCore::PlatformMediaSession::setState):
        (WebCore::PlatformMediaSession::beginInterruption):
        (WebCore::PlatformMediaSession::endInterruption):
        (WebCore::PlatformMediaSession::clientWillBeginAutoplaying):
        (WebCore::PlatformMediaSession::clientWillPausePlayback):
        (WebCore::PlatformMediaSession::pauseSession):
        (WebCore::PlatformMediaSession::stopSession):
        (WebCore::PlatformMediaSession::clientDataBufferingTimerFired):
        (WebCore::PlatformMediaSession::logChannel const):
        (WebCore::stateName): Deleted.
        (WebCore::interruptionName): Deleted.
        * platform/audio/PlatformMediaSession.h:
        (WTF::LogArgument<WebCore::PlatformMediaSession::State>::toString):
        (WTF::LogArgument<WebCore::PlatformMediaSession::InterruptionType>::toString):

2018-05-09  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Never call updateTracks if running on legacy pipeline
        https://bugs.webkit.org/show_bug.cgi?id=184581

        This makes sure failling code path is never reached in the conditions where it should not have been reached.

        Reviewed by Philippe Normand.

        Re enables all tests that were disabled after fixing.

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

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

        REGRESSION (r231479): http/tests/appcache/x-frame-options-prevents-framing.php is timing out
        https://bugs.webkit.org/show_bug.cgi?id=185443
        <rdar://problem/40100660>

        Reviewed by Andy Estes.

        Following r231479 when using WebKit2 and Restricted HTTP Response Access is enabled (enabled in
        WebKitTestRunner) we only check the CSP frame-ancestors directive and X-Frame-Options in
        NetworkProcess. We need to check these security requirements in WebContent process whenever
        we are performing a substitute data load, such as for app cache, as these loads do not go
        through NetworkProcess.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2018-05-09  Justin Fan  <justin_fan@apple.com>

        Hooked up ASTC support in WebGL; requires OpenGL ES 3 context to work. 
        https://bugs.webkit.org/show_bug.cgi?id=185272
        <rdar://problem/15745737>

        Reviewed by Dean Jackson.

        Also added in Khronos' ASTC test from version 1.0.4 beta of their conformance test suite,
        although again, this requires OpenGL ES 3 context for WebKit to detect proper support.

        Test: fast/canvas/webgl/webgl-compressed-texture-astc.html

        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMConvertWebGL.cpp:
        (WebCore::convertToJSValue):
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::getExtension):
        (WebCore::WebGL2RenderingContext::getSupportedExtensions):
        * html/canvas/WebGLCompressedTextureASTC.cpp: Added.
        (WebCore::WebGLCompressedTextureASTC::WebGLCompressedTextureASTC):
        (WebCore::WebGLCompressedTextureASTC::getName const):
        (WebCore::WebGLCompressedTextureASTC::supported):
        (WebCore::WebGLCompressedTextureASTC::getSupportedProfiles):
        * html/canvas/WebGLCompressedTextureASTC.h: Added.
        * html/canvas/WebGLCompressedTextureASTC.idl: Added.
        * html/canvas/WebGLExtension.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension):
        (WebCore::WebGLRenderingContext::getSupportedExtensions):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateCompressedTexFuncData):
        (WebCore::WebGLRenderingContextBase::validateCompressedTexDimensions):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/graphics/Extensions3D.h:

2018-05-09  Youenn Fablet  <youenn@apple.com>

        Allow WebResourceLoader to cancel a load served from a service worker
        https://bugs.webkit.org/show_bug.cgi?id=185274

        Reviewed by Chris Dumez.

        Add support for cancelling a fetch from WebProcess to service worker process.
        Use FetchIdentifier instead of uint64_t.

        * Modules/fetch/FetchIdentifier.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::startFetch):
        (WebCore::ServiceWorkerThreadProxy::cancelFetch):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2018-05-09  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Fix style issue in MediaPlayerPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=185479

        Reviewed by Philippe Normand.

        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:114:  Multi line control clauses should use braces.  [whitespace/braces] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:194:  Multi line control clauses should use braces.  [whitespace/braces] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:398:  One line control clauses should not use braces.  [whitespace/braces] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:440:  One line control clauses should not use braces.  [whitespace/braces] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:806:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:869:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:880:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:940:  More than one command on the same line  [whitespace/newline] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1102:  Multi line control clauses should use braces.  [whitespace/braces] [4]
        ERROR: Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1109:  Multi line control clauses should use braces.  [whitespace/braces] [4]

        Indentation and style issue fixed only.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::registerMediaEngine):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        (WebCore::MediaPlayerPrivateGStreamer::play):
        (WebCore::MediaPlayerPrivateGStreamer::videoChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::videoSinkCapsChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::audioChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::textChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamer::buffered const):
        (WebCore::MediaPlayerPrivateGStreamer::loadNextLocation):

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

        REGRESSION (r231479): com.apple.WebCore crash in WebCore::DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied()
        https://bugs.webkit.org/show_bug.cgi?id=185475
        <rdar://problem/40093853>

        Reviewed by Andy Estes.

        DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied() must extends its lifetime
        until completion as dispatching a DOM load event at the associated frame can cause JavaScript execution
        that can do anything, including destroying the loader that dispatched the event.

        Following r231479 DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied() is now
        invoked by both DocumentLoader::responseReceived() and WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied().
        The latter only can happen when using WebKit2 and the experimental feature Restricted HTTP Response Access
        is enabled (RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()). Unlike DocumentLoader::responseReceived()
        WebResourceLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied() does not take out a ref
        on the DocumentLoader before invoking DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied().
        Therefore, DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied() can cause its
        own destruction as a result of dispatching a DOM load event at the frame. We should take out a ref on
        the DocumentLoader when executing DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied().

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied):

2018-05-09  Tim Horton  <timothy_horton@apple.com>

        Fix the build by ignoring some deprecation warnings

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):

2018-05-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build cleanly with GCC 8 and ICU 60
        https://bugs.webkit.org/show_bug.cgi?id=185462

        Reviewed by Carlos Alberto Lopez Perez.

        * PlatformGTK.cmake: Include directories are in the wrong place.
        * accessibility/AXObjectCache.cpp: Silence -Wclass-memaccess problems and leave warnings.
        (WebCore::AXObjectCache::startOrEndTextMarkerDataForRange):
        (WebCore::AXObjectCache::textMarkerDataForCharacterOffset):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
        (WebCore::AXObjectCache::textMarkerDataForFirstPositionInTextControl):
        * css/CSSFontFace.cpp: Silence -Wfallthrough
        (WebCore::CSSFontFace::fontLoadTiming const):
        * css/CSSSelectorList.cpp: Silence -Wclass-memaccess, this one is intentional.
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * editing/TextIterator.cpp: Silence ICU deprecation warnings.
        * platform/Length.h:
        (WebCore::Length::operator=): More -Wclass-memaccess, looks benign.
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::hash const): -Wclass-memaccess again. Leave a warning.
        * platform/graphics/SurrogatePairAwareTextIterator.cpp: Silence ICU deprecation warnings.
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const): Silence ICU deprecation.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Silence -Wcast-function-type.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::canRenderCombiningCharacterSequence const): Silence ICU deprecation.
        * platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp:
        (gstAllocatorFastMallocMemUnmap): Fix -Wcast-function-type.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Fix bad printf.
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack): Another bad printf.
        (WebCore::findHLSQueue): Fix -Wcast-function-type.
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorDecrypt): Fix another bad printf.
        * platform/network/soup/SocketStreamHandleImplSoup.cpp: Silence -Wcast-function-type.
        (WebCore::SocketStreamHandleImpl::beginWaitingForSocketWritability):
        * platform/text/TextEncoding.cpp: Silence ICU deprecration.

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

        SVG lighting colors need to be converted into linearSRGB
        https://bugs.webkit.org/show_bug.cgi?id=181196

        Reviewed by Darin Adler.

        Address post-commit comments. Don't make a Color that contains linearRGB components,
        but use FloatComponents instead. Since these FloatComponents are in the 0-1 range,
        FELighting::setPixelInternal() needs to multiply by 255 since the output pixels are
        8-bit 0-255.
        
        Change linearToSRGBColorComponent() and sRGBToLinearColorComponent() to do math in
        floats without promoting to doubles.

        * platform/graphics/ColorUtilities.cpp:
        (WebCore::FloatComponents::FloatComponents):
        (WebCore::linearToSRGBColorComponent):
        (WebCore::sRGBToLinearColorComponent):
        (WebCore::sRGBColorToLinearComponents):
        (WebCore::linearToSRGBColor): Deleted.
        (WebCore::sRGBToLinearColor): Deleted.
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::setPixelInternal):
        (WebCore::FELighting::drawLighting):

2018-05-09  Timothy Hatcher  <timothy@apple.com>

        Use StyleColor::Options in more places.

        https://bugs.webkit.org/show_bug.cgi?id=185458
        rdar://problem/39853798

        Add UseDefaultAppearance to StyleColor::Options, to avoid passing yet another
        boolean on some of these functions.

        Reviewed by Tim Horton.

        * css/MediaQueryEvaluator.cpp:
        * css/StyleColor.h:
        * dom/Document.cpp:
        (WebCore::Document::useDefaultAppearance const):
        (WebCore::Document::styleColorOptions const):
        * dom/Document.h:
        * platform/Theme.cpp:
        (WebCore::Theme::paint):
        * platform/Theme.h:
        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::ThemeMac::ensuredView):
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        (WebCore::ThemeMac::paint):
        (-[WebCoreThemeView initWithUseSystemAppearance:]): Deleted.
        * platform/wpe/ThemeWPE.cpp:
        (WebCore::ThemeWPE::paint):
        * platform/wpe/ThemeWPE.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::inactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderTheme::platformInactiveListBoxSelectionBackgroundColor const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::platformInactiveListBoxSelectionBackgroundColor const):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):
        (WebCore::RenderThemeMac::systemColor const):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):

2018-05-09  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Crash when the mediaKeys are created before loading the media in debug conf
        https://bugs.webkit.org/show_bug.cgi?id=185244

        Reviewed by Xabier Rodriguez-Calvar.

        The function "MediaPlayerPrivateGStreamerBase::cdmInstanceAttached" is expected to be called once,
        so there is an ASSERT(!m_cdmInstance).
        But when the MediaKeys are created before loading the media, the cdminstance is created and attached
        to the MediaPlayerPrivate via "MediaPlayerPrivateGStreamerBase::cdmInstanceAttached" before loading
        the media, then when the media is loading, the function "MediaPlayerPrivateGStreamerBase::cdmInstanceAttached"
        will be called several times via the function "mediaEngineWasUpdated" wich is called for each change
        in the MediaElement state, thus the WebProcess crashes in the ASSERT(!m_cdmInstance).

        This commit avoid the crash by replacing the assert with a simple check.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):

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

        Add OptionSet::operator& and operator bool
        https://bugs.webkit.org/show_bug.cgi?id=185306

        Reviewed by Anders Carlsson.

        Use it in a few places.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::logReasonsForCompositing):
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer):

2018-05-08  Dean Jackson  <dino@apple.com>

        Disable system preview link fetching
        https://bugs.webkit.org/show_bug.cgi?id=185463

        Reviewed by Jon Lee.

        Temporarily disable system preview detection when a link
        is clicked.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick):

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

        Unreviewed, fix the internal iOS build

        Add a missing import statement in an implementation file.

        * editing/cocoa/WebContentReaderCocoa.mm:

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

        Unreviewed, rolling out r231486.

        Caused service worker LayoutTest failures on macOS Debug WK2.

        Reverted changeset:

        "Allow WebResourceLoader to cancel a load served from a
        service worker"
        https://bugs.webkit.org/show_bug.cgi?id=185274
        https://trac.webkit.org/changeset/231486

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

        Consolidate WebContentReaderIOS and WebContentReaderMac into WebContentReaderCocoa
        https://bugs.webkit.org/show_bug.cgi?id=185340

        Reviewed by Tim Horton.

        WebContentReader::readURL is currently the only method implemented separately in iOS and macOS platform
        WebContentReader files. The implementation across macOS and iOS is nearly identical (with some exceptions with
        the way iOS handles file URLs and plain text editing), so we can merge these into a single method
        WebContentReaderCocoa and delete WebContentReaderIOS and WebContentReaderMac.

        This also has the added bonus of fixing a latent bug in WebContentReaderMac, wherein URLs written to the
        pasteboard using -[NSPasteboard writeObjects:] are currently pasted as empty anchor elements. In this case, the
        link title isn't made explicit, so the `title` passed in to WebContentReader::readURL is empty. On iOS, we have
        code to fall back to pasting the absolute string of the URL if the title is empty, but on macOS, we'll just use
        this empty string as the title of the anchor.

        Test: PasteMixedContent.PasteURLWrittenToPasteboardUsingWriteObjects

        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readURL):
        * editing/ios/WebContentReaderIOS.mm: Removed.
        * editing/mac/WebContentReaderMac.mm: Removed.

2018-05-08  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Cache run resolver.
        https://bugs.webkit.org/show_bug.cgi?id=185411

        Reviewed by Antti Koivisto.

        This patch caches the run resolver on the [SimpleLine]Layout object. 
        In certain cases, when the block container has thousands of elements (foobar1<br>foobar2<br>.....foobar9999<br>),
        constructing the resolver (and its dependencies) in a repeating fashion could hang the WebProcess.

        Covered by existing tests.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Layout::runResolver const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeBoundingBox):
        (WebCore::SimpleLineLayout::computeFirstRunLocation):
        (WebCore::SimpleLineLayout::collectAbsoluteRects):
        (WebCore::SimpleLineLayout::collectAbsoluteQuads):
        (WebCore::SimpleLineLayout::textOffsetForPoint):
        (WebCore::SimpleLineLayout::collectAbsoluteQuadsForRange):
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::LineResolver::LineResolver):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::lineResolver):

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

        Switch some RELEASE_ASSERTS to plain debug ASSERTS in PlatformScreenMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=185451
        <rdar://problem/39620348>

        Reviewed by Zalan Bujtas.

        Change a set of RELEASE_ASSERTS used to prevent accessing NSScreen related functions in the
        PlatformScreenMac implementation to less expensive Debug ASSERTS.

        No change in behavior.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenHasInvertedColors):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenRectForDisplay):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        (WebCore::screenColorSpace):
        (WebCore::screenSupportsExtendedColor):

2018-05-08  Daniel Bates  <dabates@apple.com>

        Resign Strong Password appearance when text field value changes
        https://bugs.webkit.org/show_bug.cgi?id=185433
        <rdar://problem/39958508>

        Reviewed by Ryosuke Niwa.

        Remove the Strong Password decoration when the text field's value changes to avoid interfering
        with web sites that allow a person to clear the password field.

        Tests: fast/forms/auto-fill-button/auto-fill-strong-password-button-when-maxlength-changes.html
               fast/forms/auto-fill-button/auto-fill-strong-password-button-when-minlength-changes.html
               fast/forms/auto-fill-button/hide-auto-fill-strong-password-button-when-value-changes.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::resignStrongPasswordAppearance): Extracted from HTMLInputElement::updateType().
        (WebCore::HTMLInputElement::updateType): Extract out logic to resign the Strong Password appearance
        into a function that can be shared by this function and HTMLInputElement::setValue().
        (WebCore::HTMLInputElement::setValue): Resign the Strong Password appearance if this field was
        changed programmatically (i.e. no DOM change event was dispatched).
        * html/HTMLInputElement.h:

2018-05-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; add missing function definition.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::didPassCORSAccessCheck const):

2018-05-08  Jer Noble  <jer.noble@apple.com>

        Mute MediaElementSourceNode when tainted.
        https://bugs.webkit.org/show_bug.cgi?id=184866

        Reviewed by Eric Carlson.

        Test: http/tests/security/webaudio-render-remote-audio-blocked-no-crossorigin.html

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::wouldTaintOrigin const):
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::wouldTaintOrigin):
        (WebCore::MediaElementAudioSourceNode::process):
        * Modules/webaudio/MediaElementAudioSourceNode.h:

2018-05-08  Eric Carlson  <eric.carlson@apple.com>

        Log rtcstats as JSON
        https://bugs.webkit.org/show_bug.cgi?id=185437
        <rdar://problem/40065332>

        Reviewed by Youenn Fablet.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::RTCStatsLogger::RTCStatsLogger): Create a wrapper class so we don't have to add a
        toJSONString method to libwebrtc.
        (WebCore::RTCStatsLogger::toJSONString const): Log stats as JSON.
        (WebCore::LibWebRTCMediaEndpoint::OnStatsDelivered): Don't use the LOGIDENTIFIER macro because
        it doesn't work well inside of a lambda.
        (WTF::LogArgument<WebCore::RTCStatsLogger>::toString): Move into .cpp file because it is only
        used here.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WTF::LogArgument<webrtc::RTCStats>::toString): Deleted. Move to .cpp file.

2018-05-08  Dean Jackson  <dino@apple.com>

        System Preview links should trigger a download
        https://bugs.webkit.org/show_bug.cgi?id=185439
        <rdar://problem/40065545>

        Reviewed by Jon Lee.

        Add a new field to FrameLoadRequest, which then is copied
        into ResourceRequest, identifying if the link clicked
        is a system preview.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::handleClick): Look for isSystemPreviewLink().
        * loader/FrameLoadRequest.cpp:
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        * loader/FrameLoadRequest.h: New property.
        (WebCore::FrameLoadRequest::FrameLoadRequest):
        (WebCore::FrameLoadRequest::isSystemPreview const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::loadURL):
        * loader/FrameLoader.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::isSystemPreview const):
        (WebCore::ResourceRequestBase::setSystemPreview):
        * platform/network/ResourceRequestBase.h:

2018-05-08  Commit Queue  <commit-queue@webkit.org>

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

        Setting the Created key on a cookie does not work yet, due a
        bug in CFNetwork (Requested by ggaren on #webkit).

        Reverted changeset:

        "[WKHTTPCookieStore getAllCookies] returns inconsistent
        creation time"
        https://bugs.webkit.org/show_bug.cgi?id=185041
        https://trac.webkit.org/changeset/231491

2018-05-08  Sihui Liu  <sihui_liu@apple.com>

        [WKHTTPCookieStore getAllCookies] returns inconsistent creation time
        https://bugs.webkit.org/show_bug.cgi?id=185041
        <rdar://problem/34684214>

        Reviewed by Geoffrey Garen.

        Set creationtime property when creating Cookie object to keep consistency after conversion.

        New API test: WebKit.WKHTTPCookieStoreCreationTime.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * const):

2018-05-08  Eric Carlson  <eric.carlson@apple.com>

        Text track cue logging should include cue text
        https://bugs.webkit.org/show_bug.cgi?id=185353
        <rdar://problem/40003565>

        Reviewed by Brent Fulgham.

        No new tests, tested manually.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::toJSON const):
        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::toJSONString const):
        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::toJSONString const):

2018-05-08  Sam Weinig  <sam@webkit.org>

        More cleanup of XMLHttpRequestUpload
        https://bugs.webkit.org/show_bug.cgi?id=185409

        Reviewed by Alex Christensen.

        - Remove unneeded #includes
        - Rename m_xmlHttpRequest to m_request
        - Make some overloaded some methods private, and mark them as final rather
          than override.

        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        * xml/XMLHttpRequestUpload.h:

2018-05-08  Zalan Bujtas  <zalan@apple.com>

        [LFC] Start using BlockMarginCollapse
        https://bugs.webkit.org/show_bug.cgi?id=185424

        Reviewed by Antti Koivisto.

        BlockMarginCollapse could be all static.

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::marginTop const):
        (WebCore::Layout::BlockFormattingContext::marginBottom const):
        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::isMarginTopCollapsedWithSibling):
        (WebCore::Layout::isMarginBottomCollapsedWithSibling):
        (WebCore::Layout::isMarginTopCollapsedWithParent):
        (WebCore::Layout::isMarginBottomCollapsedWithParent):
        (WebCore::Layout::collapsedMarginTopFromFirstChild):
        (WebCore::Layout::collapsedMarginBottomFromLastChild):
        (WebCore::Layout::nonCollapsedMarginTop):
        (WebCore::Layout::nonCollapsedMarginBottom):
        (WebCore::Layout::BlockMarginCollapse::marginTop):
        (WebCore::Layout::BlockMarginCollapse::marginBottom):
        (WebCore::Layout::BlockMarginCollapse::BlockMarginCollapse): Deleted.
        (WebCore::Layout::BlockMarginCollapse::marginTop const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::marginBottom const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithSibling const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithSibling const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithParent const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithParent const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::nonCollapsedMarginTop const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::nonCollapsedMarginBottom const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::collapsedMarginTopFromFirstChild const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::collapsedMarginBottomFromLastChild const): Deleted.
        (WebCore::Layout::BlockMarginCollapse::hasAdjoiningMarginTopAndBottom const): Deleted.
        * layout/blockformatting/BlockMarginCollapse.h:

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

        Allow WebResourceLoader to cancel a load served from a service worker
        https://bugs.webkit.org/show_bug.cgi?id=185274

        Reviewed by Chris Dumez.

        Add support for cancelling a fetch from WebProcess to service worker process.
        Use FetchIdentifier instead of uint64_t.

        * Modules/fetch/FetchIdentifier.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/context/ServiceWorkerFetch.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::startFetch):
        (WebCore::ServiceWorkerThreadProxy::cancelFetch):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2018-05-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        feTurbulence is not rendered correctly on Retina display
        https://bugs.webkit.org/show_bug.cgi?id=183798

        Reviewed by Simon Fraser.

        On 2x display the feTurbulence filter creates a scaled ImageBuffer but
        processes only the unscaled size. This is a remaining work of r168577 and
        is very similar to what was done for the feMorphology filter in r188271.

        Test: fast/hidpi/filters-turbulence.html

        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::platformApplySoftware):

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

        [LFC] Add FormattingContext::layoutOutOfFlowDescendants implementation
        https://bugs.webkit.org/show_bug.cgi?id=185377

        Reviewed by Antti Koivisto.

        Also, remove FormattingContext's m_layoutContext member and pass it in to ::layout() instead.
        In theory LayoutContext is needed only during ::layout() call. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::layoutContext const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-05-07  Daniel Bates  <dabates@apple.com>

        Check X-Frame-Options and CSP frame-ancestors in network process
        https://bugs.webkit.org/show_bug.cgi?id=185410
        <rdar://problem/37733934>

        Reviewed by Ryosuke Niwa.

        * WebCore.xcodeproj/project.pbxproj: Make PingLoader.h a private header so that we can include it in WebKit.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Only check CSP frame-ancestors and X-Frame-Options here if
        we are not checking them in the NetworkProcess and HTTP response access is restricted. I code is otherwise kept
        unchanged. There may be opportunities to clean this code up more and share more of it. We should look into this
        in subsequent bugs.
        * loader/DocumentLoader.h: Change visibility of stopLoadingAfterXFrameOptionsOrContentSecurityPolicyDenied() from
        private to public and export it so that we can call it from the WebKit.
        * loader/PingLoader.h:
        * page/Settings.yaml: Add a new setting called networkProcessCSPFrameAncestorsCheckingEnabled (defaults: false)
        and is hardcoded in WebPage.cpp to be enabled. This setting is used to determine if we will be using the NetworkProcess.
        Ideally we wouldn't have this setting and just key off RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess().
        However RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess() is always enabled in WebKit Legacy
        at the time of writing (why?). And, strangely, RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()
        is conditionally enabled in WebKit. For now, we add a new setting, networkProcessCSPFrameAncestorsCheckingEnabled,
        to determine if CSP checking should be performed in NetworkProcess. For checking to actually happen in NetworkProcess
        and not in DocumentLoader::responseReceived() RuntimeEnabledFeatures::sharedFeatures().restrictedHTTPResponseAccess()
        will also need to be enabled.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowFrameAncestors const): Added a variant that takes a vector of ancestor origins.
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkFrameAncestors): Ditto.
        (WebCore::ContentSecurityPolicyDirectiveList::violatedDirectiveForFrameAncestorOrigins const): Ditto.
        * page/csp/ContentSecurityPolicyDirectiveList.h: Export constructor so that we can invoke it from NetworkResourceLoader::shouldInterruptLoadForCSPFrameAncestorsOrXFrameOptions().
        * page/csp/ContentSecurityPolicyResponseHeaders.h:
        * platform/network/HTTPParsers.h: Export XFrameOptionsDisposition() so that we can use in WebKit.

2018-05-07  Daniel Bates  <dabates@apple.com>

        Abstract logic to log console messages and send CSP violation reports into a client
        https://bugs.webkit.org/show_bug.cgi?id=185393
        <rdar://problem/40036053>

        Reviewed by Brent Fulgham.

        First pass at adding infrastructure to supporting CSP reporting from NetworkProcess and workers.
        Replaces the existing ContentSecurityPolicy constructor that takes a Frame with one that
        takes a ContentSecurityPolicyClient to delegate to for logging and sending reports. We will look
        to remove ContentSecurityPolicy constructor that takes a ScriptExecutionContext in a follow up.

        Standardize on instantiating a ContentSecurityPolicy with the full URL to resource that it protects
        instead of taking only the SecurityOrigin of this URL. By taking the full URL the ContentSecurityPolicy
        object is now capable of resolving a relative report URL without needing a Document/ScriptExecutionContext.

        We are underutilizing the CSPInfo struct and ContentSecurityPolicyClient::willSendCSPViolationReport()
        delegate callback in this patch. We will make use of this functionality in a subsequent patch to
        support collecting script state (e.g. source line number) when reporting CSP violations in worker
        threads. We also no longer go through the unnecessary motions to try to collect script state for a
        frame-ancestors violation (since DocumentLoader extends ContentSecurityPolicyClient and does not
        implement ContentSecurityPolicyClient::willSendCSPViolationReport()). The frame-ancestors directive
        is checked before a document is parsed and executes script; => there will never be any script state
        to collect; => it is not necessary to try to collect it as we currently do.

        * Sources.txt: Add file ContentSecurityPolicyClient.cpp. See the remarks for ContentSecurityPolicyClient.cpp
        below on why we have this file.
        * WebCore.xcodeproj/project.pbxproj: Add files ContentSecurityPolicyClient.{h, cpp}.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Pass the URL of the protected document.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Ditto.
        (WebCore::DocumentLoader::addConsoleMessage): Added.
        (WebCore::DocumentLoader::sendCSPViolationReport): Added.
        (WebCore::DocumentLoader::dispatchSecurityPolicyViolationEvent): Added.
        * loader/DocumentLoader.h:
        * loader/FrameLoaderClient.h: Fix typo in comment.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Pass the URL of the worker script.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy): Added overload that takes a URL&& and an optional
        ContentSecurityPolicyClient*.
        (WebCore::ContentSecurityPolicy::deprecatedURLForReporting const): Extracted and simplified stripURLForUseInReport()
        into this member function.
        (WebCore::ContentSecurityPolicy::reportViolation const): Modified to make use of the client, if we have
        one and removed code for handling a ContentSecurityPolicy that was instantiated with a Frame.
        (WebCore::ContentSecurityPolicy::logToConsole const): Ditto.
        (WebCore::stripURLForUseInReport): Deleted; incorporated into ContentSecurityPolicy::deprecatedURLForReporting().
        * page/csp/ContentSecurityPolicy.h:
        * page/csp/ContentSecurityPolicyClient.cpp: Added. This file exists so that we can define the virtual
        destructor out-of-line and export this abstract class so as to avoid the need for the vtable to be
        defined in the translation unit of each derived class.
        * page/csp/ContentSecurityPolicyClient.h: Added.
        * page/csp/ContentSecurityPolicySource.cpp:
        (WebCore::ContentSecurityPolicySource::operator SecurityOriginData const): Added.
        * page/csp/ContentSecurityPolicySource.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope): Instantiate the ContentSecurityPolicy object with the
        URL of the worker script.

2018-05-07  Simon Fraser  <simon.fraser@apple.com>

        CSS filters which reference SVG filters fail to respect the "color-interpolation-filters" of the filter
        https://bugs.webkit.org/show_bug.cgi?id=185343

        Reviewed by Dean Jackson.

        Test: css3/filters/color-interpolation-filters.html
        
        When applying CSS reference filters, apply the value of "color-interpolation-filters" for the
        referenced filter effect element, just as we do for SVG filters.

        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):

2018-05-07  Daniel Bates  <dabates@apple.com>

        CSP status-code incorrect for document blocked due to violation of its frame-ancestors directive
        https://bugs.webkit.org/show_bug.cgi?id=185366
        <rdar://problem/40035116>

        Reviewed by Brent Fulgham.

        Fixes an issue where the status-code in the sent CSP report for an HTTP document blocked because
        its frame-ancestors directive was violated would be the status code of the previously loaded
        document in the frame. If the previously loaded document was about:blank then this would be 0.

        Currently whenever we send a CSP report we ask the document's loader (Document::loader()) for the
        HTTP status code for the last response. Document::loader() returns the loader for the last committed
        document its frame. For a frame-ancestors violation, a CSP report is sent before the document
        that had the frame-ancestors directive has been committed and after it has been associate with a frame.
        As a result we are in are in a transient transition state for the frame and hence the last response
        for new document's loader (Document::loader()) is actually the last response of the previously loaded
        document in the frame. Instead we need to take care to tell CSP about the HTTP status code for the
        response associated with the document the CSP came from.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::initSecurityContext):
        Pass the HTTP status code to CSP.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom):
        (WebCore::ContentSecurityPolicy::responseHeaders const):
        (WebCore::ContentSecurityPolicy::didReceiveHeaders):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        (WebCore::ContentSecurityPolicy::reportViolation const):
        * page/csp/ContentSecurityPolicy.h:
        Modify existing functions to take the HTTP status code, store it in a instance variable,
        and reference this variable when reporting a violation.

        * page/csp/ContentSecurityPolicyResponseHeaders.cpp:
        (WebCore::ContentSecurityPolicyResponseHeaders::ContentSecurityPolicyResponseHeaders):
        (WebCore::ContentSecurityPolicyResponseHeaders::isolatedCopy const):
        * page/csp/ContentSecurityPolicyResponseHeaders.h:
        (WebCore::ContentSecurityPolicyResponseHeaders::encode const):
        (WebCore::ContentSecurityPolicyResponseHeaders::decode):
        Store the HTTP status code along with the response headers.

2018-05-07  Daniel Bates  <dabates@apple.com>

        CSP referrer incorrect for document blocked due to violation of its frame-ancestors directive
        https://bugs.webkit.org/show_bug.cgi?id=185380

        Reviewed by Brent Fulgham.

        Similar to <https://bugs.webkit.org/show_bug.cgi?id=185366>, fixes an issue where the referrer
        in the sent CSP report for an HTTP document blocked because its frame-ancestors directive was
        violated would be the referrer of the previously loaded document in the frame.

        Currently whenever we send a CSP report we ask the document's loader (Document::loader()) for
        the referrer for the last request. Document::loader() returns the loader for the last committed
        document in its frame. For a frame-ancestors violation, a CSP report is sent before the document
        that had the frame-ancestors directive has been committed and after it has been associate with a
        frame. As a result we are in a transient transition state for the frame and hence the last request
        for the new document's loader (Document::loader()) is actually the last request of the previously
        loaded document in the frame. Instead we need to take care to tell CSP about the referrer for the
        request associated with the document the CSP came from.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2018-05-07  Brent Fulgham  <bfulgham@apple.com>

        Add experimental feature to prompt for Storage Access API use
        https://bugs.webkit.org/show_bug.cgi?id=185335
        <rdar://problem/39994649>

        Reviewed by Alex Christensen and Youenn Fablet.

        Create a new experimental feature that gates the ability of WebKit clients to prompt the user when
        Storage Access API is invoked.

        Currently this feature doesn't have any user-visible impact.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setStorageAccessPromptsEnabled):
        (WebCore::RuntimeEnabledFeatures::storageAccessPromptsEnabled const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setStorageAccessPromptsEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2018-05-07  Chris Dumez  <cdumez@apple.com>

        Stop using an iframe's id as fallback if its name attribute is not set
        https://bugs.webkit.org/show_bug.cgi?id=11388

        Reviewed by Geoff Garen.

        WebKit had logic to use an iframe's id as fallback name when its name
        content attribute is not set. This behavior was not standard and did not
        match other browsers:
        - https://html.spec.whatwg.org/#attr-iframe-name

        Gecko / Trident never behaved this way. Blink was aligned with us until
        they started to match the specification in:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=347169

        This WebKit quirk was causing some Web-compatibility issues because it
        would affect the behavior of Window's name property getter when trying
        to look up an iframe by id. Because of Window's named property getter
        behavior [1], we would return the frame's contentWindow instead of the
        iframe element itself.

        [1] https://html.spec.whatwg.org/multipage/window-object.html#named-access-on-the-window-object

        Test: fast/dom/Window/named-getter-frame-id.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::didFinishInsertingNode):
        * html/HTMLFrameElementBase.h:

2018-05-07  Chris Dumez  <cdumez@apple.com>

        ASSERT(!childItemWithTarget(child->target())) is hit in HistoryItem::addChildItem()
        https://bugs.webkit.org/show_bug.cgi?id=185322

        Reviewed by Geoff Garen.

        We generate unique names for Frame to be used in HistoryItem. Those names not only
        need to be unique, they also need to be repeatable to avoid layout tests flakiness
        and for things like restoring form state from a HistoryItem.

        The previously generated frame names were relying on the Frame's index among a
        parent Frame's children. The issue was that we could end up with duplicate names
        because one could insert a Frame *before* an existing one. This is because the code
        would not take care of updating existing Frames' unique name on frame tree mutation.

        Updating frame tree names on mutation would be inefficient and is also not necessary.
        The approach chosen in this patch is to stop using the Frame's index and instead rely
        on an increasing counter stored on the top-frame's FrameTree. To make the names
        repeatable, we reset the counter on page navigation.

        * page/Frame.cpp:
        (WebCore::Frame::setDocument):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName const):
        (WebCore::FrameTree::generateUniqueName const):
        * page/FrameTree.h:
        (WebCore::FrameTree::resetFrameIdentifiers):

2018-05-07  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Fix wrong subsample parsing on r227067
        https://bugs.webkit.org/show_bug.cgi?id=185382

        Reviewed by Philippe Normand.

        The initialization of sampleIndex should be moved outside of the loop.
        Without this patch we will have a bad log and the check of the subsample
        count will be useless.

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorDecrypt):

2018-05-07  Daniel Bates  <dabates@apple.com>

        CSP should be passed the referrer
        https://bugs.webkit.org/show_bug.cgi?id=185367

        Reviewed by Per Arne Vollan.

        As a step towards formalizing a CSP delegate object and removing the dependencies
        on ScriptExecutionContext and Frame, we should pass the document's referrer directly
        instead of indirectly obtaining it from the ScriptExecutionContext or Frame used
        to instantiate the ContentSecurityPolicy object.

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Pass the document's referrer.
        (WebCore::Document::initSecurityContext): Ditto.
        (WebCore::Document::applyQuickLookSandbox): Ditto.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Ditto.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Ditto.
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::copyStateFrom): We pass a null string for the referrer
        to didReceiveHeader() as a placeholder since it requires the referrer be given to it. We
        fix up the referrer (m_referrer) after copying all the policy headers.
        (WebCore::ContentSecurityPolicy::didReceiveHeaders): Ditto.
        (WebCore::ContentSecurityPolicy::didReceiveHeader): Modified to take a referrer and WTFMove()s
        it into an instance variable (m_referrer).
        (WebCore::ContentSecurityPolicy::reportViolation const): Modified to use the stored referrer.
        * page/csp/ContentSecurityPolicy.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::applyContentSecurityPolicyResponseHeaders): Pass a null string
        for the referrer as a worker does not have a referrer.

2018-05-07  Daniel Bates  <dabates@apple.com>

        CSP should only notify Inspector to pause the debugger on the first policy to violate a directive
        https://bugs.webkit.org/show_bug.cgi?id=185364

        Reviewed by Brent Fulgham.

        Notify Web Inspector that a script was blocked on the first enforced CSP policy that it
        violates.

        A page can have more than one enforced Content Security Policy. Currently for inline
        scripts, inline event handlers, JavaScript URLs, and eval() that are blocked by CSP
        we notify Web Inspector that it was blocked for each CSP policy that blocked it. When
        Web Inspector is notified it pauses script execution. It does not seem very meaningful
        to pause script execution on the same script for each CSP policy that blocked it.
        Therefore, only tell Web Inspector that a script was blocked for the first enforced CSP
        policy that blocked it.

        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::allowJavaScriptURLs const):
        (WebCore::ContentSecurityPolicy::allowInlineEventHandlers const):
        (WebCore::ContentSecurityPolicy::allowInlineScript const):
        (WebCore::ContentSecurityPolicy::allowEval const):

2018-05-07  Daniel Bates  <dabates@apple.com>

        Substitute CrossOriginPreflightResultCache::clear() for CrossOriginPreflightResultCache::empty()
        https://bugs.webkit.org/show_bug.cgi?id=185170

        Reviewed by Per Arne Vollan.

        Rename CrossOriginPreflightResultCache::empty() to CrossOriginPreflightResultCache::clear() make
        it consistent with the terminology we use in WebKit to signify a function that clears a collection.
        A member function named "empty" is expected to return an instance of a class in its "empty state".
        For example, StringImpl::empty() returns a StringImpl instance that represents the empty string.
        However CrossOriginPreflightResultCache::empty() clears out the cache in-place. We should rename
        this function to better describe its purpose.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::clear):
        (WebCore::CrossOriginPreflightResultCache::empty): Deleted.
        * loader/CrossOriginPreflightResultCache.h:

2018-05-06  Dean Jackson  <dino@apple.com>

        WebGL: Reset simulated values after validation fails
        https://bugs.webkit.org/show_bug.cgi?id=185363
        <rdar://problem/39733417>

        Reviewed by Anders Carlsson.

        While fixing a previous bug, I forgot to reset some values
        when validation fails. This caused a bug where a subsequent
        invalid call might use those values and escape detection.

        Test: fast/canvas/webgl/index-validation-with-subsequent-draws.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0): Reset the
        sizes when validation fails.
        * html/canvas/WebGLRenderingContextBase.h:

2018-05-07  Ms2ger  <Ms2ger@igalia.com>

        Support negative sw/sh values in createImageBitmap().
        https://bugs.webkit.org/show_bug.cgi?id=184449

        Reviewed by Dean Jackson.

        Tests: LayoutTests/imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html
               LayoutTests/http/wpt/2dcontext/imagebitmap/createImageBitmap.html

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise): handle negative values per spec.

2018-05-07  Brian Burg  <bburg@apple.com>

        Web Inspector: opt out of process swap on navigation if a Web Inspector frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=184861
        <rdar://problem/39153768>

        Reviewed by Timothy Hatcher.

        Notify the client of the current connection count whenever a frontend connects or disconnects.

        Covered by new API test.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::frontendCountChanged):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends):
        * inspector/InspectorController.h:

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

        Text track cue logging should include cue text
        https://bugs.webkit.org/show_bug.cgi?id=185353
        <rdar://problem/40003565>

        Reviewed by Youenn Fablet.

        No new tests, tested manually.

        * html/track/VTTCue.cpp:
        (WebCore::VTTCue::toJSONString const): Use toJSON.
        (WebCore::VTTCue::toJSON const): New.
        * html/track/VTTCue.h:

        * platform/graphics/InbandTextTrackPrivateClient.h:
        (WebCore::GenericCueData::toJSONString const): Log m_content.

        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::toJSONString const): Log m_cueText.

2018-05-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add assertions for stale Display::Box geometry
        https://bugs.webkit.org/show_bug.cgi?id=185357

        Reviewed by Antti Koivisto.

        Ensure that we don't access stale geometry of other boxes during layout.
        For example, in order to layout a block child we need the containing block's content box top/left and width (but not the height)

        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::invalidateTop):
        (WebCore::Display::Box::invalidateLeft):
        (WebCore::Display::Box::invalidateWidth):
        (WebCore::Display::Box::invalidateHeight):
        (WebCore::Display::Box::hasValidPosition const):
        (WebCore::Display::Box::hasValidSize const):
        (WebCore::Display::Box::hasValidGeometry const):
        (WebCore::Display::Box::invalidatePosition):
        (WebCore::Display::Box::invalidateSize):
        (WebCore::Display::Box::setHasValidPosition):
        (WebCore::Display::Box::setHasValidSize):
        (WebCore::Display::Box::setHasValidGeometry):
        (WebCore::Display::Box::rect const):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::left const):
        (WebCore::Display::Box::bottom const):
        (WebCore::Display::Box::right const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::bottomRight const):
        (WebCore::Display::Box::size const):
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::setRect):
        (WebCore::Display::Box::setTopLeft):
        (WebCore::Display::Box::setTop):
        (WebCore::Display::Box::setLeft):
        (WebCore::Display::Box::setSize):
        (WebCore::Display::Box::setWidth):
        (WebCore::Display::Box::setHeight):

2018-05-06  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add BlockFormattingContext::computeStaticPosition
        https://bugs.webkit.org/show_bug.cgi?id=185352

        Reviewed by Antti Koivisto.

        This is the core logic for positioning inflow boxes in a block formatting context (very naive though).

        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        * layout/displaytree/DisplayBox.h:

2018-05-05  Sam Weinig  <sam@webkit.org>

        Cleanup XMLHttpRequestUpload a little
        https://bugs.webkit.org/show_bug.cgi?id=185344

        Reviewed by Yusuke Suzuki.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::visitAdditionalChildren):
        Use auto to reduce redundancy.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::upload):
        * xml/XMLHttpRequest.h:
        Switch upload() to return a reference.
        
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h:
        Cleanup formatting, modernize and switch XMLHttpRequest member from a pointer
        to a reference.

2018-05-05  Dean Jackson  <dino@apple.com>

        Draw a drop-shadow behind the system preview badge
        https://bugs.webkit.org/show_bug.cgi?id=185356
        <rdar://problem/40004936>

        Reviewed by Wenson Hsieh.

        Draw a very subtle drop-shadow under the system
        preview badge so that it is more visible on a pure
        white background.

        I also moved some code around to make it more clear
        and improved comments.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):

2018-05-04  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Multiple links in Mail are dropped in a single line, and are difficult to tell apart
        https://bugs.webkit.org/show_bug.cgi?id=185289
        <rdar://problem/35756912>

        Reviewed by Tim Horton and Darin Adler.

        When inserting multiple URLs as individual items in a single drop, we currently separate each item with a space
        (see r217284). However, it still seems difficult to tell dropped links apart. This patch makes some slight
        tweaks to WebContentReader::readURL so that it inserts line breaks before dropped URLs, if the dropped URL isn't
        the first item to be inserted in the resulting document fragment.

        Augments existing API tests in DataInteractionTests.

        * editing/ios/WebContentReaderIOS.mm:

        Additionally remove some extraneous header imports from this implementation file.

        (WebCore::WebContentReader::readURL):

2018-05-02  Dean Jackson  <dino@apple.com>

        Use IOSurfaces for CoreImage operations where possible
        https://bugs.webkit.org/show_bug.cgi?id=185230
        <rdar://problem/39926929>

        Reviewed by Jon Lee.

        On iOS hardware, we can use IOSurfaces as a rendering destination
        for CoreImage, which means we're keeping data on the GPU
        for rendering.

        As a drive-by fix, I used a convenience method for Gaussian blurs.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge):

2018-05-04  Tim Horton  <timothy_horton@apple.com>

        Shift to a lower-level framework for simplifying URLs
        https://bugs.webkit.org/show_bug.cgi?id=185334

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        * platform/mac/DragImageMac.mm:
        (WebCore::LinkImageLayout::LinkImageLayout):

2018-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in ScriptController::canExecuteScripts via HTMLMediaElement::~HTMLMediaElement()
        https://bugs.webkit.org/show_bug.cgi?id=185288

        Reviewed by Jer Noble.

        The crash is caused by HTMLMediaElement::~HTMLMediaElement canceling the resource load via CachedResource
        which ends up calling FrameLoader::checkCompleted() and fire load event on the document synchronously.
        Speculatively fix the crash by scheduling the check instead.

        In long term, ResourceLoader::cancel should never fire load event synchronously: webkit.org/b/185284.

        Unfortunately, no new tests since I can't get MediaResource to get destructed at the right time.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isRunningDestructor): Added to detect this specific case.
        (WebCore::HTMLMediaElementDestructorScope): Added.
        (WebCore::HTMLMediaElementDestructorScope::HTMLMediaElementDestructorScope): Added.
        (WebCore::HTMLMediaElementDestructorScope::~HTMLMediaElementDestructorScope): Added.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Instantiate HTMLMediaElement.
        * html/HTMLMediaElement.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): Call scheduleCheckCompleted instead of synchronously calling
        checkCompleted if we're in the middle of destructing a HTMLMediaElement.

2018-05-04  Ryosuke Niwa  <rniwa@webkit.org>

        Rename DocumentOrderedMap to TreeScopeOrderedMap
        https://bugs.webkit.org/show_bug.cgi?id=185290

        Reviewed by Zalan Bujtas.

        Renamed the class since it's almost always a mistake to use this class as a member variable of Document.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/MouseRelatedEvent.cpp: Include the forgotten DOMWindow.h. Unified build files bit us here.
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::addImageElementByUsemap):
        (WebCore::TreeScope::labelElementForId):
        * dom/TreeScope.h:
        * dom/TreeScopeOrderedMap.cpp: Renamed from DocumentOrderedMap.cpp
        * dom/TreeScopeOrderedMap.h: Renamed from DocumentOrderedMap.h
        * html/HTMLDocument.h:

2018-05-04  Don Olmstead  <don.olmstead@sony.com>

        [Win][WebKit] Fix forwarding headers for Windows build
        https://bugs.webkit.org/show_bug.cgi?id=184412

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * PlatformWin.cmake:

2018-05-04  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Add support for line layout box generation with multiple text renderers.
        https://bugs.webkit.org/show_bug.cgi?id=185276

        Reviewed by Antti Koivisto.

        Covered by existing tests.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::canUseForLineBoxTree):
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::Run::renderer const):
        (WebCore::SimpleLineLayout::RunResolver::Run::localStart const):
        (WebCore::SimpleLineLayout::RunResolver::Run::localEnd const):
        * rendering/SimpleLineLayoutResolver.h:

2018-05-04  Timothy Hatcher  <timothy@apple.com>

        Deprecate legacy WebView and friends
        https://bugs.webkit.org/show_bug.cgi?id=185279
        rdar://problem/33268700

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:
        Added BUILDING_WEBKIT define to disable the deprecation macros.
        * bridge/objc/WebScriptObject.h:
        Added deprecation macros to WebScriptObject and WebUndefined.
        * platform/cocoa/WebKitAvailability.h:
        Added more macros and a way to disable deprecation warnings for
        WebKit build and in clients like Safari.

2018-05-04  Eric Carlson  <eric.carlson@apple.com>

        Log media time range as JSON
        https://bugs.webkit.org/show_bug.cgi?id=185321
        <rdar://problem/39986746>

        Reviewed by Youenn Fablet.

        No new tests, tested manually.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::addPlayedRange): Log as time range.
        (WebCore::HTMLMediaElement::visibilityStateChanged): Cleanup.

        * platform/graphics/MediaPlayer.h:
        (WTF::LogArgument<MediaTime>::toString):
        (WTF::LogArgument<MediaTimeRange>::toString):

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processAttributedStrings): Log error as time range.

2018-05-04  Zalan Bujtas  <zalan@apple.com>

        Use the containing block to compute the pagination gap when the container is inline.
        https://bugs.webkit.org/show_bug.cgi?id=184724
        <rdar://problem/39521800>

        Reviewed by Simon Fraser.

        Test: fast/overflow/page-overflow-with-inline-body-crash.html

        * page/FrameView.cpp:
        (WebCore::FrameView::applyPaginationToViewport):

2018-05-04  Tim Horton  <timothy_horton@apple.com>

        Don't use GSFont* in minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=185320
        <rdar://problem/39734478>

        Reviewed by Beth Dakin.

        * page/cocoa/MemoryReleaseCocoa.mm:
        (WebCore::platformReleaseMemory):

2018-05-04  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r231331.

        Caused a few tests to assert

        Reverted changeset:

        "Stop using an iframe's id as fallback if its name attribute
        is not set"
        https://bugs.webkit.org/show_bug.cgi?id=11388
        https://trac.webkit.org/changeset/231331

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

        Use more references in updateTracksOfType
        https://bugs.webkit.org/show_bug.cgi?id=185305

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::updateTracksOfType):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):

2018-05-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Text shaping in the simple path is flipped in the y direction
        https://bugs.webkit.org/show_bug.cgi?id=185062
        <rdar://problem/39778678>

        Reviewed by Simon Fraser.

        Shaping in our simple codepath occurs in an "increasing-y-goes-up" coordinate system, but our painting
        code uses an "increasing-y-goes-down" coordinate system. We weren't fixing up the coordinate systems
        because we never noticed. This is because the simple codepath is only designed for kerning and ligatures,
        neither of which move glyphs vertically in the common case.

        Test: fast/text/vertical-displacement-simple-codepath.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::applyTransforms const):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::applyFontTransforms):

2018-05-04  Chris Nardi  <cnardi@chromium.org>

        Serialize all URLs with double-quotes per CSSOM spec
        https://bugs.webkit.org/show_bug.cgi?id=184935

        Reviewed by Antti Koivisto.

        According to https://drafts.csswg.org/cssom/#serialize-a-url, all URLs should be serialized as strings,
        which means they should have double quotes around the text of the URL. Update our implementation to match
        this (and Firefox/Chrome). Also remove isCSSTokenizerURL() as this method is no longer needed.

        Tests: Many LayoutTests updated to use double quotes.

        * css/CSSMarkup.cpp:
        (WebCore::serializeString): Remove FIXME as this was already fixed in a previous patch.
        (WebCore::serializeURL): Remove FIXME and update implementation.

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

        LayoutTests/fast/mediastream/change-tracks-media-stream-being-played.html is crashing after r231304
        https://bugs.webkit.org/show_bug.cgi?id=185303

        Reviewed by Eric Carlson.

        We need to stop observing the audio track like we do for video track once we are no longer interested in it.
        Covered by test no longer crashing.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateTracks):

2018-05-04  Zalan Bujtas  <zalan@apple.com>

        [LFC] Set the invalidation root as the result of style change.
        https://bugs.webkit.org/show_bug.cgi?id=185301

        Reviewed by Antti Koivisto.

        Compute/propagate the update type on the ancestor chain and return the invalidation root
        so that LayoutContext could use it as the entry point for the next layout frame.

        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::styleChanged):
        * layout/LayoutContext.h: order is not important.
        * layout/blockformatting/BlockInvalidation.cpp:
        (WebCore::Layout::invalidationStopsAtFormattingContextBoundary):
        (WebCore::Layout::computeUpdateType):
        (WebCore::Layout::computeUpdateTypeForAncestor):
        (WebCore::Layout::BlockInvalidation::invalidate):
        * layout/blockformatting/BlockInvalidation.h:
        * layout/inlineformatting/InlineInvalidation.cpp:
        (WebCore::Layout::InlineInvalidation::invalidate):
        * layout/inlineformatting/InlineInvalidation.h:

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

        PeerConnection should have its connectionState closed even if doing gathering
        https://bugs.webkit.org/show_bug.cgi?id=185267

        Reviewed by Darin Adler.

        Test: webrtc/addICECandidate-closed.html

        In case m_iceConnectionState is closed, m_connectionState should also be set to closed
        and RTCPeerConnection should be closed so as to reject any other call.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::close):
        (WebCore::RTCPeerConnection::updateConnectionState):

2018-05-04  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [MSE][GStreamer] Delete properly the stream from the WebKitMediaSource
        https://bugs.webkit.org/show_bug.cgi?id=185242

        Reviewed by Xabier Rodriguez-Calvar.

        When the sourceBuffer is removed from mediasource, the appropriate stream is not
        properly deleted from WebKitMediaSource, because the appsrc and parser elements
        of the stream are not removed from the WebKitMediaSource bin.

        This patch avoids the regression of r231089, see https://bugs.webkit.org/show_bug.cgi?id=185071

        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcFreeStream):

2018-05-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Epiphany (GNOME Web) says "Error downloading: Service Unavailable." when trying to download an image from discogs.com
        https://bugs.webkit.org/show_bug.cgi?id=174730

        Reviewed by Michael Catanzaro.

        Export ResourceRequestBase::hasHTTPHeaderField().

        * platform/network/ResourceRequestBase.h:

2018-05-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use subprocess.call instead of os.system to handle path with spaces
        https://bugs.webkit.org/show_bug.cgi?id=185291

        Reviewed by Darin Adler.

        If gperf path includes spaces, these python scripts fail to execute gperf.
        We use subprocess module instead of os.system to invoke gperf.

        * css/makeSelectorPseudoClassAndCompatibilityElementMap.py:
        * css/makeSelectorPseudoElementsMap.py:
        * platform/network/create-http-header-name-table:

2018-05-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, attempt to fix WinCairo build failure
        https://bugs.webkit.org/show_bug.cgi?id=185218

        * platform/text/win/LocaleWin.cpp:
        (WebCore::LocaleWin::getLocaleInfoString):

2018-05-03  Filip Pizlo  <fpizlo@apple.com>

        Strings should not be allocated in a gigacage
        https://bugs.webkit.org/show_bug.cgi?id=185218

        Reviewed by Saam Barati.

        No new tests because no new behavior.

        * Modules/indexeddb/server/IDBSerialization.cpp:
        (WebCore::decodeKey):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readString):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeSpaces):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemainingWhitespace):
        * platform/URLParser.cpp:
        (WebCore::percentEncodeByte):
        (WebCore::serializeURLEncodedForm):
        (WebCore::URLParser::serialize):
        * platform/URLParser.h:
        * platform/graphics/FourCC.cpp:
        (WebCore::FourCC::toString const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::ReplicaState::cloneID const):
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::decimalSymbol):
        (WebCore::LocaleICU::decimalTextAttribute):
        (WebCore::getDateFormatPattern):
        (WebCore::LocaleICU::createLabelVector):
        (WebCore::getFormatForSkeleton):
        * platform/win/FileSystemWin.cpp:
        (WebCore::FileSystem::getFinalPathName):
        (WebCore::FileSystem::pathByAppendingComponent):
        (WebCore::FileSystem::storageDirectory):

2018-05-02  Brent Fulgham  <bfulgham@apple.com>

        Widgets should hold a WeakPtr to their parents
        https://bugs.webkit.org/show_bug.cgi?id=185239
        <rdar://problem/39741250>

        Reviewed by Zalan Bujtas.

        * platform/ScrollView.h:
        (WebCore::ScrollView::weakPtrFactory): Added.
        * platform/Widget.cpp:
        (WebCore::Widget::init): Don't perform an unnecessary assignment.
        (WebCore::Widget::setParent): Grab a WeakPtr to the parent ScrollView.
        * platform/Widget.h:
        (WebCore::Widget::parent const): Change type to a WeakPtr.

2018-05-03  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use pointer instead of std::optional<T&>
        https://bugs.webkit.org/show_bug.cgi?id=185186

        Reviewed by Alex Christensen.

        std::optional<T&> is not accepted in C++17 spec.
        In this patch, we replace it with T*, which is well-aligned to
        WebKit's convention.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSParser.h:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::item const):
        (WebCore::DatasetDOMStringMap::namedItem const):
        (WebCore:: const): Deleted.
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        (WebCore::Element::insertAdjacentHTML):
        * dom/Element.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        * inspector/DOMEditor.cpp:
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::getPostData):
        (): Deleted.
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupPOST):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::keysForSessionWithID const):
        (WebCore::MockCDMInstance::updateLicense):
        (WebCore:: const): Deleted.
        * testing/MockCDMFactory.h:

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

        Stop using an iframe's id as fallback if its name attribute is not set
        https://bugs.webkit.org/show_bug.cgi?id=11388

        Reviewed by Geoff Garen.

        WebKit had logic to use an iframe's id as fallback name when its name
        content attribute is not set. This behavior was not standard and did not
        match other browsers:
        - https://html.spec.whatwg.org/#attr-iframe-name

        Gecko / Trident never behaved this way. Blink was aligned with us until
        they started to match the specification in:
        - https://bugs.chromium.org/p/chromium/issues/detail?id=347169

        This WebKit quirk was causing some Web-compatibility issues because it
        would affect the behavior of Window's name property getter when trying
        to look up an iframe by id. Because of Window's named property getter
        behavior [1], we would return the frame's contentWindow instead of the
        iframe element itself.

        [1] https://html.spec.whatwg.org/multipage/window-object.html#named-access-on-the-window-object

        Test: fast/dom/Window/named-getter-frame-id.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::parseAttribute):
        (WebCore::HTMLFrameElementBase::didFinishInsertingNode):
        * html/HTMLFrameElementBase.h:

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

        [iOS] Internal text and audio tracks not in fullscreen menu
        https://bugs.webkit.org/show_bug.cgi?id=185268
        <rdar://problem/38673440>

        Reviewed by Jer Noble.

        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::setMediaElement): 'addtrack' and 'removetrack'
        events are fired at the track lists, not the media element.

2018-05-03  Ryosuke Niwa  <rniwa@webkit.org>

        Using image map inside a shadow tree results hits a release assert in DocumentOrderedMap::add
        https://bugs.webkit.org/show_bug.cgi?id=185238

        Reviewed by Antti Koivisto.

        The bug was caused by DocumentOrderedMap for the image elements with usemap being stored in Document
        even if those image elements were in a shadow tree. Fixed the bug by moving the map to TreeScope.

        Test: fast/images/imagemap-in-nested-shadow-tree.html
              fast/images/imagemap-in-shadow-tree.html

        * dom/Document.cpp:
        (WebCore::Document::addImageElementByUsemap): Moved to TreeScope.
        (WebCore::Document::removeImageElementByUsemap): Ditto.
        (WebCore::Document::imageElementByUsemap const): Ditto.
        * dom/Document.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::destroyTreeScopeData): Clear m_imagesByUsemap as well as m_elementsByName.
        (WebCore::TreeScope::getImageMap const): Removed the code to parse usemap. RenderImage::imageMap()
        which used to call this function with the raw value of the usemap content attribute now calls it
        via HTMLImageElement::associatedMapElement(), which uses the parsed usemap.
        (WebCore::TreeScope::addImageElementByUsemap): Moved from Document.
        (WebCore::TreeScope::removeImageElementByUsemap): Ditto.
        (WebCore::TreeScope::imageElementByUsemap const): Ditto.
        * dom/TreeScope.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::insertedIntoAncestor): This image element can be associated with a map element
        if it's connected to a document.
        (WebCore::HTMLImageElement::removedFromAncestor):
        (WebCore::HTMLImageElement::associatedMapElement const):
        * html/HTMLImageElement.h:
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::imageElement):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageMap const):

2018-05-03  Justin Fan  <justin_fan@apple.com>

        [WebGL] Add runtime flag for enabling ASTC support in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=184840

        Reviewed by Myles C. Maxfield.

        Added runtime flag for ASTC support in WebGL, to turn on/off when extension is implemented.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebGLCompressedTextureASTCSupportEnabled):
        (WebCore::RuntimeEnabledFeatures::webGLCompressedTextureASTCSupportEnabled const):

2018-05-03  Chris Nardi  <cnardi@chromium.org>

        Remove [NoInterfaceObject] from DOMRectList
        https://bugs.webkit.org/show_bug.cgi?id=185255

        Reviewed by Chris Dumez.

        In https://github.com/w3c/fxtf-drafts/issues/233, [NoInterfaceObject] was removed
        from DOMRectList. Remove it from our implementation to match the spec, as well as
        Chrome and Firefox.

        Updated web platform tests IDL test for the Geometry spec.

        * dom/DOMRectList.idl:

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

        REGRESSION(iOS 11.3): Crashes in TimerBase::~TimerBase() in Tencent x5gamehelper
        https://bugs.webkit.org/show_bug.cgi?id=185073
        <rdar://problem/39821223>

        Reviewed by Alexey Proskuryakov.

        The following changes were made:
        - Make sure SocketStream callbacks are always scheduled on the right runloop:
          WebThreadRunLoop() on WebKitLegacy iOS, loaderRunLoop() on Windows and
          main runloop otherwise.
        - When the SocketStream callbacks are called, unconditionally call callOnMainThreadAndWait()
          before calling methods on the SocketStream client. Previously, this code path
          was specific to Windows but there is no reason to have platform-specific code here.
          callOnMainThreadAndWait() calls the function right away if we're already on the main
          thread, which will be the case on other platform than Windows.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::callbacksRunLoop):
        (WebCore::callbacksRunLoopMode):
        (WebCore::SocketStreamHandleImpl::scheduleStreams):
        (WebCore::SocketStreamHandleImpl::pacExecutionCallback):
        (WebCore::SocketStreamHandleImpl::executePACFileURL):
        (WebCore::SocketStreamHandleImpl::removePACRunLoopSource):
        (WebCore::SocketStreamHandleImpl::readStreamCallback):
        (WebCore::SocketStreamHandleImpl::writeStreamCallback):
        (WebCore::SocketStreamHandleImpl::platformClose):

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

        [LFC] Enable multiple layout roots for incremental layout.
        https://bugs.webkit.org/show_bug.cgi?id=185185

        Reviewed by Antti Koivisto.

        With certain type of style changes, we can stop the box invalidation at the formatting context boundary.
        When multiple boxes need updating in different formatting contexts, instead of marking the parent containing block chain all
        the way up to a common ancestor, we could just work with a list of layout entry points per layout frame.

        * layout/FormattingState.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::addLayoutEntryPoint):
        * layout/LayoutContext.h:

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

        [LFC] Box invalidation logic should go to dedicated classes.
        https://bugs.webkit.org/show_bug.cgi?id=185249

        Reviewed by Antti Koivisto.

        Each formatting context can initiate a different type of invalidation when
        style attribute changes in a box.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::isBlockFormattingState const):
        (WebCore::Layout::FormattingState::isInlineFormattingState const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::styleChanged):
        (WebCore::Layout::LayoutContext::markNeedsUpdate):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/blockformatting/BlockInvalidation.cpp: Copied from Source/WebCore/layout/blockformatting/BlockFormattingState.cpp.
        (WebCore::Layout::BlockInvalidation::invalidate):
        * layout/blockformatting/BlockInvalidation.h: Copied from Source/WebCore/layout/inlineformatting/InlineFormattingState.h.
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:
        * layout/inlineformatting/InlineInvalidation.cpp: Copied from Source/WebCore/layout/inlineformatting/InlineFormattingState.cpp.
        (WebCore::Layout::InlineInvalidation::invalidate):
        * layout/inlineformatting/InlineInvalidation.h: Copied from Source/WebCore/layout/blockformatting/BlockFormattingState.h.

2018-05-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        WebKit should send fake macOS user agent to docs.google.com
        https://bugs.webkit.org/show_bug.cgi?id=185165

        Reviewed by Carlos Garcia Campos.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::urlRequiresLinuxDesktopPlatform):

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

        Unreviewed, rolling out r231223 and r231288.
        https://bugs.webkit.org/show_bug.cgi?id=185256

        The change in r231223 breaks internal builds, and r231288 is a
        dependent change. (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Use default std::optional if it is provided"
        https://bugs.webkit.org/show_bug.cgi?id=185159
        https://trac.webkit.org/changeset/231223

        "Use pointer instead of
        std::optional<std::reference_wrapper<>>"
        https://bugs.webkit.org/show_bug.cgi?id=185186
        https://trac.webkit.org/changeset/231288

2018-05-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r231253.

        The API test added with this change is crashing on the bots.

        Reverted changeset:

        "Web Inspector: opt out of process swap on navigation if a Web
        Inspector frontend is connected"
        https://bugs.webkit.org/show_bug.cgi?id=184861
        https://trac.webkit.org/changeset/231253

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

        A MediaStream being played should allow removing some of its tracks
        https://bugs.webkit.org/show_bug.cgi?id=185233

        Reviewed by Eric Carlson.

        Update the tracks out of the for loop.
        Test: fast/mediastream/change-tracks-media-stream-being-played.html

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::updateTracksOfType):

2018-05-03  Miguel Gomez  <magomez@igalia.com>

        WebCore::TextureMapperLayer object used after freed
        https://bugs.webkit.org/show_bug.cgi?id=184729

        Reviewed by Michael Catanzaro.

        Replace the raw pointers with WeakPtr for effectTarget, maskLayer and replicaLayer
        inside TextureMapperLayer.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        (WebCore::TextureMapperLayer::setMaskLayer):
        (WebCore::TextureMapperLayer::setReplicaLayer):
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-05-03  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Add OpenSSL/LibreSSL multi-threading support
        https://bugs.webkit.org/show_bug.cgi?id=185138

        The older OpenSSL manual says the locking_function and threadid_function should
        be set when use it in multi-threading environment. This applies to LibreSSL also.
        https://www.openssl.org/docs/man1.0.2/crypto/threads.html

        For unix and other similar os, the default threadId_function implementation is
        good enough. We'll set custom callback only for Windows OS.

        Note it's not required for OpenSSL 1.1.0 and after.
        https://www.openssl.org/blog/blog/2017/02/21/threads/

        Reviewed by Per Arne Vollan.

        * platform/network/curl/CurlSSLHandle.cpp:
        (WebCore::CurlSSLHandle::CurlSSLHandle):
        (WebCore::CurlSSLHandle::ThreadSupport::ThreadSupport):
        (WebCore::CurlSSLHandle::ThreadSupport::lockingCallback):
        (WebCore::CurlSSLHandle::ThreadSupport::threadIdCallback):
        * platform/network/curl/CurlSSLHandle.h:
        (WebCore::CurlSSLHandle::ThreadSupport::setup):
        (WebCore::CurlSSLHandle::ThreadSupport::singleton):
        (WebCore::CurlSSLHandle::ThreadSupport::lock):
        (WebCore::CurlSSLHandle::ThreadSupport::unlock):

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

        Remove superfluous check for a null attribute value check in Element::removeAttributeInternal
        https://bugs.webkit.org/show_bug.cgi?id=185227

        Reviewed by Chris Dumez.

        Removed the check. The attribute value string can never be null.

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

2018-05-02  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement LayoutContext::createDisplayBox
        https://bugs.webkit.org/show_bug.cgi?id=185158

        Reviewed by Antti Koivisto.

        Now compute*() functions take both the const layout and the corresponding non-const display boxes.
        Display boxes are owned by the LayoutContext and they don't form a tree structure (only implicitly through the layout tree).
        (This might need to change in the future if we decide to arrange them in some sort of painting order)

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::computePosition):
        * layout/FloatingContext.h:
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeStaticPosition const):
        (WebCore::Layout::FormattingContext::computeInFlowPositionedPosition const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition const):
        (WebCore::Layout::FormattingContext::computeWidth const):
        (WebCore::Layout::FormattingContext::computeHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::createDisplayBox):
        * layout/LayoutContext.h:
        (WebCore::Layout::LayoutContext::displayBoxForLayoutBox const):
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::parent const): Deleted.
        (WebCore::Display::Box::nextSibling const): Deleted.
        (WebCore::Display::Box::previousSibling const): Deleted.
        (WebCore::Display::Box::firstChild const): Deleted.
        (WebCore::Display::Box::lastChild const): Deleted.
        (WebCore::Display::Box::setParent): Deleted.
        (WebCore::Display::Box::setNextSibling): Deleted.
        (WebCore::Display::Box::setPreviousSibling): Deleted.
        (WebCore::Display::Box::setFirstChild): Deleted.
        (WebCore::Display::Box::setLastChild): Deleted.
        (): Deleted.
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowHeight const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-05-02  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Hiding then showing an <object> of type image makes the underlaying image disappear
        https://bugs.webkit.org/show_bug.cgi?id=185216
        <rdar://problem/39055630>

        Reviewed by Youenn Fablet.

        Ensure the HTMLPlugInImageElement updates the RenderImageResource of its
        RenderImage with the CachedImage of its ImageLoader when the RenderImage
        is recreated.

        Test: fast/images/object-image-hide-show.html

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        This is very similar to what we do in HTMLImageElement::didAttachRenderers().


2018-05-02  Brent Fulgham  <bfulgham@apple.com>

        Use RetainPtr for form input type
        https://bugs.webkit.org/show_bug.cgi?id=185210
        <rdar://problem/39734040>

        Reviewed by Ryosuke Niwa.

        Refactor our HTMLInputElement class to store its InputType member as a RefPtr.

        Test: fast/forms/access-key-mutation-2.html.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::didAddUserAgentShadowRoot):
        (WebCore::HTMLInputElement::accessKeyAction):
        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::appendFormData):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::createInputType):
        (WebCore::InputType::create):
        (WebCore::InputType::createText):
        * html/InputType.h:

2018-05-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use pointer instead of std::optional<std::reference_wrapper<>>
        https://bugs.webkit.org/show_bug.cgi?id=185186

        Reviewed by Alex Christensen.

        std::optional<T&> is not accepted in C++17 spec. So we replaced it
        with std::optional<std::reference_wrapper<T>>.

        In this patch, we replace it with T*, which is well-aligned to
        WebKit's convention.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSParser.h:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::item const):
        (WebCore::DatasetDOMStringMap::namedItem const):
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        (WebCore::Element::insertAdjacentHTML):
        * dom/Element.h:
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        * inspector/DOMEditor.cpp:
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::getPostData):
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupPOST):
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::keysForSessionWithID const):
        (WebCore::MockCDMInstance::updateLicense):
        * testing/MockCDMFactory.h:

2018-05-02  Keith Rollin  <krollin@apple.com>

        Add facility for tracking times and results of page and resource loading
        https://bugs.webkit.org/show_bug.cgi?id=184838
        <rdar://problem/36548974>

        Reviewed by Brent Fulgham.

        Update FrameProgressTracker to send the necessary page load start/stop
        signals so that we can track the entire page load at a network level.
        Add an empty override of the pure virtual
        LoaderStrategy::pageLoadCompleted method.

        No new tests. There is no testable effect from these changes. On
        Cocoa, measurable changes take place in another (non-WebKit) process.
        On non-Cocoa systems, this facility is currently disabled.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::progressCompleted):
        * loader/LoaderStrategy.h:

2018-05-02  Aditya Keerthi  <akeerthi@apple.com>

        Can't copy and paste URLs that have no title into Mail (macOS)
        https://bugs.webkit.org/show_bug.cgi?id=185205
        <rdar://problem/36352406>

        Reviewed by Tim Horton.

        The pasteboardURL generated has an empty title for URLs without titles. Currently, the pasteboardURL.title is being saved to the pasteboard.

        To fix the error, we check whether the title is empty and instead save the lastPathComponent to the pasteboard. This matches current behavior as the fallback title.

        Augmented WebKitLegacy.ContextMenuCanCopyURL test

        * platform/mac/PasteboardMac.mm:
        (WebCore::writeURLForTypes):

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

        REGRESSION(r225868): Release assert when removing an SVGUseElement from Document::m_svgUseElements
        https://bugs.webkit.org/show_bug.cgi?id=182188
        <rdar://problem/36689240>

        Reviewed by Antti Koivisto.

        Fixed the crash by removing up the release assert.

        The crash is likely caused by re-entrancy to Document::resolveStyle during SVGUseElement::updateShadowTree.
        Because Document::resolveStyle invokes updateShadowTree on SVG use elements in Document::m_svgUseElements
        without clearing the map, the nested call to resolveStyle ends up calling updateShadowTree() for all elements
        in m_svgUseElements and removing them all from the map. When the stack frame eventually comes back to the outer
        invocation of Document::resolveStyle, updateShadowTree gets invoked for the second time on SVG use elements
        whose shadow tree had already been updated within the inner invocation to updateShadowTree, and release-asserts.

        There is an alternative fix: avoid calling updateShadowTree on a svg element when shadowTreeNeedsUpdate returns
        true on the element in resolveStyle. However, removing the release assert is a sure way to fix the crash so
        this patch opts for that fix instead especially since we don't have any reproducible test case for this crash.

        This release assertion was added in r225868 as a cautious measure to catch any use-after-frees of SVGUseElement's
        since m_svgUseElements stored raw pointes to SVG use elements but this crash is not an indicative of any UAF,
        and there is no evidence that r225868 has led to new UAFs even after five months.

        No new tests. I couldn't find a way to trigger a nested style update inside SVGUseElement::updateShadowTree.

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

2018-05-02  Dirk Schulze  <dschulze@chromium.org>

        getCharNumAtPosition should take DOMPointInit as argument
        https://bugs.webkit.org/show_bug.cgi?id=184695

        Reviewed by Antti Koivisto.

        Extend existing tests for getCharNumAtPosition.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::getCharNumAtPosition):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextContentElement.idl: Use DOMPointInit argument.

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

        Use NetworkLoadChecker for navigation loads
        https://bugs.webkit.org/show_bug.cgi?id=184892
        <rdar://problem/39652686>

        Reviewed by Chris Dumez.

        Sanitize headers according response tainting.
        If tainting is basic, it means same origin load in which case we only filter Cookie related headers.
        If tainting is Opaque, we filter all uncommon headers.
        If tainting is CORS, we filter all uncommon headers except the one explicitely allowed by CORS headers.
        Covered by updated test.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFieldsAccordingToTainting):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFields):
        * platform/network/ResourceResponseBase.h:

2018-05-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Collection fragment identifiers don't use PostScript names
        https://bugs.webkit.org/show_bug.cgi?id=184624
        <rdar://problem/39432089>

        Reviewed by Simon Fraser.

        In a previous version of the CSS Fonts spec, there was text saying that items in font collections
        should be 1-indexed (so the first item would be MyFonts.ttc#1). However, this is unfortunate because
        inserting an item into the middle of a collection would throw off all content that uses the file.
        Instead, the spec has since changed to use PostScript names (so the content instead would say
        MyFonts.ttc#MyFont-Regular).

        Test: fast/text/font-collection.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::calculateItemInCollection const):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::createCustomFontData):
        (WebCore::CachedFont::calculateIndex const): Deleted.
        * loader/cache/CachedFont.h:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:

2018-05-02  Brian Burg  <bburg@apple.com>

        Web Inspector: opt out of process swap on navigation if a Web Inspector frontend is connected
        https://bugs.webkit.org/show_bug.cgi?id=184861
        <rdar://problem/39153768>

        Reviewed by Ryosuke Niwa.

        Notify the client of the current connection count whenever a frontend connects or disconnects.

        Covered by new API test.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::frontendCountChanged):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::disconnectAllFrontends):
        * inspector/InspectorController.h:

2018-05-02  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GStreamer] Remove unneeded include of gstgldisplay_wayland.h after r228866 and r229022
        https://bugs.webkit.org/show_bug.cgi?id=185207

        Reviewed by Michael Catanzaro.

        Remove unneeded include of gstgldisplay_wayland.h

        No new tests, no change in behaviour.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

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

        document.open() event listener removal is not immediate
        https://bugs.webkit.org/show_bug.cgi?id=185191

        Reviewed by Darin Adler.

        We need to make sure we set the 'wasremoved' flag on RegisteredEventListeners
        whenever they get removed from the EventListenerMap. We were doing so correctly
        in EventListenerMap:remove() but not EventListenerMap::clear(). This patch
        updates clear() accordingly.

        The reason we need to set this flag is that RegisteredEventListeners is RefCounted
        and EventTarget::fireEventListeners() may be currently running and calling
        each listener one by one, holding a reference to all listener of a given event.

        Test: fast/dom/Document/document-open-removes-all-listeners.html

        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::clear):

2018-05-02  Zalan Bujtas <zalan@apple.com>

        Use WeakPtr in GridCell
        https://bugs.webkit.org/show_bug.cgi?id=185180
        <rdar://problem/39432165>

        Reviewed by Antti Koivisto.

        Since GridCell does not own the renderers, it should
        construct weak pointers.

        Unable to create a reliably reproducible test case.

        * rendering/Grid.cpp:
        (WebCore::Grid::insert):
        (WebCore::GridIterator::nextGridItem):
        * rendering/Grid.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::firstLineBaseline const):

2018-05-02  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Provide audio route information when invoking AirPlay picker
        https://bugs.webkit.org/show_bug.cgi?id=185199
        <rdar://problem/39853103>

        Reviewed by Jer Noble.

        No new tests, this requires a specific hardware setup.

        * dom/Document.cpp:
        (WebCore::Document::showPlaybackTargetPicker): Pass route sharing policy and routing context UID.
        * dom/Document.h:

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::showPlaybackTargetPicker): Ditto.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:

        * page/Page.cpp:
        (WebCore::Page::showPlaybackTargetPicker): Ditto.
        * page/Page.h:

        * platform/audio/AudioSession.cpp:
        (WebCore::AudioSession::routeSharingPolicy const): Empty implementation for non-iOS ports.
        (WebCore::routingContextUID const): Ditto.
        * platform/audio/AudioSession.h:

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::routeSharingPolicy const): Return the route sharing policy.
        (WebCore::AudioSession::routingContextUID const): Return the route context UID.

2018-05-02  Dean Jackson  <dino@apple.com>

        Draw SystemPreview badge to specification on iOS
        https://bugs.webkit.org/show_bug.cgi?id=185203
        <rdar://problem/39908855>

        Reviewed by Tim Horton.

        Use CoreImage to render a badge with a blurred background,
        at particular sizes.

        This will be tested internally while we're getting artwork
        from WebKitAdditions.

        * Configurations/WebCore.xcconfig: Link against CoreImage.
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintSystemPreviewBadge): New function
        in the iOS platform RenderTheme that draws the system preview.

2018-05-01  Brent Fulgham  <bfulgham@apple.com>

        Prevent Debug ASSERT when changing forms
        https://bugs.webkit.org/show_bug.cgi?id=185173
        <rdar://problem/39738669>

        Reviewed by Ryosuke Niwa.

        Form submission could trigger a debug assertion during validation when
        a form is changed during an input submission. Fix this by cleaning up
        the event handling logic and make it more consistent with modern WebKit
        coding style.

        Test: fast/forms/form-submission-crash-3.html

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::defaultEventHandler): Make sure layout runs before
        attempting to perform event handling.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::reportValidity): Ditto.
        (WebCore::HTMLFormElement::validateInteractively): Remove call to perform layout here,
        since we expect this to happen earlier in the layout pass. Add an assertion that the
        tree is not dirty.
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent): Make sure layout runs before
        attempting to perform event handling.
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent): Ditto.

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Unreviewed; address review comments made before landing r231231.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::volume const):

2018-05-02  Jer Noble  <jer.noble@apple.com>

        Pipe volume through PlaybackSessionManager/Proxy.
        https://bugs.webkit.org/show_bug.cgi?id=185182

        Reviewed by Eric Carlson.

        Add support for the volume property to PlaybackSessionModel, and all its clients.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::volumeChanged):
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::setVolume):
        (WebCore::PlaybackSessionModelMediaElement::volume const):
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::volumeChanged):
        * platform/ios/WebAVPlayerController.h:
        * platform/ios/WebAVPlayerController.mm:
        (-[WebAVPlayerController volume]):
        (-[WebAVPlayerController setVolume:]):
        (-[WebAVPlayerController volumeChanged:]):
        (-[WebAVPlayerController resetMediaState]):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::volumeChanged):
        (VideoFullscreenControllerContext::volume const):
        (VideoFullscreenControllerContext::setVolume):

2018-05-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix build in WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=185169

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

2018-05-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use default std::optional if it is provided
        https://bugs.webkit.org/show_bug.cgi?id=185159

        Reviewed by JF Bastien.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSParser.h:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::item const):
        (WebCore::DatasetDOMStringMap::namedItem const):
        (WebCore:: const): Deleted.
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        (WebCore::Element::insertAdjacentHTML):
        * dom/Element.h:
        * inspector/DOMEditor.cpp:
        * platform/network/curl/CurlFormDataStream.cpp:
        (WebCore::CurlFormDataStream::getPostData):
        (): Deleted.
        * platform/network/curl/CurlFormDataStream.h:
        * testing/MockCDMFactory.cpp:
        (WebCore::MockCDMFactory::keysForSessionWithID const):
        (WebCore::MockCDMInstance::updateLicense):
        (WebCore:: const): Deleted.
        * testing/MockCDMFactory.h:

2018-05-01  Chris Dumez  <cdumez@apple.com>

        Add release assertions in CFNetwork's SocketStreamHandleImpl to help debug a threading issue
        https://bugs.webkit.org/show_bug.cgi?id=185181

        Reviewed by Geoffrey Garen.

        Add release assertions in CFNetwork's SocketStreamHandleImpl to help debug a threading issue
        on iOS WebKitLegacy (Bug 185073). It appears readStreamCallback() can get called on the UIThread,
        which should not be possible if scheduleStreams() was called on the WebThread, as it is supposed
        to. The new release assertion in scheduleStreams() should tell us if somebody is calling it from
        the UIthread instead of the WebThread on iOS WebKitLegacy.

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::SocketStreamHandleImpl::scheduleStreams):
        (WebCore::SocketStreamHandleImpl::readStreamCallback):

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

        Unreviewed, remove an unused variable in RuntimeEnabledFeatures.h

        * page/RuntimeEnabledFeatures.h:

2018-05-01  Oleksandr Skachkov  <gskachkov@gmail.com>

        Fix build error after r231194
        https://bugs.webkit.org/show_bug.cgi?id=185169

        Reviewed by JF Bastien.

        Prevent compile error in iOS Simulator debug build
        by tagging function

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

2018-05-01  Oleksandr Skachkov  <gskachkov@gmail.com>

        WebAssembly: add support for stream APIs - JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=183442

        Reviewed by Yusuke Suzuki and JF Bastien.

        Add WebAssembly streaming API to WebCore.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::tryAllocate):
        (WebCore::isResponseCorrect):
        (WebCore::handleResponseOnStreamingAction):
        (WebCore::JSDOMWindowBase::compileStreaming):
        (WebCore::JSDOMWindowBase::instantiateStreaming):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:

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

        Improve the performance of FontCascadeDescription's effectiveFamilies
        https://bugs.webkit.org/show_bug.cgi?id=184720
        <rdar://problem/38970927>

        Reviewed by Simon Fraser.

        The page that had the performance problem renders many different Chinese characters in system-ui
        with only a small number of individual fonts. It turns out we were calling into the system-ui
        machinery for each character in order to opportunistically start loading data URLs (see also:
        https://bugs.webkit.org/show_bug.cgi?id=175845). These data URLS will never represent the system
        font, so we don't need to invoke the system-ui machinery at all.

        This patch makes a 92x performance improvement on the associated performance test. This test is
        designed to test Chinese text rendered with system-ui.

        Performance test: Layout/system-ui.html

        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::opportunisticallyStartFontDataURLLoading):

2018-04-30  Jer Noble  <jer.noble@apple.com>

        <img src=mp4> does not display on ios despite Accept: video/* advertisement
        https://bugs.webkit.org/show_bug.cgi?id=185029
        <rdar://problem/39771989>

        Reviewed by Eric Carlson.

        Returning "NO" from resourceLoader:shouldWaitForLoadingOfResource: signals that the load failed,
        even if the resource request is successfully fulfilled prior to the return. Always return YES in
        the case that loading succeeded.

        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (-[WebCoreSharedBufferResourceLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]):

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

        REGRESSION(r230914) Selecting text on this apple.com page makes it vanish
        https://bugs.webkit.org/show_bug.cgi?id=185142
        <rdar://problem/39821446>

        Reviewed by Simon Fraser.

        Set the overflow rect on the inline textbox when needed.

        Test: fast/text/simple-line-layout-selection-with-overflow.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::initializeInlineTextBox):
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        (WebCore::SimpleLineLayout::initializeInlineBox): Deleted.

2018-04-30  JF Bastien  <jfbastien@apple.com>

        Use some C++17 features
        https://bugs.webkit.org/show_bug.cgi?id=185135

        Reviewed by Alex Christensen.

        As discussed here [0] let's move WebKit to a subset of C++17. We
        now require GCC 6 [1] which means that, according to [2] we can
        use the following C++17 language features (I removed some
        uninteresting ones):

         - New auto rules for direct-list-initialization
         - static_assert with no message
         - typename in a template template parameter
         - Nested namespace definition
         - Attributes for namespaces and enumerators
         - u8 character literals
         - Allow constant evaluation for all non-type template arguments
         - Fold Expressions
         - Unary fold expressions and empty parameter packs
         - __has_include in preprocessor conditional
         - Differing begin and end types in range-based for
         - Improving std::pair and std::tuple

        Consult the Tony Tables [3] to see before / after examples.

        Of course we can use any library feature if we're willing to
        import them to WTF (and they don't require language support).


          [0]: https://lists.webkit.org/pipermail/webkit-dev/2018-March/029922.html
          [1]: https://trac.webkit.org/changeset/231152/webkit
          [2]: https://en.cppreference.com/w/cpp/compiler_support
          [3]: https://github.com/tvaneerd/cpp17_in_TTs/blob/master/ALL_IN_ONE.md

        * DerivedSources.make:
        * platform/URLParser.cpp: work around an odd GCC 6 bug with class
          static value as a template parameter.
        (WebCore::URLParser::percentDecode):
        (WebCore::URLParser::domainToASCII):
        (WebCore::URLParser::hasForbiddenHostCodePoint):
        (WebCore::URLParser::parseHostAndPort):
        * platform/URLParser.h:

2018-04-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Respect the existing shrink-to-fit attribute instead of using min-device-width
        https://bugs.webkit.org/show_bug.cgi?id=185132
        <rdar://problem/39834562>

        Reviewed by Tim Horton.

        Removes the `min-device-width` attribute added in r231095. Instead, we key this behavior off of the
        `shrink-to-fit` attribute introduced for multitasking on iPad, such that `shrink-to-fit=no` achieves the same
        behavior as `min-device-width=0` in extra zoom mode. See comments below for more detail.

        Adjusted an existing layout test: fast/viewport/extrazoom/viewport-change-min-device-width.html.

        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        (WebCore::operator<<):
        * dom/ViewportArguments.h:

        Removes the `minDeviceWidth` viewport argument.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMinDeviceWidthEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::minDeviceWidthEnabled const): Deleted.

        Removes the runtime switch for `min-device-width`.

        * page/ViewportConfiguration.cpp:
        (WebCore::platformDeviceWidthOverride):

        Hard-code the override device width in extra zoom mode.

        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthAndShrinkToFit const):

        In extra zoom mode, override the device width only if shrink-to-fit has not been expliticly disabled, and the
        device width is less than the override device width.

        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints const):
        (WebCore::ViewportConfiguration::shouldIgnoreScalingConstraintsRegardlessOfContentSize const):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfiguration::updateMinimumLayoutSize):

        Do not override the minimum layout size if `shrink-to-fit` has been explicitly explicitly disabled, or if the
        device width is greater than the override device width.

        (WebCore::computedMinDeviceWidth): Deleted.
        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthWithMinDeviceWidth const): Deleted.
        * page/ViewportConfiguration.h:

2018-04-30  Chris Nardi  <cnardi@chromium.org>

        Serialize font-variation-settings with double-quotes per spec
        https://bugs.webkit.org/show_bug.cgi?id=182542

        Reviewed by Myles C. Maxfield.

        According to the CSSOM spec [1], all strings should be serialized with double-quotes.
        The axis name in font-variation-settings was previously serialized with single-quotes;
        change this to double-quotes to match the spec and non-WebKit browsers.

        [1]: https://drafts.csswg.org/cssom/#common-serializing-idioms

        Updated fast/text/variations/getComputedStyle.html to test the change.

        * css/CSSFontVariationValue.cpp:
        (WebCore::CSSFontVariationValue::customCSSText const):

2018-04-30  Chris Dumez  <cdumez@apple.com>

        Fix bad use of RunLoop::main().dispatch() in MessagePort::dispatchMessages()
        https://bugs.webkit.org/show_bug.cgi?id=185134

        Reviewed by Geoffrey Garen.

        Fix bad use of RunLoop::main().dispatch() in MessagePort::dispatchMessages(). This code runs on iOS WebKitLegacy
        and it is therefore unsafe to use RunLoop::main() here. We want to use callOnMainThread() instead to run code on
        the WebThread.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):

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

        Make color-filter affect caret-color
        https://bugs.webkit.org/show_bug.cgi?id=185129
        rdar://problem/39829066

        Reviewed by Tim Horton.
        
        Transform the colors used to compare the caret color with the background through
        color-filter (since we want contrasting colors after filters are applied), and
        transform caret-color itself.

        Test: css3/color-filters/color-filter-caret-color.html

        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::paintCaret const):

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

        [GTK] Webkit should spoof as Safari on a Mac when on Chase.com
        https://bugs.webkit.org/show_bug.cgi?id=185103

        Reviewed by Carlos Garcia Campos.

        Send a fake user agent to chase.com to make it work.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):
        (WebCore::UserAgentQuirks::stringForQuirk): Also, remove this stale comment.

2018-04-29  Simon Fraser  <simon.fraser@apple.com>

        Make color-filter affect <attachment>
        https://bugs.webkit.org/show_bug.cgi?id=185122
        rdar://problem/39818763

        Reviewed by Tim Horton.
        
        Convert the colors used to render <attachment> through color-filter, except
        for those parts that render over the icon (like the progress bar).

        Not easily testable.

        * rendering/RenderThemeMac.mm:
        (WebCore::titleTextColorForAttachment):
        (WebCore::AttachmentLayout::layOutTitle):
        (WebCore::AttachmentLayout::layOutSubtitle):
        (WebCore::paintAttachmentIconBackground):
        (WebCore::paintAttachmentTitleBackground):
        (WebCore::paintAttachmentPlaceholderBorder):

2018-04-28  Simon Fraser  <simon.fraser@apple.com>

        Fix color-filter to apply to SVG colors
        https://bugs.webkit.org/show_bug.cgi?id=185113
        rdar://problem/39665082

        Reviewed by Dean Jackson.
        
        Convert SVG colors through color-filter operations for the places in SVG
        that use color, namely fill and stroke, gradients, lighting colors and
        drop-shadow.

        Test: css3/color-filters/svg/color-filter-inline-svg.html

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::buildGradient const):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDropShadowElement.cpp:
        (WebCore::SVGFEDropShadowElement::build):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::setFilterEffectAttribute):
        (WebCore::SVGFESpecularLightingElement::build):

2018-04-29  Michael Catanzaro  <mcatanzaro@igalia.com>

        [CMake] Require GCC 6
        https://bugs.webkit.org/show_bug.cgi?id=184985

        Reviewed by Alex Christensen.

        Remove a GCC 5 fallback path. This seems to be the only such fallback path in WebKit.

        * platform/graphics/FourCC.h:
        (WebCore::FourCC::FourCC):

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

        [LFC] Implement Display::Box functions
        https://bugs.webkit.org/show_bug.cgi?id=185116

        Reviewed by Antti Koivisto.

        * layout/displaytree/DisplayBox.cpp:
        (WebCore::Display::Box::Box):
        (WebCore::Display::Box::~Box):
        (WebCore::Display::Box::marginBox const):
        (WebCore::Display::Box::borderBox const):
        (WebCore::Display::Box::paddingBox const):
        (WebCore::Display::Box::contentBox const):
        * layout/displaytree/DisplayBox.h:
        (WebCore::Display::Box::rect const):
        (WebCore::Display::Box::top const):
        (WebCore::Display::Box::left const):
        (WebCore::Display::Box::bottom const):
        (WebCore::Display::Box::right const):
        (WebCore::Display::Box::topLeft const):
        (WebCore::Display::Box::bottomRight const):
        (WebCore::Display::Box::size const):
        (WebCore::Display::Box::width const):
        (WebCore::Display::Box::height const):
        (WebCore::Display::Box::marginTop const):
        (WebCore::Display::Box::marginLeft const):
        (WebCore::Display::Box::marginBottom const):
        (WebCore::Display::Box::marginRight const):
        (WebCore::Display::Box::parent const):
        (WebCore::Display::Box::nextSibling const):
        (WebCore::Display::Box::previousSibling const):
        (WebCore::Display::Box::firstChild const):
        (WebCore::Display::Box::lastChild const):
        (WebCore::Display::Box::setRect):
        (WebCore::Display::Box::setTopLeft):
        (WebCore::Display::Box::setTop):
        (WebCore::Display::Box::setLeft):
        (WebCore::Display::Box::setSize):
        (WebCore::Display::Box::setWidth):
        (WebCore::Display::Box::setHeight):
        (WebCore::Display::Box::setMarginTop):
        (WebCore::Display::Box::setMarginLeft):
        (WebCore::Display::Box::setMarginBottom):
        (WebCore::Display::Box::setMarginRight):
        (WebCore::Display::Box::setBorderTop):
        (WebCore::Display::Box::setBorderLeft):
        (WebCore::Display::Box::setBorderBottom):
        (WebCore::Display::Box::setBorderRight):
        (WebCore::Display::Box::setPaddingTop):
        (WebCore::Display::Box::setPaddingLeft):
        (WebCore::Display::Box::setPaddingBottom):
        (WebCore::Display::Box::setPaddingRight):
        (WebCore::Display::Box::setParent):
        (WebCore::Display::Box::setNextSibling):
        (WebCore::Display::Box::setPreviousSibling):
        (WebCore::Display::Box::setFirstChild):
        (WebCore::Display::Box::setLastChild):

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

        Make RestrictedHTTPResponseAccess flag true by default
        https://bugs.webkit.org/show_bug.cgi?id=185089

        Reviewed by Geoffrey Garen.

        * page/RuntimeEnabledFeatures.h:

2018-04-28  Sihui Liu  <sihui_liu@apple.com>

        [Cocoa] Set HTTPOnly flag when converting Cookie to NSHTTPCookie
        https://bugs.webkit.org/show_bug.cgi?id=185052

        Reviewed by Geoffrey Garen.

        Set HTTPOnly for NSHTTPCookie when it's converted from Cookie, so the WebKit APIs could 
        create NSHTTPCookie with correct HTTPOnly flag. Also, reverted the change made to operator
        function because we want the Cookie class to act as a wrapper for NSHTTPCookie and leverage
        its equal function. 

        Modified API test: WebKit.WKHTTPCookieStoreHttpOnly

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * const):
        (WebCore::Cookie::operator== const):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::deleteCookie):

2018-04-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add LayoutTreeBuilder class to generate the layout tree
        https://bugs.webkit.org/show_bug.cgi?id=185108

        Reviewed by Antti Koivisto.

        This is for testing purposes.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::~FormattingState):
        * layout/FormattingState.h:
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::~BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::~InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:
        * layout/layouttree/LayoutBlockContainer.h:
        * layout/layouttree/LayoutBox.h:
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutInlineContainer.h:
        * layout/layouttree/LayoutTreeBuilder.cpp: Added.
        (WebCore::Layout::TreeBuilder::createLayoutTree):
        (WebCore::Layout::TreeBuilder::createSubTree):
        (WebCore::Layout::outputLayoutBox):
        (WebCore::Layout::outputLayoutTree):
        (WebCore::Layout::TreeBuilder::showLayoutTree):
        (WebCore::Layout::printLayoutTreeForLiveDocuments):
        * layout/layouttree/LayoutTreeBuilder.h: Copied from Source/WebCore/layout/layouttree/LayoutBlockContainer.h.
        * page/mac/PageMac.mm:
        (WebCore::Page::platformInitialize):

2018-04-28  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement BlockMarginCollapse functions.
        https://bugs.webkit.org/show_bug.cgi?id=185036

        Reviewed by Antti Koivisto.

        * layout/blockformatting/BlockMarginCollapse.cpp:
        (WebCore::Layout::marginValue):
        (WebCore::Layout::BlockMarginCollapse::BlockMarginCollapse):
        (WebCore::Layout::BlockMarginCollapse::marginTop const):
        (WebCore::Layout::BlockMarginCollapse::marginBottom const):
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithSibling const):
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithSibling const):
        (WebCore::Layout::BlockMarginCollapse::isMarginTopCollapsedWithParent const):
        (WebCore::Layout::BlockMarginCollapse::isMarginBottomCollapsedWithParent const):
        (WebCore::Layout::BlockMarginCollapse::nonCollapsedMarginTop const):
        (WebCore::Layout::BlockMarginCollapse::nonCollapsedMarginBottom const):
        (WebCore::Layout::BlockMarginCollapse::collapsedMarginTopFromFirstChild const):
        (WebCore::Layout::BlockMarginCollapse::collapsedMarginBottomFromLastChild const):
        (WebCore::Layout::BlockMarginCollapse::hasAdjoiningMarginTopAndBottom const):
        * layout/blockformatting/BlockMarginCollapse.h:
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::style const):

2018-04-27  David Kilzer  <ddkilzer@apple.com>

        Add logging when SpringBoard enables WebThread
        <https://webkit.org/b/185100>
        <rdar://problem/39746542>

        Reviewed by Daniel Bates.

        * platform/RuntimeApplicationChecks.h:
        (WebCore::IOSApplication::isSpringBoard): Add declaration.
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isSpringBoard): Add implementation.
        * platform/ios/wak/WebCoreThread.mm:
        (WebThreadEnable): Call RELEASE_LOG_FAULT() if this is called by
        SpringBoard.

2018-04-27  Keith Rollin  <krollin@apple.com>

        Fix crash in DocumentLoader::startLoadingMainResource
        https://bugs.webkit.org/show_bug.cgi?id=185088
        rdar://problem/39689263

        Reviewed by Chris Dumez.

        Add a "protectedThis" to address a case where a deleted "this" was
        accessed in a RELEASE_LOG statement.

        No new tests -- covered by existing tests, which now pass.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):

2018-04-27  Simon Fraser  <simon.fraser@apple.com>

        Implement color-filter for text stroke
        https://bugs.webkit.org/show_bug.cgi?id=185098

        Reviewed by Alan Bujtas.
        
        Transform the text stroke color through color-filter.

        Test: css3/color-filters/color-filter-text-stroke.html

        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):

2018-04-27  Simon Fraser  <simon.fraser@apple.com>

        Implement animation for color-filter
        https://bugs.webkit.org/show_bug.cgi?id=185092
        rdar://problem/39773810

        Reviewed by Tim Horton.
        
        Implement animation of color-filter.
        
        This requires tracking whether the color-filter function lists match for both old and new
        animation code paths.
        
        The filter-related ProperyWappers in CSSPropertyAnimation are cleaned up to use a single wrapper,
        which has to pass the propertyID to the blend function so we know which "lists match" to check.
        This wrapper reports that its accelerated for filter and backdrop-filter, but not color-filter.

        Test: css3/color-filters/color-filter-animation.html

        * animation/CSSPropertyBlendingClient.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::setBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingColorFilterFunctionLists):
        * animation/KeyframeEffectReadOnly.h:
        * page/animation/AnimationBase.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::PropertyWrapperFilter::PropertyWrapperFilter):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::PropertyWrapperAcceleratedFilter::PropertyWrapperAcceleratedFilter): Deleted.
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::PropertyWrapperAcceleratedBackdropFilter): Deleted.
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::animationIsAccelerated const): Deleted.
        (WebCore::PropertyWrapperAcceleratedBackdropFilter::blend const): Deleted.
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::reset):
        (WebCore::ImplicitAnimation::checkForMatchingColorFilterFunctionLists):
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::checkForMatchingColorFilterFunctionLists):
        * page/animation/KeyframeAnimation.h:

2018-04-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add FormattingContext::computeWidth/computeHeight logic.
        https://bugs.webkit.org/show_bug.cgi?id=185091

        Reviewed by Antti Koivisto.

        Inflow width and height can't really be computed without knowing the exact context. 

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::computeWidth const):
        (WebCore::Layout::FormattingContext::computeHeight const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowWidth const):
        (WebCore::Layout::FormattingContext::computeFloatingWidth const):
        (WebCore::Layout::FormattingContext::computeOutOfFlowHeight const):
        (WebCore::Layout::FormattingContext::computeFloatingHeight const):
        * layout/FormattingContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::BlockFormattingContext::computeInFlowHeight const):
        (WebCore::Layout::BlockFormattingContext::computeWidth const): Deleted.
        (WebCore::Layout::BlockFormattingContext::computeHeight const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::computeInFlowWidth const):
        (WebCore::Layout::InlineFormattingContext::computeInFlowHeight const):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-04-27  Chris Dumez  <cdumez@apple.com>

        Use WindowProxy instead of DOMWindow in our IDL
        https://bugs.webkit.org/show_bug.cgi?id=185022

        Reviewed by Sam Weinig.

        Stop using DOMWindow in all of our IDL files and use WindowProxy as
        per their respective specifications. As a result, the implementation
        as also updated to use WindowProxy type instead of DOMWindow.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMConvertWindowProxy.h: Removed.
        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::windowProxy const):
        (WebCore::JSWindowProxy::toWrapped):
        * bindings/js/JSWindowProxy.h:
        (WebCore::window):
        Use static_cast<>() instead of jsCast<>() because jsCast<>()
        relies on classInfo() which is not allowed to be called during
        JS sweep due to an assertion inside classInfo(). The JSWindowProxy
        objects are held strongly by the WindowProxy so we know the JSWindowProxy
        object is not getting destroyed here.

        (WebCore::toJS):
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::globalObject):
        * bindings/js/WindowProxy.h:
        (WebCore::WindowProxy::frame const):
        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        (ComputeIsCallbackInterface):
        (ComputeIsCallbackFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GetBaseIDLType):
        (NativeToJSValueDOMConvertNeedsState):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod9Body):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher):
        * bindings/scripts/test/TestObj.idl:
        * dom/CompositionEvent.cpp:
        (WebCore::CompositionEvent::CompositionEvent):
        (WebCore::CompositionEvent::initCompositionEvent):
        * dom/CompositionEvent.h:
        * dom/CompositionEvent.idl:
        * dom/Document.cpp:
        (WebCore::Document::defaultView const):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/DocumentTouch.cpp:
        (WebCore::DocumentTouch::createTouch):
        * dom/DocumentTouch.h:
        * dom/DocumentTouch.idl:
        * dom/FocusEvent.cpp:
        (WebCore::FocusEvent::FocusEvent):
        * dom/FocusEvent.h:
        * dom/InputEvent.cpp:
        (WebCore::InputEvent::create):
        (WebCore::InputEvent::InputEvent):
        * dom/InputEvent.h:
        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent):
        (WebCore::KeyboardEvent::create):
        (WebCore::KeyboardEvent::initKeyboardEvent):
        (WebCore::KeyboardEvent::charCode const):
        * dom/KeyboardEvent.h:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.h:
        * dom/MessageEvent.idl:
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::MouseEvent):
        (WebCore::MouseEvent::initMouseEvent):
        (WebCore::MouseEvent::initMouseEventQuirk):
        * dom/MouseEvent.h:
        * dom/MouseEvent.idl:
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::MouseRelatedEvent):
        (WebCore::MouseRelatedEvent::init):
        (WebCore::MouseRelatedEvent::frameViewFromWindowProxy):
        (WebCore::MouseRelatedEvent::initCoordinates):
        (WebCore::MouseRelatedEvent::documentToAbsoluteScaleFactor const):
        (WebCore::MouseRelatedEvent::computePageLocation):
        (WebCore::MouseRelatedEvent::locationInRootViewCoordinates const):
        * dom/MouseRelatedEvent.h:
        * dom/Node.cpp:
        * dom/SimulatedClick.cpp:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::createForDrop):
        (WebCore::TextEvent::createForDictation):
        (WebCore::TextEvent::TextEvent):
        (WebCore::TextEvent::initTextEvent):
        * dom/TextEvent.h:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.cpp:
        (WebCore::UIEvent::UIEvent):
        (WebCore::UIEvent::initUIEvent):
        * dom/UIEvent.h:
        (WebCore::UIEvent::create):
        (WebCore::UIEvent::view const):
        * dom/UIEvent.idl:
        * dom/UIEventInit.h:
        * dom/UIEventInit.idl:
        * dom/UIEventWithKeyState.h:
        (WebCore::UIEventWithKeyState::UIEventWithKeyState):
        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent):
        (WebCore::WheelEvent::create):
        (WebCore::WheelEvent::initWebKitWheelEvent):
        * dom/WheelEvent.h:
        * dom/WheelEvent.idl:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::insertDictatedText):
        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::setComposition):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::namedItem):
        * html/HTMLDocument.h:
        * html/HTMLDocument.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::contentWindow const):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::namedItem):
        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/ImageDocument.cpp:
        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent):

2018-04-27  Nan Wang  <n_wang@apple.com>

        AX: Accessibility needs to know which part of the content view is visible on iOS
        https://bugs.webkit.org/show_bug.cgi?id=185085
        <rdar://problem/39801363>

        Reviewed by Chris Fleizach.

        Exposed unobscuredContentRect() to iOS accessibility object wrapper.

        Test: accessibility/ios-simulator/unobscured-content-rect.html

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

2018-04-27  Simon Fraser  <simon.fraser@apple.com>

        Refactor filter list checking code
        https://bugs.webkit.org/show_bug.cgi?id=185087

        Reviewed by Alan Bujtas.

        Deduplicate code between filter and backdrop-filter for checking whether function lists
        match, by making a shared function that takes a std::function.
        
        The call sites have to declare the return type (-> const FilterOperations&) to avoid std::function
        converting the return type into a value.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::checkForMatchingFilterFunctionLists const):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingFilterFunctionLists):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingBackdropFilterFunctionLists):
        * animation/KeyframeEffectReadOnly.h:
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists const):
        (WebCore::KeyframeAnimation::checkForMatchingFilterFunctionLists):
        (WebCore::KeyframeAnimation::checkForMatchingBackdropFilterFunctionLists):
        * page/animation/KeyframeAnimation.h:

2018-04-27  Chris Dumez  <cdumez@apple.com>

        Regression(r222392?): Events can have a negative timestamp which causes app breakage
        https://bugs.webkit.org/show_bug.cgi?id=185040
        <rdar://problem/39638051>

        Reviewed by Wenson Hsieh.

        The real fix is in UIKit when generating the touch timestamps. However, this patch
        does some hardening to make sure that Event.timestamp can never return a negative
        value even if something goes wrong.

        * dom/Event.cpp:
        (WebCore::Event::timeStampForBindings const):

2018-04-27  Christopher Reid  <chris.reid@sony.com>

        URL::appendEncodedHostName is using the deprecated uidna_IDNToASCII function
        https://bugs.webkit.org/show_bug.cgi?id=184836

        Reviewed by Alex Christensen.

        Update URL::appendEncodedHostName to use uidna_nameToASCII as done in r208902.

        Test: LayoutTests\fast\url\url-hostname-encoding.html

        * platform/URL.cpp:

2018-04-27  Youenn Fablet  <youenn@apple.com>

        CachedRawResource is not handling incremental data computation correctly
        https://bugs.webkit.org/show_bug.cgi?id=184936
        <rdar://problem/38798141>

        Reviewed by Darin Adler.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer): Fixing style.

2018-04-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement BlockFormattingContext::layout logic and its dependencies
        https://bugs.webkit.org/show_bug.cgi?id=185024

        Reviewed by Antti Koivisto.

        This patch implements the logic for block formatting context according to
        https://www.w3.org/TR/CSS22/visuren.html#block-formatting

        1. Traverse the tree iteratively (in post-order fashion) and compute the width/static position for the containers as
        we visit the descendant nodes until we hit a leaf node.
        2. Compute the position/geometry of the leaf node and move over to its sibling(s).
        3. Finalize the container's height/final position as we climb back on the tree.
        4. Run layout on the out-of-flow descendants.  

        Note that subtrees with a formatting context root need to be laid out completely before moving on to the next box.
        The formatting root box is laid out in the formatting context it lives in, however its descendants get laid out
        in a separate formatting context (excluding out-of-flow boxes that don't belong to the root). 

        * layout/FloatingContext.cpp:
        (WebCore::Layout::FloatingContext::FloatingContext):
        (WebCore::Layout::FloatingContext::computePosition):
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::placeInFlowPositionedChildren const):
        (WebCore::Layout::FormattingContext::layoutOutOfFlowDescendants const):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::establishedFormattingState):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::layout const):
        (WebCore::Layout::BlockFormattingContext::layout): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::layout const):
        (WebCore::Layout::InlineFormattingContext::layout): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:

2018-04-27  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker for XHR/fetch loads
        https://bugs.webkit.org/show_bug.cgi?id=184741

        Reviewed by Chris Dumez.

        Covered by existing tests.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::shouldSetHTTPHeadersToKeep const):
        We need to set this option for CORS done in NetworkProcess.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        Set httpHeadersTokeep when needed (service worker or CORS loads).
        Remove the synchronous disabling of preflight since this is now also done for asynchronous loads.
        (WebCore::DocumentThreadableLoader::checkURLSchemeAsCORSEnabled):
        Helper routine to make the same check for both simple and preflight case.
        This allows more consistent error logging between WK1 and WK2.
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        Skip preflight in case this is done in NetworkProcess.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::isResponseComingFromNetworkProcess):
        (WebCore::DocumentThreadableLoader::redirectReceived):
        Bypass security checks when they are already done in NetworkProcess.
        (WebCore::DocumentThreadableLoader::didFail):
        In case of AccessControl error, it might be due to a CSP check done in NetworkProcess.
        Check it again to enable specific CSP console logging and error reporting.
        (WebCore::DocumentThreadableLoader::loadRequest):
        Recreating the error in case of synchronous loads to be able to log it adequately.
        (WebCore::DocumentThreadableLoader::isDoingSecurityChecksInNetworkProcess const):
        * loader/DocumentThreadableLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkResponseCrossOriginAccessControl):
        Specific handling of SameOrigin credential mode for which cross-origin load will not use any credential.
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        We keep the application headers so that DocumentThreadableLoader does not have to restart a brand new load.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestResource):
        DocumentThreadableLoader is setting referrer and origin directly. Until we fix that, we remove them from the original requests
        as applications are not supposed to set these headers.

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add an experimental feature flag for viewport "min-device-width"
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Add MinDeviceWidthEnabled as a new runtime-enabled feature.

        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):

        Gate the parsing of "min-device-width" on the runtime-enabled feature being flipped on.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setMinDeviceWidthEnabled):
        (WebCore::RuntimeEnabledFeatures::minDeviceWidthEnabled const):

2018-04-27  Simon Fraser  <simon.fraser@apple.com>

        Make color-filter transform gradient colors
        https://bugs.webkit.org/show_bug.cgi?id=185080

        Reviewed by Zalan Bujtas.
        
        In CSSGradientValue::computeStops(), transform the color of each gradient color
        stop through the color filter. Having a color filter makes the gradient uncacheable.
        
        Color filters can add alpha, so we also have to fix up CSSGradientValue::knownToBeOpaque()
        to take a RenderStyle and convert the colors before testing opaqueness. Clean up some related
        functions to take const RenderStyle&.

        Test: css3/color-filters/color-filter-gradients.html

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque):
        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::knownToBeOpaque const):
        * css/CSSFilterImageValue.h:
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::image):
        (WebCore::CSSGradientValue::computeStops):
        (WebCore::CSSGradientValue::knownToBeOpaque const):
        (WebCore::CSSLinearGradientValue::createGradient):
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSGradientValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::knownToBeOpaque const):
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::knownToBeOpaque const):
        * css/CSSImageValue.h:

2018-04-26  Simon Fraser  <simon.fraser@apple.com>

        Fix color-filter to apply to text decorations
        https://bugs.webkit.org/show_bug.cgi?id=185068
        <rdar://problem/39782136>

        Reviewed by Alan Bujtas.
        
        Transform the colors of text shadows, and the shadows of text-decorations through
        the color-filter.
        
        Rather than clone the ShadowData stored on TextPainter and TextDecorationPainter
        (which would have awkward ownership implications) we pass the color filters through
        and just map the color through it before painting.
        
        Re-order the members of TextPainter a little to optimize padding.
        
        Also fix a bug where FilterOperations::transformColor() could transform an invalid
        color to a valid one; we never want this.

        Tests: css3/color-filters/color-filter-text-decoration-shadow.html
               css3/color-filters/color-filter-text-shadow.html

        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::TextDecorationPainter::paintTextDecoration):
        * rendering/TextDecorationPainter.h:
        (WebCore::TextDecorationPainter::setTextShadow):
        (WebCore::TextDecorationPainter::setShadowColorFilter):
        (WebCore::TextDecorationPainter::addTextShadow): Deleted.
        * rendering/TextPainter.cpp:
        (WebCore::ShadowApplier::ShadowApplier):
        (WebCore::TextPainter::paintTextWithShadows):
        (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded): Simplify the logic that only paints the shadow
        on the first iteration.
        (WebCore::TextPainter::paintRange):
        * rendering/TextPainter.h:
        (WebCore::TextPainter::setShadowColorFilter):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows):

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Rename minimumLayoutSize to viewLayoutSize
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        See WebKit/ChangeLog for more information. No change in behavior.

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setViewLayoutSize):

        Remove a FIXME comment that is addressed by this refactoring.

        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthWithMinDeviceWidth const):
        (WebCore::ViewportConfiguration::initialScaleFromSize const):
        (WebCore::ViewportConfiguration::minimumScale const):
        (WebCore::ViewportConfiguration::updateMinimumLayoutSize):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize): Deleted.
        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::viewLayoutSize const):
        (WebCore::ViewportConfiguration::viewSize const): Deleted.

2018-04-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Formatting contexts should create floating states.
        https://bugs.webkit.org/show_bug.cgi?id=185032

        Reviewed by Antti Koivisto.

        This patch implements the logic for sharing floating states across multiple formatting contexts.
        At this point this is mostly about inline formatting contexts. They either create a new floating state
        or inherit it from the parent formatting context.

        * layout/FloatingState.cpp:
        (WebCore::Layout::FloatingState::FloatingState):
        * layout/FloatingState.h:
        (WebCore::Layout::FloatingState::create):
        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        * layout/FormattingContext.h:
        (WebCore::Layout::FormattingContext::layoutContext const):
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        (WebCore::Layout::FormattingState::floatingState const):
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::formattingStateForBox const):
        (WebCore::Layout::LayoutContext::establishedFormattingState):
        (WebCore::Layout::LayoutContext::formattingContext):
        (WebCore::Layout::LayoutContext::formattingState): Deleted.
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        (WebCore::Layout::BlockFormattingContext::createFormattingState const):
        (WebCore::Layout::BlockFormattingContext::createOrFindFloatingState const):
        (WebCore::Layout::BlockFormattingContext::formattingState const): Deleted.
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::createFormattingState const):
        (WebCore::Layout::InlineFormattingContext::createOrFindFloatingState const):
        (WebCore::Layout::InlineFormattingContext::formattingState const): Deleted.
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::formattingContextRoot const):
        * layout/layouttree/LayoutBox.h:

2018-04-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to override default viewport behaviors in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=185050
        <rdar://problem/39624038>

        Reviewed by Tim Horton.

        Currently, in extra zoom mode, there's no way for web pages to opt out of the default viewport behaviors
        (namely, laying out at a larger width and shrinking to fit) when the web view is very tall and narrow. This
        patch adds a new experimental viewport attribute, "min-device-width", that can be used to prevent WebKit from
        automatically clamping the web view width to a greater value for the device width in this scenario.

        Note that after this patch, logic that plumbs a minimumLayoutSize from WKWebView to the viewport configuration
        will need to be renamed to reflect that this size is no longer the minimum layout size, but rather, the view
        size that is used for viewport device dimensions by default. This refactoring will be done in a followup part.

        See per-method comments below for more detail.

        Test: fast/viewport/extrazoom/viewport-change-min-device-width.html

        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        (WebCore::operator<<):
        * dom/ViewportArguments.h:

        Removes `m_forceHorizontalShrinkToFit` (more detail below).

        * page/ViewportConfiguration.cpp:
        (WebCore::computedMinDeviceWidth):
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):

        Instead of directly setting the minimum layout size, setMinimumLayoutSize now first sets the view size (i.e. the
        size we use for `device-width` in the viewport meta tag), and then updates the minimum layout size.

        (WebCore::ViewportConfiguration::shouldOverrideDeviceWidthWithMinDeviceWidth const):

        Replaces `m_forceHorizontalShrinkToFit`. Whether or not we shrink to fit is now determined by whether the
        min-device-width attribute is actively clamping the width of the view.

        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints const):
        (WebCore::ViewportConfiguration::shouldIgnoreScalingConstraintsRegardlessOfContentSize const):
        (WebCore::ViewportConfiguration::updateMinimumLayoutSize):

        Computes and sets the minimum layout size using the view size, taking the minimum device width into account if
        needed.

        (WebCore::ViewportConfiguration::description const):
        (WebCore::ViewportConfiguration::setForceHorizontalShrinkToFit): Deleted.
        * page/ViewportConfiguration.h:

2018-04-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Formatting contexts should take const Box&
        https://bugs.webkit.org/show_bug.cgi?id=185031

        Reviewed by Sam Weinig.

        The formatting root boxes are supposed to be all const. The only reason why
        they are not is because WeakPtr<> does not support const objects yet.
        Use const_cast instead (remove it when WeakPtr<> gains const support).

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        * layout/FormattingContext.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::LayoutContext):
        (WebCore::Layout::LayoutContext::formattingContext):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        * layout/inlineformatting/InlineFormattingContext.h:

2018-04-27  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add layout tree iterators.
        https://bugs.webkit.org/show_bug.cgi?id=185058

        Reviewed by Antti Koivisto.

        They work exactly like the renderer tree iterators.

        * WebCore.xcodeproj/project.pbxproj:
        * layout/layouttree/LayoutAncestorIterator.h: Added.
        (WebCore::Layout::LayoutAncestorIterator<T>::LayoutAncestorIterator):
        (WebCore::Layout::LayoutAncestorIterator<T>::operator):
        (WebCore::Layout::LayoutAncestorIteratorAdapter<T>::LayoutAncestorIteratorAdapter):
        (WebCore::Layout::LayoutAncestorIteratorAdapter<T>::begin const):
        (WebCore::Layout::LayoutAncestorIteratorAdapter<T>::end const):
        (WebCore::Layout::LayoutAncestorIteratorAdapter<T>::first const):
        (WebCore::Layout::ancestorsOfType):
        (WebCore::Layout::lineageOfType):
        * layout/layouttree/LayoutBox.cpp:
        * layout/layouttree/LayoutChildIterator.h: Added.
        (WebCore::Layout::LayoutChildtIterator<T>::LayoutChildtIterator):
        (WebCore::Layout::LayoutChildtIterator<T>::operator):
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::LayoutChildtIteratorAdapter):
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::begin const):
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::end const):
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::first const):
        (WebCore::Layout::LayoutChildtIteratorAdapter<T>::last const):
        (WebCore::Layout::childrenOfType):
        * layout/layouttree/LayoutIterator.h: Added.
        (WebCore::Layout::isLayoutBoxOfType):
        (WebCore::Layout::Traversal::firstChild):
        (WebCore::Layout::Traversal::lastChild):
        (WebCore::Layout::Traversal::nextSibling):
        (WebCore::Layout::Traversal::previousSibling):
        (WebCore::Layout::Traversal::findAncestorOfType):
        (WebCore::Layout::Traversal::nextAncestorSibling):
        (WebCore::Layout::Traversal::nextWithin):
        (WebCore::Layout::Traversal::firstWithin):
        (WebCore::Layout::Traversal::next):
        (WebCore::Layout::LayoutIterator<T>::LayoutIterator):
        (WebCore::Layout::LayoutIterator<T>::traverseNextSibling):
        (WebCore::Layout::LayoutIterator<T>::traverseNext):
        (WebCore::Layout::LayoutIterator<T>::traversePreviousSibling):
        (WebCore::Layout::LayoutIterator<T>::traverseAncestor):
        (WebCore::Layout::LayoutIterator<T>::operator const):
        (WebCore::Layout:: const):
        (WebCore::Layout::= const):

2018-04-27  Commit Queue  <commit-queue@webkit.org>

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

        Broke and made crash some WPE EME tests (Requested by calvaris
        on #webkit).

        Reverted changeset:

        "[EME][GStreamer] Move the decryptor from AppendPipeline to
        PlaybackPipeline."
        https://bugs.webkit.org/show_bug.cgi?id=181855
        https://trac.webkit.org/changeset/231089

2018-04-27  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Move the decryptor from AppendPipeline to PlaybackPipeline.
        https://bugs.webkit.org/show_bug.cgi?id=181855

        Reviewed by Xabier Rodriguez-Calvar.

        The goal of this move is to handle the limitation of SVP (Secure Video Path) memory size.

        When the decryptor is in the AppendPipeline and we use SVP, we buffer in MediaSource queue
        the decrypted GstBuffers that are in SVP memory.
        This behavior cause an out-of-memory error, because we are limited in SVP memory size.

        By moving the decryptor in PlaybackPipeline, we avoid to buffer the decrypted GstBuffers
        which use the SVP memory and we buffer the encrypted GstBuffers that are in system memory.

        This new architecture also allows to start the buffering before obtaining the DRM license
        and it makes easier to manage dynamic change of the license or Key.

        The decryptor is auto plugged by GStreamer playbin in PlaybackPipeline.

        SVP: Secure Video Path also named trusted or protected video path, it is a memory which is
        protected by a hardware access control engine, it is not accessible to other unauthorised
        software or hardware components.

        Tests:
            media/encrypted-media/clearKey/clearKey-cenc-audio-playback-mse.html
            media/encrypted-media/clearKey/clearKey-cenc-video-playback-mse.html

        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptSinkEventHandler):
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::dumpAppendState):
        (WebCore::AppendPipeline::AppendPipeline):
        (WebCore::AppendPipeline::handleNeedContextSyncMessage):
        (WebCore::AppendPipeline::handleAppsrcNeedDataReceived):
        (WebCore::AppendPipeline::setAppendState):
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        (WebCore::AppendPipeline::appsinkNewSample):
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsinkFromAnyThread):
        (WebCore::AppendPipeline::disconnectDemuxerSrcPadFromAppsinkFromAnyThread):
        (WebCore::appendPipelineElementMessageCallback): Deleted.
        (WebCore::AppendPipeline::handleElementMessage): Deleted.
        (WebCore::AppendPipeline::dispatchPendingDecryptionStructure): Deleted.
        (WebCore::AppendPipeline::dispatchDecryptionStructure): Deleted.
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::attemptToDecryptWithInstance):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:

2018-04-27  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Add a new message "decrypt-key-needed" send from the decryptor to the application.
        https://bugs.webkit.org/show_bug.cgi?id=181858

        Reviewed by Xabier Rodriguez-Calvar.

        Add a new message "decrypt-key-needed" that the decryptor can send when it doesn't have an available key.
        This message should be handled by the application in order to dispatch or send the key to the decryptor.
        This patch is a preparation for the patch 181855.
        With the patch 181855, the decryptor will be in the PlaybackPipeline instead of AppendPipeline, thus we can
        get the DRM license or key before to instantiate or load the decryptor plugin in PlaybackPipeline.
        When the decryptor plugin is instantiated or loaded, it should able to ask the application to resend
        the DRM license or key by using this new message "decrypt-key-needed".


        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchCDMInstance):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        (webkitMediaCommonEncryptionDecryptTransformInPlace):

2018-04-26  Justin Fan  <justin_fan@apple.com>

        tex[Sub]Image2D slow when passing in a <canvas>, faster with ImageData.
        https://bugs.webkit.org/show_bug.cgi?id=184843
        <rdar://problem/34898868>

        Reviewed by Simon Fraser.

        On certain test pages passing 2d canvas objects to gl.texSubImage2D, we spend significant time doing an alpha unpremultiplication in FormatConverter::convert on a single thread. 
        For now, I am introducing use of the Accelerate framework to do canvas alpha unpremultiplication, specifically for RGBA8 > RGBA8.
        This improves this rendering path by a factor of ~4. The rest of FormatConverter could use similar improvements; filed https://bugs.webkit.org/show_bug.cgi?id=185064 for these. 

        * platform/graphics/FormatConverter.cpp:
        (WebCore::FormatConverter::convert):

2018-04-26  Simon Fraser  <simon.fraser@apple.com>

        Implement rendering support for the color-filter CSS property
        https://bugs.webkit.org/show_bug.cgi?id=185047
        rdar://problem/39664967

        Reviewed by Tim Horton.
        
        The color-filter property transforms CSS colors just before painting. To support this,
        add to RenderStyle colorByApplyingColorFilter() and visitedDependentColorWithColorFilter().
        At most calls sites that transform colors for rendering, replace calls to
        visitedDependentColor() with visitedDependentColorWithColorFilter(). The few locations
        that don't use visitedDependentColor() (e.g. for shadows) call colorByApplyingColorFilter().
        
        Color transformation is implemented via a new virtual function on FilterOperation;
        BasicColorMatrixFilterOperation overrides this to use a new ColorMatrix class to
        do color math, and BasicComponentTransferFilterOperation to do the equivalent of component
        transfer operations. The math in both cases matches that for SVG filters, with the exception
        that color components are stored as floats through multiple filters and then mapped to
        normal 0-255 color components at the end.

        Tests: css3/color-filters/color-filter-backgrounds-borders.html
               css3/color-filters/color-filter-box-shadow.html
               css3/color-filters/color-filter-brightness.html
               css3/color-filters/color-filter-color-property-list-item.html
               css3/color-filters/color-filter-color-property.html
               css3/color-filters/color-filter-color-text-decorations.html
               css3/color-filters/color-filter-column-rule.html
               css3/color-filters/color-filter-contrast.html
               css3/color-filters/color-filter-current-color.html
               css3/color-filters/color-filter-filter-list.html
               css3/color-filters/color-filter-grayscale.html
               css3/color-filters/color-filter-hue-rotate.html
               css3/color-filters/color-filter-inherits.html
               css3/color-filters/color-filter-invert.html
               css3/color-filters/color-filter-opacity.html
               css3/color-filters/color-filter-outline.html
               css3/color-filters/color-filter-saturate.html
               css3/color-filters/color-filter-sepia.html
               css3/color-filters/color-filter-text-emphasis.html

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::adjustInnerTextStyle const):
        * page/FrameView.cpp:
        (WebCore::FrameView::documentBackgroundColor const):
        * platform/graphics/ColorUtilities.cpp:
        (WebCore::ColorMatrix::ColorMatrix):
        (WebCore::ColorMatrix::makeIdentity):
        (WebCore::ColorMatrix::grayscaleMatrix):
        (WebCore::ColorMatrix::saturationMatrix):
        (WebCore::ColorMatrix::hueRotateMatrix):
        (WebCore::ColorMatrix::sepiaMatrix):
        (WebCore::ColorMatrix::transformColorComponents const):
        * platform/graphics/ColorUtilities.h:
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::BasicColorMatrixFilterOperation::transformColor const):
        (WebCore::BasicComponentTransferFilterOperation::transformColor const):
        * platform/graphics/filters/FilterOperation.h:
        (WebCore::FilterOperation::transformColor const):
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::transformColor const):
        * platform/graphics/filters/FilterOperations.h:
        * rendering/BorderEdge.cpp:
        (WebCore::BorderEdge::getBorderEdgeInfo):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::paintSelection):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        (WebCore::InlineTextBox::paintCompositionUnderline const):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxFillLayers):
        (WebCore::RenderBox::paintBackground):
        (WebCore::RenderBox::getBackgroundPaintedExtent const):
        (WebCore::RenderBox::backgroundIsKnownToBeOpaqueInRect const):
        (WebCore::RenderBox::backgroundHasOpaqueTopLayer const):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::applyBoxShadowForBackground):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::boxShadowShouldBeAppliedToBackground const):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        (WebCore::RenderElement::selectionBackgroundColor const):
        (WebCore::RenderElement::paintFocusRing):
        (WebCore::RenderElement::paintOutline):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::paintColumnBorder):
        (WebCore::RenderFrameSet::paintRowBorder):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintAreaElementFocusRing):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::canDirectlyCompositeBackgroundBackgroundImage):
        (WebCore::RenderLayerBacking::rendererBackgroundColor const):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::rootOrBodyStyleChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemStyle const):
        (RenderMenuList::getItemBackgroundColor const):
        (RenderMenuList::menuStyle const):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::paintColumnRules):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::menuStyle const):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bgColor const):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedStartBorder const):
        (WebCore::RenderTableCell::computeCollapsedEndBorder const):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder const):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder const):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * rendering/TextDecorationPainter.cpp:
        (WebCore::decorationColor):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):
        * rendering/mathml/MathOperator.cpp:
        (WebCore::MathOperator::paint):
        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::paint):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * rendering/mathml/RenderMathMLToken.cpp:
        (WebCore::RenderMathMLToken::paint):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::visitedDependentColorWithColorFilter const):
        (WebCore::RenderStyle::colorByApplyingColorFilter const):
        * rendering/style/RenderStyle.h:

2018-04-26  Mark Lam  <mark.lam@apple.com>

        Gardening: Speculative build fix for Windows.
        https://bugs.webkit.org/show_bug.cgi?id=184976
        <rdar://problem/39723901>

        Not reviewed.

        * cssjit/CSSPtrTag.h:

2018-04-26  Brent Fulgham  <bfulgham@apple.com>

        Show punycode if URL contains Latin small letter o with dot below character
        https://bugs.webkit.org/show_bug.cgi?id=185051
        <rdar://problem/39459297>

        Reviewed by David Kilzer.

        Revise our "lookalike character" logic to include the small Latin o
        with dot below character.

        Test: fast/url/host.html

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2018-04-26  Daniel Bates  <dabates@apple.com>

        Fix the build following r231068
        (https://bugs.webkit.org/show_bug.cgi?id=185002)

        Substitute mainResourceRequest.resourceRequest().url() for mainResourceRequest.url() as the
        latter does not exist.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource):

2018-04-26  Daniel Bates  <dabates@apple.com>

        DocumentLoader::loadMainResource() should WTFMove() the passed ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=185002

        Reviewed by Youenn Fablet and Alex Christensen.

        In r224852 we extracted logic from DocumentLoader::startLoadingMainResource() into a new
        function DocumentLoader::loadMainResource() that could be shared by both DocumentLoader::startLoadingMainResource()
        and the service worker code. As part of this extraction, DocumentLoader::loadMainResource()
        takes a ResourceRequest by rvalue reference, but it never actually takes ownership of this
        ResourceRequest and subsequently makes a copy of it when instantiating a CachedResourceRequest.
        Instead we should WTFMove() the passed request into the CachedResourceRequest.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource):

2018-04-26  Sihui Liu  <sihui_liu@apple.com>

        -[WKHTTPCookieStore deleteCookie:completionHandler:] doesn't delete cookies
        https://bugs.webkit.org/show_bug.cgi?id=184938
        <rdar://problem/34737395>

        Reviewed by Geoffrey Garen.

        When a Cookie object was converted to NSHTTPCookie object, the HTTPOnly property information
        was lost so the delete function cannot find the proper cookie to delete.
        This patch implements a workaround that compares Cookie object instead of NSHTTPCookie 
        object. We might want to add the ability to set HTTPOnly header during conversion if there
        is an easy way to do it later.
        
        New API test: WebKit.WKHTTPCookieStoreHttpOnly

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator== const):
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::deleteCookie):

2018-04-26  Commit Queue  <commit-queue@webkit.org>

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

        Broke test http/tests/security/credentials-main-resource.html
        (Requested by dydz on #webkit).

        Reverted changeset:

        "DocumentLoader::loadMainResource() should WTFMove() the
        passed ResourceRequest"
        https://bugs.webkit.org/show_bug.cgi?id=185002
        https://trac.webkit.org/changeset/231052

2018-04-26  Jer Noble  <jer.noble@apple.com>

        WK_COCOA_TOUCH all the things.
        https://bugs.webkit.org/show_bug.cgi?id=185006

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:

2018-04-26  David Kilzer  <ddkilzer@apple.com>

        Make WAKScrollView delegate a weak property
        <https://webkit.org/b/184799>
        <rdar://problem/39469669>

        Reviewed by Simon Fraser.

        * platform/ios/wak/WAKScrollView.h:
        - Remove `delegate` instance variable declaration.
        - Declare `delegate` property as weak.
        (-[WAKScrollView setDelegate:]): Delete declaration.
        (-[WAKScrollView delegate]): Ditto.
        * platform/ios/wak/WAKScrollView.mm:
        - Synthesize getter/setter methods for `delegate` property.
        (-[WAKScrollView setDelegate:]): Delete implementation.
        (-[WAKScrollView delegate]): Ditto.

2018-04-26  Youenn Fablet  <youenn@apple.com>

        CORS preflight checker should add a console message when preflight load is blocked
        https://bugs.webkit.org/show_bug.cgi?id=185021

        Reviewed by Chris Dumez.

        No change of behavior, adding a JS console message when preflight load is blocked.
        This mirrors what is being done in preflighting done from NetworkProcess.
        Covered by existing tests.

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::notifyFinished):
        (WebCore::CrossOriginPreflightChecker::doPreflight):

2018-04-26  Daniel Bates  <dabates@apple.com>

        DocumentLoader::loadMainResource() should WTFMove() the passed ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=185002

        Reviewed by Youenn Fablet and Alex Christensen.

        In r224852 we extracted logic from DocumentLoader::startLoadingMainResource() into a new
        function DocumentLoader::loadMainResource() that could be shared by both DocumentLoader::startLoadingMainResource()
        and the service worker code. As part of this extraction, DocumentLoader::loadMainResource()
        takes a ResourceRequest by rvalue reference, but it never actually takes ownership of this
        ResourceRequest and subsequently makes a copy of it when instantiating a CachedResourceRequest.
        Instead we should WTFMove() the passed request into the CachedResourceRequest.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource):

2018-04-26  Per Arne Vollan  <pvollan@apple.com>

        Disable content filtering in minimal simulator mode
        https://bugs.webkit.org/show_bug.cgi?id=185027
        <rdar://problem/39736091>

        Reviewed by Jer Noble.

        * Configurations/FeatureDefines.xcconfig:

2018-04-25  Brent Fulgham  <bfulgham@apple.com>

        Add port 548 (afpovertcp) to port blacklist
        https://bugs.webkit.org/show_bug.cgi?id=185000
        <rdar://problem/39540481>

        Reviewed by David Kilzer.

        Tested by security/block-test.html.

        * platform/URL.cpp:
        (WebCore::portAllowed):Also block port 548.

2018-04-26  Andy VanWagoner  <thetalecrafter@gmail.com>

        [INTL] Implement Intl.PluralRules
        https://bugs.webkit.org/show_bug.cgi?id=184312

        Reviewed by JF Bastien.

        Added Intl.PluralRules feature flag.

        Test: js/intl-pluralrules.html

        * Configurations/FeatureDefines.xcconfig:

2018-04-15  Darin Adler  <darin@apple.com>

        [Cocoa] Adopt CCRSAGetCRTComponents and stop using CCBigNum
        https://bugs.webkit.org/show_bug.cgi?id=184637

        Reviewed by Alexey Proskuryakov.

        * crypto/CommonCryptoUtilities.cpp: Compile out WebCore::CCBigNum class if
        HAVE(CCRSAGetCRTComponents) is true.

        * crypto/CommonCryptoUtilities.h: Define HAVE(CCRSAGetCRTComponents) on new
        enough versions of iOS and macOS that have it and add declarations of the
        function for the non-Apple-internal-SDK case. Also don't define the
        WebCore::CCBigNum class if HAVE(CCRSAGetCRTComponents) is true.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents): Use CCRSAGetCRTComponents if present.

2018-04-26  Per Arne Vollan  <pvollan@apple.com>

        Add lazy initialization of caption display mode for videos.
        https://bugs.webkit.org/show_bug.cgi?id=184993

        The call to MACaptionAppearanceGetDisplayType in CaptionUserPreferencesMediaAF::captionDisplayMode()
        is showing up in samples when called from HTMLMediaElement::finishInitialization().

        Reviewed by Eric Carlson.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::finishInitialization):
        (WebCore::HTMLMediaElement::setSelectedTextTrack):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::captionPreferencesChanged):
        (WebCore::HTMLMediaElement::captionDisplayMode):
        * html/HTMLMediaElement.h:

2018-04-26  Zan Dobersek  <zdobersek@igalia.com>

        [GTK][WPE] Initial ASYNC_SCROLLING support
        https://bugs.webkit.org/show_bug.cgi?id=184961

        Reviewed by Carlos Garcia Campos.

        Add CoordinatedGraphics-specific code that will be required for async
        scrolling support. The ScrollingCoordinatorCoordinatedGraphics and
        ScrollingTreeCoordinatedGraphics classes are mostly complete already,
        but the new ScrollingTreeNode-inheriting classes will need further
        work that will have to be done in parallel with other improvements
        planned for the CoordinatedGraphics subsystem.

        While the build-time flag is enabled, the feature is still not enabled
        at runtime due to being marked as unsupported by the DrawingArea
        implementation in the WebKit layer. It would also not work yet if it
        were enabled due to the before-mentioned pending changes.

        Various build fixes that address non-Cocoa usage of ASYNC_SCROLLING
        code are included.

        * Sources.txt: Add AsyncScrollingCoordinator.cpp to build.
        * SourcesCocoa.txt:
        * SourcesGTK.txt: Add new files to build.
        * SourcesWPE.txt: Ditto.
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        Guard setStateScrollingNodeSnapOffsetsAsFloat() with CSS_SCROLL_SNAP.
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        * page/scrolling/ThreadedScrollingTree.h:
        currentSnapPointIndicesDidChange() method is only invoked in
        Cocoa-specific code, and its implementation calls Cocoa-specific method
        on the AsyncScrollingCoordinator class.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::~ScrollingCoordinatorCoordinatedGraphics):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::pageDestroyed):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::handleWheelEvent):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::commitTreeState):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: Added.
        * page/scrolling/coordinatedgraphics/ScrollingTreeCoordinatedGraphics.cpp: Added.
        (WebCore::ScrollingTreeCoordinatedGraphics::create):
        (WebCore::ScrollingTreeCoordinatedGraphics::ScrollingTreeCoordinatedGraphics):
        (WebCore::ScrollingTreeCoordinatedGraphics::createScrollingTreeNode):
        * page/scrolling/coordinatedgraphics/ScrollingTreeCoordinatedGraphics.h: Added.
        * page/scrolling/coordinatedgraphics/ScrollingTreeFixedNode.cpp: Added.
        (WebCore::ScrollingTreeFixedNode::create):
        (WebCore::ScrollingTreeFixedNode::ScrollingTreeFixedNode):
        (WebCore::ScrollingTreeFixedNode::~ScrollingTreeFixedNode):
        (WebCore::ScrollingTreeFixedNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeFixedNode::updateLayersAfterAncestorChange):
        * page/scrolling/coordinatedgraphics/ScrollingTreeFixedNode.h: Added.
        * page/scrolling/coordinatedgraphics/ScrollingTreeFrameScrollingNodeCoordinatedGraphics.cpp: Added.
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::create):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::ScrollingTreeFrameScrollingNodeCoordinatedGraphics):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::handleWheelEvent):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::scrollPosition const):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::setScrollPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::setScrollLayerPosition):
        (WebCore::ScrollingTreeFrameScrollingNodeCoordinatedGraphics::updateLayersAfterViewportChange):
        * page/scrolling/coordinatedgraphics/ScrollingTreeFrameScrollingNodeCoordinatedGraphics.h: Added.
        * page/scrolling/coordinatedgraphics/ScrollingTreeStickyNode.cpp: Added.
        (WebCore::ScrollingTreeStickyNode::create):
        (WebCore::ScrollingTreeStickyNode::ScrollingTreeStickyNode):
        (WebCore::ScrollingTreeStickyNode::~ScrollingTreeStickyNode):
        (WebCore::ScrollingTreeStickyNode::commitStateBeforeChildren):
        (WebCore::ScrollingTreeStickyNode::updateLayersAfterAncestorChange):
        * page/scrolling/coordinatedgraphics/ScrollingTreeStickyNode.h: Added.
        * platform/PlatformWheelEvent.h: Enable PlatformWheelEventPhase code
        for WPE. Guard latching-specific methods under ASYNC_SCROLLING.
        * platform/TextureMapper.cmake: Two build targets have been moved to
        SourcesGTK.txt and SourcesWPE.txt.

2018-04-25  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE] Build and link against latest WPEBackend and WPEBackend-fdo
        https://bugs.webkit.org/show_bug.cgi?id=184643

        Reviewed by Žan Doberšek.

        Adapt to single-header WPE includes.

        * platform/graphics/egl/GLContextEGLWPE.cpp:
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:
        * platform/wpe/PlatformPasteboardWPE.cpp:

2018-04-25  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker for all subresource loads except fetch/XHR
        https://bugs.webkit.org/show_bug.cgi?id=184870
        <rdar://problem/39370034>

        Reviewed by Chris Dumez.

        No change of behavior.
        Update CachedResourceLoader error messages to match NetworkProcess error messages.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage const):

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Add support for is<> and downcast<>
        https://bugs.webkit.org/show_bug.cgi?id=185016

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBlockContainer.cpp:
        (WebCore::Layout::BlockContainer::BlockContainer):
        * layout/layouttree/LayoutBlockContainer.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::isContainer const):
        (WebCore::Layout::Box::isBlockContainer const):
        (WebCore::Layout::Box::isInlineBox const):
        (WebCore::Layout::Box::isInlineContainer const):
        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::Container):
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutInlineBox.cpp:
        (WebCore::Layout::InlineBox::InlineBox):
        * layout/layouttree/LayoutInlineBox.h:
        * layout/layouttree/LayoutInlineContainer.cpp:
        (WebCore::Layout::InlineContainer::InlineContainer):
        * layout/layouttree/LayoutInlineContainer.h:

2018-04-25  Chris Dumez  <cdumez@apple.com>

        window.postMessage() / focus() / blur() throw a TypeError when called on a RemoteDOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=184981

        Reviewed by Sam Weinig.

        window.postMessage() / focus() / blur() was throwing a TypeError when called on a RemoteDOMWindow,
        complaining that |this| is not a Window. This was caused by a copy & paste mistake in
        JSDOMWindowCustom where we were calling the JSDOMWindow methods instead of the JSRemoteDOMWindow
        ones.

        No new tests, updated existing tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        * page/RemoteDOMWindow.cpp:
        (WebCore::RemoteDOMWindow::postMessage):
        * page/RemoteDOMWindow.h:
        * page/RemoteDOMWindow.idl:

2018-04-25  Simon Fraser  <simon.fraser@apple.com>

        brightness() filter should default to 1, and not allow negative values
        https://bugs.webkit.org/show_bug.cgi?id=184937

        Reviewed by Dean Jackson.

        Remove the special-casing for brightness() in consumeFilterFunction(), so it now
        follows the same logic as the other color-related filters in not allowing negative
        values.

        Removed the special-casing for brightness() in createFilterOperations() so its default
        value is now 1.

        Modified existing tests.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::allowsValuesGreaterThanOne):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):

2018-04-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Missing closing parenthesis when determining INSTALL_PATH build setting in WebCore.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=184999

        Reviewed by Tim Horton.

        Tweaks a line in WebCore.xcconfig that computes INSTALL_PATH, so that it doesn't use WK_NOT or WK_EMPTY.

        * Configurations/WebCore.xcconfig:

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement LayoutContexet::layout() and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=184951

        Reviewed by Antti Koivisto.

        * layout/FormattingContext.cpp:
        (WebCore::Layout::FormattingContext::FormattingContext):
        (WebCore::Layout::FormattingContext::~FormattingContext):
        (WebCore::Layout::FormattingContext::computeStaticPosition):
        (WebCore::Layout::FormattingContext::computeInFlowPositionedPosition):
        (WebCore::Layout::FormattingContext::computeOutOfFlowPosition):
        (WebCore::Layout::FormattingContext::computeWidth):
        (WebCore::Layout::FormattingContext::computeHeight):
        (WebCore::Layout::FormattingContext::marginTop):
        (WebCore::Layout::FormattingContext::marginLeft):
        (WebCore::Layout::FormattingContext::marginBottom):
        (WebCore::Layout::FormattingContext::marginRight):
        * layout/FormattingContext.h:
        * layout/FormattingState.cpp:
        (WebCore::Layout::FormattingState::FormattingState):
        * layout/FormattingState.h:
        * layout/LayoutContext.cpp:
        (WebCore::Layout::LayoutContext::LayoutContext):
        (WebCore::Layout::LayoutContext::updateLayout):
        (WebCore::Layout::LayoutContext::formattingState):
        (WebCore::Layout::LayoutContext::formattingContext):
        * layout/LayoutContext.h:
        * layout/blockformatting/BlockFormattingContext.cpp:
        (WebCore::Layout::BlockFormattingContext::BlockFormattingContext):
        (WebCore::Layout::BlockFormattingContext::layout):
        (WebCore::Layout::BlockFormattingContext::formattingState const):
        (WebCore::Layout::BlockFormattingContext::computeStaticPosition):
        (WebCore::Layout::BlockFormattingContext::computeWidth):
        (WebCore::Layout::BlockFormattingContext::computeHeight):
        (WebCore::Layout::BlockFormattingContext::marginTop):
        (WebCore::Layout::BlockFormattingContext::marginBottom):
        * layout/blockformatting/BlockFormattingContext.h:
        * layout/blockformatting/BlockFormattingState.cpp:
        (WebCore::Layout::BlockFormattingState::BlockFormattingState):
        * layout/blockformatting/BlockFormattingState.h:
        * layout/inlineformatting/InlineFormattingContext.cpp:
        (WebCore::Layout::InlineFormattingContext::InlineFormattingContext):
        (WebCore::Layout::InlineFormattingContext::layout):
        (WebCore::Layout::InlineFormattingContext::formattingState const):
        * layout/inlineformatting/InlineFormattingContext.h:
        * layout/inlineformatting/InlineFormattingState.cpp:
        (WebCore::Layout::InlineFormattingState::InlineFormattingState):
        * layout/inlineformatting/InlineFormattingState.h:

2018-04-25  Mark Lam  <mark.lam@apple.com>

        Push the definition of PtrTag down to the WTF layer.
        https://bugs.webkit.org/show_bug.cgi?id=184976
        <rdar://problem/39723901>

        Reviewed by Saam Barati.

        No new tests needed.  This is covered by existing tests.

        * cssjit/CSSPtrTag.h:
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext):
        (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext):

2018-04-25  Eric Carlson  <eric.carlson@apple.com>

        [iOS] remove media element parameter from MediaElementSession methods
        https://bugs.webkit.org/show_bug.cgi?id=184992
        <rdar://problem/39731624>

        Reviewed by Jon Lee.

        No new tests, no behavior change.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::allowsInlineMediaPlayback const):
        (WebCore::MediaControlsHost::userGestureRequired const):
        * accessibility/AccessibilityMediaObject.cpp:
        (WebCore::AccessibilityMediaObject::isPlayingInline const):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::canTransitionFromAutoplayToPlay const):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::mediaPlayerDidAddAudioTrack):
        (WebCore::HTMLMediaElement::sourceWasAdded):
        (WebCore::HTMLMediaElement::mediaEngineWasUpdated):
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker):
        (WebCore::HTMLMediaElement::addEventListener):
        (WebCore::HTMLMediaElement::removeEventListener):
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::configureMediaControls):
        (WebCore::HTMLMediaElement::createMediaPlayer):
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted const):
        (WebCore::HTMLMediaElement::updateMediaState):
        (WebCore::HTMLMediaElement::mediaState const):
        (WebCore::HTMLMediaElement::allowsMediaDocumentInlinePlaybackChanged):
        (WebCore::HTMLMediaElement::updateShouldPlay):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseAttribute):
        (WebCore::HTMLVideoElement::supportsFullscreen const):
        (WebCore::HTMLVideoElement::webkitEnterFullscreen):
        (WebCore::HTMLVideoElement::webkitWirelessVideoPlaybackDisabled const):
        (WebCore::HTMLVideoElement::webkitSupportsPresentationMode const):
        (WebCore::HTMLVideoElement::setFullscreenMode):
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const):
        (WebCore::MediaElementSession::dataLoadingPermitted const):
        (WebCore::MediaElementSession::fullscreenPermitted const):
        (WebCore::MediaElementSession::pageAllowsDataLoading const):
        (WebCore::MediaElementSession::pageAllowsPlaybackAfterResuming const):
        (WebCore::MediaElementSession::canShowControlsManager const):
        (WebCore::MediaElementSession::showPlaybackTargetPicker):
        (WebCore::MediaElementSession::hasWirelessPlaybackTargets const):
        (WebCore::MediaElementSession::wirelessVideoPlaybackDisabled const):
        (WebCore::MediaElementSession::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaElementSession::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaElementSession::mediaStateDidChange):
        (WebCore::MediaElementSession::effectivePreloadForElement const):
        (WebCore::MediaElementSession::requiresFullscreenForVideoPlayback const):
        (WebCore::MediaElementSession::allowsAutomaticMediaDataLoading const):
        (WebCore::MediaElementSession::mediaEngineUpdated):
        (WebCore::MediaElementSession::allowsPictureInPicture const):
        * html/MediaElementSession.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::wirelessVideoPlaybackDisabled const):

2018-04-25  Jiewen Tan  <jiewen_tan@apple.com>

        Remove access to keychain from the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184428
        <rdar://problem/13150903>

        Reviewed by Brent Fulgham.

        Part 2.

        This patch move the operation of HTMLKeygenElement from WebContent Process to UI Process.
        Function signedPublicKeyAndChallengeString is therefore marked as WEBCORE_EXPORT. Also, a
        localized string is marked WEBCORE_EXPORT as well to support the API test.

        Covered by existing tests and api tests.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::signedPublicKeyAndChallengeString):
        * dom/Document.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::appendFormData):
        * page/ChromeClient.h:
        * platform/LocalizedStrings.h:
        * platform/SSLKeyGenerator.h:

2018-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        PSON: Don't create a new process when navigating to a blob URL, data URL, and about:blank
        https://bugs.webkit.org/show_bug.cgi?id=184962

        Reviewed by Youenn Fablet.

        Added NavigationAction::treatAsSameOriginNavigation, which signifies WebKit code to avoid creating
        a new WebContent process when navigating to a blob URL, data URL, and about:blank.

        Tests: ProcessSwap.SameOriginBlobNavigation
               ProcessSwap.CrossOriginBlobNavigation
               ProcessSwap.NavigateToAboutBlank
               ProcessSwap.NavigateToDataURL

        * loader/NavigationAction.cpp:
        (WebCore::treatAsSameOriginNavigation):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::treatAsSameOriginNavigation const):

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement Layout::BlockContainer functions.
        https://bugs.webkit.org/show_bug.cgi?id=184994

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBlockContainer.cpp:
        (WebCore::Layout::BlockContainer::BlockContainer):
        (WebCore::Layout::BlockContainer::establishesInlineFormattingContext const):

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement Layout::Container functions.
        https://bugs.webkit.org/show_bug.cgi?id=184988

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutContainer.cpp:
        (WebCore::Layout::Container::Container):
        (WebCore::Layout::Container::firstInFlowChild const):
        (WebCore::Layout::Container::firstInFlowOrFloatingChild const):
        (WebCore::Layout::Container::lastInFlowChild const):
        (WebCore::Layout::Container::lastInFlowOrFloatingChild const):
        (WebCore::Layout::Container::setFirstChild):
        (WebCore::Layout::Container::setLastChild):
        (WebCore::Layout::Container::setOutOfFlowDescendants):
        * layout/layouttree/LayoutContainer.h:
        (WebCore::Layout::Container::firstChild const):
        (WebCore::Layout::Container::lastChild const):
        (WebCore::Layout::Container::hasChild const):
        (WebCore::Layout::Container::hasInFlowChild const):
        (WebCore::Layout::Container::hasInFlowOrFloatingChild const):
        (WebCore::Layout::Container::outOfFlowDescendants):

2018-04-25  Brent Fulgham  <bfulgham@apple.com>

        Don't Block First Party Cookies on Redirects
        https://bugs.webkit.org/show_bug.cgi?id=184948
        <rdar://problem/39534099>

        Reviewed by Youenn Fablet.

        The Navigation scheduler looses the 'requester' value when performing a ScheduledRedirect.

        Test: http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html

        * loader/NavigationScheduler.cpp:

2018-04-25  Youenn Fablet  <youenn@apple.com>

        CachedRawResource is not handling incremental data computation correctly
        https://bugs.webkit.org/show_bug.cgi?id=184936

        Reviewed by Chris Dumez.

        Covered by updated test.

        The previous logic was handling the case of only one additional segment being added to the SharedBuffer.
        In service worker case, a SharedBuffer may contain more than one segment.
        This is fixed by iterating until all new data is sent to clients.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):

2018-04-25  Andy Estes  <aestes@apple.com>

        [Mac] Number of drop items is always 0 when performing a DHTML drag
        https://bugs.webkit.org/show_bug.cgi?id=184943

        Reviewed by Ryosuke Niwa.

        New API test: DragAndDropPasteboardTests.NumberOfValidItemsForDrop

        DragController tracks the number of items to be accepted by a file input element, taking
        into account whether the control is disabled or accepts multiple files. When this number
        changes, WebKit informs the NSDraggingInfo-conforming object passed to -draggingUpdated by
        calling -setNumberOfValidItemsForDrop:. This number is presented to the user in a badge
        rendered next to the dragging item thumbnails.

        When performing a DHTML drag, we don't know how many items the page will accept, so prior
        to this patch we would render a "0" in the badge. This is misleading, because the page is
        more likely to accept all the items (or at least one of them) rather than none of them.

        Let's do the straightforward thing and set numberOfValidItemsForDrop to equal the number of
        files in the drag operation when performing a DHTML file drag.

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):

2018-04-25  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Set route sharing policy when setting audio session category
        https://bugs.webkit.org/show_bug.cgi?id=184979
        <rdar://problem/39709577>

        Reviewed by Jer Noble.

        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::setCategory):

2018-04-25  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix wrong schema checking on r230973
        https://bugs.webkit.org/show_bug.cgi?id=184977

        Did write a wrong condition when making a string.

        Reviewed by Alex Christensen.

        No new tests because test interface is not ready.

        * platform/network/curl/CurlProxySettings.cpp:
        (WebCore::createProxyUrl):

2018-04-25  Youenn Fablet  <youenn@apple.com>

        Make DocumentThreadableLoader error logging more consistent
        https://bugs.webkit.org/show_bug.cgi?id=184853

        Reviewed by Chris Dumez.

        Covered by rebased tests.
        Make EventSource, XHR and Fetch log error messages consistently.
        This patch also prepares consistent error logging between WK1 and WK2 as WK2 NetworkProcess
        will issue more and more errors in places different from WK1.
        This is the reason for SubresourceLoader changes in this patch and DTL/didFail/preflightFailure changes.

        Update ImageLoader error message to be more general than CORS.

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::doPreflight): Add some more logging for consistency between WK1 and WK2.
        (WebCore::CrossOriginPreflightChecker::validatePreflightResponse): Ditto.
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::logErrorAndFail):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFail):
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::logError):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceRequestInitiators.cpp:
        (WebCore::CachedResourceRequestInitiators::CachedResourceRequestInitiators):
        * loader/cache/CachedResourceRequestInitiators.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):
        (WebCore::EventSource::didFail):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFail):

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        [LFC] Implement Layout::Box functions.
        https://bugs.webkit.org/show_bug.cgi?id=184974

        Reviewed by Antti Koivisto.

        * layout/layouttree/LayoutBlockContainer.h:
        * layout/layouttree/LayoutBox.cpp:
        (WebCore::Layout::Box::Box):
        (WebCore::Layout::Box::~Box):
        (WebCore::Layout::Box::establishesFormattingContext const):
        (WebCore::Layout::Box::establishesBlockFormattingContext const):
        (WebCore::Layout::Box::isRelativelyPositioned const):
        (WebCore::Layout::Box::isStickyPositioned const):
        (WebCore::Layout::Box::isAbsolutelyPositioned const):
        (WebCore::Layout::Box::isFixedPositioned const):
        (WebCore::Layout::Box::isFloatingPositioned const):
        (WebCore::Layout::Box::containingBlock const):
        (WebCore::Layout::Box::isDescendantOf const):
        (WebCore::Layout::Box::isAnonymous const):
        (WebCore::Layout::Box::isInlineBlockBox const):
        (WebCore::Layout::Box::isBlockLevelBox const):
        (WebCore::Layout::Box::isInlineLevelBox const):
        (WebCore::Layout::Box::isBlockContainerBox const):
        (WebCore::Layout::Box::isInitialContainingBlock const):
        (WebCore::Layout::Box::nextInFlowSibling const):
        (WebCore::Layout::Box::nextInFlowOrFloatingSibling const):
        (WebCore::Layout::Box::previousInFlowSibling const):
        (WebCore::Layout::Box::previousInFlowOrFloatingSibling const):
        (WebCore::Layout::Box::setParent):
        (WebCore::Layout::Box::setNextSibling):
        (WebCore::Layout::Box::setPreviousSibling):
        (WebCore::Layout::Box::isOverflowVisible const):
        * layout/layouttree/LayoutBox.h:
        (WebCore::Layout::Box::establishesInlineFormattingContext const):
        (WebCore::Layout::Box::isInFlow const):
        (WebCore::Layout::Box::isPositioned const):
        (WebCore::Layout::Box::isInFlowPositioned const):
        (WebCore::Layout::Box::isOutOfFlowPositioned const):
        (WebCore::Layout::Box::isFloatingOrOutOfFlowPositioned const):
        (WebCore::Layout::Box::parent const):
        (WebCore::Layout::Box::nextSibling const):
        (WebCore::Layout::Box::previousSibling const):
        (WebCore::Layout::Box::weakPtrFactory const):
        * layout/layouttree/LayoutContainer.h:
        * layout/layouttree/LayoutInlineBox.h:
        * layout/layouttree/LayoutInlineContainer.h:

2018-04-25  Per Arne Vollan  <pvollan@apple.com>

        [Win] Crash under WebCore::SimpleLineLayout::generateLineBoxTree
        https://bugs.webkit.org/show_bug.cgi?id=184953

        This is possibly a MSVC compiler bug, since a simple rearrangement of the code fixes the crash.
        The crash is only happening in release builds, which also is an indication of this being a
        compiler issue.

        Reviewed by Zalan Bujtas.

        No new tests, covered by existing tests.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::generateLineBoxTree):

2018-04-25  Dean Jackson  <dino@apple.com>

        Make a better flag for system preview, and disable it where necessary
        https://bugs.webkit.org/show_bug.cgi?id=184968
        <rdar://problem/39686506>

        Reviewed by Eric Carlson.

        Use USE(SYSTEM_PREVIEW).

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const):
        * html/HTMLAnchorElement.h:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLPictureElement.cpp:
        * html/HTMLPictureElement.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * testing/Internals.cpp:
        (WebCore::Internals::systemPreviewRelType):
        (WebCore::Internals::isSystemPreviewLink const):
        (WebCore::Internals::isSystemPreviewImage const):

2018-04-25  Zalan Bujtas  <zalan@apple.com>

        Fix project file after r230931.

        * WebCore.xcodeproj/project.pbxproj:

2018-04-25  Miguel Gomez  <magomez@igalia.com>

        [GTK] fast/repaint/fixed-scale.html failing since r230479 "[TexMap] TextureMapperLayer unnecessarily duplicates state in GraphicsLayerTransform"
        https://bugs.webkit.org/show_bug.cgi?id=184780

        Reviewed by Žan Doberšek.

        Initialize the anchorPoint to (0.5, 0.5, 0) in TextureMapperLayer::State.

        Covered by existent tests.

        * platform/graphics/texmap/TextureMapperLayer.h:

2018-04-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Implement MouseEvent.buttons
        https://bugs.webkit.org/show_bug.cgi?id=184913

        Reviewed by Žan Doberšek.

        Add helper function to get the state modifier of a GDK button.

        * platform/gtk/GtkUtilities.cpp:
        (WebCore::stateModifierForGdkButton):
        * platform/gtk/GtkUtilities.h:

2018-04-24  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in ScriptController::canExecuteScripts via CachedSVGFont::ensureCustomFontData during
        Document::updateStyleIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=184950

        Reviewed by Zalan Bujtas.

        Convert an existing ScriptDisallowedScope::EventAllowedScope which only disables the debug assertions
        by ScriptDisallowedScope::DisableAssertionsInScope which also disables the release assertion.

        Because SVG font is loaded in a document isolated from the rest of the page (m_externalSVGDocument),
        there is no security implication to execute scripts in this isolated document.

        Unfortunately, no new tests. I could never make CachedSVGFont::ensureCustomFontData to get called inside
        style resolution with m_externalSVGDocument set to nullptr after many attempts. Even EventAllowedScope
        I added 13 months ago in r211965, which this patch replaces by DisableAssertionsInScope, is not utilized
        by the existing layout tests since removing the assertion doesn't cause any layout test to hit an assertion.

        * dom/ScriptDisallowedScope.h: Updated the comment.
        * loader/cache/CachedSVGFont.cpp:
        (WebCore::CachedSVGFont::ensureCustomFontData): Replaced the asssertion.

2018-04-24  Simon Fraser  <simon.fraser@apple.com>

        visitedDependentColor() should take a CSSPropertyID
        https://bugs.webkit.org/show_bug.cgi?id=184949

        Reviewed by Sam Weinig.
        
        Change RenderStyle::colorIncludingFallback(), RenderStyle::visitedDependentColor()
        and RenderElement::selectionColor() to take CSSPropertyID rather than int.

        No behavior change.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::selectionColor const):
        * rendering/RenderElement.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeCollapsedStartBorder const):
        (WebCore::RenderTableCell::computeCollapsedEndBorder const):
        (WebCore::RenderTableCell::computeCollapsedBeforeBorder const):
        (WebCore::RenderTableCell::computeCollapsedAfterBorder const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback const):
        (WebCore::RenderStyle::visitedDependentColor const):
        * rendering/style/RenderStyle.h:

2018-04-24  Simon Fraser  <simon.fraser@apple.com>

        Add a new "color-filter" CSS property as an experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=184940
        rdar://problem/39664904

        Reviewed by Jon Lee.
        
        Add a new CSS property called "color-filter" as an experimental feature (off by default).
        
        This property specifies a list of filter functions (as specified in https://drafts.fxtf.org/filter-effects/#supported-filter-functions)
        to CSS colors, allowing authors to modify the provided page colors, for example to improve accessibility.
        Filters that move pixels (i.e. blur() and drop-shadow()) are invalid in this property.
        
        Colors will be mapped through the filter functions just before paint time, and gradient stop colors will also be mapped.
        
        This patch adds support for parsing color-filter.

        Test: css3/color-filters/color-filter-parsing.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserMode.h:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::isColorFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilterFunction):
        (WebCore::CSSPropertyParserHelpers::consumeFilter):
        * css/parser/CSSPropertyParserHelpers.h:
        * page/Settings.yaml:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaint const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::mutableColorFilter):
        (WebCore::RenderStyle::colorFilter const):
        (WebCore::RenderStyle::hasColorFilter const):
        (WebCore::RenderStyle::setColorFilter):
        (WebCore::RenderStyle::initialColorFilter):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        (WebCore::StyleRareInheritedData::hasColorFilters const):
        * rendering/style/StyleRareInheritedData.h:

2018-04-24  Simon Fraser  <simon.fraser@apple.com>

        shape-outside and filter styles occur twice in the result of getComputedStyle
        https://bugs.webkit.org/show_bug.cgi?id=184931

        Reviewed by Antti Koivisto.

        CSSPropertyShapeOutside and CSSPropertyFilter were duplicated in the list of computedProperties[]
        used by getComputedStyle. Remove the duplication.
        
        Tested by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:

2018-04-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Extract proxy settings into a separate class to hold advanced information.
        https://bugs.webkit.org/show_bug.cgi?id=184714

        It was simplely structure to hold proxy setting. To support advanced feature of proxy
        such as authentication, more inteligent object is required to store intermediate state
        or errors. That's why we've introduced new class for that purpose.

        Reviewed by Youenn Fablet.

        No new tests because there's no new behavior.

        * platform/Curl.cmake:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::enableProxyIfExists):
        (WebCore::CurlContext::ProxyInfo::url const): Deleted.
        (WebCore::CurlContext::setProxyInfo): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::proxySettings const):
        (WebCore::CurlContext::setProxySettings):
        (WebCore::CurlContext::setProxyUserPass):
        (WebCore::CurlContext::proxyInfo const): Deleted.
        (WebCore::CurlContext::setProxyInfo): Deleted.
        * platform/network/curl/CurlProxySettings.cpp: Added.
        (WebCore::CurlProxySettings::CurlProxySettings):
        (WebCore::CurlProxySettings::rebuildUrl):
        (WebCore::CurlProxySettings::setUserPass):
        (WebCore::protocolIsInSocksFamily):
        (WebCore::getProxyPort):
        (WebCore::createProxyUrl):
        * platform/network/curl/CurlProxySettings.h: Added.
        (WebCore::CurlProxySettings::CurlProxySettings):
        (WebCore::CurlProxySettings::isEmpty const):
        (WebCore::CurlProxySettings::mode const):
        (WebCore::CurlProxySettings::url const):
        (WebCore::CurlProxySettings::ignoreHosts const):
        (WebCore::CurlProxySettings::user const):
        (WebCore::CurlProxySettings::password const):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveHeader):
        * platform/network/curl/CurlResponse.h:
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::ResourceResponse):

2018-04-24  Youenn Fablet  <youenn@apple.com>

        Throw in case of PeerConnection created for detached documents
        https://bugs.webkit.org/show_bug.cgi?id=184921
        <rdar://problem/39629216>

        Reviewed by Eric Carlson.

        Add a check to ensure that page is not null when creating a peer connection backend.
        In that case, the peer connection constructor will later on throw.
        The same for setConfiguration is done.
        Behavior is consistent with Chrome.

        Test: webrtc/pc-detached-document.html

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::createLibWebRTCPeerConnectionBackend):
        (WebCore::LibWebRTCPeerConnectionBackend::LibWebRTCPeerConnectionBackend):
        (WebCore::LibWebRTCPeerConnectionBackend::setConfiguration):
        (WebCore::libWebRTCProvider): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2018-04-24  John Wilander  <wilander@apple.com>

        From-Origin: Support for 'same' and 'same-site' response header, nested frame origin check
        https://bugs.webkit.org/show_bug.cgi?id=184560
        <rdar://problem/38901344>

        Reviewed by Youenn Fablet and Daniel Bates.

        Tests: http/tests/from-origin/document-from-origin-same-accepted.html
               http/tests/from-origin/document-from-origin-same-blocked.html
               http/tests/from-origin/document-from-origin-same-site-accepted.html
               http/tests/from-origin/document-from-origin-same-site-blocked.html
               http/tests/from-origin/document-nested-from-origin-same-accepted.html
               http/tests/from-origin/document-nested-from-origin-same-blocked.html
               http/tests/from-origin/fetch-data-iframe-from-origin-same-blocked.html
               http/tests/from-origin/fetch-from-origin-same-accepted.html
               http/tests/from-origin/fetch-from-origin-same-blocked.html
               http/tests/from-origin/fetch-from-origin-same-site-accepted.html
               http/tests/from-origin/fetch-from-origin-same-site-blocked.html
               http/tests/from-origin/fetch-iframe-from-origin-same-accepted.html
               http/tests/from-origin/fetch-iframe-from-origin-same-blocked.html
               http/tests/from-origin/image-about-blank-from-origin-same-blocked.html
               http/tests/from-origin/image-from-origin-same-accepted.html
               http/tests/from-origin/image-from-origin-same-blocked.html
               http/tests/from-origin/image-from-origin-same-site-accepted.html
               http/tests/from-origin/image-from-origin-same-site-blocked.html
               http/tests/from-origin/redirect-document-from-origin-same-blocked.html
               http/tests/from-origin/redirect-fetch-from-origin-same-blocked.html
               http/tests/from-origin/redirect-image-from-origin-same-blocked.html
               http/tests/from-origin/redirect-script-from-origin-same-blocked.html
               http/tests/from-origin/redirect-xhr-from-origin-same-blocked.html
               http/tests/from-origin/sandboxed-sub-frame-from-origin-same-blocked.html
               http/tests/from-origin/sandboxed-sub-frame-nested-cross-origin-from-origin-same-blocked.html
               http/tests/from-origin/sandboxed-sub-frame-nested-same-origin-from-origin-same-blocked.html
               http/tests/from-origin/script-from-origin-same-accepted.html
               http/tests/from-origin/script-from-origin-same-blocked.html
               http/tests/from-origin/script-from-origin-same-site-accepted.html
               http/tests/from-origin/script-from-origin-same-site-blocked.html
               http/tests/from-origin/top-frame-document-from-origin-same-accepted.php
               http/tests/from-origin/xhr-from-origin-same-accepted.html
               http/tests/from-origin/xhr-from-origin-same-blocked.html
               http/tests/from-origin/xhr-from-origin-same-site-accepted.html
               http/tests/from-origin/xhr-from-origin-same-site-blocked.html

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didFail):
            Outputs the error's localized description in a console message except when the destination
            is FetchOptions::Destination::Serviceworker or FetchOptions::Destination::EmptyString.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setFromOriginResponseHeaderEnabled):
        (WebCore::RuntimeEnabledFeatures::fromOriginResponseHeaderEnabled const):
            Added From-Origin support as an experimental feature.
        * platform/network/HTTPHeaderNames.in:
            Added From-Origin.
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseFromOriginHeader):
            Parses the From-Origin header, currently supporting 'Same' and 'Same-Site.'
        * platform/network/HTTPParsers.h:

2018-04-24  Antti Koivisto  <antti@apple.com>

        Rename LayoutCtx.h/cpp to LayoutContext.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=184922

        Reviewed by Zalan Bujtas.

        To achieve this the existing LayoutContext class is renamed to FrameViewLayoutContext.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/LayoutContext.cpp: Copied from Source/WebCore/layout/LayoutCtx.cpp.
        * layout/LayoutContext.h: Copied from Source/WebCore/layout/LayoutCtx.h.
        * layout/LayoutCtx.cpp: Removed.
        * layout/LayoutCtx.h: Removed.
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldDeferScrollUpdateAfterContentSizeChange):
        (WebCore::FrameView::updateLayoutViewport):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::availableContentSizeChanged):
        * page/FrameView.h:
        * page/FrameViewLayoutContext.cpp: Copied from Source/WebCore/page/LayoutContext.cpp.
        (WebCore::LayoutScope::LayoutScope):
        (WebCore::FrameViewLayoutContext::FrameViewLayoutContext):
        (WebCore::FrameViewLayoutContext::~FrameViewLayoutContext):
        (WebCore::FrameViewLayoutContext::layout):
        (WebCore::FrameViewLayoutContext::runOrScheduleAsynchronousTasks):
        (WebCore::FrameViewLayoutContext::runAsynchronousTasks):
        (WebCore::FrameViewLayoutContext::flushAsynchronousTasks):
        (WebCore::FrameViewLayoutContext::reset):
        (WebCore::FrameViewLayoutContext::needsLayout const):
        (WebCore::FrameViewLayoutContext::setNeedsLayout):
        (WebCore::FrameViewLayoutContext::enableSetNeedsLayout):
        (WebCore::FrameViewLayoutContext::disableSetNeedsLayout):
        (WebCore::FrameViewLayoutContext::scheduleLayout):
        (WebCore::FrameViewLayoutContext::unscheduleLayout):
        (WebCore::FrameViewLayoutContext::scheduleSubtreeLayout):
        (WebCore::FrameViewLayoutContext::layoutTimerFired):
        (WebCore::FrameViewLayoutContext::convertSubtreeLayoutToFullLayout):
        (WebCore::FrameViewLayoutContext::setSubtreeLayoutRoot):
        (WebCore::FrameViewLayoutContext::canPerformLayout const):
        (WebCore::FrameViewLayoutContext::applyTextSizingIfNeeded):
        (WebCore::FrameViewLayoutContext::updateStyleForLayout):
        (WebCore::FrameViewLayoutContext::handleLayoutWithFrameFlatteningIfNeeded):
        (WebCore::FrameViewLayoutContext::startLayoutAtMainFrameViewIfNeeded):
        (WebCore::FrameViewLayoutContext::layoutDelta const):
        (WebCore::FrameViewLayoutContext::addLayoutDelta):
        (WebCore::FrameViewLayoutContext::layoutDeltaMatches):
        (WebCore::FrameViewLayoutContext::layoutState const):
        (WebCore::FrameViewLayoutContext::pushLayoutState):
        (WebCore::FrameViewLayoutContext::pushLayoutStateForPaginationIfNeeded):
        (WebCore::FrameViewLayoutContext::popLayoutState):
        (WebCore::FrameViewLayoutContext::checkLayoutState):
        (WebCore::FrameViewLayoutContext::frame const):
        (WebCore::FrameViewLayoutContext::view const):
        (WebCore::FrameViewLayoutContext::renderView const):
        (WebCore::FrameViewLayoutContext::document const):
        (WebCore::LayoutContext::LayoutContext): Deleted.
        (WebCore::LayoutContext::~LayoutContext): Deleted.
        (WebCore::LayoutContext::layout): Deleted.
        (WebCore::LayoutContext::runOrScheduleAsynchronousTasks): Deleted.
        (WebCore::LayoutContext::runAsynchronousTasks): Deleted.
        (WebCore::LayoutContext::flushAsynchronousTasks): Deleted.
        (WebCore::LayoutContext::reset): Deleted.
        (WebCore::LayoutContext::needsLayout const): Deleted.
        (WebCore::LayoutContext::setNeedsLayout): Deleted.
        (WebCore::LayoutContext::enableSetNeedsLayout): Deleted.
        (WebCore::LayoutContext::disableSetNeedsLayout): Deleted.
        (WebCore::LayoutContext::scheduleLayout): Deleted.
        (WebCore::LayoutContext::unscheduleLayout): Deleted.
        (WebCore::LayoutContext::scheduleSubtreeLayout): Deleted.
        (WebCore::LayoutContext::layoutTimerFired): Deleted.
        (WebCore::LayoutContext::convertSubtreeLayoutToFullLayout): Deleted.
        (WebCore::LayoutContext::setSubtreeLayoutRoot): Deleted.
        (WebCore::LayoutContext::canPerformLayout const): Deleted.
        (WebCore::LayoutContext::applyTextSizingIfNeeded): Deleted.
        (WebCore::LayoutContext::updateStyleForLayout): Deleted.
        (WebCore::LayoutContext::handleLayoutWithFrameFlatteningIfNeeded): Deleted.
        (WebCore::LayoutContext::startLayoutAtMainFrameViewIfNeeded): Deleted.
        (WebCore::LayoutContext::layoutDelta const): Deleted.
        (WebCore::LayoutContext::addLayoutDelta): Deleted.
        (WebCore::LayoutContext::layoutDeltaMatches): Deleted.
        (WebCore::LayoutContext::layoutState const): Deleted.
        (WebCore::LayoutContext::pushLayoutState): Deleted.
        (WebCore::LayoutContext::pushLayoutStateForPaginationIfNeeded): Deleted.
        (WebCore::LayoutContext::popLayoutState): Deleted.
        (WebCore::LayoutContext::checkLayoutState): Deleted.
        (WebCore::LayoutContext::frame const): Deleted.
        (WebCore::LayoutContext::view const): Deleted.
        (WebCore::LayoutContext::renderView const): Deleted.
        (WebCore::LayoutContext::document const): Deleted.
        * page/FrameViewLayoutContext.h: Copied from Source/WebCore/page/LayoutContext.h.
        (WebCore::LayoutContext::startDisallowingLayout): Deleted.
        (WebCore::LayoutContext::endDisallowingLayout): Deleted.
        (WebCore::LayoutContext::layoutPhase const): Deleted.
        (WebCore::LayoutContext::isLayoutNested const): Deleted.
        (WebCore::LayoutContext::isLayoutPending const): Deleted.
        (WebCore::LayoutContext::isInLayout const): Deleted.
        (WebCore::LayoutContext::isInRenderTreeLayout const): Deleted.
        (WebCore::LayoutContext::inPaintableState const): Deleted.
        (WebCore::LayoutContext::layoutCount const): Deleted.
        (WebCore::LayoutContext::subtreeLayoutRoot const): Deleted.
        (WebCore::LayoutContext::clearSubtreeLayoutRoot): Deleted.
        (WebCore::LayoutContext::resetFirstLayoutFlag): Deleted.
        (WebCore::LayoutContext::didFirstLayout const): Deleted.
        (WebCore::LayoutContext::setNeedsFullRepaint): Deleted.
        (WebCore::LayoutContext::needsFullRepaint const): Deleted.
        (WebCore::LayoutContext::isPaintOffsetCacheEnabled const): Deleted.
        (WebCore::LayoutContext::layoutDisallowed const): Deleted.
        (WebCore::LayoutContext::isLayoutSchedulingEnabled const): Deleted.
        (WebCore::LayoutContext::inAsynchronousTasks const): Deleted.
        (WebCore::LayoutContext::disablePaintOffsetCache): Deleted.
        (WebCore::LayoutContext::enablePaintOffsetCache): Deleted.
        * page/LayoutContext.cpp: Removed.
        * page/LayoutContext.h: Removed.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::computePaginationInformation):
        (WebCore::LayoutState::establishLineGrid):
        (WebCore::LayoutStateDisabler::LayoutStateDisabler):
        * rendering/LayoutState.h:

2018-04-24  Mark Lam  <mark.lam@apple.com>

        Need to acquire the VM lock before calling toNumber on a JSValue.
        https://bugs.webkit.org/show_bug.cgi?id=184924
        <rdar://problem/39690679>

        Reviewed by Saam Barati.

        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):

2018-04-24  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r221839): Fix requests with FormData containing empty files
        https://bugs.webkit.org/show_bug.cgi?id=184490
        <rdar://problem/39385169>

        Reviewed by Geoffrey Garen.

        We should not append the blob to the FormData when it is a file but has no path. It broke
        the submission since the request was failing to read the file in FormDataStreamCFNet.h:156

        Test: http/tests/local/formdata/send-form-data-with-empty-file.html

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendMultiPartFileValue):

2018-04-24  Zalan Bujtas  <zalan@apple.com>

        Fix project file after r230931.

        * WebCore.xcodeproj/project.pbxproj:

2018-04-24  Jer Noble  <jer.noble@apple.com>

        Don't add system framework paths to FRAMEWORK_SEARCH_PATHS
        https://bugs.webkit.org/show_bug.cgi?id=184786

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove dead fixed layer code
        https://bugs.webkit.org/show_bug.cgi?id=184912

        Reviewed by Michael Catanzaro.

        Remove CoordinatedGraphicsLayer::setFixedToViewport() and the
        corresponding attribute on the CoordinatedGraphicsLayerState struct.
        The method is not called anywhere since r230952.

        CoordinatedGraphicsState struct also loses the scrollPosition attribute
        that also isn't used anymore.

        Changes to GraphicsLayerTextureMapper class mirror those made to
        CoordinatedGraphicsLayer, removing support for the fixed-to-viewport
        attribute. This too was not called from anywhere.

        All that enables us removing fixed-to-viewport handling in the
        TextureMapperLayer class. Along with related changes in the
        CoordinatedGraphicsScene class, we're able to remove a bunch of methods
        and member variables that are not used or needed anymore.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::setFixedToViewport): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::setFixedToViewport): Deleted.
        (WebCore::TextureMapperLayer::isAncestorFixedToViewport const): Deleted.
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::setFixedToViewport): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        (WebCore::CoordinatedGraphicsLayerState::CoordinatedGraphicsLayerState):

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused fixed layout functionality
        https://bugs.webkit.org/show_bug.cgi?id=184908

        Reviewed by Carlos Garcia Campos.

        Ports using the CoordinatedGraphics subsystem don't expose fixed layout
        support. As such, we're able to remove a lot of unused code and
        unnecessary USE(COORDINATED_GRAPHICS) special cases in generic sections
        in both WebCore and WebKit.

        With fixed layout not available for use to users of the GTK+ and WPE
        ports, we can remove the ScrollingCoordinatorCoordinatedGraphics
        implementation, making room for an implementation that inherits from
        AsyncScrollingCoordinator in the future. For that purpose the
        ScrollingCoordinator::create() function is moved into the
        ScrollingCoordinatorCoordinatedGraphics.cpp file already.

        This also enables removing delegatedScrollRequested() method from
        HostWindow and the inheriting ChromeClient interface.

        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        (WebCore::Chrome::delegatedScrollRequested): Deleted.
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::ScrollingCoordinatorCoordinatedGraphics): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::attachToStateTree): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::clearStateTree): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateNodeLayer): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateNodeViewportConstraints): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::requestScrollPositionUpdate): Deleted.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h: Removed.
        * platform/HostWindow.h:

2018-04-24  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal build following r230922
        (https://bugs.webkit.org/show_bug.cgi?id=184737)

        Cast the return value of std::map::size() to a size_t before logging it with format specifier
        "%zu". std::map::size() returns a size_type. According to <http://en.cppreference.com/w/cpp/container/map>
        size_type is "usually a size_t", but it may not be. An Apple Internal debug builder reports
        that size_type = unsigned int != unsigned long = size_t.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):

2018-04-24  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Avoid painting backing stores for zero-opacity layers
        https://bugs.webkit.org/show_bug.cgi?id=184143

        Reviewed by Carlos Garcia Campos.

        Skip generating backing stores for layers that have zero opacity and do
        not animate the opacity value. In the current CoordinatedGraphics system
        this can end up saving loads of memory on Web content that deploys a
        large number of such elements.

        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::shouldHaveBackingStore const):

2018-04-24  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Internal build following r230944
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        * platform/network/mac/CookieJarMac.mm:

2018-04-24  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Mac and iOS build following r230944
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::policyProperties):

2018-04-24  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mac and iOS build following r230944
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::policyProperties):

2018-04-23  Daniel Bates  <dabates@apple.com>

        Implement Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=159464
        <rdar://problem/27196358>

        Reviewed by Brent Fulgham.

        Implements support for Same-Site cookies as per <https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00>.
        The implementation is materially consistent with the spec. though implements the computation
        for a document's "site for cookies" indirectly as part of loading its frame. This is done to
        avoid traversing the frame tree on each subresource request initiated by the document or one
        of its workers. We take advantage of the fact that Web Workers and Service Workers use their
        host document's loader to load resources on their behalf to use the correct "site for cookies"
        for requests (e.g. fetch()) initiating by them without the need to duplicate and store the
        host document's "site for cookies" in the worker's script execution context.

        The implementation differs from the spec. in the handling of about: URLs and the empty URL
        and makes the implementation in WebKit match the behavior of Chrome and Firefox as well as
        consistent with origin inheritance as described in <https://html.spec.whatwg.org/multipage/browsers.html#origin>
        (16 April 2018). Specifically, requests to about:blank, about:srcdoc and the empty URL ("")
        are treated as same-site because these URLs inherit their origin from their owner.

        Tests: http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page.html
               http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-cookies-set-in-about-blank-iframe.html
               http/tests/cookies/same-site/fetch-in-about-blank-page.html
               http/tests/cookies/same-site/fetch-in-cross-origin-iframe.html
               http/tests/cookies/same-site/fetch-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-in-cross-origin-service-worker.html
               http/tests/cookies/same-site/fetch-in-cross-origin-worker.html
               http/tests/cookies/same-site/fetch-in-same-origin-page.html
               http/tests/cookies/same-site/fetch-in-same-origin-service-worker.html
               http/tests/cookies/same-site/fetch-in-same-origin-srcdoc-iframe.html
               http/tests/cookies/same-site/fetch-in-same-origin-worker.html
               http/tests/cookies/same-site/popup-cross-site-post.html
               http/tests/cookies/same-site/popup-cross-site.html
               http/tests/cookies/same-site/popup-same-site-post.html
               http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect.html
               http/tests/cookies/same-site/popup-same-site-via-same-site-redirect.html
               http/tests/cookies/same-site/popup-same-site.html

        * Sources.txt: Add source file SameSiteInfo.cpp.
        * WebCore.xcodeproj/project.pbxproj: Add source files SameSiteInfo.{cpp, h}.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Modified to call SecurityPolicy::shouldInheritSecurityOriginFromOwner().
        (WebCore::Document::shouldInheritContentSecurityPolicyFromOwner const): Ditto.
        (WebCore::shouldInheritSecurityOriginFromOwner): Deleted; moved to SecurityPolicy.
        * dom/Document.h:
        (WebCore::Document::firstPartyForSameSiteCookies const): Added.
        (WebCore::Document::setFirstPartyForSameSiteCookies): Added.
        * loader/CookieJar.cpp:
        (WebCore::sameSiteInfo): Returns the same-site info for the request used to load the specified document.
        (WebCore::cookies): Pass the same-site info down to the platform.
        (WebCore::cookieRequestHeaderFieldProxy): Ditto.
        (WebCore::setCookies): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Add same-site info to the request.
        (WebCore::DocumentLoader::startLoadingMainResource): Update a FIXME comment to explain that
        we can simplify ResourceRequestBase if we can remove the call to addExtraFieldsToMainResourceRequest()
        here. Specifically, we would not need to differentiate between a request with an unspecified
        same-site state (default state of a new request) from a request whose same-site state has
        been explicitly set if we can assume that the same-site state of a request is set exactly
        once. In absence of this guarantee we need an "unspecified" state to avoid overriding existing
        same-site information computed with a null initiating document (the case of a new address bar
        initiated load) from a load initiated by the document associated with this loader.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFirstPartyForCookies): Modified to also update the first party for
        same-site cookies ("site for cookies").
        (WebCore::FrameLoader::load): Add same-site info to the request.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::setOriginalURLForDownloadRequest): Ditto.
        (WebCore::FrameLoader::addExtraFieldsToRequest): If the request does not already have
        same-site info then compute it and add it to the request. Mark main frame main resource
        requests as a "top-site".
        (WebCore::FrameLoader::addSameSiteInfoToRequestIfNeeded): Implements the "'Same-site' and 'cross-site'
        Requests" algorithm from <https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00#section-2.1>.
        (WebCore::createWindow): Add same-site info to the request.
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Ditto.
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner): Moved from Document.cpp.
        * page/SecurityPolicy.h:
        * platform/CookiesStrategy.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::headerValueForVary): Pass the same-site info down to the platform.
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::encode const): Encode same-site bits.
        (WebCore::CookieRequestHeaderFieldProxy::decode): Decode same-site bits.
        * platform/network/PlatformCookieJar.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy): Added.
        (WebCore::ResourceRequestBase::isSameSite const): Added.
        (WebCore::ResourceRequestBase::setIsSameSite): Added.
        (WebCore::ResourceRequestBase::isTopSite const): Added.
        (WebCore::ResourceRequestBase::setIsTopSite): Added.
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::isSameSiteUnspecified const): Added. See comment for DocumentLoader::startLoadingMainResource()
        for more details.
        (WebCore::registrableDomainsAreEqual): Added.
        (WebCore::ResourceRequestBase::encodeBase const): Encode same-site bits.
        (WebCore::ResourceRequestBase::decodeBase): Decode same-site bits.
        * platform/network/SameSiteInfo.cpp: Added.
        (WebCore::SameSiteInfo::create):
        * platform/network/SameSiteInfo.h: Added.
        (WebCore::SameSiteInfo::encode const):
        (WebCore::SameSiteInfo::decode):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::setCookiesFromDOM): Pass Same-Site info down.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::siteForCookies): Added.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Update platform request with same-site info.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.
        (WebCore::siteForCookies): Added.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Update platform request with same-site info.
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookiesForDOM): Pass Same-Site info down.
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::setCookiesFromDOM const): Ditto.
        (WebCore::CookieJarCurlDatabase::cookiesForDOM const): Ditto.
        (WebCore::CookieJarCurlDatabase::cookieRequestHeaderFieldValue const): Ditto.
        (WebCore::CookieJarCurlDatabase::getRawCookies const): Ditto.
        * platform/network/curl/CookieJarCurlDatabase.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest): Ditto.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForURL): Added; shared function to return the cookies based on the specified criterion. 
        (WebCore::setHTTPCookiesForURL): Moved from the bottom of the file to top to be closer to the other
        CFNetwork helper functions. Modified to support fetching same-site cookies.
        (WebCore::httpCookiesForURL): Moved to be under setHTTPCookiesForURL(). Modified to call cookiesForURL().
        Note the SPI used in cookiesForURL() apply the same criterion for whether to fetch secure cookies as we
        were computing here. That is, the CFNetwork SPI only returns secure cookies if the specified URL's scheme
        case-insensitively matches "https".
        (WebCore::cookiesInPartitionForURL): Wrote in terms of cookiesForURL().
        (WebCore::cookiesForSession): Pass the Same-Site info.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Pass std::nullopt for the Same-Site info so that we do not consider the SameSite
        attribute when fetching cookies to delete.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM): Pass the Same-Site info.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker): Set the first party for same site cookies ("site for cookies") to
        the script URL.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Copy the first party for same-site cookies to the
        new document.

2018-04-23  Youenn Fablet  <youenn@apple.com>

        Make WebLoaderStrategy send to NetworkResourceLoader necessary parameters to handle full loads in NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184763

        Reviewed by Chris Dumez.

        No change of behavior yet since we do not use these parameters in NetworkProcess yet.

        Add PreflightPolicy and CSP response headers as ResourceLoaderOptions.
        This allows passing them from DocumentThreadableLoader to WebLoaderStrategy.

        Allow getting the original headers from a SubresourceLoader.
        This allows passing them from DocumentThreadableLoader down to WebLoaderStrategy.

        * Modules/fetch/FetchLoader.cpp:
        (WebCore::FetchLoader::startLoadingBlobURL):
        (WebCore::FetchLoader::start):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        * loader/ResourceLoaderOptions.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::originalHeaders const):
        * loader/SubresourceLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        (WebCore::ThreadableLoaderOptions::isolatedCopy const):
        * loader/ThreadableLoader.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2018-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove WlUniquePtr<wl_display> footgun
        https://bugs.webkit.org/show_bug.cgi?id=184405

        Reviewed by Carlos Garcia Campos.

        WlUniquePtr<wl_display> is a pretty big footgun because there are two different destruction
        functions -- wl_display_disconnect() and wl_display_destroy() -- and which one you need to
        use depends on how the wl_display() was created, and WebKit uses both in different places.
        So WlUniquePtr<wl_display> is pretty unsafe. See bug #176490 for an example of fun caused
        by using it incorrectly.

        Let's use std::unique_ptr with custom deleter functors instead.

        * platform/graphics/wayland/WlUniquePtr.h:

2018-04-23  Antti Koivisto  <antti@apple.com>

        REGRESSION (r220112): reCAPTCHA images render off screen on Twitch.tv app Log In or Sign Up
        https://bugs.webkit.org/show_bug.cgi?id=182859
        <rdar://problem/37595065>

        Reviewed by Zalan Bujtas.

        Roll out this change from the trunk as the issue it fixed no longer occurs.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::orientationEvaluate):
        (WebCore::aspectRatioEvaluate):
        (WebCore::heightEvaluate):
        (WebCore::widthEvaluate):
        * page/FrameView.cpp:
        (WebCore::FrameView::layoutSizeForMediaQuery const): Deleted.
        * page/FrameView.h:
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::handleLayoutWithFrameFlatteningIfNeeded):

2018-04-23  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build following r230921
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        Pass dictionary key name using a string instead of a constant and pass CFURL* to
        siteForCookies().

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2018-04-23  Zalan Bujtas  <zalan@apple.com>

        [LayoutFormattingContext] Initial commit.
        https://bugs.webkit.org/show_bug.cgi?id=184896

        Reviewed by Antti Koivisto.

        This is the initial commit of the new layout component -class definitions only (and mostly public functions).
        See the header files (and Tools/LayoutReloaded project) for more information.

        // Top level layout.
        rootContainer = TreeBuilder::createLayoutTree(document);
        rootDisplayBox = new Display::Box();
        rootDisplayBox->setSize(viewportSize);
        layoutContext = new LayoutContext(rootContainer, rootDisplayBox);
        layoutContext->layout(rootContainer);

        Driven by build time flag (currently off). Not testable yet.

        * Configurations/FeatureDefines.xcconfig:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * layout/BlockFormatting/BlockFormattingContext.cpp: Added.
        * layout/BlockFormatting/BlockFormattingContext.h: Added.
        * layout/BlockFormatting/BlockFormattingState.cpp: Added.
        * layout/BlockFormatting/BlockFormattingState.h: Added.
        * layout/BlockFormatting/BlockMarginCollapse.cpp: Added.
        * layout/BlockFormatting/BlockMarginCollapse.h: Added.
        * layout/DisplayTree/DisplayBox.cpp: Added.
        * layout/DisplayTree/DisplayBox.h: Added.
        * layout/FloatingContext.cpp: Added.
        * layout/FloatingContext.h: Added.
        * layout/FloatingState.cpp: Added.
        * layout/FloatingState.h: Added.
        * layout/FormattingContext.cpp: Added.
        * layout/FormattingContext.h: Added.
        * layout/FormattingState.cpp: Added.
        * layout/FormattingState.h: Added.
        * layout/InlineFormatting/InlineFormattingContext.cpp: Added.
        * layout/InlineFormatting/InlineFormattingContext.h: Added.
        * layout/InlineFormatting/InlineFormattingState.cpp: Added.
        * layout/InlineFormatting/InlineFormattingState.h: Added.
        * layout/LayoutCtx.cpp: Added.
        * layout/LayoutCtx.h: Added.
        * layout/LayoutTree/LayoutBlockContainer.cpp: Added.
        * layout/LayoutTree/LayoutBlockContainer.h: Added.
        * layout/LayoutTree/LayoutBox.cpp: Added.
        * layout/LayoutTree/LayoutBox.h: Added.
        * layout/LayoutTree/LayoutContainer.cpp: Added.
        * layout/LayoutTree/LayoutContainer.h: Added.
        * layout/LayoutTree/LayoutCtx.h: Added.
        * layout/LayoutTree/LayoutInlineBox.cpp: Added.
        * layout/LayoutTree/LayoutInlineBox.h: Added.
        * layout/LayoutTree/LayoutInlineContainer.cpp: Added.
        * layout/LayoutTree/LayoutInlineContainer.h: Added.

2018-04-23  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mac and iOS build after r230921
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        Pass strings for the dictionary key names instead of using an extern constant as the
        latter may not be available on all systems.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setHTTPCookiesForURL):

2018-04-23  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after r230921
        (https://bugs.webkit.org/show_bug.cgi?id=159464)

        Pass Same-Site info through.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::cookieRequestHeaderFieldValue const):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):

2018-04-23  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, speculative macOS build fix attempt.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):

2018-04-23  Daniel Bates  <dabates@apple.com>

        Implement Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=159464
        <rdar://problem/27196358>

        Reviewed by Brent Fulgham.

        Implements support for Same-Site cookies as per <https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00>.
        The implementation is materially consistent with the spec. though implements the computation
        for a document's "site for cookies" indirectly as part of loading its frame. This is done to
        avoid traversing the frame tree on each subresource request initiated by the document or one
        of its workers. We take advantage of the fact that Web Workers and Service Workers use their
        host document's loader to load resources on their behalf to use the correct "site for cookies"
        for requests (e.g. fetch()) initiating by them without the need to duplicate and store the
        host document's "site for cookies" in the worker's script execution context.

        The implementation differs from the spec. in the handling of about: URLs and the empty URL
        and makes the implementation in WebKit match the behavior of Chrome and Firefox as well as
        consistent with origin inheritance as described in <https://html.spec.whatwg.org/multipage/browsers.html#origin>
        (16 April 2018). Specifically, requests to about:blank, about:srcdoc and the empty URL ("")
        are treated as same-site because these URLs inherit their origin from their owner.

        Tests: http/tests/cookies/same-site/fetch-after-navigating-iframe-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-after-top-level-navigation-from-cross-origin-page.html
               http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-cookies-set-in-about-blank-iframe.html
               http/tests/cookies/same-site/fetch-in-about-blank-page.html
               http/tests/cookies/same-site/fetch-in-cross-origin-iframe.html
               http/tests/cookies/same-site/fetch-in-cross-origin-page.html
               http/tests/cookies/same-site/fetch-in-cross-origin-service-worker.html
               http/tests/cookies/same-site/fetch-in-cross-origin-worker.html
               http/tests/cookies/same-site/fetch-in-same-origin-page.html
               http/tests/cookies/same-site/fetch-in-same-origin-service-worker.html
               http/tests/cookies/same-site/fetch-in-same-origin-srcdoc-iframe.html
               http/tests/cookies/same-site/fetch-in-same-origin-worker.html
               http/tests/cookies/same-site/popup-cross-site-post.html
               http/tests/cookies/same-site/popup-cross-site.html
               http/tests/cookies/same-site/popup-same-site-post.html
               http/tests/cookies/same-site/popup-same-site-via-cross-site-redirect.html
               http/tests/cookies/same-site/popup-same-site-via-same-site-redirect.html
               http/tests/cookies/same-site/popup-same-site.html

        * Sources.txt: Add source file SameSiteInfo.cpp.
        * WebCore.xcodeproj/project.pbxproj: Add source files SameSiteInfo.{cpp, h}.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext): Modified to call SecurityPolicy::shouldInheritSecurityOriginFromOwner().
        (WebCore::Document::shouldInheritContentSecurityPolicyFromOwner const): Ditto.
        (WebCore::shouldInheritSecurityOriginFromOwner): Deleted; moved to SecurityPolicy.
        * dom/Document.h:
        (WebCore::Document::firstPartyForSameSiteCookies const): Added.
        (WebCore::Document::setFirstPartyForSameSiteCookies): Added.
        * loader/CookieJar.cpp:
        (WebCore::sameSiteInfo): Returns the same-site info for the request used to load the specified document.
        (WebCore::cookies): Pass the same-site info down to the platform.
        (WebCore::cookieRequestHeaderFieldProxy): Ditto.
        (WebCore::setCookies): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest): Add same-site info to the request.
        (WebCore::DocumentLoader::startLoadingMainResource): Update a FIXME comment to explain that
        we can simplify ResourceRequestBase if we can remove the call to addExtraFieldsToMainResourceRequest()
        here. Specifically, we would not need to differentiate between a request with an unspecified
        same-site state (default state of a new request) from a request whose same-site state has
        been explicitly set if we can assume that the same-site state of a request is set exactly
        once. In absence of this guarantee we need an "unspecified" state to avoid overriding existing
        same-site information computed with a null initiating document (the case of a new address bar
        initiated load) from a load initiated by the document associated with this loader.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setFirstPartyForCookies): Modified to also update the first party for
        same-site cookies ("site for cookies").
        (WebCore::FrameLoader::load): Add same-site info to the request.
        (WebCore::FrameLoader::reload): Ditto.
        (WebCore::FrameLoader::setOriginalURLForDownloadRequest): Ditto.
        (WebCore::FrameLoader::addExtraFieldsToRequest): If the request does not already have
        same-site info then compute it and add it to the request. Mark main frame main resource
        requests as a "top-site".
        (WebCore::FrameLoader::addSameSiteInfoToRequestIfNeeded): Implements the "'Same-site' and 'cross-site'
        Requests" algorithm from <https://tools.ietf.org/html/draft-ietf-httpbis-cookie-same-site-00#section-2.1>.
        (WebCore::createWindow): Add same-site info to the request.
        * loader/FrameLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow): Ditto.
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner): Moved from Document.cpp.
        * page/SecurityPolicy.h:
        * platform/CookiesStrategy.h:
        * platform/network/CacheValidation.cpp:
        (WebCore::headerValueForVary): Pass the same-site info down to the platform.
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::encode const): Encode same-site bits.
        (WebCore::CookieRequestHeaderFieldProxy::decode): Decode same-site bits.
        * platform/network/PlatformCookieJar.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy): Added.
        (WebCore::ResourceRequestBase::isSameSite const): Added.
        (WebCore::ResourceRequestBase::setIsSameSite): Added.
        (WebCore::ResourceRequestBase::isTopSite const): Added.
        (WebCore::ResourceRequestBase::setIsTopSite): Added.
        (WebCore::equalIgnoringHeaderFields):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::isSameSiteUnspecified const): Added. See comment for DocumentLoader::startLoadingMainResource()
        for more details.
        (WebCore::registrableDomainsAreEqual): Added.
        (WebCore::ResourceRequestBase::encodeBase const): Encode same-site bits.
        (WebCore::ResourceRequestBase::decodeBase): Decode same-site bits.
        * platform/network/SameSiteInfo.cpp: Added.
        (WebCore::SameSiteInfo::create):
        * platform/network/SameSiteInfo.h: Added.
        (WebCore::SameSiteInfo::encode const):
        (WebCore::SameSiteInfo::decode):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::setCookiesFromDOM): Pass Same-Site info down.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::siteForCookies): Added.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Update platform request with same-site info.
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Ditto.
        (WebCore::siteForCookies): Added.
        (WebCore::ResourceRequest::doUpdatePlatformRequest): Update platform request with same-site info.
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookiesForDOM): Pass Same-Site info down.
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::setCookiesFromDOM const): Ditto.
        (WebCore::CookieJarCurlDatabase::cookiesForDOM const): Ditto.
        (WebCore::CookieJarCurlDatabase::cookieRequestHeaderFieldValue const): Ditto.
        (WebCore::CookieJarCurlDatabase::getRawCookies const): Ditto.
        * platform/network/curl/CookieJarCurlDatabase.h:
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::createCurlRequest): Ditto.
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForURL): Added; shared function to return the cookies based on the specified criterion.
        (WebCore::setHTTPCookiesForURL): Moved from the bottom of the file to top to be closer to the other
        CFNetwork helper functions. Modified to support fetching same-site cookies.
        (WebCore::httpCookiesForURL): Moved to be under setHTTPCookiesForURL(). Modified to call cookiesForURL().
        Note the SPI used in cookiesForURL() apply the same criterion for whether to fetch secure cookies as we
        were computing here. That is, the CFNetwork SPI only returns secure cookies if the specified URL's scheme
        case-insensitively matches "https".
        (WebCore::cookiesInPartitionForURL): Wrote in terms of cookiesForURL().
        (WebCore::cookiesForSession): Pass the Same-Site info.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::setCookiesFromDOM): Ditto.
        (WebCore::getRawCookies): Ditto.
        (WebCore::deleteCookie): Pass std::nullopt for the Same-Site info so that we do not consider the SameSite
        attribute when fetching cookies to delete.
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM): Pass the Same-Site info.
        (WebCore::cookiesForDOM): Ditto.
        (WebCore::cookieRequestHeaderFieldValue): Ditto.
        (WebCore::getRawCookies): Ditto.
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker): Set the first party for same site cookies ("site for cookies") to
        the script URL.
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource): Copy the first party for same-site cookies to the
        new document.

2018-04-23  Chris Dumez  <cdumez@apple.com>

        HTML String load cannot be prevented by responding 'Cancel' asynchronously in decidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=184848
        <rdar://problem/39145306>

        Reviewed by Brady Eidson.

        When calling loadHTMLString on a WebView, we end up doing a load for 'about:blank'
        with substitute data. In such case, we want to do a regular asynchronous policy
        delegate check, there is no reason we need it to be synchronous. Update our check
        to make sure we only do a synchronous policy check for initial 'about:blank' loads
        that do not have substitute data.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-04-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] 100vw is roughly half of the viewport width in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184871
        <rdar://problem/39477595>

        Reviewed by Andy Estes.

        Currently, when computing CSS viewport units, we use ViewportConfiguration::initialScaleIgnoringContentSize().
        This method computes an initial scale from the layout width and height without relying on any information
        derived from the current content size. This is done to ensure that the content size and viewport dimensions for
        CSS viewport units should not be simultaneously dependent on each other.

        Since shrink-to-fit heuristics depend on content size, we currently assume that shrink-to-fit is disabled when
        computing initialScaleIgnoringContentSize, by always passing in `false` for `shouldIgnoreScalingConstraints`.
        However, in extra zoom mode, the opposite is true: since we force both `m_canIgnoreScalingConstraints` and
        `m_forceHorizontalShrinkToFit` to be `true` in this mode, we will always try to shrink-to-fit regardless of
        content size.

        Because of this shrink-to-fit disparity between `initialScale` and `initialScaleIgnoringContentSize`, viewport
        units in extra zoom mode are currently computed assuming an initial scale set by the page, whereas the real
        viewport is scaled to fit, which causes any lengths computed in terms of vw and vh to be incorrect. To fix this,
        we introduce a version of shouldIgnoreScalingConstraints() that returns `true` iff scaling constraints are
        always ignored, regardless of content size. We then use this in initialScaleIgnoringContentSize, instead of
        always passing in `false` for `shouldIgnoreScalingConstraints`.

        Test: fast/css/extrazoom/viewport-units-shrink-to-fit.html

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::shouldIgnoreScalingConstraintsRegardlessOfContentSize const):
        (WebCore::ViewportConfiguration::initialScaleIgnoringContentSize const):
        * page/ViewportConfiguration.h:

2018-04-23  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Generate inline boxtree using simple line layout runs.
        https://bugs.webkit.org/show_bug.cgi?id=184833

        Reviewed by Antti Koivisto.

        RenderBlockFlow::ensureLineBoxes triggers line layout on the block content to replace
        the simple line layout runs with an inline boxtree. The runs generated by the fast path
        should always match the inline tree boxes.
        In this patch instead of triggering layout, we just convert the simple line runs to
        inline boxes.
        Currently, it works with only one, non-paginated text renderer, but we should be
        able to extend it to all the simple line layout content.   

        Covered by existing tests.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::setHasHyphen):
        (WebCore::InlineBox::setCanHaveLeadingExpansion):
        (WebCore::InlineBox::setCanHaveTrailingExpansion):
        (WebCore::InlineBox::setForceTrailingExpansion):
        (WebCore::InlineBox::setForceLeadingExpansion):
        (WebCore::InlineBox::hasHyphen const):
        (WebCore::InlineBox::canHaveLeadingExpansion const):
        (WebCore::InlineBox::canHaveTrailingExpansion const):
        (WebCore::InlineBox::forceTrailingExpansion const):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderBlockFlow.h:
        * rendering/SimpleLineLayoutFlowContents.h:
        (WebCore::SimpleLineLayout::FlowContents::segmentForRun const):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::canUseForLineBoxTree):
        (WebCore::SimpleLineLayout::initializeInlineBox):
        (WebCore::SimpleLineLayout::generateLineBoxTree):
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.cpp:
        (WebCore::SimpleLineLayout::RunResolver::rangeForLine const):
        * rendering/SimpleLineLayoutResolver.h:

2018-04-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused trajectory cruft in CoordinatedLayerTreeHost, CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=184881

        Reviewed by Michael Catanzaro.

        Remove the redundant findFirstDescendantWithContentsRecursively() and
        setVisibleContentRectTrajectoryVector() methods on the
        CoordinatedGraphicsLayer class.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::findFirstDescendantWithContentsRecursively): Deleted.
        (WebCore::CoordinatedGraphicsLayer::setVisibleContentRectTrajectoryVector): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-04-23  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] TiledBackingStore unnecessarily tracks alpha support value
        https://bugs.webkit.org/show_bug.cgi?id=184880

        Reviewed by Michael Catanzaro.

        Drop the m_supportsAlpha member from the TiledBackingStore class. The
        member value was unused. TiledBackingStore::setSupportsAlpha() method
        is removed.

        TiledBackingStore::setSupportsAlpha() invalidated the backing store,
        so CoordinatedGraphicsLayer::setContentsOpaque() now enforces the same
        behavior by manually updating the m_needsDisplay struct. This means
        that during the following layer flush the backing store is repainted
        in its entirety.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setContentsOpaque):
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setSupportsAlpha): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:

2018-04-23  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Start implementing Audio/VideoTrackPrivateGSTreamer::kind method
        https://bugs.webkit.org/show_bug.cgi?id=184650

        Reviewed by Philippe Normand.

        In the playbin3 case we can assume that if the GstStream is selected by default,
        it is the Main track of that kind.

        No new tests are added as:
            * It relies on playbin3 case which support might be compiled out
            * we already have a few test that are currently disabled in the mediastream
              testsuite. This patch is part of the work to enable them.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::kind const):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::kind const):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2018-04-23  Alicia Boya García  <aboya@igalia.com>

        [MSE] Add allSamplesInTrackEnqueued event
        https://bugs.webkit.org/show_bug.cgi?id=184737

        MediaSource has a .endOfStream() method to signal when there are no more frames
        after the ones currently buffered.

        This bit of data is important for some multimedia frameworks. For instance, in
        GStreamer a stream of frames being decoded should be terminated by a
        'end-of-stream' (EOS) event that has a similar meaning. Some GStreamer elements
        will expect this event in order to work properly under some circumstances.

        Unfortunately currently WebKit provides no mechanism for this: an event of
        sorts should be emitted after no more frames are going to be enqueued to signal
        the end of the stream. The closest mechanism WebKit has for this is
        `markEndOfStream()`, but it's not exactly the same: markEndOfStream() informs
        that -- as far as network buffering is concerned -- we are done; but at that
        point there may still be (and often are) many frames waiting in the
        decodeQueue, so it would be wrong to signal the decoder that there are no more
        frames.

        This patch introduces a new optional method in SourceBufferPrivate,
        `allSamplesInTrackEnqueued(const AtomicString& trackID)` that is called
        whenever the MediaSource is in "ended" state (the user has called
        `MediaSource.endOfStream()`) and the decodeQueue is empty. Media framework
        implementations can use this method to send a EOS event to a decoder that needs
        it.

        Reviewed by Xabier Rodriguez-Calvar.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::streamEndedWithError):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::provideMediaData):
        (WebCore::SourceBuffer::trySignalAllSamplesInTrackEnqueued):
        (WebCore::SourceBuffer::trySignalAllSamplesEnqueued):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        (WebCore::SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued):
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

2018-04-23  Ms2ger  <Ms2ger@igalia.com>

        Avoid uninitialized memory read.
        https://bugs.webkit.org/show_bug.cgi?id=184505
        <rdar://problem/39348325>

        Reviewed by Dean Jackson.

        Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-bounds.html

        * html/ImageBitmap.cpp:
        (WebCore::croppedSourceRectangleWithFormatting):

2018-04-23  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Drop RefCounted inheritance off of TextureMapperBackingStore
        https://bugs.webkit.org/show_bug.cgi?id=184810

        Reviewed by Carlos Garcia Campos.

        Turn TextureMapperBackingStore into a simple interface that doesn't
        inherit from RefCounted<>. Instead, push that inheritance off to the
        classes that implement the TextureMapperBackingStore interface. This
        narrows down the purpose of TextureMapperBackingStore towards a simple
        interface that TextureMapper algorithms can work with.

        TextureMapperLayer has its m_backingStore member variable turn into
        a simple pointer instead of a RefPtr<>. Setter method and call sites of
        that method are updated to reflect that.

        TextureMapperTiledBackingStore now inherits from RefCounted<> directly,
        instead of through TextureMapperBackingStore.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::setBackingStore):
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:

2018-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [AsyncScrolling] Add generic ScrollingThread implementation
        https://bugs.webkit.org/show_bug.cgi?id=184809

        Reviewed by Yusuke Suzuki.

        Add a generic ScrollingThread implementation that internally uses
        RunLoop facilities to run the scrolling thread and dispatch
        callbacks on that thread.

        ScrollingThread::initializeRunLoop() retrieves address of the
        thread-specific RunLoop and signals the Condition object.
        ScrollingThread::wakeUpRunLoop() uses RunLoop::dispatch() to schedule
        callback dispatches on the scrolling thread.

        ScrollingThread::createThreadIfNeeded() mimics Cocoa implementation and
        waits for the RunLoop address to be retrieved before continuing.

        * SourcesGTK.txt: Add to build.
        * SourcesWPE.txt: Ditto.
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::createThreadIfNeeded):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/generic/ScrollingThreadGeneric.cpp: Added.
        (WebCore::ScrollingThread::initializeRunLoop):
        (WebCore::ScrollingThread::wakeUpRunLoop):

2018-04-22  Zan Dobersek  <zdobersek@igalia.com>

        [CoordinatedGraphics] Unused contentsSize, coveredRect attributes in CoordinatedGraphicsState
        https://bugs.webkit.org/show_bug.cgi?id=184811

        Reviewed by Carlos Garcia Campos.

        Remove the unused contentsSize and coveredRect attributes on the
        CoordinatedGraphicsState struct. CoordinatedGraphicsLayer::coverRect()
        method is now unused and can also be removed.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2018-04-21  Daniel Bates  <dabates@apple.com>

        Cleanup CookieRequestHeaderFieldProxy
        https://bugs.webkit.org/show_bug.cgi?id=184868

        Remove extraneous whitespace that I inadvertently added.

        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::decode):

2018-04-21  Daniel Bates  <dabates@apple.com>

        Cleanup CookieRequestHeaderFieldProxy
        https://bugs.webkit.org/show_bug.cgi?id=184868

        Reviewed by Youenn Fablet.

        Simplify the struct CookieRequestHeaderFieldProxy and make it consistent with other structs.
        Among other changes, remove constructors for CookieRequestHeaderFieldProxy as they are
        unnecessary as all supported compilers support non-static data member initializers (NSDMI)
        for aggregates, remove prefix "m_" from the name of fields as this is struct exists for
        convenience and offers no encapsulation and simplify decoding logic of this struct.

        No functionality changed. So, no new tests.

        * loader/CookieJar.cpp:
        (WebCore::cookieRequestHeaderFieldProxy):
        * platform/network/CookieRequestHeaderFieldProxy.h:
        (WebCore::CookieRequestHeaderFieldProxy::encode const):
        (WebCore::CookieRequestHeaderFieldProxy::decode):
        (WebCore::CookieRequestHeaderFieldProxy::CookieRequestHeaderFieldProxy): Deleted.
        * platform/network/SocketStreamHandleImpl.cpp:
        (WebCore::cookieDataForHandshake):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        (WebCore::CookieJarCurlDatabase::cookieRequestHeaderFieldValue const):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):

2018-04-21  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Show a loading indicator after pressing the play button in compact mode
        https://bugs.webkit.org/show_bug.cgi?id=184863
        <rdar://problem/38939468>

        Reviewed by Dean Jackson.

        We now display a loading indicator after pressing the play button when in compact mode. We also update the
        behavior to use assets provided through WebKitAdditions (see webkit.org/b/184862) for the play button and
        the invalid icon. Additionally, we always show a 20% opaque black overlay in the background while any piece
        of user interface is up.

        * Modules/modern-media-controls/controls/compact-activity-indicator.css: Added.
        (button.compact-activity-indicator > picture): The loading indicator asset is a sprite made of 23 frames, so
        we specify the mask size (since all buttons are rendered via a mask) to be 23 * 100% the rendered size. The
        display of the loading indicator is performed with a first intro animation which runs once through the first
        8 frames and then a continuously looping animation going through the remaining frames. We use a frames()
        timing function to achieve the frame-by-frame effect while using only from/to keyframe animations. When we
        fade out, we use a simply opacity fade, which is combined with the spinning animation. We use CSS variables
        to encode both animations so they can be used combined or one at a time without redefining the whole animation
        property.
        (button.compact-activity-indicator.spins > picture): Use the "spins" animation variable when spinning.
        (button.compact-activity-indicator.spins.fades-out > picture): Combine the "spins" and "fades-out" animation
        variables when fading out.
        (@keyframes compact-activity-indicator-intro): Animation going through the first 8 frames of the loading indicator.
        (@keyframes compact-activity-indicator-loop): Animation going through the remaining frames of the loading indicator.
        (@keyframes compact-activity-indicator-fades-out): Animation fading opacity from 1 to 0.
        * Modules/modern-media-controls/controls/compact-activity-indicator.js: Added.
        (CompactActivityIndicator):
        (CompactActivityIndicator.prototype.show): Add the "spins" CSS class to show the control spinning with the intro animation.
        (CompactActivityIndicator.prototype.hide): Add the "fades-out" CSS class to hide the control, removing both this class and
        the "spins" class when the fade-out animation completes.
        * Modules/modern-media-controls/controls/compact-media-controls.css: Added.
        (.media-controls.compact:before): Add a 20% black overlay over the video frame to provide contrast for controls.
        (.media-controls.compact button): Ensure buttons are sized to use the entire video frame so that their hit region
        comprises the whole video frame.
        (.media-controls.compact button > picture): Override default blending styles for a simple solid white mask.
        (.media-controls.compact button:active > picture): Turn off the scale down effect when pressing a button.
        * Modules/modern-media-controls/controls/compact-media-controls.js: Expose a "state" property for the compact media controls,
        which can be exlusively one of three: "paused", "pending" and "invalid".
        (CompactMediaControls.):
        (CompactMediaControls.prototype.get state):
        (CompactMediaControls.prototype.set state):
        (CompactMediaControls.prototype.layout): In the "paused" state, show the play button. In the "pending" state show
        the loading indicator. In the "invalid" state show the invalid button.
        (CompactMediaControls.prototype.get placard): Deleted.
        (CompactMediaControls.prototype.set placard): Deleted.
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/media/compact-media-controls-support.js: Added.
        (CompactMediaControlsSupport.prototype.get mediaEvents):
        (CompactMediaControlsSupport.prototype.handleEvent): Make the controls enter the "paused" state when receiving a "pause"
        event. Make the controls enter the "invalid" state when receiving an "error" event. 
        (CompactMediaControlsSupport.prototype.enable):
        (CompactMediaControlsSupport.prototype.disable):
        (CompactMediaControlsSupport.prototype.buttonWasPressed): Play the media when pressing the play button and make the controls
        enter the "pending" state. When pressing the loading indicator, pause the media and make the controls enter the "paused" state.
        (CompactMediaControlsSupport.prototype._buttons):
        (CompactMediaControlsSupport):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._supportingObjectClasses): Only use CompactMediaControlsSupport as a media controller supporting object
        in the compact mode.
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype.get mediaEvents): This media controller support object no longer needs to deal with compact mode.
        * Modules/modern-media-controls/media/playback-support.js:
        (PlaybackSupport.prototype.syncControl): This media controller support object no longer needs to deal with compact mode.
        (PlaybackSupport):

2018-04-21  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Obtain compact mode icons through WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=184862
        <rdar://problem/39621645>

        Reviewed by Jon Lee.

        * Modules/modern-media-controls/controls/button.js:
        (Button.prototype._updateImageMetrics): Handle PDF assets where the image source's intrinsic size needs
        to be adjusted for the device pixel density.
        (Button):
        * Modules/modern-media-controls/controls/icon-service.js: Expect three additional icons provided through
        WebKitAdditions, including two in the PDF format, so we add support for this format.
        * WebCore.xcodeproj/project.pbxproj: Copy additional assets from the WebKitAdditions build directory should
        any be present.

2018-04-21  Dean Jackson  <dino@apple.com>

        Expose whether you've build with the Apple Internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=184864

        Reviewed by Wenson Hsieh.

        Internals API to let a test know if it is running with the
        Apple internal SDK.

        * testing/Internals.cpp:
        (WebCore::usingAppleInternalSDK const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-20  Nan Wang  <n_wang@apple.com>

        AX: AOM does not work with DOM Level 1 events
        https://bugs.webkit.org/show_bug.cgi?id=184847

        Reviewed by Chris Fleizach.

        Added the accessibility events to the HTML attribute names.

        Test cases are added to the existing layout tests.

        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap):

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r228088): [SOUP] Check TLS errors for WebSockets on GTlsConnection::accept-certificate
        https://bugs.webkit.org/show_bug.cgi?id=184804

        Reviewed by Michael Catanzaro.

        * platform/network/soup/SocketStreamHandleImpl.h: Add a public url getter.
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::acceptCertificateCallback): Call SoupNetworkSession::checkTLSErrors() to decide whether to accept the
        certificate or not.
        (WebCore::connectProgressCallback): Receive the SocketStreamHandle and pass it to acceptCertificateCallback callback.
        (WebCore::socketClientEventCallback): Ditto.
        (WebCore::SocketStreamHandleImpl::create): Always connect to network events.
        (WebCore::wssConnectionAcceptCertificateCallback): Deleted.
        (WebCore::wssSocketClientEventCallback): Deleted.

2018-04-20  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Do TLS error checking on GTlsConnection::accept-certificate
        https://bugs.webkit.org/show_bug.cgi?id=184480

        Reviewed by Michael Catanzaro.

        * platform/network/soup/ResourceError.h: Change tlsError to recieve a failing URL instead of a SoupRequest,
        since the request was only used to get the failing URL.
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError): Use the given failing URL.
        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession): Use ssl-strict when creating the SoupSession to handle the
        certificates ourselves by connecting to GTlsConnection::accept-certificate.
        (WebCore::SoupNetworkSession::checkTLSErrors): Updated to receive a URL, certificate and errors instead of
        receiving a SoupRequest and SoupMessage and extract the url, certirficate and errors from them. Also return the
        optional error directly instead of using a completion handler since the function is always synchronous.
        * platform/network/soup/SoupNetworkSession.h:

2018-04-20  Tim Horton  <timothy_horton@apple.com>

        Adjust geolocation feature flag
        https://bugs.webkit.org/show_bug.cgi?id=184856

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix Windows build after r230875.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurlDatabase.cpp:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229828): web view doesn’t update or respond to resizing until client calls policy decision handler
        https://bugs.webkit.org/show_bug.cgi?id=184210
        <rdar://problem/39072354>

        Reviewed by Wenson Hsieh.

        r229828 tried to have some API tests happy on iOS by freezing the layer tree
        during the navigation policy decision. However, this is observable by the client
        application and a regression from when the policy delegate was synchronous.

        To address the issue, this patch reverts r229828 and instead updates the iOS
        API tests to wait for the next presentation update after navigating
        before interacting with the view.

        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-04-20  Brent Fulgham  <bfulgham@apple.com>

        Limit cookie header access to Network process
        https://bugs.webkit.org/show_bug.cgi?id=184764
        <rdar://problem/36785285>

        Reviewed by Youenn Fablet.

        Revise the handling of cookie request headers so that we don't interact with them in the
        WebContent process. They are only needed for interaction with the server and the network
        process, so we should limit their scope to just the Network process.

        Instead, we should handle a token that represents the cookie headers in the WebContent
        process, which can be converted to the relevant cookie data in the network process when
        needed.

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpenSocketStream):
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage const):
        (WebCore::WebSocketHandshake::clientHandshakeRequest const):
        (WebCore::WebSocketHandshake::clientHandshakeCookieRequestHeaderFieldProxy const):
        (WebCore::WebSocketHandshake::clientHandshakeMessage): Deleted.
        (WebCore::WebSocketHandshake::clientHandshakeRequest): Deleted.
        * Modules/websockets/WebSocketHandshake.h:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CookieJar.cpp:
        (WebCore::cookieRequestHeaderFieldProxy):
        * loader/CookieJar.h:
        * platform/network/CookieRequestHeaderFieldProxy.h: Added.
        (WebCore::CookieRequestHeaderFieldProxy::CookieRequestHeaderFieldProxy):
        (WebCore::CookieRequestHeaderFieldProxy::isolatedCopy const):
        (WebCore::CookieRequestHeaderFieldProxy::encode const):
        (WebCore::CookieRequestHeaderFieldProxy::decode):
        * platform/network/PlatformCookieJar.h:
        * platform/network/SocketStreamHandle.cpp:
        (WebCore::SocketStreamHandle::sendHandshake):
        * platform/network/SocketStreamHandle.h:
        * platform/network/SocketStreamHandleImpl.cpp:
        (WebCore::SocketStreamHandleImpl::platformSendHandshake):
        * platform/network/cf/SocketStreamHandleImpl.h:
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieRequestHeaderFieldValue):
        * platform/network/soup/SocketStreamHandleImpl.h:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Hide Strong Password label when text field is too narrow
        https://bugs.webkit.org/show_bug.cgi?id=184785
        <rdar://problem/38183939>

        Reviewed by Zalan Bujtas.

        We accomplish this illusion by allowing the text field's decorations to wrap, specifying flex
        shrink factors, a flex basis and hiding overflow. Hiding overflow is accomplished by a
        combination of setting "overflow: hidden", "text-overflow: clip", and patching RenderTextControlSingleLine::layout()
        to ensure that the height of the container element is equal to the intrinsic height of the
        inner elements. Because the container is a flex box and we want to vertically center its
        contents we also need to fix up the y-position of the container element as it may have flexed
        as a result of forcing its height to match the intrinsic height of the inner elements.

        * css/html.css:
        (input::-webkit-strong-password-auto-fill-button): Specify a flex-shrink factor and prevent
        wrapping of the "Strong Password" text when flexed.
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerContainer::TextControlInnerContainer): Register for a custom style
        resolution callback so that we can style the container if it is a Strong Password or Strong
        Confirmation Password text field. Ideally we could accomplish this effect with a user agent-
        specific pseudo class together with a selector definition in the user agent style sheet,
        html.css. Unfortunately the style resolver does not seem to apply pseudo classes to
        shadow DOM pseudo elements (why?). Therefore we use a custom style resolution callback to
        achieve the same effect.
        (WebCore::isStrongPasswordTextField): Returns whether the specified DOM element is a Strong
        Password text field.
        (WebCore::TextControlInnerContainer::resolveCustomStyle): Conditionally apply CSS properties
        "flex-wrap: wrap" and overflow: hidden" if the shadow host of this container is a Strong
        Password text field.
        (WebCore::TextControlInnerElement::resolveCustomStyle): Conditionally style the inner text
        if the shadow host of this container is a Strong Password text field. We need to apply these
        styles here as opposed to in html.css for the same reason we need to apply the styles to
        the container in a custom style resolution callback. See the comments for TextControlInnerContainer()
        above for more details
        * html/shadow/TextControlInnerElements.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::resetOverriddenHeight): Added. Incorporates the logic from setNeedsLayoutOnAncestors().
        (WebCore::RenderTextControlSingleLine::layout): Override the height of the container element to
        match the height of the inner elements when this text field is a Strong Password field. We cache
        the container's logical top before adjusting its height so that we can restore it after performing
        a second layout of this renderer. This is needed because we vertically center the elements in this
        renderer and adjusting the height of the container may cause it to flex and re-position along its
        cross axis when the container's height is taller than the inner element's height (e.g. the "Strong
        Password" label wraps to the next line). This re-positioning causes a noticeable jitter when
        transitioning from a field that has a visible "Strong Password" label to one that does not. Caching
        and restoring the logical top of the container element avoids this jitter.
        (WebCore::setNeedsLayoutOnAncestors): Deleted. Moved its implementation into resetOverriddenHeight().

2018-04-20  Dean Jackson  <dino@apple.com>

        Render a badge on system preview images
        https://bugs.webkit.org/show_bug.cgi?id=184854
        <rdar://problem/39615154>

        Reviewed by Tim Horton.

        At paint time, if a RenderImage is an image element
        which is identified as a system preview, then draw
        a little badge in the top right corner.

        It is expected that platforms will override the
        default rendering with something that identifies
        how a system preview will operate. e.g. QuickLook
        on Apple systems.

        Test: system-preview/badge.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect): If we are
        a system preview, call RenderTheme to draw a badge.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSystemPreviewBadge): A default
        implementation that draws a red circle.
        * rendering/RenderTheme.h:

2018-04-20  Brian Burg  <bburg@apple.com>

        Web Inspector: remove some dead code in IdentifiersFactory
        https://bugs.webkit.org/show_bug.cgi?id=184839

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setProcessId): Deleted.
        * inspector/InspectorController.h:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Use WindowProxy in DOMWindow.idl
        https://bugs.webkit.org/show_bug.cgi?id=184820

        Reviewed by Sam Weinig.

        Use WindowProxy in DOMWindow.idl to match the specification more closely.

        * bindings/js/JSWindowProxy.h:
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::window const):
        * bindings/js/WindowProxy.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (NativeToJSValueDOMConvertNeedsState):
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/Document.idl:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):
        (WebCore::DOMWindow::self const):
        (WebCore::DOMWindow::opener const):
        (WebCore::DOMWindow::parent const):
        (WebCore::DOMWindow::top const):
        (WebCore::DOMWindow::open):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Update cross-origin SecurityError messages to not include the target origin
        https://bugs.webkit.org/show_bug.cgi?id=184803
        <rdar://problem/39547724>

        Reviewed by Sam Weinig.

        No new tests, rebaselined existing tests.

        * bindings/js/JSDOMBindingSecurity.cpp:
        (WebCore::canAccessDocument):
        (WebCore::BindingSecurity::shouldAllowAccessToFrame):
        (WebCore::BindingSecurity::shouldAllowAccessToDOMWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::crossDomainAccessErrorMessage):
        (WebCore::DOMWindow::isInsecureScriptAccess):
        * page/DOMWindow.h:
        * page/Location.cpp:
        (WebCore::Location::reload):

2018-04-20  Chris Nardi  <cnardi@chromium.org>

        Update HSL/HSLA parsing to match CSS Color 4
        https://bugs.webkit.org/show_bug.cgi?id=180528
        <rdar://problem/35926675>

        CSS Color 4 specifies a comma optional syntax for HSL/HSLA, as well as allowing angle values for the
        hue and percent alpha values. Update our parsing to match this.

        Reviewed by Simon Fraser.

        This change also updates the import of WPT css-color to test the changes.

        Tests: LayoutTests/imported/w3c/web-platform-tests/css/css-color/hsl{a}-{001-008}.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::parseHSLParameters):
        (WebCore::CSSPropertyParserHelpers::parseColorFunction):
        (WebCore::CSSPropertyParserHelpers::consumeColor):
        * platform/graphics/Color.cpp:
        (WebCore::calcHue):
        (WebCore::makeRGBAFromHSLA):

2018-04-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Injected bundle form client should be notified when editing text fields
        https://bugs.webkit.org/show_bug.cgi?id=184822
        <rdar://problem/38807319>

        Reviewed by Tim Horton.

        Export the constructor and destructor of UserTypingGestureIndicator for use in WebKit (see WebPage.cpp).

        Test: fast/forms/extrazoom/edit-text-field-calls-injected-bundle.html

        * dom/UserTypingGestureIndicator.h:

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Don't put build products into WK_ALTERNATE_WEBKIT_SDK_PATH for engineering builds
        https://bugs.webkit.org/show_bug.cgi?id=184762

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove code for compilers that did not support NSDMI for aggregates
        https://bugs.webkit.org/show_bug.cgi?id=184599

        Reviewed by Per Arne Vollan.

        Remove workaround for earlier Visual Studio versions that did not support non-static data
        member initializers (NSDMI) for aggregates. We have since updated all the build.webkit.org
        and EWS bots to a newer version that supports this feature.

        * Modules/cache/CacheQueryOptions.h:
        (WebCore::CacheQueryOptions::CacheQueryOptions): Deleted.
        * dom/Node.h:
        (WebCore::Node::InsertionType::InsertionType): Deleted.
        (WebCore::Node::RemovalType::RemovalType): Deleted.
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::CMYKAColor::CMYKAColor): Deleted.
        * page/EventHandler.h:
        (WebCore::EventHandler::DragTargetResponse::DragTargetResponse): Deleted.
        * page/animation/CSSAnimationController.h:
        (WebCore::AnimationUpdate::AnimationUpdate): Deleted.
        * platform/graphics/FontSelectionAlgorithm.h:
        (WebCore::FontSelectionRequest::tied const):
        (WebCore::FontSelectionRequest::FontSelectionRequest): Deleted.
        (WebCore::FontSelectionCapabilities::FontSelectionCapabilities): Deleted.
        * platform/mediastream/IceCandidate.h:
        (WebCore::IceCandidate::IceCandidate): Deleted.
        * platform/text/StringWithDirection.h:
        (WebCore::StringWithDirection::StringWithDirection): Deleted.
        * rendering/MarkedText.h:
        (WebCore::MarkedText::MarkedText): Deleted.
        * style/StyleUpdate.h:
        (WebCore::Style::ElementUpdate::ElementUpdate): Deleted.
        (WebCore::Style::ElementUpdates::ElementUpdates): Deleted.
        (WebCore::Style::TextUpdate::TextUpdate): Deleted.

2018-04-20  Youenn Fablet  <youenn@apple.com>

        WebPage sometimes incorrectly rules out PDF as a mime type that can be showed
        https://bugs.webkit.org/show_bug.cgi?id=184369

        Reviewed by Chris Dumez.

        WebPage does need to check for plugins at reception of the response.
        In that case, the page URL is the URL from which we are navigating out.
        Add plugin API to check for plugin availability with an extra URL parameter to cover that case.

        Covered by API test.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::supportsWebVisibleMimeTypeForURL const):
        (WebCore::PluginData::supportsWebVisibleMimeType const):
        * plugins/PluginData.h:

2018-04-20  Daniel Bates  <dabates@apple.com>

        Remove Strong Password decoration when text field type changes
        https://bugs.webkit.org/show_bug.cgi?id=184795
        <rdar://problem/38325108>

        Reviewed by Antti Koivisto.

        Remove the Strong Password decoration when the text field's type changes to avoid interfering
        with web sites that allow a person to show/hide their password.

        Test: fast/forms/auto-fill-button/hide-strong-password-when-field-type-changes.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):

2018-04-20  Javier Fernandez  <jfernandez@igalia.com>

        Update Alignment shorthands to the spec now that they are not ambiguous
        https://bugs.webkit.org/show_bug.cgi?id=184812

        Reviewed by Antti Koivisto.

        Now that the issue [1] about the syntax ambiguity has been resolved we
        don't need to use the custom syntax anymore. The Alignment shorthands
        use now the simple syntax, defined based on the longhands' syntax.

        Since we allow all the values valid for each longhand, we'll update
        in this CL the corresponding web platform tests. Additionally, this CL
        updates also the shorthand serialization tests [2], which didn't
        consider the new value 'legacy' for justify-items (and place-items) due
        to the bug [3] Firefox still has pending to be fixed.

        [1] https://github.com/w3c/csswg-drafts/issues/1001
        [2] css/css-align/default-alignment/shorthand-serialization-001.html
        [3] https://bugzilla.mozilla.org/show_bug.cgi?id=1363875

        Tests: imported/w3c/web-platform-tests/css/css-align/default-alignment/shorthand-serialization-001.html
               imported/w3c/web-platform-tests/css/css-align/gaps/gap-normal-computed-001.html
               imported/w3c/web-platform-tests/css/css-align/gaps/gap-normal-used-001.html
               imported/w3c/web-platform-tests/css/css-align/gaps/gap-normal-used-002.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::consumePlaceContentShorthand): Using the justify-content and align-content parsing logic to parse the shorthand.
        (WebCore::CSSPropertyParser::consumePlaceItemsShorthand): Using the justify-items and align-items parsing logic to parse the shorthand.
        (WebCore::CSSPropertyParser::consumePlaceSelfShorthand): Using the justify-self and align-self parsing logic to parse the shorthand.

2018-04-20  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r230117.

        Broke find-in-page for PDFs

        Reverted changeset:

        "ASSERTION FAILED: ASSERT(!containsImage ||
        MIMETypeRegistry::isSupportedImageResourceMIMEType([resource
        MIMEType])) in -[NSPasteboard(WebExtras)
        _web_writePromisedRTFDFromArchive:containsImage:]"
        https://bugs.webkit.org/show_bug.cgi?id=184161
        https://trac.webkit.org/changeset/230117

2018-04-20  Eric Carlson  <eric.carlson@apple.com>

        Pausing should clear m_waitingToEnterFullscreen
        https://bugs.webkit.org/show_bug.cgi?id=184831
        <rdar://problem/39602852>

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::pause): Clear m_waitingToEnterFullscreen

2018-04-20  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Disable CA transactions while setting up for fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=184817
        <rdar://problem/39596075>

        Reviewed by Jer Noble.

        This was tested manually as it is not possible to write an automated test for this.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::doSetup): Move the call to disable CA transactions outside
        of the EXTRA_ZOOM_MODE check, the [CATransaction commit] was already unguarded.

2018-04-20  Youenn Fablet  <youenn@apple.com>

        Make PluginData cache its web visible plugins
        https://bugs.webkit.org/show_bug.cgi?id=184421

        Reviewed by Chris Dumez.

        Buffer visible plugins until the page URL changes.
        For that purpose, we now cache the visible plugins and the URL it was computed from in PluginData.

        Update plugin info provider API to pass the URL used to check for plugin visibility.

        No observable change of behavior.

        * loader/EmptyClients.cpp:
        * plugins/PluginData.cpp:
        (WebCore::PluginData::webVisiblePlugins const):
        (WebCore::PluginData::publiclyVisiblePlugins const):
        (WebCore::PluginData::supportsMimeType const):
        * plugins/PluginData.h:
        * plugins/PluginInfoProvider.h:

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix after r230840.

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::attachDebugger):

2018-04-20  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix the Windows build after r230831.

        * bindings/js/JSWindowProxy.cpp:
        (WebCore::JSWindowProxy::create):
        (WebCore::JSWindowProxy::attachDebugger):

2018-04-20  Chris Nardi  <cnardi@chromium.org>

        Omit default value when serializing font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=182382

        Reviewed by Myles C. Maxfield.

        According to the shortest-serialization principle [1], values should be omitted if their omission
        wouldn't change the value of reparsing. As "1"/"on" is the default value for font-feature-settings,
        omit this when serializing, matching the behavior of Firefox and Chrome.

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

        Updated css3/font-feature-settings-parsing.html, fast/css/inherited-properties-rare-text.html,
        and fast/text/font-face-javascript.html.

        * css/CSSFontFeatureValue.cpp:
        (WebCore::CSSFontFeatureValue::customCSSText const):

2018-04-19  Alexey Proskuryakov  <ap@apple.com>

        More WK_ALTERNATE_FRAMEWORKS_DIR adoption in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=184805

        Reviewed by Dan Bernstein.

        * Configurations/WebCoreTestShim.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2018-04-19  Brady Eidson  <beidson@apple.com>

        Make back forward cache work with process swapping.
        <rdar://problem/38676604> and https://bugs.webkit.org/show_bug.cgi?id=184793

        Reviewed by Chris Dumez.

        Covered by API tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:

2018-04-19  Chris Dumez  <cdumez@apple.com>

        Rename JSDOMWindowProxy to JSWindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=184797

        Reviewed by Sam Weinig.

        Rename JSDOMWindowProxy to JSWindowProxy for consistency with WindowProxy.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/IDLTypes.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMConvertWindowProxy.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        (WebCore::JSDOMWindowBase::finishCreation):
        (WebCore::JSDOMWindowBase::proxy const):
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::JSEventTarget::toWrapped):
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        (WebCore::JSRemoteDOMWindowBase::JSRemoteDOMWindowBase):
        (WebCore::toJSRemoteDOMWindow):
        * bindings/js/JSRemoteDOMWindowBase.h:
        * bindings/js/JSWindowProxy.cpp: Renamed from Source/WebCore/bindings/js/JSDOMWindowProxy.cpp.
        (WebCore::JSWindowProxy::JSWindowProxy):
        (WebCore::JSWindowProxy::finishCreation):
        (WebCore::JSWindowProxy::create):
        (WebCore::JSWindowProxy::destroy):
        (WebCore::JSWindowProxy::setWindow):
        (WebCore::JSWindowProxy::attachDebugger):
        (WebCore::JSWindowProxy::wrapped const):
        (WebCore::JSWindowProxy::toWrapped):
        (WebCore::toJS):
        (WebCore::toJSWindowProxy):
        * bindings/js/JSWindowProxy.h: Renamed from Source/WebCore/bindings/js/JSDOMWindowProxy.h.
        (WebCore::toJS):
        (WebCore::toJSWindowProxy):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initScriptForWindowProxy):
        * bindings/js/ScriptController.h:
        * bindings/js/WindowProxy.cpp:
        (WebCore::WindowProxy::createJSWindowProxy):
        (WebCore::WindowProxy::jsWindowProxiesAsVector const):
        (WebCore::WindowProxy::createJSWindowProxyWithInitializedScript):
        * bindings/js/WindowProxy.h:
        (WebCore::WindowProxy::jsWindowProxy):
        (WebCore::WindowProxy::existingJSWindowProxy const):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GenerateHeader):
        (GenerateOverloadDispatcher):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher):
        * page/Frame.cpp:
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didCreateWindowProxy const):
        * page/csp/ContentSecurityPolicy.h:

2018-04-19  Dirk Schulze  <krit@webbkit.org>

        Introduce SVGGeometryElement interface
        https://bugs.webkit.org/show_bug.cgi?id=184768

        Reviewed by Antti Koivisto.

        Start implementing SVGGeometryElement interface from SVG2.
        https://svgwg.org/svg2-draft/types.html#InterfaceSVGGeometryElement

        Start with SVGPathElement only for now. Also, just inferface gets implemented
        by this patch. No new functionality like isPointInFill yet.
        Fix getPointAtLength and make it more restrictive. This follows the spec and
        all other implementations.

        Added additional test scenarios to existing tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetGnuVTableOffsetForType):
        * svg/SVGAllInOne.cpp:
        * svg/SVGGeometryElement.cpp: Added.
        (WebCore::SVGGeometryElement::SVGGeometryElement):
        (WebCore::SVGGeometryElement::isSupportedAttribute):
        (WebCore::SVGGeometryElement::parseAttribute):
        (WebCore::SVGGeometryElement::svgAttributeChanged):
        (WebCore::SVGGeometryElement::createElementRenderer):
        * svg/SVGGeometryElement.h: Added.
        * svg/SVGGeometryElement.idl: Added.
        * svg/SVGGradientElement.cpp:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::parseAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::insertedIntoAncestor):
        (WebCore::SVGPathElement::removedFromAncestor):
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:

2018-04-19  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r227340): ArrayBuffers were not being serialized when sent via MessagePorts
        https://bugs.webkit.org/show_bug.cgi?id=184254
        <rdar://problem/39140200>

        Reviewed by Daniel Bates.

        Add a new encoding method to SerializedScriptValue that includes ArrayBuffers.

        Test: workers/message-port.html

        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::encode const):
        (WebCore::SerializedScriptValue::decode):
        * dom/messageports/MessageWithMessagePorts.h:
        (WebCore::MessageWithMessagePorts::encode const):
        (WebCore::MessageWithMessagePorts::decode):

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-19  Antti Koivisto  <antti@apple.com>

        Don't use RenderTreeBuilder::current() in RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=184794

        Reviewed by Zalan Bujtas.

        Pass the builder as a parameter where needed.

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):
        (WebCore::RenderTreeUpdater::updateTextRenderer):
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownRenderer):
        (WebCore::RenderTreeUpdater::tearDownTextRenderer):
        (WebCore::RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded):
        (WebCore::RenderTreeUpdater::tearDownLeftoverShadowHostChildren):
        * rendering/updating/RenderTreeUpdater.h:
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::RenderTreeUpdater::GeneratedContent::updatePseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::removeBeforePseudoElement):
        (WebCore::RenderTreeUpdater::GeneratedContent::removeAfterPseudoElement):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.h:

2018-04-19  Eric Carlson  <eric.carlson@apple.com>

        Runtime logging during GC can cause crash
        https://bugs.webkit.org/show_bug.cgi?id=184792
        <rdar://problem/39567927>

        Reviewed by Jer Noble.

        Test: media/destructor-logging-crash.html

        * dom/Document.cpp:
        (WebCore::Document::~Document): Clear the logger observer immediately so anything logged
        as a side effect of the destructor won't cause a problem.
        (WebCore::Document::didLogMessage): Create the ConsoleMessage in a task.
        * dom/Document.h:

2018-04-19  Youenn Fablet  <youenn@apple.com>

        Web Inspector backend should get headers & cookies from network process separately from resource requests
        https://bugs.webkit.org/show_bug.cgi?id=184396
        <rdar://problem/38877384>

        Reviewed by Brian Burg.

        Add two new loader strategies to get response and network metrics directly from
        NetworkProcess based on resource loader identifier.
        Use these methods in InspectorNetworkAgent when response/metrics might be filtered.

        Covered by existing tests, in particular http/tests/inspector/network/fetch-network-data.html which would fail
        without this since we are now setting the sourceOrigin for NetworkResourceLoader, which is used to sanitize response headers.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::didReceiveResponse):
        (WebCore::InspectorNetworkAgent::didFinishLoading):
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::responseFromResourceLoaIdentifier):
        (WebCore::LoaderStrategy::networkMetricsFromResourceLoaIdentifier):
        * loader/LoaderStrategy.h:

2018-04-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to extend the height of the layout viewport in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184782
        <rdar://problem/38346712>

        Reviewed by Tim Horton.

        Add a new helper on FrameView to compute an expanded layout viewport size, as well as a new setting for the
        height expansion factor when computing visual viewport dimensions. See WebKit/ChangeLog for more detail.

        Test: fast/visual-viewport/extrazoom/layout-viewport-after-scrolling-and-resizing.html

        * page/FrameView.cpp:
        (WebCore::FrameView::expandedLayoutViewportSize):
        * page/FrameView.h:
        * page/Settings.yaml:

2018-04-19  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229133): decidePolicyForNavigationAction not called for loading an HTML string
        https://bugs.webkit.org/show_bug.cgi?id=184209
        <rdar://problem/39145306>

        Reviewed by Ryosuke Niwa.

        In r229133, we stopped doing navigation policy checks for about:blank because about:blank
        loads need to happen synchronously for Web-compatibility. However, this regressed loading
        an HTML string in a WebView because in such cases, the URL is also about:blank with
        substitute data.

        In this patch, we take a more conservative approach and restore policy checking for
        'about:blank' but using synchronous IPC.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-04-19  Chris Nardi  <cnardi@chromium.org>

        Support calc() in webkit-gradient and cross-fade
        https://bugs.webkit.org/show_bug.cgi?id=182225

        Reviewed by Simon Fraser.

        calc() was previously unsupported in webkit-gradient and webkit-cross-fade, but both should take calc() values.
        Update the code to support calc() values.

        Tests: LayoutTests/css3/calc/cross-fade-calc.html
               LayoutTests/css3/calc/webkit-gradient-calc.html

        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeDeprecatedGradientColorStop):
        (WebCore::CSSPropertyParserHelpers::consumeCrossFade):

2018-04-17  Filip Pizlo  <fpizlo@apple.com>

        The InternalFunction hierarchy should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=184721

        Reviewed by Saam Barati.

        No new tests because no new behavior.

        * bindings/js/WebCoreJSClientData.cpp:
        (WebCore::JSVMClientData::JSVMClientData):
        * bindings/js/WebCoreJSClientData.h:
        (WebCore::JSVMClientData::runtimeMethodSpace):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::subspaceForImpl):
        * bridge/runtime_method.h:

2018-04-19  Brady Eidson  <beidson@apple.com>

        Add globally-unique HistoryItem identifiers (and have WebKit2 adopt them).
        <rdar://problem/39533949> and https://bugs.webkit.org/show_bug.cgi?id=184750

        Reviewed by Ryosuke Niwa.

        No new tests (Refactor, no behavior change).

        In WebCore, we:
        - Add a process-unique "BackForwardItemIdentifier"
        - Make all HistoryItems have such an identifier as a member

        * WebCore.xcodeproj/project.pbxproj:

        * history/BackForwardItemIdentifier.h: Added.
        (WebCore::BackForwardItemIdentifier::logString const):
        (WebCore::operator==):
        (WebCore::BackForwardItemIdentifier::encode const):
        (WebCore::BackForwardItemIdentifier::decode):
        (WebCore::BackForwardItemIdentifier::hash const):
        (WTF::BackForwardItemIdentifierHash::hash):
        (WTF::BackForwardItemIdentifierHash::equal):
        (WTF::HashTraits<WebCore::BackForwardItemIdentifier>::emptyValue):
        (WTF::HashTraits<WebCore::BackForwardItemIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::BackForwardItemIdentifier>::isDeletedValue):

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::generateSequenceNumber):
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::generateSequenceNumber): Deleted.

        * history/HistoryItem.h:
        (WebCore::HistoryItem::create):
        (WebCore::HistoryItem::identifier const):

2018-04-19  Nan Wang  <n_wang@apple.com>

        AX: AOM: respect the accessibility setting for dispatching the accessible events
        https://bugs.webkit.org/show_bug.cgi?id=184619

        Reviewed by Ryosuke Niwa.

        Added accessibilityEventsEnabled as a setting on the page.

        Test: accessibility/ios-simulator/accessibility-events-setting.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::shouldDispatchAccessibilityEvent const):
        * page/Settings.yaml:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setAccessibilityEventsEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Fix build when WK_ALTERNATE_FRAMEWORKS_DIR is set to non-empty value
        https://bugs.webkit.org/show_bug.cgi?id=184693
        <rdar://problem/39491884>

        Reviewed by Tim Horton.

        * Configurations/WebCore.xcconfig:

2018-04-19  Eric Stobbart  <ericstobbart@gmail.com>

        Change MediaSource WebCore to return NewObject for SourceBuffers
        https://bugs.webkit.org/show_bug.cgi?id=184642

        Reviewed by Chris Dumez.

        Minor change inline with IDL documentation

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (): Deleted.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSource.idl:

2018-04-19  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, build fix for Ubuntu LTS GCC
        https://bugs.webkit.org/show_bug.cgi?id=184756

        The variable name "windowProxy" (with auto&) conflicts with the function name "windowProxy".

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::collectIsolatedContexts):

2018-04-19  Manuel Rego Casasnovas  <rego@igalia.com>

        Caret rendered at incorrect location inside empty table cell
        https://bugs.webkit.org/show_bug.cgi?id=85385

        Reviewed by Zalan Bujtas.

        This is based on a previous patch by Shezan Baig <shezbaig.wk@gmail.com>.

        This fixes the position of the caret in empty cells,
        that was painted lower than expected
        (and then modified when you start to edit the cell).

        Ensures that editable table cells have at least one line when
        they are laid out. This ensures that the cell's intrinsic before/after
        padding is calculated correctly, which results in the caret location
        being calculated correctly.

        Test: editing/caret/caret-in-empty-cell.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::hasLineIfEmpty): Override method to consider
        that it has an an empty line if the table cell is editable.
        * rendering/RenderTableCell.h:

2018-04-18  Daniel Bates  <dabates@apple.com>

        Cleanup TextControlInnerElements
        https://bugs.webkit.org/show_bug.cgi?id=184475

        Reviewed by Antti Koivisto.

        Clean up TextControlInnerElement::resolveCustomStyle(), move the implementation of
        TextControlPlaceholderElement::create() from the header to the cpp file, replace
        fancy comments to demarcate classes with MARK: so that they show up in Xcode's
        function menu.

        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::resolveCustomStyle):
        (WebCore::TextControlPlaceholderElement::TextControlPlaceholderElement):
        (WebCore::TextControlPlaceholderElement::create):
        * html/shadow/TextControlInnerElements.h:

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Rename WindowProxyController to WindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=184756

        Reviewed by Sam Weinig.

        Rename WindowProxyController to WindowProxy for clarity. When the IDL uses WindowProxy, the implementation
        needed use WindowProxyController type, which was a bit confusing.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::didCreateWindowProxy):
        (WebCore::DOMWrapperWorld::didDestroyWindowProxy):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        * bindings/js/JSDOMWindowProxy.h:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        (WebCore::ScriptController::windowProxy):
        (WebCore::ScriptController::enableEval):
        (WebCore::ScriptController::enableWebAssembly):
        (WebCore::ScriptController::disableEval):
        (WebCore::ScriptController::disableWebAssembly):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::collectIsolatedContexts):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::globalObject):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldExecState):
        * bindings/js/WindowProxy.cpp: Renamed from Source/WebCore/bindings/js/WindowProxyController.cpp.
        (WebCore::WindowProxy::WindowProxy):
        (WebCore::WindowProxy::~WindowProxy):
        (WebCore::WindowProxy::destroyJSWindowProxy):
        (WebCore::WindowProxy::createJSWindowProxy):
        (WebCore::WindowProxy::jsWindowProxiesAsVector const):
        (WebCore::WindowProxy::createJSWindowProxyWithInitializedScript):
        (WebCore::WindowProxy::clearJSWindowProxiesNotMatchingDOMWindow):
        (WebCore::WindowProxy::setDOMWindow):
        (WebCore::WindowProxy::attachDebugger):
        * bindings/js/WindowProxy.h: Renamed from Source/WebCore/bindings/js/WindowProxyController.h.
        (WebCore::WindowProxy::jsWindowProxies const):
        (WebCore::WindowProxy::releaseJSWindowProxies):
        (WebCore::WindowProxy::setJSWindowProxies):
        (WebCore::WindowProxy::jsWindowProxy):
        (WebCore::WindowProxy::existingJSWindowProxy const):
        (WebCore::WindowProxy::globalObject):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/AbstractFrame.cpp:
        (WebCore::AbstractFrame::AbstractFrame):
        * page/AbstractFrame.h:
        (WebCore::AbstractFrame::windowProxy):
        (WebCore::AbstractFrame::windowProxy const):
        * page/Page.cpp:
        (WebCore::Page::setDebugger):
        * page/RemoteDOMWindow.cpp:
        (WebCore::RemoteDOMWindow::self const):
        (WebCore::RemoteDOMWindow::top const):
        (WebCore::RemoteDOMWindow::opener const):
        (WebCore::RemoteDOMWindow::parent const):
        * page/RemoteDOMWindow.h:

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Set RemoteDOMWindow's initial opener
        https://bugs.webkit.org/show_bug.cgi?id=184716

        Reviewed by Sam Weinig.

        Add support for WindowProxy type in the IDL. The implementation should
        return a WindowProxyController and toJS() will take care of converting
        this into a JSValue via JSDOMWindowProxy.

        No new tests, rebaselined existing test.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/IDLTypes.h:
        * bindings/js/JSDOMConvertWindowProxy.h: Added.
        (WebCore::JSConverter<IDLWindowProxy>::convert):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowBase.h:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        * bindings/js/JSDOMWindowProxy.h:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        * bindings/js/JSRemoteDOMWindowBase.cpp:
        * bindings/js/JSRemoteDOMWindowBase.h:
        * bindings/scripts/CodeGenerator.pm:
        (IsBuiltinType):
        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GetBaseIDLType):
        * page/RemoteDOMWindow.cpp:
        (WebCore::RemoteDOMWindow::self const):
        (WebCore::RemoteDOMWindow::top const):
        (WebCore::RemoteDOMWindow::opener const):
        (WebCore::RemoteDOMWindow::parent const):
        * page/RemoteDOMWindow.h:
        * page/RemoteDOMWindow.idl:
        * page/RemoteFrame.h:

2018-04-18  Dean Jackson  <dino@apple.com>

        Detect system preview links
        https://bugs.webkit.org/show_bug.cgi?id=184753
        <rdar://problem/39500514>

        Reviewed by Antoine Quint.

        Detect a special type of link anchor, which we're calling System Previews.
        Ultimately this will allow WebKit to present such links in a special
        way.

        A System Preview link is an <a> element, with a rel attribute that
        includes "system-preview". It has a single element child, which is
        either an <img> or a <picture>.

        Test: system-preview/detection.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::relList): Add braces.
        (WebCore::HTMLAnchorElement::isSystemPreviewLink const): New
        function.
        * html/HTMLAnchorElement.h:

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::isSystemPreviewImage const): Ask the
        parent if it is a system preview link.
        * html/HTMLImageElement.h:
        * html/HTMLPictureElement.cpp:
        (WebCore::HTMLPictureElement::isSystemPreviewImage const): Ditto.
        * html/HTMLPictureElement.h:

        * testing/Internals.cpp: Testing helpers.
        (WebCore::Internals::systemPreviewRelType):
        (WebCore::Internals::isSystemPreviewLink const):
        (WebCore::Internals::isSystemPreviewImage const):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-18  Antti Koivisto  <antti@apple.com>

        :active pseudo class doesn't deactivate when using pressure sensitive trackpad
        https://bugs.webkit.org/show_bug.cgi?id=181680

        Reviewed by Beth Dakin.

        Trackpad sends a mouse force event with force of zero after mouse up event. This causes the element under cursor
        activate again.

        Even a fake event test doesn't appear to be currently possible as TestRunner crashes if you try to send mouseForceChanged.
        All the tests using it are skipped.

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

        Don't add HitTestRequest::Active if the force of the force event is zero.

2018-04-18  Megan Gardner  <megan_gardner@apple.com>

        Ensure correct screen sizes
        https://bugs.webkit.org/show_bug.cgi?id=184757
        
        Reviewed by Wenson Hsieh.
        
        Make sure that the screen sizes are actually correct.

        Not currently testable, will add tests when it is.

        * platform/ios/PlatformScreenIOS.mm:

2018-04-18  Nan Wang  <n_wang@apple.com>

        AX: [macOS] WebKit hangs when triggering an alert from an AOM increment event
        https://bugs.webkit.org/show_bug.cgi?id=184742

        Reviewed by Chris Fleizach.

        Made increment and decrement actions on the macOS to be async. So that VoiceOver
        won't hang indefinitely if performing the actions causes an alert or other modal
        behaviors.

        Test: accessibility/mac/async-increment-decrement-action.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformIncrementAction]):
        (-[WebAccessibilityObjectWrapper _accessibilityPerformIncrementAction]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformDecrementAction]):
        (-[WebAccessibilityObjectWrapper _accessibilityPerformDecrementAction]):
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):

2018-04-18  Youenn Fablet  <youenn@apple.com>

        MediaResourceLoader should set its fetch destination
        https://bugs.webkit.org/show_bug.cgi?id=184746

        Reviewed by Eric Carlson.

        Covered by updated test.

        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResourceLoader::requestResource):

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Fix runtime errors in simulator while playing media
        https://bugs.webkit.org/show_bug.cgi?id=184751

        Reviewed by Eric Carlson.

        AVURLAssetHTTPCookiesKey may not be present, and AVPlayer may not respond to certain methods.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateDisableExternalPlayback):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldDisableSleep):

2018-04-18  Jer Noble  <jer.noble@apple.com>

        Ignore ASSERT when setting AVAudioSessionCategory returns an error on simulator.
        https://bugs.webkit.org/show_bug.cgi?id=184698

        Reviewed by Eric Carlson.

        * platform/audio/ios/AudioSessionIOS.mm:
        * platform/audio/mac/AudioSessionMac.cpp:

2018-04-18  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION: Using the reload button while offline pushes identical pages onto the back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=184570
        <rdar://problem/34807323>

        Reviewed by Chris Dumez.

        Set FrameLoadType properly when error occurs in reload.

        tests: Tools/TestWebKitAPI/Tests/WebKitCocoa/LoadAlternateHTMLString.mm

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

2018-04-18  Chris Dumez  <cdumez@apple.com>

        Add support for converting a local window to a remote window
        https://bugs.webkit.org/show_bug.cgi?id=184515
        <rdar://problem/39011318>

        Reviewed by Ryosuke Niwa.

        Add initial support for process-swapping when navigating cross-origin as a result
        of a window.open(). The window object returned by window.open() is initially same
        origin and is for about:blank. The navigation cross-origin then happens and the
        JS wrappers for the window then point to a cross-origin window which is remote (i.e.
        hosted in another WebProcess).

        The RemoteDOMWindow exposed to JS looks like a regular cross-origin Window with a few
        exceptions due to our incomplete implementation (e.g. w.location returns null) and 
        most of its API is currently not functional. The RemoteDOMWindow API will be implemented
        in a follow-up by relying on IPC.

        Test: http/tests/navigation/process-swap-window-open.html

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        * bindings/js/JSDOMPromiseDeferred.h:
        * bindings/js/JSDOMWindowProperties.cpp:
        (WebCore::JSDOMWindowProperties::getOwnPropertySlot):
        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::JSDOMWindowProxy::finishCreation):
        (WebCore::JSDOMWindowProxy::create):
        * bindings/js/JSDOMWindowProxy.h:
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::JSDOMObject::JSDOMObject):
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/WindowProxyController.cpp:
        (WebCore::WindowProxyController::createWindowProxy):
        (WebCore::WindowProxyController::setDOMWindowForWindowProxy):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject _isSafeScript]):
        Teach more of our bindings code about RemoteDOMWindows.

        * dom/Document.cpp:
        (WebCore::Document::createDOMWindow):
        * loader/FrameLoaderClient.h:
        Add FrameLoaderClient function to notify the client when a DOMWindow is constructed in
        the frame. This is needed for WebKit2 to link the old window to its new representation
        in the new WebProcess.

2018-04-17  Zan Dobersek  <zdobersek@igalia.com>

        [CMake] Add and enable the ENABLE_CSS_ANIMATIONS_LEVEL_2 feature define
        https://bugs.webkit.org/show_bug.cgi?id=184681

        Reviewed by Carlos Garcia Campos.

        * Sources.txt: Include CSSAnimationTriggerScrollValue.cpp in the build.
        * WebCore.xcodeproj/project.pbxproj: Remove CSSAnimationTriggerScrollValue.cpp
        build target now that it's built via Sources.txt.

2018-04-17  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] CoordinatedImageBacking can simplify image drawing
        https://bugs.webkit.org/show_bug.cgi?id=183986

        Reviewed by Michael Catanzaro.

        In CoordinatedImageBacking::update(), when drawing the image into a
        freshly-created image backing, we can avoid save-and-restoring the
        painting context. We also don't have to clip it, since the clipping area
        is the same as the image (and buffer) bounds. Since the buffer is
        initialized to transparent color, we can use the CompositeCopy operator
        to just copy image data into the destination since there's nothing to
        paint the source over.

        No new tests -- no change in functionality.

        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::update):

2018-04-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Webkit should spoof as Safari on a Mac for Outlook.com
        https://bugs.webkit.org/show_bug.cgi?id=184573

        Reviewed by Carlos Alberto Lopez Perez.

        Add quirk for outlook.live.com.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2018-04-17  Mark Lam  <mark.lam@apple.com>

        Templatize CodePtr/Refs/FunctionPtrs with PtrTags.
        https://bugs.webkit.org/show_bug.cgi?id=184702
        <rdar://problem/35391681>

        Reviewed by Filip Pizlo and Saam Barati.

        No new tests. This is covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * cssjit/CSSPtrTag.h: Added.
        * cssjit/CompiledSelector.h:
        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::prepareAndCall):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::SelectorFragment::appendUnoptimizedPseudoClassWithContext):
        (WebCore::SelectorCompiler::addPseudoClassType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementAttributeFunctionCallValueMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateContextFunctionCallTest):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext):
        (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const):
        (WebCore::SelectorDataList::execute const):
        * dom/SelectorQuery.h:

2018-04-17  Tadeu Zagallo  <tzagallo@apple.com>

        Retain MessagePortChannel for transfer when disentangling ports
        https://bugs.webkit.org/show_bug.cgi?id=184502
        <rdar://problem/39372771>

        Reviewed by Geoffrey Garen.

        MessagePortChannels should be retained while ports are being transferred, but that was only
        happening when sending a port through another port, but not when sending it through a worker.

        Test: workers/worker-to-worker.html

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::entanglePortWithProcess):
        (WebCore::MessagePortChannel::disentanglePort):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::takeAllMessagesForPort):

2018-04-17  Tadeu Zagallo  <tzagallo@apple.com>

        References from CSSStyleDeclaration to CSSValues should be weak
        https://bugs.webkit.org/show_bug.cgi?id=180280
        <rdar://problem/35804869>

        Reviewed by Geoffrey Garen.

        No new tests - used the existing test to verify the leak

        * css/DeprecatedCSSOMValue.h:
        (WebCore::DeprecatedCSSOMValue::weakPtrFactory):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::wrapForDeprecatedCSSOM):
        * css/PropertySetCSSStyleDeclaration.h:

2018-04-17  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed rollout of r230632. Regression in memory usage.

        That bug tracked in https://bugs.webkit.org/show_bug.cgi?id=184569.

        Tests: animations/animation-internals-api-multiple-keyframes.html
               animations/animation-internals-api.html
               transitions/transition-drt-api-delay.html
               transitions/transition-drt-api.html

        * page/RuntimeEnabledFeatures.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pseudoElement): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-17  Tadeu Zagallo  <tzagallo@apple.com>

        Do not unregister MessagePorts on deallocation if it has been disentangled
        https://bugs.webkit.org/show_bug.cgi?id=184285
        <rdar://problem/39256714>

        Reviewed by Darin Adler.

        Test: workers/message-port-gc.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::deref const):

2018-04-17  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix timing of reporting error to the client
        https://bugs.webkit.org/show_bug.cgi?id=184707

        Before checking the result code, check the status of callback invocation and
        do the right thing.

        Reviewed by Youenn Fablet.

        No new tests because there's no new behavior.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didCompleteTransfer):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::needToInvokeDidReceiveResponse const):

2018-04-17  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Export authentication information to be used by the client.
        https://bugs.webkit.org/show_bug.cgi?id=184709

        Just added getters for username and password member variables.

        Reviewed by Alex Christensen.

        No new tests because there's no new behavior.

        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::user const):
        (WebCore::CurlRequest::password const):

2018-04-17  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229831): CMD-clicking an iCloud web app link unexpectedly opens that link in a new tab and the current tab
        https://bugs.webkit.org/show_bug.cgi?id=184678
        <rdar://problem/39422122>

        Reviewed by Alex Christensen.

        Frament navigations need to happen synchronously for Web-compatibility. Because of this,
        r225657 added code to make sure that if the client does not make the navigation policy
        decision synchronously for frament navigations, then we'll stop waiting for the client
        and proceed with the navigation. However, r229831 make the navigation policy decision
        IPC decision, meaning that even if the client responds synchronously, it would be
        asynchronously from WebCore's point of view. As a result, we would always ignore the
        client's policy decision when doing a fragment navigation.

        This is an issue on iclould.com because the web-app links are fragment URLs. When you
        CMD+click one of these link, we do the navigation policy check. As a result of this
        check, Safari responds IGNORE to the policy decision and instead decides to load the
        link in a new tab (because CMD key is pressed). Due to the bug mentioned above, we
        would not obey the IGNORE policy decision from Safari and load the link in the current
        tab, even though Safari would already be loading it in a new tab.

        To address the issue, I reintroduced a synchronous code path for navigation policy
        decision making, backed by synchronous IPC. This synchronous code path is now used for
        fragment navigations to restore pre-r229831 behavior. If the client does not answer
        synchronously, we'll proceed with the navigation anyway, as was happening pre-r229831.

        Test: http/tests/navigation/fragment-navigation-policy-ignore.html

        * loader/EmptyClients.cpp:
        (WebCore::EmptyFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoaderClient.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        * loader/PolicyChecker.h:

2018-04-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r230713.

        This caused internal build failures.

        Reverted changeset:

        "Implement checked cast for DDResultRef once
        DDResultGetTypeID() is available"
        https://bugs.webkit.org/show_bug.cgi?id=184554
        https://trac.webkit.org/changeset/230713

2018-04-17  Chris Dumez  <cdumez@apple.com>

        Add bindings code for RemoteDOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=184653

        Reviewed by Ryosuke Niwa.

        Add bindings code for RemoteDOMWindow. A RemoteDOMWindow behaves exactly like a cross-origin
        DOMWindow, which is backed by a RemoteDOMWindow object instead of a DOMWindow one. Since
        a RemoteDOMWindow is always cross origin, we do not need cross-origin checks and the bindings
        code is identical to the DOMWindow code paths from cross-origin handling.

        No new tests, this code will be used and tested via Bug 184515.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::addCrossOriginWindowOwnPropertyNames):
        * bindings/js/JSDOMWindowCustom.h:

        * bindings/js/JSRemoteDOMWindowBase.cpp: Added.
        (WebCore::JSRemoteDOMWindowBase::JSRemoteDOMWindowBase):
        (WebCore::JSRemoteDOMWindowBase::destroy):
        (WebCore::JSRemoteDOMWindowBase::javaScriptRuntimeFlags):
        (WebCore::toJS):
        (WebCore::toJSRemoteDOMWindow):
        * bindings/js/JSRemoteDOMWindowBase.h: Added.
        JSRemoteDOMWindow unfortunately currently needs to be a global object because of:
        1. a JSProxy's target needs to be a JSGlobalObject currently
        2. The 'structure()->setGlobalObject(vm, &window);' call in
           JSDOMWindowProxy::setWindow(VM&, JSDOMGlobalObject&) which requires a JSGlobalObject.
        Ideally, this wouldn't be the case in the future but this would require some code refactoring.
        Our DOM global objects normally subclass JSDOMGlobalObject so I decided to subclass JSDOMGlobalObject,
        which brings some things our bindings code expect. However, subclassing JSDOMGlobalObject directly is
        problematic because it does not hold the m_wrapped implementation pointer. To address this issue, all
        our our DOM global objects have a JS*Base base class which subclasses JSDOMGlobalObject and stores the
        m_wrapped implementation pointer. I followed the same pattern here.

        (WebCore::toJS):
        * bindings/js/JSRemoteDOMWindowCustom.cpp: Added.
        (WebCore::JSRemoteDOMWindow::getOwnPropertySlot):
        (WebCore::JSRemoteDOMWindow::getOwnPropertySlotByIndex):
        (WebCore::JSRemoteDOMWindow::put):
        (WebCore::JSRemoteDOMWindow::putByIndex):
        (WebCore::JSRemoteDOMWindow::deleteProperty):
        (WebCore::JSRemoteDOMWindow::deletePropertyByIndex):
        (WebCore::JSRemoteDOMWindow::getOwnPropertyNames):
        (WebCore::JSRemoteDOMWindow::defineOwnProperty):
        (WebCore::JSRemoteDOMWindow::getPrototype):
        (WebCore::JSRemoteDOMWindow::preventExtensions):
        (WebCore::JSRemoteDOMWindow::toStringName):
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsDOMGlobalObject):
        (GenerateHeader):
        (GenerateOverloadDispatcher):
        (GenerateImplementation):
        * page/RemoteDOMWindow.idl: Added.

2018-04-17  David Kilzer  <ddkilzer@apple.com>

        Implement checked cast for DDResultRef once DDResultGetTypeID() is available
        <https://webkit.org/b/184554>
        <rdar://problem/36241894>

        Reviewed by Brent Fulgham.

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItemAtPositionWithRange): Implement checked cast
        for DDResultRef.

2018-04-17  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Animated GIF imagery with finite looping are falling one loop short
        https://bugs.webkit.org/show_bug.cgi?id=183153

        Reviewed by Simon Fraser.

        The Netscape Looping Application Extension is a block which may be added
        to a GIF file to tell the viewer to loop through the entire GIF frames.
        This is communicated through two bytes designated for the "loopCount" in
        this block.

        The entire block may not be found in the GIF, in which case the GIF is 
        supposed to animate its entire frames only once.

        If the block exists and loopCount = 0, this means the image has to loop
        through its frames indefinitely.

        If the block exist and loopCount > 0, this should mean the image has to
        loop through its frames loopCount + 1 times. The extra loop seems to be
        the consensus among most of the GIF generators and viewers. For example,
        if the image designer wants the image to loop through its frames n times:
        -- The GIF generator (e.g. Adobe Photoshop and https://ezgif.com/maker) 
           will write n - 1 for loopCount. However http://gifmaker.me and 
           http://gifmaker.org write n for loopCount.
        -- The browser (e.g. Chrome 65.0.3325 181 and FireFox Quantum 59.0.2) will
           translate loopCount = n - 1 to: animate GIF once + loop n - 1, which 
           means loop the GIF n times.

        Because the specs are not really clear about this, we are going to consider
        the agreed-upon behavior among most of the web browsers the specs here.

        * platform/graphics/cg/ImageDecoderCG.cpp:
        (WebCore::ImageDecoderCG::repetitionCount const):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount const):

2018-04-17  Saam Barati  <sbarati@apple.com>

        Add system trace points for process launch and for initializeWebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184669

        Reviewed by Simon Fraser.

        No testing needed because there is no new functionality here.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequestInternal):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::didCancel):

2018-04-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] AirPlay device name is sometimes wrong
        https://bugs.webkit.org/show_bug.cgi?id=184543
        <rdar://problem/39105498>

        Reviewed by Jer Noble.

        No new tests, this can only be tested with a specific hardware setup.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer): Get the device name from the AVOutputContext
        when possible.

2018-04-17  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [GTK] Build fix after r230529 (WaylandCompositorDisplay leaks its wl_display)
        https://bugs.webkit.org/show_bug.cgi?id=184406

        Rubber-stamped by Michael Catanzaro.

        Fix build with clang 3.8

        No new tests, it is a build fix.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create):

2018-04-16  Antoine Quint  <graouts@apple.com>

        Layout Test animations/needs-layout.html is a flaky Image Failure.
        https://bugs.webkit.org/show_bug.cgi?id=172397

        Reviewed by Dean Jackson.

        Animations that animate a transform and uses a relative value for either the x or y components
        require a layout before starting, which CSSAnimationController would perform in the call to
        CSSAnimationControllerPrivate::animationTimerFired() made immediately after a CSS animation was
        created.

        We now perform a similar task where upon setting new blending keyframes we compute a flag indicating
        if the keyframe effect is animating a transform with relative x or y components. Then, when we perform
        the first invalidation task, which runs in the next run loop after a change to the timing model has
        been made, such as a call to play() on a CSSAnimation made in the TreeResolver::createAnimatedElementUpdate()
        where the CSSAnimation was created, we call forceLayout() on this element's FrameView. We also ensure
        we commit animations on the compositor immediately after that too, instead of waiting until the next
        DisplayRefreshMonitor callback.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::performInvalidationTask):
        (WebCore::DocumentTimeline::updateAnimations):
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::forceLayoutIfNeeded):
        (WebCore::KeyframeEffectReadOnly::setBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::computedNeedsForcedLayout):
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions):
        * animation/KeyframeEffectReadOnly.h:

2018-04-16  Pablo Saavedra  <psaavedra@igalia.com>

        Inconsistent EGL defines in ImageBufferCairo
        https://bugs.webkit.org/show_bug.cgi?id=184661

        Reviewed by Žan Doberšek.

        On revision r219391 libepoxy is added. The headers in
        ImageBufferCairo.cpp become inconsistent when 2D canvas is enabled
        (-DENABLE_ACCELERATED_2D_CANVAS=ON) due to a redefinition error during
        the Webkit build:

            ...
            /usr/include/GLES2/gl2.h:503:82: error: 'voi
            epoxy_glAttachShader(GLuint, GLuint)' redeclared as different kind
            of symbol
            GL_APICALL void         GL_APIENTRY glAttachShader (GLuint
            program, GLuint shader);

        No new tests.

        * platform/graphics/cairo/ImageBufferCairo.cpp:

2018-04-16  Filip Pizlo  <fpizlo@apple.com>

        MutationObserver should be in an IsoHeap
        https://bugs.webkit.org/show_bug.cgi?id=184671
        <rdar://problem/36081981>

        Reviewed by Sam Weinig.

        No new tests because no new behavior.

        * dom/MutationObserver.cpp:
        * dom/MutationObserver.h:

2018-04-16  Youenn Fablet  <youenn@apple.com>

        Use NetworkLoadChecker to handle synchronous HTTP loads
        https://bugs.webkit.org/show_bug.cgi?id=184240

        Reviewed by Chris Dumez.

        Update LoaderStrategy::loadResourceSynchronously to pass FetchOptions directly.
        Update various call sites accordingly. This allows NetworkProcess to do all necessary checks.
        Add an option to disable security checks if NetworkProcess does it for WebProcess.
        This option will be also used for regular asynchronous loads in future patches.

        Update DocumentThreadableLoader to bypass preflighting and response validation checks in case they are done in NetworkProcess.

        Covered by existing and rebased tests.

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::doPreflight):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/LoaderStrategy.h:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

2018-04-16  Christopher Reid  <chris.reid@sony.com>

        [WinCairo] Media elements should be enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=184597

        Reviewed by Per Arne Vollan.

        Enabling media elements by default with media foundation.

        * page/SettingsDefaultValues.h:

2018-04-16  Christopher Reid  <chris.reid@sony.com>

        [Curl] Add the Accept-Language field to curl request headers
        https://bugs.webkit.org/show_bug.cgi?id=184605

        Reviewed by Alex Christensen.

        Add Accept-Language field to curl request headers

        * platform/network/curl/CurlRequest.cpp:
        * platform/network/curl/CurlRequest.h:

2018-04-16  Chris Dumez  <cdumez@apple.com>

        Move more WindowProxy-related logic from ScriptController to WindowProxyController
        https://bugs.webkit.org/show_bug.cgi?id=184640

        Reviewed by Ryosuke Niwa.

        Move more WindowProxy-related logic from ScriptController to WindowProxyController,
        for clarity.

        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::JSDOMWindowProxy::attachDebugger):
        * bindings/js/JSDOMWindowProxy.h:
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::initScriptForWindowProxy):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::existingCacheableBindingRootObject const):
        * bindings/js/WindowProxyController.cpp:
        (WebCore::collectGarbageAfterWindowProxyDestruction):
        (WebCore::WindowProxyController::~WindowProxyController):
        (WebCore::WindowProxyController::clearWindowProxiesNotMatchingDOMWindow):
        (WebCore::WindowProxyController::setDOMWindowForWindowProxy):
        (WebCore::WindowProxyController::attachDebugger):
        * bindings/js/WindowProxyController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clear):
        * page/Page.cpp:
        (WebCore::Page::setDebugger):

2018-04-16  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Set *TrackPrivateGStreamer::active based on GstStream default select in constructor
        https://bugs.webkit.org/show_bug.cgi?id=184652

        Reviewed by Philippe Normand.

        In the constructor we should mark selected streams based on the default values from GstStream,
        if the user changes them, they will be updated as required later on.

        No new tests are added as we already have a few ones that are currently disabled in
        the mediastream testsuite. This patch is part of the work to enable them.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):

2018-04-16  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Set TrackPrivateBaseGStreamer metadata information even if no client is avalaible
        https://bugs.webkit.org/show_bug.cgi?id=184651

        Reviewed by Philippe Normand.

        We can't notify the client if none is connected, but still we need to fill our metadatas from
        the provided GstTagList, especially in the case of playbin3 where the client is not set yet
        at construct time but the metadata might already be preset (and won't be updated later on).

        No new tests are added as we already have a few ones that are currently disabled in
        the mediastream testsuite. This patch is part of the work to enable them.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):

2018-04-16  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure we never return -0 through the API
        https://bugs.webkit.org/show_bug.cgi?id=184644

        Reviewed by Dean Jackson.

        We could sometimes return -0 instead of 0, which is surprising and leads to an error in WPT tests.
        This would happen when playbackRate < 0.

        * animation/WebAnimationUtilities.h:
        (WebCore::secondsToWebAnimationsAPITime):

2018-04-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Animations do not naturally get a finish event
        https://bugs.webkit.org/show_bug.cgi?id=184639
        <rdar://problem/39397649>

        Reviewed by Jon Lee.

        We must call updateFinishedState() when an animation gets sampled as it means its timeline's time has progressed
        and it may have crossed to a finished state. Calling updateFinishedState() when sampling means that we'll correctly
        set the animation's hold time to its end value, which means that currentTime() will now always be clamped to return
        the end time once its has reached it, so we must not schedule animations to resolve immediately anymore since otherwise
        they will keep being scheduled in a loop.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timeToNextRequiredTick const):
        (WebCore::WebAnimation::resolve):

2018-04-15  Chris Dumez  <cdumez@apple.com>

        Change Event's returnValue so it doesn't expose a new primitive
        https://bugs.webkit.org/show_bug.cgi?id=184415

        Reviewed by Darin Adler.

        Update Event.returnValue setter to match the latest DOM specification after:
        - https://github.com/whatwg/dom/pull/626

        In particular, the returnValue setter is now a no-op if the new flag value
        is true. If the input flag value is false, it only sets the 'canceled' flag
        if the event is cancelable and the event’s in passive listener flag is unset.

        Test: imported/w3c/web-platform-tests/dom/events/Event-returnValue.html

        * dom/Event.cpp:
        (WebCore::Event::setLegacyReturnValue):
        (WebCore::Event::setCanceledFlagIfPossible):
        (WebCore::Event::preventDefault):
        * dom/Event.h:

2018-04-14  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Expose a method to retrieve the GstStream from a TrackPrivateBaseGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=184620

        Reviewed by Philippe Normand.

        This is a minor change, a dedicated test doesn't really make sense here.

        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        (WebCore::TrackPrivateBaseGStreamer::stream):

2018-04-13  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit crashes when libwebrtc.dylib is missing
        https://bugs.webkit.org/show_bug.cgi?id=184607

        Rubber-stamped by Jer Noble.

        Don't call LibWebRTC related code when libwebrtc is not available.

        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::suspend):

2018-04-13  Chris Dumez  <cdumez@apple.com>

        Split WindowProxy handling out of ScriptController and into a new class owned by AbstractFrame
        https://bugs.webkit.org/show_bug.cgi?id=184591

        Reviewed by Sam Weinig.

        Split WindowProxy handling out of ScriptController and into a new class owned by AbstractFrame.
        RemoteFrames do not need a ScriptController but do need to maintain WindowProxies.
        This is work towards fixing Bug 184515.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::~DOMWrapperWorld):
        (WebCore::DOMWrapperWorld::clearWrappers):
        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::didCreateWindowProxy):
        (WebCore::DOMWrapperWorld::didDestroyWindowProxy):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::toJSDOMWindow):
        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::toJS):
        (WebCore::toJSDOMWindowProxy):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::loadModuleScriptInWorld):
        (WebCore::ScriptController::linkAndEvaluateModuleScriptInWorld):
        (WebCore::ScriptController::evaluateModule):
        (WebCore::ScriptController::clearWindowProxiesNotMatchingDOMWindow):
        (WebCore::ScriptController::setDOMWindowForWindowProxy):
        (WebCore::ScriptController::initScriptForWindowProxy):
        (WebCore::ScriptController::setupModuleScriptHandlers):
        (WebCore::ScriptController::windowProxyController):
        (WebCore::ScriptController::enableEval):
        (WebCore::ScriptController::enableWebAssembly):
        (WebCore::ScriptController::disableEval):
        (WebCore::ScriptController::disableWebAssembly):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::collectIsolatedContexts):
        (WebCore::ScriptController::windowScriptNPObject):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::globalObject):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::windowScriptObject):
        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldExecState):
        * bindings/js/WindowProxyController.cpp: Added.
        (WebCore::WindowProxyController::WindowProxyController):
        (WebCore::WindowProxyController::destroyWindowProxy):
        (WebCore::WindowProxyController::createWindowProxy):
        (WebCore::WindowProxyController::windowProxies):
        (WebCore::WindowProxyController::createWindowProxyWithInitializedScript):
        * bindings/js/WindowProxyController.h: Added.
        (WebCore::WindowProxyController::releaseWindowProxies):
        (WebCore::WindowProxyController::setWindowProxies):
        (WebCore::WindowProxyController::windowProxy):
        (WebCore::WindowProxyController::existingWindowProxy const):
        (WebCore::WindowProxyController::globalObject):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/AbstractFrame.cpp:
        (WebCore::AbstractFrame::AbstractFrame):
        * page/AbstractFrame.h:
        (WebCore::AbstractFrame::windowProxyController):
        (WebCore::AbstractFrame::windowProxyController const):

2018-04-13  Brady Eidson  <beidson@apple.com>

        Introduce SuspendedPageProxy to keep old web processes around after their WebPageProxy has been swapped to a new one.
        https://bugs.webkit.org/show_bug.cgi?id=184559

        Reviewed by Alex Christensen.

        Covered by new API test.

        WebCore changes rework the meaning of a "ForSuspension" policy to simply navigate the page to about:blank.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2018-04-13  Chris Dumez  <cdumez@apple.com>

        input.webkitEntries does not work as expected when folder contains accented chars
        https://bugs.webkit.org/show_bug.cgi?id=184517
        <rdar://problem/39265537>

        Reviewed by Alex Christensen.

        Use String::fromUTF8() to construct a WTF String from the char* returned by
        dirname() in FileSystem::directoryName(). Previously, we were just calling
        the String constructor, which would treat the input as latin 1 instead of
        UTF-8.

        Change is covered by an API test rather than a layout test due to file versioning
        limitations.

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::FileSystem::directoryName):

2018-04-13  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WebCore] Use @getByIdDirectPrivate / @putByIdDirectPrivate in WebCore JS
        https://bugs.webkit.org/show_bug.cgi?id=184401

        Rubber stamped by Saam Barati.

        Apply bug 183970 changes to WebCore JS too. This offers solid type checking
        with @getByIdDirectPrivate().

        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):
        (getLocalStreams):
        (getStreamById):
        (addStream):
        * Modules/mediastream/RTCPeerConnectionInternals.js:
        (isRTCPeerConnection):
        * Modules/streams/ReadableByteStreamController.js:
        (enqueue):
        (error):
        (close):
        (getter.byobRequest):
        * Modules/streams/ReadableByteStreamInternals.js:
        (privateInitializeReadableStreamBYOBReader):
        (privateInitializeReadableByteStreamController):
        (privateInitializeReadableStreamBYOBRequest):
        (isReadableByteStreamController):
        (isReadableStreamBYOBRequest):
        (isReadableStreamBYOBReader):
        (readableByteStreamControllerCancel):
        (readableByteStreamControllerError):
        (readableByteStreamControllerClose):
        (readableByteStreamControllerClearPendingPullIntos):
        (readableByteStreamControllerGetDesiredSize):
        (readableStreamHasBYOBReader):
        (readableStreamHasDefaultReader):
        (readableByteStreamControllerHandleQueueDrain):
        (readableByteStreamControllerPull):
        (readableByteStreamControllerShouldCallPull):
        (readableByteStreamControllerCallPullIfNeeded):
        (readableByteStreamControllerEnqueue):
        (readableByteStreamControllerEnqueueChunk):
        (readableByteStreamControllerRespondWithNewView):
        (readableByteStreamControllerRespond):
        (readableByteStreamControllerRespondInternal):
        (readableByteStreamControllerRespondInReadableState):
        (readableByteStreamControllerRespondInClosedState):
        (readableByteStreamControllerProcessPullDescriptors):
        (readableByteStreamControllerFillDescriptorFromQueue):
        (readableByteStreamControllerShiftPendingDescriptor):
        (readableByteStreamControllerInvalidateBYOBRequest):
        (readableByteStreamControllerCommitDescriptor):
        (readableStreamFulfillReadIntoRequest):
        (readableByteStreamControllerPullInto):
        (readableStreamAddReadIntoRequest):
        * Modules/streams/ReadableStream.js:
        (initializeReadableStream):
        (pipeThrough):
        * Modules/streams/ReadableStreamBYOBReader.js:
        (cancel):
        (read):
        (releaseLock):
        (getter.closed):
        * Modules/streams/ReadableStreamBYOBRequest.js:
        (respond):
        (respondWithNewView):
        (getter.view):
        * Modules/streams/ReadableStreamDefaultController.js:
        (error):
        * Modules/streams/ReadableStreamDefaultReader.js:
        (cancel):
        (read):
        (releaseLock):
        (getter.closed):
        * Modules/streams/ReadableStreamInternals.js:
        (privateInitializeReadableStreamDefaultReader):
        (readableStreamReaderGenericInitialize):
        (readableStreamDefaultControllerError):
        (readableStreamPipeTo):
        (readableStreamTee):
        (isReadableStream):
        (isReadableStreamDefaultReader):
        (isReadableStreamDefaultController):
        (readableStreamError):
        (readableStreamDefaultControllerCallPullIfNeeded):
        (readableStreamDefaultControllerGetDesiredSize):
        (readableStreamReaderGenericCancel):
        (readableStreamCancel):
        (readableStreamDefaultControllerCancel):
        (readableStreamDefaultControllerPull):
        (readableStreamDefaultControllerClose):
        (readableStreamClose):
        (readableStreamFulfillReadRequest):
        (readableStreamDefaultReaderRead):
        (readableStreamAddReadRequest):
        (isReadableStreamDisturbed):
        (readableStreamReaderGenericRelease):
        (readableStreamDefaultControllerCanCloseOrEnqueue):
        (privateInitializeReadableStreamDefaultController): Deleted.
        * Modules/streams/StreamInternals.js:
        (validateAndNormalizeQueuingStrategy):
        * Modules/streams/WritableStream.js:
        (initializeWritableStream):
        (abort):
        (close):
        (write):
        (getter.closed):
        (getter.ready):
        (getter.state):
        * Modules/streams/WritableStreamInternals.js:
        (isWritableStream):
        (syncWritableStreamStateWithQueue):
        (errorWritableStream):
        (callOrScheduleWritableStreamAdvanceQueue):
        * bindings/js/JSDOMBindingInternals.js:
        (mapLikeForEach):

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn CSS Animations and CSS Transitions as Web Animations on by default
        https://bugs.webkit.org/show_bug.cgi?id=184569
        <rdar://problem/38671301>

        Reviewed by Jon Lee.

        We now set the CSS Animations and CSS Transitions as Web Animations flag on by default. To ensure that some remaining
        tests pass with this flag on, we expose a way to get to a PseudoElement via a new internals.pseudoElement() method. This
        allows tests that used internals.pauseAnimationAtTimeOnPseudoElement() and internals.pauseTransitionAtTimeOnPseudoElement()
        to now work with the Web Animations API.

        * page/RuntimeEnabledFeatures.h:
        * testing/Internals.cpp:
        (WebCore::Internals::pseudoElement):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-13  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][OpenVR] Implement requestPresent()/exitPresent() and getLayers()
        https://bugs.webkit.org/show_bug.cgi?id=184530

        Reviewed by Žan Doberšek.

        WebVR apps should invoke requestPresent() to start presenting contents of a VRLayerInit
        (right now a HTML canvas with a WebGL context) on the VRDisplay. This request might fail for
        a variety of reasons and can be eventually cancelled with exitPresent(). Once we are
        presenting we could access the presenting layers (right now just one) with getLayers().

        Note that we are not presenting anything to the HMD yet, that will be done later in a follow
        up patch.

        I took the chance to correct a mistak in the VRDisplayCapabilities object which has a method
        that should be called maxLayers instead of maxLayer.

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::requestPresent):
        (WebCore::VRDisplay::stopPresenting):
        (WebCore::VRDisplay::exitPresent):
        (WebCore::VRDisplay::getLayers const):
        (WebCore::VRDisplay::isPresenting const): Deleted. Implemented in the header file.
        * Modules/webvr/VRDisplay.h:
        (WebCore::VRDisplay::isPresenting const):
        * Modules/webvr/VRDisplayCapabilities.h:
        (WebCore::VRDisplayCapabilities::maxLayers const): Renamed from maxLayer().
        (WebCore::VRDisplayCapabilities::maxLayer const): Deleted.
        * Modules/webvr/VRDisplayCapabilities.idl:

2018-04-13  Miguel Gomez  <magomez@igalia.com>

        REGRESSION(r230627): [GTK][WPE] Possible deadlock when destroying the player in non AC mode
        https://bugs.webkit.org/show_bug.cgi?id=184583

        Reviewed by Carlos Garcia Campos.

        In non AC mode, ensure that a deadlock can't happen when destroying MediaPlayerPrivateGStreamerBase.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2018-04-13  Miguel Gomez  <magomez@igalia.com>

        [GTK] [gstreamer] video won't unpause when built with -DUSE_GSTREAMER_GL=OFF
        https://bugs.webkit.org/show_bug.cgi?id=183362

        Reviewed by Carlos Garcia Campos.

        Remove the drawCancelled flag and use a new one to indicate that the player is being destroyed.
        That new flag is only enabled on destruction and it's not modified by cancelRepaint(), which
        can be used to handle the pause event without avoiding future renderings. Also cancelRepaint()
        has only effect when not in AC mode.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2018-04-13  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Convert GStreamerUtilities in GStreamerCommon and include the GStreamer smart pointer traits
        https://bugs.webkit.org/show_bug.cgi?id=184533

        Reviewed by Philippe Normand.

        Renamed GStreamerUtilities* files into GStreamerCommon* and
        modified files including them accordingly. Include
        GRefPtrGStreamer.h and GUniquePtrGStreamer.h in GStreamerCommon.h
        to avoid problems destroying objects when those files are
        forgotten to be included.

        * Modules/webaudio/AudioContext.cpp:
        * platform/GStreamer.cmake:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/GStreamerCommon.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.cpp.
        * platform/graphics/gstreamer/GStreamerCommon.h: Renamed from Source/WebCore/platform/graphics/gstreamer/GStreamerUtilities.h.
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
        * platform/graphics/gstreamer/MediaSampleGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.cpp:
        * platform/graphics/gstreamer/eme/GStreamerEMEUtilities.h:
        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/eme/WebKitCommonEncryptionDecryptorGStreamer.cpp:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        * platform/graphics/gstreamer/mse/AppendPipeline.h:
        * platform/graphics/gstreamer/mse/GStreamerMediaDescription.cpp:
        * platform/graphics/gstreamer/mse/GStreamerMediaDescription.h:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        * platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:

2018-04-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Fix clang build error in CurlContext.cpp
        https://bugs.webkit.org/show_bug.cgi?id=184561

        Reviewed by Darin Adler.

        MSVC allows explicit template specialization in classes but gcc/clang do not.

        * platform/network/curl/CurlContext.cpp:

2018-04-12  Christopher Reid  <chris.reid@sony.com>

        [Curl] Cookie Database on memory path should be :memory:
        https://bugs.webkit.org/show_bug.cgi?id=184572

        Reviewed by Alex Christensen.

        CookieJarDB::isOnMemory is comparing the database path with :onmemory: but it should be using :memory:
        For reference, see: https://www.sqlite.org/inmemorydb.html

        * platform/network/curl/CookieJarDB.h:

2018-04-12  Daniel Bates  <dabates@apple.com>

        Attmept to fix the Windows build following <https://trac.webkit.org/changeset/230602/>
        (https://bugs.webkit.org/show_bug.cgi?id=184386)

        Visual Studio cannot prove that all cases in the switch are covered :(
        So, add an ASSERT_NOT_REACHED() and a return a value outside of the switch block. 

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::destinationForType):

2018-04-12  Chris Dumez  <cdumez@apple.com>

        Introduce remote variants of Frame / DOMWindow classes
        https://bugs.webkit.org/show_bug.cgi?id=184467
        <rdar://problem/39011267>

        Reviewed by Ryosuke Niwa.

        Introduce remote variants of Frame / DOMWindow classes, for when these frames / windows
        are hosted on another WebProcess. Those will be used in a follow-up patch.

        The hierarchy is as follows (class naming will be improved in a follow-up patch to minimise
        patch size):
        - AbstractFrame: A frame that can be either local or remote (hosted on another WebProcess)
            - Frame: A local frame
            - RemoteFrame: A frame hosted on another WebProcess. A RemoteFrame's window is also remote.
        - AbstractDOMWindow: A window that be either local or remote (hosted on another WebProcess)
            - DOMWindow: A local DOMWindow
            - RemoteDOMWindow: A window hosted on another WebProcess. A RemoteDOMWindow's frame is also
              remote. A RemoteDOMWindow is always cross-origin.

        This patch introduces global identifiers (unique across all WebProcesses) for both Frames and
        Windows. This is useful as we need to know which Frame / DOMWindow a particular RemoteFrame /
        RemoteDOMWindow is pointing to.

        Follow-up patch will add support for converting a local DOMWindow / Frame into a remote ones,
        when a newly opened window (via window.open) is navigated cross-origin (Bug 184515).

        Other things we'll need to implement in follow-ups:
        - RemoteDOMWindow will need to know about its opener in order to support the window.opener
          API. Internally, the opener will be stored as a RemoteFrame so that window.opener always
          returns the current window in the opener frame (which changes upon navigation).
        - Nullify a RemoteDOMWindow's frame whenever the window it is pointing to becomes frameless.
          A frameless window behaves very differently (e.g. very little API is exposed to the Web).
          This happens when either the newly opened window is either closed or navigated.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ContentFilter.cpp:
        (WebCore::ContentFilter::didDecide):
        * page/AbstractDOMWindow.cpp: Added.
        (WebCore::AbstractDOMWindow::AbstractDOMWindow):
        (WebCore::AbstractDOMWindow::~AbstractDOMWindow):
        * page/AbstractDOMWindow.h: Added.
        (WebCore::AbstractDOMWindow::identifier const):
        * page/AbstractFrame.cpp: Added.
        (WebCore::AbstractFrame::AbstractFrame):
        (WebCore::AbstractFrame::~AbstractFrame):
        * page/AbstractFrame.h: Added.
        (WebCore::AbstractFrame::window const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        * page/DOMWindow.h:
        (isType):
        * page/Frame.cpp:
        (WebCore::Frame::window const):
        (WebCore::Frame::virtualWindow const):
        * page/Frame.h:
        (isType):
        * page/GlobalFrameIdentifier.h: Added.
        (WebCore::GlobalFrameIdentifier::encode const):
        (WebCore::GlobalFrameIdentifier::decode):
        * page/GlobalWindowIdentifier.h: Added.
        (WebCore::operator==):
        (WebCore::GlobalWindowIdentifier::hash const):
        (WebCore::GlobalWindowIdentifier::encode const):
        (WebCore::GlobalWindowIdentifier::decode):
        (WTF::GlobalWindowIdentifierHash::hash):
        (WTF::GlobalWindowIdentifierHash::equal):
        (WTF::HashTraits<WebCore::GlobalWindowIdentifier>::emptyValue):
        (WTF::HashTraits<WebCore::GlobalWindowIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::GlobalWindowIdentifier>::isDeletedValue):

        * page/RemoteDOMWindow.cpp: Added.
        (WebCore::RemoteDOMWindow::RemoteDOMWindow):
        (WebCore::RemoteDOMWindow::~RemoteDOMWindow):
        (WebCore::RemoteDOMWindow::self const):
        (WebCore::RemoteDOMWindow::location const):
        (WebCore::RemoteDOMWindow::close):
        (WebCore::RemoteDOMWindow::closed const):
        (WebCore::RemoteDOMWindow::focus):
        (WebCore::RemoteDOMWindow::blur):
        (WebCore::RemoteDOMWindow::length const):
        (WebCore::RemoteDOMWindow::top const):
        (WebCore::RemoteDOMWindow::opener const):
        (WebCore::RemoteDOMWindow::parent const):
        (WebCore::RemoteDOMWindow::postMessage):
        The DOM API exposed on RemoteDOMWindow is only the subset of the DOMWindow API that is exposed cross origin,
        since remote DOMWindow are always from a different origin. The short-term plan is to implement these in a
        follow-up by relying on IPC (synchronous when necessary) to fetch the information from the real window in
        the WebProcess where it lives. Longer term, we should probably keep RemoteDOMWindow members in sync with the
        DOMWindow they're pointing to, so we do not have to rely on synchronous IPC.

        * page/RemoteDOMWindow.h: Added.
        (isType):
        * page/RemoteFrame.cpp: Added.
        (WebCore::RemoteFrame::RemoteFrame):
        (WebCore::RemoteFrame::~RemoteFrame):
        (WebCore::RemoteFrame::virtualWindow const):
        * page/RemoteFrame.h: Added.
        (isType):

2018-04-12  Daniel Bates  <dabates@apple.com>

        Content-Type not enforced for <script> allows for XSS
        https://bugs.webkit.org/show_bug.cgi?id=184386
        <rdar://problem/39112268>

        Reviewed by Brady Eidson.

        As per the Fetch standard, <https://fetch.spec.whatwg.org/#should-response-to-request-be-blocked-due-to-mime-type?> (16 March 2018),
        we should block JavaScript scripts that are served with MIME type text/csv, or a MIME type
        that begins with "audio/", "image/" or "video/".

        As a side benefit of this change we now set the destination property [1] on preload requests.

        [1] <https://fetch.spec.whatwg.org/#concept-request-destination>

        Tests: http/tests/security/script-with-banned-mimetype.html
               http/tests/workers/worker-importScripts-banned-mimetype.html

        * Sources.txt: Add file FetchIdioms.cpp.
        * WebCore.xcodeproj/project.pbxproj: Add files FetchIdioms.{cpp, h}.
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished): Check the MIME type of the response and
        block the script if applicable.
        * dom/LoadableScript.h: Add error type MIMEType.
        * loader/FetchIdioms.cpp: Added.
        (WebCore::shouldBlockResponseDueToMIMEType): Implements the "Should response to request be blocked
        due to its MIME type?" algorithm from the Fetch standard.
        * loader/FetchIdioms.h: Added.
        * loader/FetchOptions.h:
        (WebCore::isScriptLikeDestination): Implements the definition of "script like" as per <https://fetch.spec.whatwg.org/#request-destination-script-like>.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage): Removed logic to set the destination property as
        CachedResourceLoader::requestResource() is now responsible for doing this.
        (WebCore::CachedResourceLoader::requestFont): Ditto.
        (WebCore::CachedResourceLoader::requestTextTrack): Ditto.
        (WebCore::CachedResourceLoader::requestCSSStyleSheet): Ditto.
        (WebCore::CachedResourceLoader::requestScript): Ditto.
        (WebCore::CachedResourceLoader::requestXSLStyleSheet): Ditto.
        (WebCore::CachedResourceLoader::requestMedia): Update comment to express that we should assert
        that the destination property is either video or audio.
        (WebCore::CachedResourceLoader::requestIcon): Remove logic to set the destination property as
        CachedResourceLoader::requestResource() is now responsible for doing this.
        (WebCore::CachedResourceLoader::requestRawResource): Removed assertion as this function is used to
        load many kinds of requests that have different destination properties. The caller is responsible
        for setting the appropriate destintion property.
        (WebCore::CachedResourceLoader::requestMainResource): Remove logic to set the destination property
        as CachedResourceLoader::requestResource() is now responsible for doing this.
        (WebCore::destinationForType): Helper function that maps CachedResource::Type to FetchOptions::Destination.
        (WebCore::CachedResourceLoader::requestResource): Set the destination property on the request if not
        already set.
        * loader/cache/CachedResourceLoader.h: Segregate requestRawResource() from the other request functions
        and add a comment to explain what it is used for.
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously): Set the destination property to FetchOptions::Destination::Script
        and store it in an instance variable as we will need to reference it once we receive the HTTP response.
        Note that this function is only used to support the Web API importScripts().
        (WebCore::WorkerScriptLoader::loadAsynchronously): Store the passed destination property in an
        instance as we will need to reference it once we receive the HTTP response.
        (WebCore::WorkerScriptLoader::didReceiveResponse): Check the MIME type of the response and
        block the script if applicable.
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext): Set the destination property to FetchOptions::Destination::Serviceworker.

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Fix a host of small CSS Animations and CSS Transitions issues
        https://bugs.webkit.org/show_bug.cgi?id=184555

        Reviewed by Dean Jackson.

        A series of small and intertwined issues were preventing a number of CSS Animations and CSS Trantions
        tests to fail when expressed as Web Animations.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): Pass the old and new RenderStyles to CSSAnimation::create()
        since we're refactoring DeclarativeAnimation to create blending keyframes in initialize(), no longer requiring each subclass
        to create them.
        (WebCore::AnimationTimeline::cssAnimationForElementAndProperty): Return the animation, if any, for a property animated by
        a CSS animation, so that we can determine if a property is already being animated when running a CSS Transition.
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): Since a property can be specified twice in a "transition" property,
        once via "all" and once explicitly, ensure we look at all currently running transitions for the currently-processed property to
        see if we need to cancel this transition. Previously, we used to only see if it had been transitioned in the old style. We also
        start transitions even if the duration is 0 provided the delay is a positive, non-zero value. Then, if there is a CSS Animation
        for this property already running, use that animation's original unanimated style as the from value.
        * animation/AnimationTimeline.h:
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::create): The animation name is now set in the CSSAnimation constructor.
        (WebCore::CSSAnimation::CSSAnimation): Set the animation name and keep a copy of the unanimated style such that we can
        get it when a CSS Transition is created and takes precedence over this CSS Animation.
        (WebCore::CSSAnimation::initialize): Deleted.
        * animation/CSSAnimation.h:
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create):
        (WebCore::CSSTransition::initialize):
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize): Call the new computeDeclarativeAnimationBlendingKeyframes() on the KeyframeEffect
        directly in this method so that subclasses don't need to create it manually, but most important so that keyframes are created
        before timing properties are set based on the backing animation.
        * animation/DeclarativeAnimation.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::getKeyframes): Ensure we have a CSSValue before trying to serialize it.
        (WebCore::KeyframeEffectReadOnly::computeDeclarativeAnimationBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::computeCSSAnimationBlendingKeyframes): Use the animation's unanimated style to compute keyframes,
        instead of a default RenderStyle which would not use the right values for implicit keyframes.
        (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const): Look at the property used to create
        the transition rather than that specified on the backing Animation object since it can be CSSPropertyInvalid in the case of
        "transition: all".
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle): If we're dealing with a CSS animation, we consider the first and
        last keyframes to always have the property listed since the underlying style was provided and should be captured.
        * animation/KeyframeEffectReadOnly.h:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate): Apply CSS Animations after CSS Trasitions since they take precedence.

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Only cancel declarative animations upon element removal
        https://bugs.webkit.org/show_bug.cgi?id=184553

        Reviewed by Dean Jackson.

        Ensure we only call cancel() on CSSAnimation and CSSTransition objects as we might otherwise reject
        the ready promise and produce spurious logging from WPT tests.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelDeclarativeAnimationsForElement):
        (WebCore::AnimationTimeline::cancelAnimationsForElement): Deleted.
        * animation/AnimationTimeline.h:
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):

2018-04-12  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230554.

        The non-ASCII character in the filename causes issues with SVN

        Reverted changeset:

        "input.webkitEntries does not work as expected when folder
        contains accented chars"
        https://bugs.webkit.org/show_bug.cgi?id=184517
        https://trac.webkit.org/changeset/230554

2018-04-12  Alicia Boya García  <aboya@igalia.com>

        [MSE] Add isValid() assertions on PlatformTimeRanges::add() range ends
        https://bugs.webkit.org/show_bug.cgi?id=180253

        Right now it's checked that start <= end but it's not checked that
        neither of them is undefined.

        When this happens, the bug can be hard to track down.

        The assertion is not enabled for Mac because there is currently a test
        that is hitting it.

        Reviewed by Jer Noble.

        * platform/graphics/PlatformTimeRanges.cpp:
        (WebCore::PlatformTimeRanges::add):

2018-04-12  Chris Dumez  <cdumez@apple.com>

        Process::setIdentifier() / Process::identifier() do not need a lock
        https://bugs.webkit.org/show_bug.cgi?id=184544

        Reviewed by Brady Eidson.

        Process::setIdentifier() / Process::identifier() do not need a lock.
        Process::setIdentifier() gets called in ChildProcess::initialize(),
        before we start any background threads. It is then safe to query
        this process identifier later on from background threads without
        locks.

        * platform/Process.cpp:
        (WebCore::Process::setIdentifier):
        (WebCore::Process::identifier):

2018-04-12  Antoine Quint  <graouts@apple.com>

        Unreviewed, fix the Windows build.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::computeExtentOfAnimation const):

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Suspend animations when required
        https://bugs.webkit.org/show_bug.cgi?id=184541

        Reviewed by Jon Lee.

        Animations managed by CSSAnimationController get suspended under a number of scenarios, we now add the possibility
        to suspend animations on a DocumentTimeline as well such that Web Animations and CSS Animations and CSS Transitions
        implemented as Web Animations get suspended under the same conditions as well. We also update the implementation for
        Internals::numberOfActiveAnimations() such that tests checking that animations get suspended pass.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::suspendAnimations): When asked to be suspended, the DocumentTimeline cancels pending
        invalidation tasks and updates all of the animations it manages, including those running on the compositor.
        (WebCore::DocumentTimeline::resumeAnimations): When asked to be resumed, the DocumentTimeline resumes animations
        it manages and rewinds its invalidation timer.
        (WebCore::DocumentTimeline::animationsAreSuspended):
        (WebCore::DocumentTimeline::numberOfActiveAnimationsForTesting const): Called by Internals::numberOfActiveAnimations(),
        this returns the number of animations managed by this timeline that are not suspended.
        (WebCore::DocumentTimeline::currentTime):
        (WebCore::DocumentTimeline::timingModelDidChange): Ensure the invalidation timer is not rewound if the timeline
        is suspended.
        * animation/DocumentTimeline.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeline): When moving to a new timeline, ensure we match the new timeline's animation state.
        (WebCore::WebAnimation::setSuspended): Toggle the accelerated running state of any backing hardware animations when
        the suspension state of an animation changes.
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isSuspended const):
        * dom/Document.cpp:
        (WebCore::Document::didBecomeCurrentDocumentInFrame):
        (WebCore::Document::resume):
        * dom/Document.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * page/Frame.cpp:
        (WebCore::Frame::clearTimers):
        * page/Page.cpp:
        (WebCore::Page::setIsVisibleInternal):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * testing/Internals.cpp:
        (WebCore::Internals::numberOfActiveAnimations const):
        (WebCore::Internals::animationsAreSuspended const):
        (WebCore::Internals::suspendAnimations const):
        (WebCore::Internals::resumeAnimations const):

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Throttle animations when lowPowerMode is on
        https://bugs.webkit.org/show_bug.cgi?id=184540

        Reviewed by Jon Lee.

        Ensure animations are sampled at a lower frequency when lowPowerMode is on.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateThrottlingState):
        (WebCore::DocumentTimeline::animationInterval const):
        (WebCore::DocumentTimeline::updateAnimationSchedule):
        (WebCore::DocumentTimeline::scheduleAnimationResolution):
        * animation/DocumentTimeline.h:
        * page/Page.cpp:
        (WebCore::Page::handleLowModePowerChange):
        * testing/Internals.cpp:
        (WebCore::Internals::animationsInterval const):

2018-04-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure elements overlapping with elements animating also get composited
        https://bugs.webkit.org/show_bug.cgi?id=184539

        Reviewed by Jon Lee.

        A number of compositing tests failed because we didn't call into the Web Animations engine while various calls
        on RenderLayer and RenderLayerBacking were made. We bring the functionality over from CSSAnimationController to
        DocumentTimeline and KeyframeAnimation to KeyframeEffectReadOnly.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::animationsForElement const): Update this method's signature to be const since it
        should be callable by other const method.
        (WebCore::AnimationTimeline::animationsForElement): Deleted.
        * animation/AnimationTimeline.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::computeExtentOfAnimation const): Adapt this method from CSSAnimationController.
        (WebCore::DocumentTimeline::isRunningAnimationOnRenderer const): Adapt this method from CSSAnimationController.
        (WebCore::DocumentTimeline::isRunningAcceleratedAnimationOnRenderer const): Adapt this method from CSSAnimationController.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::computeExtentOfTransformAnimation const): Bring this method over from KeyframeAnimation.
        (WebCore::containsRotation): Bring this method over from KeyframeAnimation.
        (WebCore::KeyframeEffectReadOnly::computeTransformedExtentViaTransformList const): Bring this method over from KeyframeAnimation.
        (WebCore::KeyframeEffectReadOnly::computeTransformedExtentViaMatrix const): Bring this method over from KeyframeAnimation.
        * animation/KeyframeEffectReadOnly.h:
        (WebCore::KeyframeEffectReadOnly::animatedProperties const): DocumentTimeline::computeExtentOfAnimation() needs to get a list
        of all animated properties to see if a transform is animated, so we now expose such a list.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::currentTransform const): Update this method to call into DocumentTimeline if the CSS Animations
        and CSS Transitions as Web Animations flag is on.
        (WebCore::RenderLayer::calculateClipRects const): Update this method to call into DocumentTimeline if the CSS Animations
        and CSS Transitions as Web Animations flag is on.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGeometry): Update this method to call into DocumentTimeline if the CSS Animations
        and CSS Transitions as Web Animations flag is on.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::isRunningTransformAnimation const): Update this method to call into DocumentTimeline
        if the CSS Animations and CSS Transitions as Web Animations flag is on.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::documentTimeline const):

2018-04-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Enable seeking for hardware animations
        https://bugs.webkit.org/show_bug.cgi?id=184518

        Reviewed by Dean Jackson.

        Hardware animations had lagged behind software animations in support and this patch bring their respective level
        of support closer to one another. Importantly, we add the ability to seek an animation added to a GraphicsLayerCA
        since many tests pause and seek animations to test their state. Animations may also have their playback state changed
        along with their current time in the same run loop, so we now maintain a list of pending processing actions for
        hardware animations.

        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimationSchedule): If we have animations queued up for updates to their accelerated
        state we can schedule animation resolution immediately since we've already established we'll have work to do.
        (WebCore::DocumentTimeline::updateAnimations): Factor the updates of pending accelerated animations out in a dedicated
        method.
        (WebCore::DocumentTimeline::applyPendingAcceleratedAnimations): Go through all pending accelerated animations and update
        their state.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::setBlendingKeyframes): Update the m_shouldRunAccelerated flag when setting blending keyframes.
        (WebCore::KeyframeEffectReadOnly::apply): Ensure we finish accelerated animations if the progress is 1 or null (no longer active).
        start accelerated animations if the animation is starting and always resolve styles in software as well to ensure that
        hit testing will work as expected.
        (WebCore::KeyframeEffectReadOnly::computeShouldRunAccelerated):
        (WebCore::KeyframeEffectReadOnly::animationPlayStateDidChange): Called by WebAnimation when play() or pause() is called
        with the appropriate flag.
        (WebCore::KeyframeEffectReadOnly::animationDidSeek): Called by WebAnimation when the currentTime property is set.
        (WebCore::KeyframeEffectReadOnly::addPendingAcceleratedAction): Add the provided action to the list of pending accelerated
        actions and notify the animation that the accelerated state needs changing.
        (WebCore::KeyframeEffectReadOnly::applyPendingAcceleratedActions): Called by DocumentTimeline, through WebAnimation, to apply
        all pending accelerated actions.
        (WebCore::KeyframeEffectReadOnly::backingAnimationForCompositedRenderer const): If we're dealing with a declarative animation,
        we already have a backing Animation object, so use it directly. Otherwise, create one and ensure it reflects all timing properties
        for the animation.
        (WebCore::KeyframeEffectReadOnly::shouldRunAccelerated): Deleted.
        (WebCore::KeyframeEffectReadOnly::startOrStopAccelerated): Deleted.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setCurrentTime): Call animationDidSeek() on the effect to ensure its accelerated animation gets seeked.
        (WebCore::WebAnimation::play): Call animationPlayStateDidChange() on the effect to ensure its accelerated animation is started or resumed.
        (WebCore::WebAnimation::pause): Call animationPlayStateDidChange() on the effect to ensure its accelerated animation gets paused.
        (WebCore::WebAnimation::acceleratedStateDidChange): 
        (WebCore::WebAnimation::applyPendingAcceleratedActions):
        (WebCore::WebAnimation::acceleratedRunningStateDidChange): Deleted.
        (WebCore::WebAnimation::startOrStopAccelerated): Deleted.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::seekAnimation):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addProcessingActionForAnimation): Add an AnimationProcessingAction to the list of such actions for a
        given animation name. In case we already have a Remove action, we ignore the action since the hardware animation will have been
        removed by the time we try to apply this processing action.
        (WebCore::GraphicsLayerCA::pauseAnimation): Add a Pause processing action.
        (WebCore::GraphicsLayerCA::seekAnimation): Add a Seek processing action.
        (WebCore::GraphicsLayerCA::removeAnimation): Add a Remove processing action.
        (WebCore::GraphicsLayerCA::updateAnimations): First ensure that all animations pending commit are committed and then update
        all animations based on the actions added through addProcessingActionForAnimation().
        (WebCore::GraphicsLayerCA::seekCAAnimationOnLayer): Generate a new animation based on the new seek time provided.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::AnimationProcessingAction::AnimationProcessingAction):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::animationSeeked):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::animationSeeked):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation const): Fix an issue where we would run the CSSAnimationController
        logic even when the legacy animation engine was disabled.

2018-04-12  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed, fix GStreamer builds

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): We were
        passing a String to a GST_WARNING call.

2018-04-11  Chris Dumez  <cdumez@apple.com>

        input.webkitEntries does not work as expected when folder contains accented chars
        https://bugs.webkit.org/show_bug.cgi?id=184517
        <rdar://problem/39265537>

        Reviewed by Ryosuke Niwa.

        Use String::fromUTF8() to construct a WTF String from the char* returned by
        dirname() in FileSystem::directoryName(). Previously, we were just calling
        the String constructor, which would treat the input as latin 1 instead of
        UTF-8.

        Test: fast/forms/file/entries-api/webkitEntries-nonascii-folder-name.html

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::FileSystem::directoryName):

2018-04-11  Youenn Fablet  <youenn@apple.com>

        Preventively expect UTF8 strings from libwebrtc SDP and error messages
        https://bugs.webkit.org/show_bug.cgi?id=184509

        Reviewed by Eric Carlson.

        Make WebCore code expect any libwebrtc string to contain UTF-8.
        Currently SDPs do not contain any UTF-8 specific character
        but https://tools.ietf.org/html/rfc4566 allows it.

        Add Internals API to set track id so that we can inject UTF-8 inside some WebRTC tests.
        Test: webrtc/utf8-sdp.html

        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::setIdForTesting):
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fromStdString):
        (WebCore::fromSessionDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetLocalDescription):
        (WebCore::LibWebRTCMediaEndpoint::doSetRemoteDescription):
        (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream):
        (WebCore::LibWebRTCMediaEndpoint::addRemoteTrack):
        (WebCore::LibWebRTCMediaEndpoint::addDataChannel):
        (WebCore::LibWebRTCMediaEndpoint::OnIceCandidate):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionSucceeded):
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed):
        (WebCore::trackId): Deleted.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::fromStdString):
        (WebCore::LibWebRTCPeerConnectionBackend::doAddIceCandidate):
        (WebCore::createReceiverForSource):
        * platform/mediastream/MediaStreamTrackPrivate.h:
        (WebCore::MediaStreamTrackPrivate::setIdForTesting):
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaStreamTrackIdentifier):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-04-11  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Cache glyphs (using display lists) when painting at high frequency
        https://bugs.webkit.org/show_bug.cgi?id=178750
        <rdar://problem/35201729>

        Reviewed by Antti Koivisto.

        This patch adds support for caching of glyph drawing commands when painting
        at high frequency. Caching the glyph drawing will be done using DisplayLists.

        GlyphDisplayListCache is basically a hash map which maps InlineTextBox
        or SimpleLineLayout::Run to DisplayList. Before adding a new entry to it
        we have to check whether the conditions for caching the glyph DisplayList
        are met or not. If no entry is found for a given run, a new DisplayList
        is created and a new entry is add to the cache.

        * WebCore.xcodeproj/project.pbxproj:
        * page/MemoryRelease.cpp:
        (WebCore::releaseNoncriticalMemory): Make GlyphDisplayListCache respond
        to memory pressure.

        * platform/graphics/FontCascade.cpp:
        (WebCore::FontCascade::displayListForTextRun const):
        * platform/graphics/FontCascade.h:
        (WebCore::FontCascade::displayListForTextRun):
        Record the drawing of a glyph run into a DisplayList.

        * rendering/GlyphDisplayListCache.h: Added.
        (WebCore::GlyphDisplayListCache::singleton):
        (WebCore::GlyphDisplayListCache::get):
        (WebCore::GlyphDisplayListCache::remove):
        (WebCore::GlyphDisplayListCache::clear):
        (WebCore::GlyphDisplayListCache::size const):
        (WebCore::GlyphDisplayListCache::sizeInBytes const):
        A simple cache for the TextRun DisplayList. Adding a new entry in the
        cache happens under restricted conditions. So this cache is not expected
        to grow much.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::~InlineTextBox):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintMarkedTexts):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintCompositionUnderlines const):
        (WebCore::InlineTextBox::paintCompositionUnderline const):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::paintMarkedTexts):
        InlineTextBox::paintMarkedTextForeground() now requires PaintInfo to know
        whether the entry in the GlyphDisplayListCache should be removed or not.
        Change all the GraphicsContext arguments to be PaintInfo.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Layout::~Layout):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::simpleLineLayoutWillBeDeleted):
        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::simpleRun const):
        Implement the glyph caching for SimpleLineLayout::Run.

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintTextOrEmphasisMarks): If the DisplayList is
        available, replay it back into the GraphicsContext. Make sure to reset to
        the DisplayList pointer to nullptr after painting.

        (WebCore::TextPainter::clearGlyphDisplayLists):
        (WebCore::TextPainter::shouldUseGlyphDisplayList): Check whether we should
        use DisplayList to the draw glyph run.

        * rendering/TextPainter.h:
        (WebCore::TextPainter::setGlyphDisplayListIfNeeded): Check whether we should
        should use DisplayList to the draw glyph run and if we should, ensure first
        the DisplayList is cached and set it in the TextPainter so it uses it when
        the run is painted.

        (WebCore::TextPainter::removeGlyphDisplayList): Remove the cached DisplayList
        entry for a glyph layout run.

2018-04-11  Brent Fulgham  <bfulgham@apple.com>

        GraphicsLayerCA::createPlatformCALayer always disables extended color in its backing store
        https://bugs.webkit.org/show_bug.cgi?id=184367
        <rdar://problem/39249074>

        Reviewed by Simon Fraser.

        'createPlatformCALayer' always passes a nil widget, which early returns from 'screenSupportsExtendedColor'
        with false. Instead, we should just pass the widget (nil or not) to the screen properties methods,
        which will use the primary screen if no screen is specified. I.e., we shouldn't do an early return
        here if the passed widget is nil.

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenSupportsExtendedColor):

2018-04-11  Youenn Fablet  <youenn@apple.com>

        Pass FetchOptions and SecurityOrigin as load parameters from WebProcess to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=184374

        Reviewed by Chris Dumez.

        Add support for SecurityOrigin encode/decode routines.

        * page/SecurityOrigin.h:

2018-04-11  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Use of playbin3 when USE_PLAYBIN3 environment variable is set
        https://bugs.webkit.org/show_bug.cgi?id=184498

        Reviewed by Philippe Normand.

        [GStreamer] Use of playbin3 when USE_PLAYBIN3 environment variable is set

        This is the same behaviour as with playbin itself.

        Make sure to keep using "playbin" for MediaSource.

        No test added as this is basically a small rework of the way we expose a feature.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::disconnect):
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:

2018-04-10  Alex Christensen  <achristensen@webkit.org>

        IDN spoofing with Hebrew combining characters
        https://bugs.webkit.org/show_bug.cgi?id=184472
        <rdar://problem/39148687>

        Reviewed by Brent Fulgham.

        Covered by new API tests.

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):
        Punycode-encode hosts with Hebrew combining marks that look like dots
        and Vav with a combining dot above like we do with dotless i and j.

2018-04-11  Brent Fulgham  <bfulgham@apple.com>

        Show punycode if URL contains Latin dum character
        https://bugs.webkit.org/show_bug.cgi?id=184477
        <rdar://problem/39121999>

        Reviewed by David Kilzer.

        Revise our "lookalike character" logic to include the small
        Latin dum character.

        Test: fast/url/host.html

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2018-04-11  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WaylandCompositorDisplay leaks its wl_display
        https://bugs.webkit.org/show_bug.cgi?id=184406

        Reviewed by Carlos Garcia Campos.

        Well, this was harder than expected. We really just want to fix a small leak in the WebKit
        layer, but that requires a change in how WaylandCompositorDisplay calls the
        PlatformDisplayWayland constructor, to pass NativeDisplayOwned::Yes. That means
        WaylandCompositorDisplay can no longer use PlatformDisplayWayland's protected default
        constructor. Problem is that the normal PlatformDisplayWayland constructor calls
        PlatformDisplayWayland::initialize, which calls PlatformDisplayWayland::registryGlobal,
        which is a virtual function. The WaylandCompositorDisplay portion of the object is not
        constructed yet at this point, so WaylandCompositorDisplay::registryGlobal will never be
        called if we do that. I had to revert the previous version of this fix due to this problem.
        It had broken accelerated compositing.

        I'm reminded of Effective C++ item #9: Never call virtual functions during construction or
        destruction ("because such calls will never go to a more derived class than that of the
        currently executing constructor or destructor"). This code is fragile and likely to break
        again in the future, so let's refactor it a bit. Instead of calling initialize in the
        constructor, we'll call it from create functions. We'll have to add a couple create
        functions, and make the constructor protected to ensure it's not possible to create a
        PlatformDisplayWayland without initializing it. For good parallelism, do the same for the
        other PlatformDisplay classes.

        This commit additionally removes PlatformDisplayWayland's protected default constructor,
        since it's not needed anymore.

        The NativeDisplayOwned arguments to the PlatformDisplay constructors are now mandatory,
        instead of using NativeDisplayOwned::No as the default value, since that was dangerously
        close to being the cause of this leak, and the constructors are now accessed from private
        create functions anyway. Some more caution when using default parameter values is warranted
        in the future.

        Lastly, since we have to change PlatformDisplay::createPlatformDisplay to use the new create
        functions, take the opportunity to move things around a bit for clarity. There should be no
        change in behavior. I was just disappointed that the PlatformDisplayWPE creation was at the
        bottom of the function, after a comment indicating that normal display creation has failed,
        which is not the case for WPE.

        This all might have been a bit overkill, since the leak could probably have been fixed by
        passing nullptr to the PlatformDisplayWayland constructor for the wl_display and not
        removing WaylandCompositorDisplay's call to PlatformDisplayWayland::initialize. But the
        correctness of that code would then rely on implementation details of initialize, so this
        refactor seems better.

        No new tests since there *should* be no behavior change. Then again, I'm touching
        PlatformDisplay, and history shows we don't have the greatest track record of touching this
        code without introducing problems.

        * platform/graphics/PlatformDisplay.cpp:
        (WebCore::PlatformDisplay::createPlatformDisplay):
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::create):
        (WebCore::PlatformDisplayWayland::create):
        (WebCore::PlatformDisplayWayland::createHeadless):
        (WebCore::PlatformDisplayWayland::PlatformDisplayWayland):
        (WebCore::PlatformDisplayWayland::initialize):
        * platform/graphics/wayland/PlatformDisplayWayland.h:
        * platform/graphics/win/PlatformDisplayWin.h:
        * platform/graphics/wpe/PlatformDisplayWPE.cpp:
        (WebCore::create):
        * platform/graphics/wpe/PlatformDisplayWPE.h:
        * platform/graphics/x11/PlatformDisplayX11.cpp:
        (WebCore::PlatformDisplayX11::create):
        (WebCore::PlatformDisplayX11::create):
        (WebCore::PlatformDisplayX11::createHeadless):
        * platform/graphics/x11/PlatformDisplayX11.h:

2018-04-11  Jianjun Zhu  <jianjun.zhu@intel.com>

        Fix a WebRTC data channel issue for non-ASCII characters.

        At the sender side, buffer size are calulcated after UTF8 encoding. At the
        receiver side, strings are constructed with UTF8 data.

        https://bugs.webkit.org/show_bug.cgi?id=184481

        Reviewed by Youenn Fablet.

        Updated test:
        LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCDataChannel-send-expected.txt

        * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp:
        (WebCore::LibWebRTCDataChannelHandler::sendStringData):
        (WebCore::LibWebRTCDataChannelHandler::OnMessage):

2018-04-11  Antti Koivisto  <antti@apple.com>

        ImageFrame type used by non-Cocoa image decoder should not be the same as that used by ImageSource
        https://bugs.webkit.org/show_bug.cgi?id=184418

        Reviewed by Said Abou-Hallawa.

        ScalableImageDecoder uses ImageFrame class which is meant to be an implementation detail of ImageSource.
        There are bunch of fields and methods in the type that are only used by one or the other client. For hackability
        there should be an unrelated frame type for ScalableImageDecoder.

        This patch adds ScalableImageDecoderFrame type used in ScalableImageDecoder only. It then cleans up
        unneeded things from both ImageFrame and ScalableImageDecoderFrame.

        * platform/ImageDecoders.cmake:
        * platform/graphics/ImageFrame.cpp:
        (WebCore::ImageFrame::operator=):
        (WebCore::ImageFrame::clearImage):
        (WebCore::ImageFrame::size const):
        (WebCore::ImageFrame::initialize): Deleted.
        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::setDisposalMethod): Deleted.
        (WebCore::ImageFrame::disposalMethod const): Deleted.
        (WebCore::ImageFrame::backingStore const): Deleted.
        (WebCore::ImageFrame::hasBackingStore const): Deleted.
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameIsCompleteAtIndex const):
        (WebCore::ScalableImageDecoder::frameDurationAtIndex const):
        (WebCore::ScalableImageDecoder::createFrameImageAtIndex):
        * platform/image-decoders/ScalableImageDecoder.h:
        * platform/image-decoders/ScalableImageDecoderFrame.cpp: Copied from Source/WebCore/platform/graphics/ImageFrame.cpp.
        (WebCore::ScalableImageDecoderFrame::ScalableImageDecoderFrame):
        (WebCore::ScalableImageDecoderFrame::~ScalableImageDecoderFrame):
        (WebCore::ScalableImageDecoderFrame::operator=):
        (WebCore::ScalableImageDecoderFrame::setDecodingStatus):
        (WebCore::ScalableImageDecoderFrame::decodingStatus const):
        (WebCore::ScalableImageDecoderFrame::clearImage):
        (WebCore::ScalableImageDecoderFrame::clear):
        (WebCore::ScalableImageDecoderFrame::initialize):
        (WebCore::ScalableImageDecoderFrame::size const):
        (WebCore::ImageFrame::ImageFrame): Deleted.
        (WebCore::ImageFrame::~ImageFrame): Deleted.
        (WebCore::ImageFrame::defaultFrame): Deleted.
        (WebCore::ImageFrame::operator=): Deleted.
        (WebCore::ImageFrame::setDecodingStatus): Deleted.
        (WebCore::ImageFrame::decodingStatus const): Deleted.
        (WebCore::ImageFrame::clearImage): Deleted.
        (WebCore::ImageFrame::clear): Deleted.
        (WebCore::ImageFrame::initialize): Deleted.
        (WebCore::ImageFrame::size const): Deleted.
        (WebCore::ImageFrame::hasNativeImage const): Deleted.
        (WebCore::ImageFrame::hasFullSizeNativeImage const): Deleted.
        (WebCore::ImageFrame::hasDecodedNativeImageCompatibleWithOptions const): Deleted.
        (WebCore::ImageFrame::singlePixelSolidColor const): Deleted.
        * platform/image-decoders/ScalableImageDecoderFrame.h: Copied from Source/WebCore/platform/graphics/ImageFrame.h.
        (WebCore::ScalableImageDecoderFrame::ScalableImageDecoderFrame):
        (WebCore::ScalableImageDecoderFrame::disposalMethod const):
        (WebCore::ScalableImageDecoderFrame::hasAlpha const):
        (WebCore::ScalableImageDecoderFrame::hasBackingStore const):
        (WebCore::ImageFrame::ImageFrame): Deleted.
        (WebCore::ImageFrame::isInvalid const): Deleted.
        (WebCore::ImageFrame::isPartial const): Deleted.
        (WebCore::ImageFrame::isComplete const): Deleted.
        (WebCore::ImageFrame::sizeRespectingOrientation const): Deleted.
        (WebCore::ImageFrame::frameBytes const): Deleted.
        (WebCore::ImageFrame::subsamplingLevel const): Deleted.
        (WebCore::ImageFrame::setDisposalMethod): Deleted.
        (WebCore::ImageFrame::disposalMethod const): Deleted.
        (WebCore::ImageFrame::nativeImage const): Deleted.
        (WebCore::ImageFrame::setOrientation): Deleted.
        (WebCore::ImageFrame::orientation const): Deleted.
        (WebCore::ImageFrame::setDuration): Deleted.
        (WebCore::ImageFrame::duration const): Deleted.
        (WebCore::ImageFrame::setHasAlpha): Deleted.
        (WebCore::ImageFrame::hasAlpha const): Deleted.
        (WebCore::ImageFrame::hasNativeImage): Deleted.
        (WebCore::ImageFrame::hasFullSizeNativeImage): Deleted.
        (WebCore::ImageFrame::hasMetadata const): Deleted.
        (WebCore::ImageFrame::backingStore const): Deleted.
        (WebCore::ImageFrame::hasBackingStore const): Deleted.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::setBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::GIFImageDecoder::frameBufferAtIndex):
        (WebCore::GIFImageDecoder::clearFrameBufferCache):
        (WebCore::GIFImageDecoder::haveDecodedRow):
        (WebCore::GIFImageDecoder::frameComplete):
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::parse):
        * platform/image-decoders/gif/GIFImageReader.h:
        (GIFFrameContext::GIFFrameContext):
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        (WebCore::setPixel):
        (WebCore::JPEGImageDecoder::outputScanlines):
        (WebCore::JPEGImageDecoder::jpegComplete):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        (WebCore::PNGImageDecoder::rowAvailable):
        (WebCore::PNGImageDecoder::readChunks):
        (WebCore::PNGImageDecoder::clearFrameBufferCache):
        (WebCore::PNGImageDecoder::initFrameBuffer):
        (WebCore::PNGImageDecoder::frameComplete):
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::frameBufferAtIndex):
        (WebCore::WEBPImageDecoder::findFirstRequiredFrameToDecode):
        (WebCore::WEBPImageDecoder::decodeFrame):
        (WebCore::WEBPImageDecoder::initFrameBuffer):
        (WebCore::WEBPImageDecoder::applyPostProcessing):
        (WebCore::WEBPImageDecoder::clearFrameBufferCache):
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2018-04-11  Antoine Quint  <graouts@apple.com>

        [Web Animations] Turn Web Animations on by default
        https://bugs.webkit.org/show_bug.cgi?id=184491

        Reviewed by Simon Fraser.

        * page/RuntimeEnabledFeatures.h:

2018-04-11  Ryosuke Niwa  <rniwa@webkit.org>

        Fix warning in HashTools.h for newer versions of clang
        https://bugs.webkit.org/show_bug.cgi?id=184489

        Reviewed by Alexey Proskuryakov.

        Removed "register" storage class specififer as it has been deprecated in C++11.

        * platform/HashTools.h:

2018-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        FrameSelection::appearanceUpdateTimerFired should be robust against layout passes underneath it
        https://bugs.webkit.org/show_bug.cgi?id=183395
        <rdar://problem/38055732>

        Reviewed by Zalan Bujtas.

        In the case where a FrameSelection updates its appearance when m_appearanceUpdateTimer is fired, the
        FrameSelection's Frame is unprotected, and can be removed by arbitrary script. This patch applies a simple
        mitigation by wrapping the Frame in a Ref when firing the appearance update timer.

        Test: editing/selection/iframe-update-selection-appearance.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::appearanceUpdateTimerFired):

2018-04-10  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed follow-up to r230468.

        Switch some RELEASE_ASSERTs in hot codepaths to normal DEBUG asserts.

        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):

2018-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the iOS build

        I accidentally exported an inline function in r230506.

        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::viewSize const):

2018-04-10  Nan Wang  <n_wang@apple.com>

        AX: Expose strong password fields on iOS
        https://bugs.webkit.org/show_bug.cgi?id=184465
        <rdar://problem/39325104>

        Reviewed by Chris Fleizach.

        Exposed the strong password field on iOS. And made sure
        we are returning its actual value in accessibilityValue.

        Test: accessibility/ios-simulator/strong-password-field.html

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

2018-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win] Add UserAgentWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=184438

        Reviewed by Michael Catanzaro.

        No new tests (No behavior change).

        * PlatformWin.cmake:
        * platform/win/UserAgentWin.cpp: Added.
        (WebCore::standardUserAgent):
        (WebCore::standardUserAgentForURL):

2018-04-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add a mechanism to zoom to fixed scales when double tapping in extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=184435
        <rdar://problem/38726260>

        Reviewed by Dean Jackson.

        Expose the size of the platform view. By default, in extra zoom mode, this *not* the same as the minimum layout
        size, since we lay out at a large width and then shrink down to real device dimensions when computing the
        initial scale (see r229063).

        ViewGestureGeometryCollector uses this in the process of computing a target zoom scale when double tapping.

        * page/ViewportConfiguration.h:
        (WebCore::ViewportConfiguration::viewSize const):

2018-04-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebKit] LibWebRTCProvider::webRTCAvailable is an undefined symbol
        https://bugs.webkit.org/show_bug.cgi?id=184437

        Reviewed by Michael Catanzaro.

        No new tests (No behavior change).

        * PlatformWin.cmake: Added LibWebRTCProviderWin.cpp.
        * platform/mediastream/libwebrtc/LibWebRTCProviderWin.cpp: Added.
        (WebCore::LibWebRTCProvider::webRTCAvailable):

2018-04-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix.

        Those enum value names were too generic and would cause conflicts.

        * Modules/webvr/VRDisplayCapabilities.h:
        (WebCore::VRDisplayCapabilities::hasPosition const):
        (WebCore::VRDisplayCapabilities::hasOrientation const):
        (WebCore::VRDisplayCapabilities::hasExternalDisplay const):
        (WebCore::VRDisplayCapabilities::canPresent const):
        * platform/vr/VRPlatformDisplay.h:
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):

2018-04-10  Chris Dumez  <cdumez@apple.com>

        Avoid constructing a service worker RegistrationStore for private sessions
        https://bugs.webkit.org/show_bug.cgi?id=184463
        <rdar://problem/36613948>

        Reviewed by Youenn Fablet.

        Avoid constructing a service worker RegistrationStore for private sessions since there
        is no need for persistence and the registrationDatabaseDirectory is the empty string in
        such cases.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::didFinishActivation):
        * workers/service/server/SWServer.h:

2018-04-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed build fix.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::~LayoutContext):
        * page/LayoutContext.h:

2018-04-10  Jeremy Jones  <jeremyj@apple.com>

        MediaSessionManageriOS should defer creation of MPVolumeView until it needs to monitor AirPlay routes
        https://bugs.webkit.org/show_bug.cgi?id=184373
        <rdar://problem/35177606>

        Reviewed by Eric Carlson.

        No change of behavior.

        This delays the creation of MPVolumeView until airplay routes are monitored.
        MPVolumeView is now also released when monitoring ends. 
        This makes sure the MP* objects are only accessed from a UI safe thread. WebCore's "MainThread" may be different that the UI thread.
        Since this state change is necessarily asynchronous, starting and stopping must prevent races to keep state coherent.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper dealloc]):
        (-[WebMediaSessionHelper startMonitoringAirPlayRoutes]):
        (-[WebMediaSessionHelper stopMonitoringAirPlayRoutes]):
        (-[WebMediaSessionHelper allocateVolumeView]): Deleted.
        (-[WebMediaSessionHelper setVolumeView:]): Deleted.

2018-04-10  Sihui Liu  <sihui_liu@apple.com>

        Loading of multipart response was cancelled because of content policy set in WebFrameLoaderClient::dispatchDecidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=184268
        <rdar://problem/39144446>

        Reviewed by Chris Dumez.

        The assertion is no longer true after the change, because multiple resources could have same
        url. Used if condition here to make sure we only delete specified resource.

        No new tests. Updated an existing test to test the stop loading case by not using injected 
        bundle policy: http/tests/multipart/multipart-html.php.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::removeCachedResource):

2018-04-10  Zalan Bujtas  <zalan@apple.com>

        Do not layout images when we only need the overflow information.
        https://bugs.webkit.org/show_bug.cgi?id=175331

        Reviewed by Simon Fraser.

        This improves MotionMark's Simple Leaves by ~10%. 

        Covered by existing tests.

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

2018-04-10  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] TextureMapperLayer unnecessarily duplicates state in GraphicsLayerTransform
        https://bugs.webkit.org/show_bug.cgi?id=183868

        Reviewed by Carlos Garcia Campos.

        Drop the GraphicsLayerTransform member variable from TextureMapperLayer
        and instead compute all the required transform information in the
        computeTransformsRecursive() method. These computations are not too
        expensive, and in turn we can drop an object from this class' state that
        was only duplicating a bunch of state variables.

        No new tests -- no change in functionality.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::computeTransformsRecursive):
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::paintSelfAndChildren):
        (WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica):
        (WebCore::TextureMapperLayer::replicaTransform):
        (WebCore::TextureMapperLayer::computeOverlapRegions):
        (WebCore::TextureMapperLayer::setPosition):
        (WebCore::TextureMapperLayer::setSize):
        (WebCore::TextureMapperLayer::setAnchorPoint):
        (WebCore::TextureMapperLayer::setPreserves3D):
        (WebCore::TextureMapperLayer::setTransform):
        (WebCore::TextureMapperLayer::setChildrenTransform):
        (WebCore::TextureMapperLayer::syncAnimations):
        (WebCore::TextureMapperLayer::setScrollPositionDeltaIfNeeded):
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-04-09  Brent Fulgham  <bfulgham@apple.com>

        Add ProcessPrivilege assertions to places that access NSApp
        https://bugs.webkit.org/show_bug.cgi?id=184322
        <rdar://problem/39194560>

        Reviewed by Per Arne Vollan.

        Add ProcessPrivilege assertions to places where we interact with NSApp so
        that we can prevent accidentally using them in the WebContent process.

        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):

2018-04-09  John Wilander  <wilander@apple.com>

        Refactor Ignore HSTS code
        https://bugs.webkit.org/show_bug.cgi?id=184433
        <rdar://problem/39298238>

        Reviewed by Darin Adler.

        This patch refactors our ignore HSTS code. The convenience functions are moved
        out of CFNetwork SPI in PAL, and into where they are used. It also switches
        from performSelector: calls to straight function calls, after checking that
        there is a responder.

        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::schemeWasUpgradedDueToDynamicHSTS):
            Add convenience function here since it was moved out of
            CFNetworkSPI.h.

2018-04-09  Brady Eidson  <beidson@apple.com>

        Expand WebCore policy concept of "shouldContinue" to allow for more than true/false
        https://bugs.webkit.org/show_bug.cgi?id=184424

        Reviewed by Alex Christensen.

        No new tests (No behavior change, refactor only)

        Specifically this expands the "shouldContinue" bool to be an enum class with:
        -Yes
        -No
        -ForSuspension

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        * loader/FrameLoader.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * loader/PolicyChecker.h:

2018-04-09  Sihui Liu  <sihui_liu@apple.com>

        REGRESSION(r229929): localStorage is broken for WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=184382
        <rdar://problem/39257355>

        Reviewed by Chris Dumez.

        Removed an if condition that caused false positive cases of database error. As per 
        https://www.sqlite.org/c3ref/errcode.html, return value of sqlite3_errcode() is undefined
        on successful API call, so we should not use the code to check if there is an error. We
        should only use it when there is an error.
        After moving this condition, LocalStorage might return empty string instead of NULL on
        sqlite3_column_blob() error.

        Modified a test to cover this case: 
        TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::getColumnBlobAsString):

2018-04-09  Brent Fulgham  <bfulgham@apple.com>

        WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll is directly accessing NSScreen
        https://bugs.webkit.org/show_bug.cgi?id=184344
        <rdar://problem/39224969>

        Reviewed by Per Arne Vollan.

        The implementation of targetPositionInWindowForSelectionAutoscroll uses the display ID to get the
        screen boundaries of the current display. This causes a bunch of interaction with NSScreen that
        we do not want to allow in the WebContent process.

        Instead, we should just use the cached screen information the WebContent process already possesses.

        This patch makes the following changes:
        1. We now retrieve the screen rect of the page's display from the cache, rather than interacting with
           the WindowServer directly.
        2. Add a new 'toUserSpaceForPrimaryScreen' so we don't have to deal with a nil NSWindow when computing
           the user space version of the coordinates. A nil Window just means we want to get coordinates in
           terms of the primary display.
        3. Keep track of the primary display so we can refer to it later.
        4. Modify the IPC messages to include the primary display's ID so we can easily access it later.
        5. Modify the PlatformScreen methods to actually use the primary display when appropriate, rather
           than whichever screen happened to hash to the lowest value.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll const): Use new methods that
        don't require WindowServer access.
        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayID): Assert if we hit this code in the WebContent process.
        (WebCore::firstScreen): Ditto.
        (WebCore::window): Ditto.
        (WebCore::screen): Ditto.
        (WebCore::primaryScreenID): Added.
        (WebCore::getScreenProperties): Modify to return a pair consisting of the primary display ID and
        the HashSet of screen settings.
        (WebCore::setScreenProperties): Update to also track the primary display ID.
        (WebCore::screenProperties): Update to use the primary display ID.
        (WebCore::screenHasInvertedColors): Ditto.
        (WebCore::toUserSpaceForPrimaryScreen): Added.

2018-04-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Make InlineTextBox::createTextRun() take a const lvalue reference String
        https://bugs.webkit.org/show_bug.cgi?id=184182

        Reviewed by Zalan Bujtas.

        InlineTextBox::createTextRun() takes a non-const lvalue reference String.
        It is tempting to change the signature of this method to take a const lvalue 
        reference. But this was done intentionally. TextRun is effectively a StringView:
        it does not own the passed string. Having the argument a non-const lvalue
        reference makes the compiler prevent calls like createTextRun("abc").

        To have a better way to express the lifetime of TextRun, this patch does
        the following:

        -- It makes TextRun::m_text of type String instead of StringView.
        -- It adds a new constructor which takes const String&. This constructor
           will addRef the underlying StringImpl when assigning it to m_text.
        -- It keeps the constructor which takes a StringView. The caller of this
           constructor still has to make sure the underlying String outlives the
           TextRun. To avoid copying the underlying buffer of the StringView, we
           will not use  StringView::toString(). Instead we will use
           StringView::toStringWithoutCopying() which makes the returned String 
           accesses the same buffer the StringView uses. In this case, the returned
           String is effectively a StringView.

        * page/DebugPageOverlays.cpp:
        (WebCore::drawRightAlignedText):
        * platform/graphics/TextRun.cpp:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun const):
        (WebCore::TextRun::length const):
        (WebCore::TextRun::setText):
        (WebCore::TextRun::string const): Deleted.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        (WebCore::InlineTextBox::offsetForPosition const):
        (WebCore::InlineTextBox::positionForOffset const):
        (WebCore::InlineTextBox::createTextRun const):
        There is no need for this function to take a String argument anymore. The
        reason for passing the String was to guarantee its lifetime by keeping
        a copy of it in the caller side. Now there is no need for that. The TextRun
        itself will keep this copy.

        * rendering/InlineTextBox.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computeCanUseSimplifiedTextMeasuring const):
        RenderText::text() returns StringImpl. The compiler wants us to be more
        explicit about which constructor of TextRun to call.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForFontAndText):
        * rendering/SimpleLineLayoutTextFragmentIterator.cpp:
        (WebCore::SimpleLineLayout::TextFragmentIterator::Style::Style):
        RenderStyle::hyphenString() returns an AtomicString.

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r230390.

        Broke accelerated compositing

        Reverted changeset:

        "[GTK] WaylandCompositorDisplay leaks its wl_display"
        https://bugs.webkit.org/show_bug.cgi?id=184406
        https://trac.webkit.org/changeset/230390

2018-04-03  Sergio Villar Senin  <svillar@igalia.com>

        [OpenVR][WebVR] Retrieve FrameData in WebVR's rAF
        https://bugs.webkit.org/show_bug.cgi?id=184265

        Reviewed by Žan Doberšek.

        VRFrameData contains all the required information to properly render a VR scene like view
        and projection matrices, pose data (position & orientation) and linear & angular velocity
        among others. The getFrameData() call must be issued inside a WebVR's own
        requestAnimationFrame.

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::getFrameData const):
        (WebCore::VRDisplay::getPose const):
        (WebCore::VRDisplay::requestAnimationFrame):
        (WebCore::VRDisplay::cancelAnimationFrame):
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VREyeParameters.h:
        (WebCore::VREyeParameters::rawOffset const): Required to compute view matrices.
        * Modules/webvr/VRFrameData.cpp:
        (WebCore::matrixToArray):
        (WebCore::VRFrameData::leftProjectionMatrix const):
        (WebCore::VRFrameData::leftViewMatrix const):
        (WebCore::VRFrameData::rightProjectionMatrix const):
        (WebCore::VRFrameData::rightViewMatrix const):
        (WebCore::projectionMatrixFromFieldOfView):
        (WebCore::rotationMatrixFromQuaternion):
        (WebCore::applyHeadToEyeTransform):
        (WebCore::VRFrameData::update):
        (WebCore::VRFrameData::timestamp const): Deleted.
        * Modules/webvr/VRFrameData.h:
        (WebCore::VRFrameData::timestamp const):
        * Modules/webvr/VRPose.cpp:
        (WebCore::optionalFloat3ToJSCArray):
        (WebCore::VRPose::position const):
        (WebCore::VRPose::linearVelocity const):
        (WebCore::VRPose::linearAcceleration const):
        (WebCore::VRPose::orientation const):
        (WebCore::VRPose::angularVelocity const):
        (WebCore::VRPose::angularAcceleration const):
        * Modules/webvr/VRPose.h:
        (WebCore::VRPose::create):
        (WebCore::VRPose::update):
        (WebCore::VRPose::VRPose):
        * platform/vr/VRPlatformDisplay.h:
        (WebCore::VRPlatformTrackingInfo::Quaternion::Quaternion):
        (WebCore::VRPlatformTrackingInfo::Quaternion::conjugate):
        (WebCore::VRPlatformTrackingInfo::Quaternion::operator*):
        (WebCore::VRPlatformTrackingInfo::Float3::Float3): Just a group of 3 floats used to store
        both velocity and acceleration in a format which is very convenient to later generate JSC
        arrays.
        (WebCore::VRPlatformTrackingInfo::clear):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):
        (WebCore::rotationMatrixToQuaternion):
        (WebCore::VRPlatformDisplayOpenVR::getTrackingInfo):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h:

2018-04-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] WaylandCompositorDisplay leaks its wl_display
        https://bugs.webkit.org/show_bug.cgi?id=184406

        Reviewed by Carlos Garcia Campos.

        Remove the protected default constructor, for good measure.

        * platform/graphics/wayland/PlatformDisplayWayland.h:

2018-04-08  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] WebKit should link to WebCore as a PRIVATE library if WebCore is a static library
        https://bugs.webkit.org/show_bug.cgi?id=184127

        Reviewed by Konstantin Tokarev.

        No new tests (No behaviour changes).

        * CMakeLists.txt: Added a interface library WebCoreHeaderInterface.

2018-04-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use alignas instead of compiler-specific attributes
        https://bugs.webkit.org/show_bug.cgi?id=183508

        Reviewed by Mark Lam.

        Use alignas instead of aligned.

        * platform/graphics/cpu/arm/filters/FELightingNEON.cpp:
        * platform/graphics/cpu/arm/filters/FELightingNEON.h:
        (WebCore::FELighting::platformApplyNeon):

2018-04-08  Michael Catanzaro  <mcatanzaro@igalia.com>

        [WPE][GTK] Remove applicationDirectoryPath() and sharedResourcePath()
        https://bugs.webkit.org/show_bug.cgi?id=184381

        Reviewed by Carlos Garcia Campos.

        These are unused.

        * platform/FileSystem.h:
        * platform/glib/FileSystemGlib.cpp:
        (WebCore::FileSystem::applicationDirectoryPath): Deleted.
        (WebCore::FileSystem::sharedResourcesPath): Deleted.

2018-04-07  Daniel Bates  <dabates@apple.com>

        Have WorkerScriptLoader::loadAsynchronously() take a FetchOptions
        https://bugs.webkit.org/show_bug.cgi?id=184385

        Reviewed by Youenn Fablet.

        Currently we pass various FetchOptions to WorkerScriptLoader::loadAsynchronously()
        so that it can build up a ThreadableLoaderOptions structure to pass to the loader.
        Each time we want to set another FetchOptions option we need to add a new parameter.
        Instead we should have WorkerScriptLoader::loadAsynchronously() take a FetchOptions.
        This will make it straightforward for a caller to set new loader options as needed.
        In particular, this will make it straightforward to support setting the request's
        destination flag (i.e. FetchOptions::destination) to support blocking scripts with
        a non-JavaScript MIME type in a subsequent commit.

        No functionality changed. So, no new tests.

        * loader/ResourceLoaderOptions.h:
        (WebCore::ResourceLoaderOptions::ResourceLoaderOptions): Modified to take a FetchOptions
        by value so as to support both move and copy semantics.
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):  Added helper constructor
        that takes a FetchOptions.
        * loader/ThreadableLoader.h:
        * workers/Worker.cpp:
        (WebCore::Worker::create): Instantiate and pass a FetchOptions to the loader for the mode,
        cache policy, and redirect policy.
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously): Modified to take a FetchOptions and
        instantiate a ThreadableLoaderOptions from it.
        * workers/WorkerScriptLoader.h:
        * workers/WorkerScriptLoaderClient.h:
        (WebCore::WorkerScriptLoaderClient::isServiceWorkerClient const): Deleted. This function
        is no longer needed because the Service Worker client now passes the service worker mode
        directly to the loader.
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::fetchScriptWithContext): Instantiate and pass a FetchOptions
        to the loader.
        * workers/service/ServiceWorkerJob.h:

2018-04-07  Timothy Hatcher  <timothy@apple.com>

        Use the system's link color when system appearance is desired for a WebView.

        https://bugs.webkit.org/show_bug.cgi?id=184353
        rdar://problem/9420053

        Reviewed by Wenson Hsieh.

        Have Document consult RenderTheme via StyleColor for the various link colors.
        This allows the system to have different colors than the standard hardcoded ones.
        This adds StyleColor::Options, to avoid multiple booleans being passed around,
        since the "for visited link" state is now needed in RenderTheme.

        * WebCore.xcodeproj/project.pbxproj: Made StyleColor.h private, since RenderTheme.h includes it.
        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword): Use options instead of a bool.
        (WebCore::StyleColor::isSystemColor): Consider CSSValueWebkitLink the start of system colors.
        * css/StyleColor.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue const): Use StyleColor::Options.
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor): Use StyleColor::Options.
        * dom/Document.cpp:
        (WebCore::Document::resetLinkColor): Ask StyleColor for the link color instead of hardcoding it.
        (WebCore::Document::resetVisitedLinkColor): Ditto.
        (WebCore::Document::resetActiveLinkColor): Ditto.
        (WebCore::Document::styleColorOptions const): Added. Helper to get the options used.
        * dom/Document.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal): Use StyleColor::Options.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::systemColor const): Add default values here, moved from Document.
        (WebCore::RenderTheme::focusRingColor): Use StyleColor::Options.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor const): Use StyleColor::Options.
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::systemColor const): Use StyleColor::Options.
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const): Use StyleColor::Options.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformFocusRingColor const): Use StyleColor::Options.
        (WebCore::RenderThemeMac::platformColorsDidChange): Clear m_systemVisitedLinkColor.
        (WebCore::RenderThemeMac::systemColor const): Use StyleColor::Options.
        (WebCore::RenderThemeMac::adjustMenuListStyle const): Ditto.
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::systemColor const): Use StyleColor::Options.
        * rendering/RenderThemeWin.h:
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle): Use StyleColor::Options.

2018-04-06  Youenn Fablet  <youenn@apple.com>

        Response headers should be filtered when sent from NetworkProcess to WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=184310

        Reviewed by Ryosuke Niwa.

        Did some refactoring to allow ResourceResponse to use header value parsing routines.
        We add sanitization levels for regular responses in case responses might be exposed to scripts or not.
        If not exposed to scripts, additional filtering is done.

        Add internal API to get unfiltered response headers from a fetch response.
        Test: http/wpt/service-workers/header-filtering.https.html

        * Modules/fetch/FetchResponse.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        * platform/network/HTTPParsers.h:
        (WebCore::addToAccessControlAllowList):
        (WebCore::parseAccessControlAllowList):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isSafeToKeepRedirectionResponseHeader):
        (WebCore::isCrossOriginSafeToKeepResponseHeader):
        (WebCore::ResourceResponseBase::sanitizeHTTPHeaderFields):
        * platform/network/ResourceResponseBase.h:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::fetchResponseHeaderList):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:

2018-04-06  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix unused parameter warning when credential storage is disabled

        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::getCredentialFromPersistentStorage):

2018-04-06  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Block playback until fullscreen begins
        https://bugs.webkit.org/show_bug.cgi?id=184371
        <rdar://problem/39250891>

        Reviewed by Youenn Fablet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Return early when waiting to enter fullscreen.
        (WebCore::HTMLMediaElement::enterFullscreen): Set m_waitingToEnterFullscreen.
        (WebCore::HTMLMediaElement::exitFullscreen): Clear m_waitingToEnterFullscreen.
        (WebCore::HTMLMediaElement::didBecomeFullscreenElement): Ditto.
        * html/HTMLMediaElement.h:

2018-04-06  Brent Fulgham  <bfulgham@apple.com>

        WebCore::screenSupportsExtendedColor improperly calls NSScreen functions in the WebContent process
        https://bugs.webkit.org/show_bug.cgi?id=184364
        <rdar://problem/39246314>

        Reviewed by Per Arne Vollan.

        The WebContent process is interacting directly with NSScreen to determine if the current screen
        has extended color support. This should be brokered from the UIProcess.
        
        Tested by fast/media/mq-color-gamut.html.

        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const): Add screenSupportsExtendedColor.
        (WebCore::ScreenProperties::decode): Ditto.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::getScreenProperties): Retrieve extended color support.
        (WebCore::screenSupportsExtendedColor): Retrieve cached version when in the WebContent
        process. Assert that NSScreen is not accessed in the WebContent process.

2018-04-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][WebCore] Expose a constant for scrollbar pixels per line (cScrollbarPixelsPerLine)
        https://bugs.webkit.org/show_bug.cgi?id=184296

        Reviewed by Alex Christensen.

        No new tests (No behavior changes).

        * platform/PlatformWheelEvent.h: Placed cScrollbarPixelsPerLine definition.
        * platform/win/WheelEventWin.cpp:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Removed cScrollbarPixelsPerLine definition.

2018-04-06  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r230323

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenSupportsExtendedColor): Remove assertion hit during test runs.

2018-04-06  Brent Fulgham  <bfulgham@apple.com>

        WebCore::screenColorSpace is retrieving CGColorSpace from NSScreen directly
        https://bugs.webkit.org/show_bug.cgi?id=184343
        <rdar://problem/39224881>

        Reviewed by Per Arne Vollan.

        Revise ScreenProperties to serialize the screen's color space, and later
        retrieve that in the WebContent process. This allows us to close off
        the CGSWindowServer connection.

        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const): Add CGColorSpaceRef support.
        (WebCore::ScreenProperties::decode): Ditto.
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayID): Add assertion to prevent use in WebContent process.
        (WebCore::firstScreen): Ditto.
        (WebCore::getScreenProperties): Add support for CGColorSpaceRef.
        (WebCore::screenColorSpace): Retrieve cached version when in WebContent process.
        Assert that NSScreen is not accessed in WebContent process.

2018-04-06  Ms2ger  <Ms2ger@igalia.com>

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

        Reviewed by Dean Jackson.

        Tests:
            - imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html
            - imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html

        * fileapi/FileReaderLoader.h:
        (WebCore::FileReaderLoader::url): expose the Blob's URL.
        * html/ImageBitmap.cpp: implement createImageBitmap(Blob).
        * html/ImageBitmap.h: allow the BlobImageObserver class access to the creation function.
        * loader/cache/CachedImage.cpp: reuse extracted code.
        (WebCore::CachedImage::isPDFResource const):
        (WebCore::CachedImage::isPostScriptResource const):
        (WebCore::CachedImage::createImage):
        * platform/graphics/Image.cpp: extract some code from CachedImage to reuse.
        (WebCore::Image::create):
        (WebCore::Image::isPDFResource):
        (WebCore::Image::isPostScriptResource):
        * platform/graphics/Image.h: add declarations.

2018-04-06  Zalan Bujtas  <zalan@apple.com>

        Flex child does not get repainted when it is inserted back to the render tree.
        https://bugs.webkit.org/show_bug.cgi?id=184361
        <rdar://problem/34528716>

        Reviewed by Antti Koivisto.

        As with any regular block children, we should issue full repaint for flexbox items on their
        first layout (see RenderBlockFlow::layoutBlockChild()).

        Test: fast/flexbox/missing-repaint-when-flext-item-never-had-layout.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutAndPlaceChildren):

2018-04-06  Ms2ger  <Ms2ger@igalia.com>

        Support transferring ImageBitmap objects
        https://bugs.webkit.org/show_bug.cgi?id=183131

        Reviewed by Dean Jackson.

        Test: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-transfer.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize): thread through ImageBitmaps.
        (WebCore::CloneSerializer::CloneSerializer): thread through ImageBitmaps.
        (WebCore::CloneSerializer::fillTransferMap): don't require a mutable reference.
        (WebCore::CloneSerializer::dumpImageBitmap): add.
        (WebCore::CloneSerializer::dumpIfTerminal): check for ImageBitmap.
        (WebCore::CloneDeserializer::deserialize): thread through ImageBitmaps.
        (WebCore::CloneDeserializer::CloneDeserializer): thread through ImageBitmaps.
        (WebCore::CloneDeserializer::readImageBitmap): add.
        (WebCore::CloneDeserializer::readTerminal): check for ImageBitmap.
        (WebCore::SerializedScriptValue::SerializedScriptValue): thread through ImageBitmaps.
        (WebCore::SerializedScriptValue::create): thread through ImageBitmaps.
        (WebCore::containsDuplicates): add.
        (WebCore::SerializedScriptValue::deserialize): handle ImageBitmap arguments.
        * bindings/js/SerializedScriptValue.h: update signatures, add member.
        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create): add.
        (WebCore::ImageBitmap::detachBitmaps): add.
        * html/ImageBitmap.h: add signatures.

2018-04-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        When recording the drawing, the DisplayList should be initialized with the GraphicsContextState of the underlying GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=184336

        Reviewed by Antti Koivisto.

        The state of the drawing context has to be transfered to the recording 
        DisplayList before recording. Many recording GraphicsContext functions 
        will behave wrongly if it gets the default state.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::DisplayListDrawingContext::DisplayListDrawingContext):
        (WebCore::CanvasRenderingContext2DBase::drawingContext const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::Recorder):
        * platform/graphics/displaylists/DisplayListRecorder.h:
        (WebCore::DisplayList::Recorder::ContextState::ContextState):
        (WebCore::DisplayList::Recorder::ContextState::cloneForSave const):
        * platform/graphics/displaylists/DisplayListReplayer.cpp:
        (WebCore::DisplayList::Replayer::replay):
        * platform/graphics/displaylists/DisplayListReplayer.h:
        (WebCore::DisplayList::Replayer::replay): If we do not have a clipping
        rectangle and we want to record all the drawing, we need a default value
        for the clipping rectangle and we want no clipping to happen.

2018-04-06  Daniel Bates  <dabates@apple.com>

        Emit a more informative message when a script is blocked due to "X-Content-Type: nosniff"
        https://bugs.webkit.org/show_bug.cgi?id=184359

        Reviewed by Per Arne Vollan.

        Emphasize in the message that the script was blocked from executing.

        Test: http/tests/security/contentTypeOptions/nosniff-importScript-blocked.html

        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::notifyFinished):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::didReceiveResponse):

2018-04-06  Daniel Bates  <dabates@apple.com>

        importScripts() should throw exception with a reason when it fails to load a script from the network
        https://bugs.webkit.org/show_bug.cgi?id=184345

        Reviewed by Alexey Proskuryakov.

        Currently importScripts() throws a NetworkError exception without a reason when
        it fails to load a script from the network. It is ambiguous whether the load failed
        due to an access control failure or some other error. Instead we should include
        the reason the load failed in the thrown exception.

        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):

2018-04-06  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after <https://trac.webkit.org/changeset/230338>
        (https://bugs.webkit.org/show_bug.cgi?id=184360)

        Make lambdas mutable so that we can WTFMove() their captured arguments.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed):
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed):

2018-04-06  Daniel Bates  <dabates@apple.com>

        Have class Exception take String by value instead of a String&&
        https://bugs.webkit.org/show_bug.cgi?id=184360

        Reviewed by Alexey Proskuryakov.

        For convenience support instantiating an Exception with either an lvalue String or
        rvalue String.

        Although it can be argued that having Exception take a String by value instead of String&&
        can lead to missed opportunities to WTFMove() a String object into Exception such mistakes
        are just that, missed opportunities. That is, correctness is not affected and we may perform
        an unnecessary ref/deref of the underlying StringImpl when instantiating an Exception. If
        such missed opportunities show up in profiles and such mistakes happen often then we can
        re-evaluate the decision to have Exception take a String by value.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put): Simplify code now that Exception takes a String by value.
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didFail): Ditto.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::LibWebRTCMediaEndpoint::createSessionDescriptionFailed): Move String into Exception to avoid an
        unnecessary ref/de-ref.
        (WebCore::LibWebRTCMediaEndpoint::setLocalSessionDescriptionFailed): Ditto.
        (WebCore::LibWebRTCMediaEndpoint::setRemoteSessionDescriptionFailed): Ditto.
        * dom/Exception.h:
        (WebCore::Exception::Exception): Take String by value. Also use uniform initializer syntax.

2018-04-06  Antti Koivisto  <antti@apple.com>

        Tighten ImageSource to have BitmapImage pointer instead of Image
        https://bugs.webkit.org/show_bug.cgi?id=184356

        Reviewed by Said Abou-Hallawa.

        ImageSource is an implementation detail of BitmapImage, not a generic type.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::decode):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decode): Deleted.
        (WebCore::Image::imageFrameAvailableAtIndex): Deleted.

        Also make some BitmapImage specific functions non-virtual and remove them from Image.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::create):

        Make constructors private.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):

2018-04-06  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix after r230323

        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screen): Remove assertion we still hit due to event handling code.

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

        REGRESSION (r230223): LayoutTest http/tests/contentextensions/css-display-none-overflows-rule-data-1.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=184306

        Reviewed by Ryosuke Niwa.

        Add an option to not compile CSS rules since they are not useful in NetworkProcess.
        Covered by tests no longer crashing in Debug WK2 bots.

        * contentextensions/ContentExtension.cpp:
        (WebCore::ContentExtensions::ContentExtension::create):
        (WebCore::ContentExtensions::ContentExtension::ContentExtension):
        * contentextensions/ContentExtension.h:
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::addContentExtension):
        * contentextensions/ContentExtensionsBackend.h:

2018-04-05  Brent Fulgham  <bfulgham@apple.com>

        WebContent process is calling CGDisplayUsesInvertedPolarity
        https://bugs.webkit.org/show_bug.cgi?id=184337
        <rdar://problem/39215702>

        Reviewed by Zalan Bujtas.

        The PlatformScreenMac code is still calling display-related routines directly, specifically
        CGDisplayUsesInvertedPolarity and CGDisplayUsesForceToGray. These should be brokered from
        the UIProcess.
        
        There's also no reason to avoid the brokering behavior on current WebKit builds. Remove
        the compile guards so all macOS builds use this behavior.
        
        Finally, add some ProcessPrivilege assertions to guard against accidentally calling these
        routines in the future.

        Tested by existing regression tests.

        * platform/PlatformScreen.h:
        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const): Add new values.
        (WebCore::ScreenProperties::decode):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::displayID): Add assertion that this is not calling display-related routines in
        the WebContent process.
        (WebCore::firstScreen): Ditto.
        (WebCore::screenProperties): Moved higher in the file so it can be reused. Add calls to
        CGDisplayUsesInvertedPolarity and CGDisplayUsesForceToGray.
        (WebCore::getScreenProperties): Moved higher in the file so it can be reused. Stop
        double-hashing displayID.
        (WebCore::screenIsMonochrome): Use cached values in WebContent process. Assert if this
        code attempts a display-related routine in the WebContent process.
        (WebCore::screenHasInvertedColors): Ditto.
        (WebCore::screenDepth): Add assertion that this is not calling display-related routines in
        the WebContent process.
        (WebCore::screenDepthPerComponent): Ditto.
        (WebCore::screenRect): Ditto.
        (WebCore::screenAvailableRect): Ditto.
        (WebCore::screen): Ditto.
        (WebCore::screenColorSpace): Ditto.
        (WebCore::screenSupportsExtendedColor): Ditto.

2018-04-05  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Apply cookie blocking to setCookiesFromDOM()
        https://bugs.webkit.org/show_bug.cgi?id=184346
        <rdar://problem/39226036>

        Reviewed by Brent Fulgham.

        Since these cookies can't be seen and are not sent in requests, I
        can't write an automated test for them. This really should have been
        done as part of: https://bugs.webkit.org/show_bug.cgi?id=180682.
        That said, I have tested this manually.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::setCookiesFromDOM):

2018-04-05  Zalan Bujtas  <zalan@apple.com>

        Folding anonymous blocks should not result in deleting content.
        https://bugs.webkit.org/show_bug.cgi?id=184339
        <rdar://problem/37327428>

        Reviewed by Antti Koivisto.

        While folding multiple anonymous blocks (moving the children from next sibling over to previous sibling)
        we should ensure that the block we are about to destroy does not gain new descendants.
        In case of 4 sibling anonymous blocks (A B C D), while destroying B
        1. we move C's children to A and destroy C.
        2. While destroying C, we notice B and C as sibling anonymous blocks and we move
        D's children over to B (even though B is going to be destroyed as we climb back on the stack).
        
        In this patch, B is detached from the tree before we start moving renderers around so that a subsequent folding won't
        find B anymore as a candidate.

        Test: fast/block/crash-while-folding-anonymous-blocks.html

        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::detach):

2018-04-05  Andy Estes  <aestes@apple.com>

        Mark Payment Request as "Supported" in features.json
        https://bugs.webkit.org/show_bug.cgi?id=184338

        Reviewed by Anders Carlsson.

        * features.json:

2018-04-05  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rolling out r230042.

        It is no longer needed now that it is safe to construct a
        SecurityOrigin from an on-main thread

        Reverted changeset:

        "WebSocket::didReceiveMessage() may construct a SecurityOrigin
        object on a non-main thread"
        https://bugs.webkit.org/show_bug.cgi?id=184068
        https://trac.webkit.org/changeset/230042

2018-04-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove StaticLock
        https://bugs.webkit.org/show_bug.cgi?id=184332

        Reviewed by Mark Lam.

        No behavior change.

        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::closeDatabase):
        (WebCore::Database::getCachedVersion const):
        (WebCore::Database::setCachedVersion):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::openDatabaseMutex):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::allActiveWebSocketsMutex):
        * Modules/websockets/WebSocket.h:
        * bridge/objc/WebScriptObject.mm:
        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::identifier):
        (WebCore::CryptoAlgorithmRegistry::name):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * dom/Node.cpp:
        * platform/URL.cpp:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/MediaPlayer.cpp:
        * platform/ios/QuickLook.mm:
        * platform/ios/WebSQLiteDatabaseTrackerClient.mm:
        * platform/ios/wak/WebCoreThread.mm:
        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoop):
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlShareHandle::mutexFor):
        * platform/network/curl/CurlContext.h:
        * platform/sql/SQLiteDatabaseTracker.cpp:
        (WebCore::SQLiteDatabaseTracker::incrementTransactionInProgressCount):
        (WebCore::SQLiteDatabaseTracker::decrementTransactionInProgressCount):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::newTextCodec):
        (WebCore::atomicCanonicalTextEncodingName):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2018-04-04  Youenn Fablet  <youenn@apple.com>

        WebRTC data channel only applications require capture permissions for direct connections
        https://bugs.webkit.org/show_bug.cgi?id=174500
        <rdar://problem/34134281>

        Reviewed by Eric Carlson.

        Test: webrtc/datachannel/mdns-ice-candidates.html

        Add support at PeerConnectionBackend to obfuscate any gathered host candidate
        by replacing the IP address with an opaque name that can be resolved by MDNS.
        An opaque name is generated for each IP address and is scoped by the document owning the peer connection object.

        Add support to resolve any such MDNS ICE candidate.
        A limit of 250 ms is fixed for the resolution to happen.
        After 250 ms, the candidate is discarded.

        Add an experimental flag around this feature, off by default.

        * Modules/mediastream/PeerConnectionBackend.cpp:
        (WebCore::extractIPAddres):
        (WebCore::PeerConnectionBackend::addIceCandidate):
        (WebCore::PeerConnectionBackend::addIceCandidateSucceeded):
        (WebCore::PeerConnectionBackend::addIceCandidateFailed):
        (WebCore::PeerConnectionBackend::newICECandidate):
        (WebCore::PeerConnectionBackend::doneGatheringCandidates):
        (WebCore::PeerConnectionBackend::registerMDNSName):
        (WebCore::PeerConnectionBackend::finishedRegisteringMDNSName):
        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCIceCandidate.h:
        (WebCore::RTCIceCandidate::setCandidate):
        * Modules/mediastream/RTCPeerConnection.h:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):
        (WebCore::Document::suspend):
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::mdnsICECandidatesEnabled const):
        (WebCore::RuntimeEnabledFeatures::setMDNSICECandidatesEnabled):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:

2018-04-04  Brian Burg  <bburg@apple.com>

        [Cocoa] WebDriver: test imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_non_session_cookie fails
        https://bugs.webkit.org/show_bug.cgi?id=184314
        <rdar://problem/39186578>

        Reviewed by Timothy Hatcher.

        Covered by several tests in add_cookie.py per the bug title.

        * platform/network/cocoa/CookieCocoa.mm:
        (WebCore::Cookie::operator NSHTTPCookie * const):
        By converting an integral UNIX timestamp to |maxAge| fractional seconds into the future, we introduce unwanted
        precision that is truncated when switching back to a UNIX timestamp later. Always round up maxAge so that
        the truncated value and actual value are the same.

2018-04-04  Alex Christensen  <achristensen@webkit.org>

        Move PingHandle to WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=184145

        Reviewed by Youenn Fablet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/PingHandle.h: Removed.

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

        The layout test fast/canvas/canvas-blending-global-alpha.html is failing when the WebContent process does not have WindowServer access.
        https://bugs.webkit.org/show_bug.cgi?id=183752
        <rdar://problem/38635731>

        The test is failing because the system is only providing software rendering when there is no access
        to the WindowServer, and software rendering is producing slightly different results than hardware
        rendering. To enable accelerated rendering, the GPU to be used for IOSurface rendering needs to be
        selected by handing over the OpenGL display mask to the IOSurface CGContext.

        Reviewed by Brent Fulgham.

        No new tests, covered by existing tests.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::getOpenGLDisplayMask):
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::ensurePlatformContext):

2018-04-04  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Track the paint frequency through a new class named PaintFrequencyTracker
        https://bugs.webkit.org/show_bug.cgi?id=184311

        Reviewed by Antti Koivisto.

        PaintFrequencyTracker is a class which detects when a layer is painted 
        frequently. SinglePaintFrequencyTracking is used in conjunction with
        PaintFrequencyTracker to recored a single paint timing.

        * rendering/PaintFrequencyTracker.h: Added.
        (WebCore::PaintFrequencyTracker::begin):
        (WebCore::PaintFrequencyTracker::end):
        (WebCore::PaintFrequencyTracker::paintingFrequently const):
        Simplify the logic for tracking the paint frequency and move it from
        RenderLayer.cpp.

        (WebCore::SinglePaintFrequencyTracking::SinglePaintFrequencyTracking):
        (WebCore::SinglePaintFrequencyTracking::~SinglePaintFrequencyTracking):
        A convenient way to bracket the begin() and the end() methods of
        PaintFrequencyTracker.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::calculateClipRects const):
        (WebCore::PaintFrequencyInfo::PaintFrequencyInfo): Deleted.
        (WebCore::PaintFrequencyInfo::setPaintedCacheableResource): Deleted.
        (WebCore::PaintFrequencyInfo::paintingFrequently const): Deleted.
        (WebCore::PaintFrequencyInfo::updatePaintFrequency): Deleted.
        (WebCore::PaintFrequencyInfo::paintingCacheableResource): Deleted.
        * rendering/RenderLayer.h:
        Rename PaintFrequencyInfo to PaintFrequencyTracker and move it a separate
        header file.

2018-04-04  Jer Noble  <jer.noble@apple.com>

        RELEASE_ASSERT in CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF() when MediaToolbox.framework missing
        https://bugs.webkit.org/show_bug.cgi?id=184247
        <rdar://problem/39007591>

        Rubber-stamped by Eric Carlson.

        Use SOFT_LINK_FRAMEWORK_OPTIONAL for frameworks which are not guaranteed to be present.

        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):

2018-04-04  Brent Fulgham  <bfulgham@apple.com>

        Failures from mach port reference handling should be fatal
        https://bugs.webkit.org/show_bug.cgi?id=184202
        <rdar://problem/37771114>

        Reviewed by Anders Carlsson.

        We may corrupt the Mach port space by improperly matching the equivalent of reference counting
        retains (mach_port_mod_refs) with releases (mach_port_deallocate).

        Our current implementation of MachSendRights::create does not grab a reference if the passed
        port is MACH_PORT_DEAD, but we unconditionally call mach_port_deallocate on the port, which
        could lead to a reference count mismatch.

        Likewise, our MachSendRight destructor does not release the port if it has changed to MACH_PORT_DEAD
        (e.g., if a child process dies), again leading to a mismatch in retain/releases.

        Finally, failures in mach_port_deallocate should be fatal because they indicate that the
        application was attempting to remove an unowned right. This is a fatal condition for Mach, and
        should lead to an abort. 

        This patch does the following:

        1. It creates a helper function that does the right thing for safely deallocating a mach port.
        2. It uses it in multiple places.
        3. It revises 'MachSendRight::create" so that it properly handles the condition of a dead port.
        4. It revises the MachSendRight destructor to properly handle the condition of a dead port.

        No new tests, no change in behavior expected.

        * SourcesCocoa.txt: Update for move of MachSendRight files.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        (WebCore::getMachThreads): Added.
        (WebCore::cpuUsage): Use the new cleanup helper function.
        * platform/cocoa/MachSendRight.cpp: Removed.
        * platform/cocoa/MachSendRight.h: Removed.
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm:
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenLayer):
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:

2018-04-04  Youenn Fablet  <youenn@apple.com>

        Remove unused HTTP header names
        https://bugs.webkit.org/show_bug.cgi?id=184272

        Reviewed by Alex Christensen.

        No change of behavior.
        Removed some names that are not used in the code base.
        This allows to strengthen filtering of responses sent to WebProcess.
        Added two headers used by web inspector.
        Updated existing code to use indexed HTTP header names.

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::sourceMapURLForResource):
        * platform/network/HTTPHeaderNames.in:

2018-04-04  Beth Dakin  <bdakin@apple.com>

        Fix the !HAVE(AVFOUNDATION_VIDEO_OUTPUT) build
        https://bugs.webkit.org/show_bug.cgi?id=184309
        -and corresponding-
        rdar://problem/39179126

        Reviewed by Jer Noble.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoFullscreenInlineImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):

2018-04-04  Youenn Fablet  <youenn@apple.com>

        MockRealtimeVideoSourceMac should produce kCVPixelFormatType_420YpCbCr8Planar buffers
        https://bugs.webkit.org/show_bug.cgi?id=184304

        Reviewed by Eric Carlson.

        Allows covering RealtimeOutgoingVideoSourceMac code path handling native buffers produced by capture video sources.
        ARGB buffer coverage is done through canvas capture streams.

        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer):

2018-04-04  Youenn Fablet  <youenn@apple.com>

        Introduce a ThreadSafeRefCounted parameter to ensure being destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183988

        Reviewed by Darin Adler.

        No change of behavior, TrackPrivate remains destroyed on the main thread.

        * platform/graphics/TrackPrivateBase.h:
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::render):

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

        Unreviewed. Fix the build with libsoup < 2.49.91 after r230251.

        Stop using ResourceHandle in SoupNetworkSession.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::authenticateCallback): Deleted.
        (WebCore::requestStartedCallback): Deleted.

2018-04-03  Alex Christensen  <achristensen@webkit.org>

        Remove unused libsoup ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=184048

        Reviewed by Michael Catanzaro.

        This code is unused since r228901 so let's remove it!

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandleInternal::soupSession):
        (WebCore::ResourceHandle::cancelledOrClientless):
        (WebCore::ResourceHandle::ensureReadBuffer):
        (WebCore::ResourceHandle::currentStreamPosition const):
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse):
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::releaseForDownload):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueDidReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::receivedChallengeRejection):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::sessionFromContext): Deleted.
        (WebCore::ResourceHandle::create): Deleted.
        (WebCore::ResourceHandle::ResourceHandle): Deleted.
        (WebCore::isAuthenticationFailureStatusCode): Deleted.
        (WebCore::tlsErrorsChangedCallback): Deleted.
        (WebCore::gotHeadersCallback): Deleted.
        (WebCore::applyAuthenticationToRequest): Deleted.
        (WebCore::restartedCallback): Deleted.
        (WebCore::shouldRedirect): Deleted.
        (WebCore::shouldRedirectAsGET): Deleted.
        (WebCore::continueAfterWillSendRequest): Deleted.
        (WebCore::doRedirect): Deleted.
        (WebCore::redirectSkipCallback): Deleted.
        (WebCore::wroteBodyDataCallback): Deleted.
        (WebCore::cleanupSoupRequestOperation): Deleted.
        (WebCore::nextMultipartResponsePartCallback): Deleted.
        (WebCore::sendRequestCallback): Deleted.
        (WebCore::continueAfterDidReceiveResponse): Deleted.
        (WebCore::startingCallback): Deleted.
        (WebCore::networkEventCallback): Deleted.
        (WebCore::createSoupMessageForHandleAndRequest): Deleted.
        (WebCore::createSoupRequestAndMessageForHandle): Deleted.
        (WebCore::ResourceHandle::timeoutFired): Deleted.
        (WebCore::waitingToSendRequest): Deleted.
        (WebCore::readCallback): Deleted.

2018-04-03  Ross Kirsling  <ross.kirsling@sony.com>

        Add missing WEBCORE_EXPORTs (for Windows shared library build)
        https://bugs.webkit.org/show_bug.cgi?id=184279

        Reviewed by Alex Christensen.

        * dom/Element.h:
        * dom/Node.h:
        * editing/FrameSelection.h:
        * html/DOMURL.h:
        * html/HTMLFormElement.h:
        * html/canvas/CanvasRenderingContext.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceRequestBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/curl/AuthenticationChallenge.h:
        * platform/network/curl/CurlFormDataStream.h:
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlSSLHandle.h:
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceResponse.h:

2018-04-03  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingVideoSourceMac should pass a ObjCFrameBuffer buffer
        https://bugs.webkit.org/show_bug.cgi?id=184281
        rdar://problem/39153262

        Reviewed by Jer Noble.

        Covered by manual testing by going to WebRTC web sites.

        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):

2018-04-03  Filip Pizlo  <fpizlo@apple.com>

        GC shouldn't do object distancing
        https://bugs.webkit.org/show_bug.cgi?id=184195

        Reviewed by Saam Barati.

        No new tests because no change in behavior.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * dom/Document.cpp:
        (WebCore::Document::threadLocalCache): Deleted.
        * dom/Document.h:
        * page/OriginThreadLocalCache.cpp: Removed.
        * page/OriginThreadLocalCache.h: Removed.

2018-04-03  Brent Fulgham  <bfulgham@apple.com>

        Guard against keychain/certificate access outside the network process
        https://bugs.webkit.org/show_bug.cgi?id=184214
        <rdar://problem/38734795>

        Reviewed by Youenn Fablet.

        Use the ProcessPrivilege assertions to guard against accessing the Keychain from
        a non-Networking process.

        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticator::makeCredential): Assert if we access the keychain from
        a proces other than the Network or UI process.
        (WebCore::LocalAuthenticator::getAssertion): Ditto.
        (WebCore::LocalAuthenticator::issueClientCertificate const): Ditto.
        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey): Ditto.
        (WebCore::findMasterKey): Ditto.
        (WebCore::deleteDefaultWebCryptoMasterKey): Ditto.
        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString): Ditto.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::createPrivateStorageSession): Ditto.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Ditto.

2018-04-03  Youenn Fablet  <youenn@apple.com>

        NetworkResourceLoader does not need to expose all redirect response headers
        https://bugs.webkit.org/show_bug.cgi?id=184114
        <rdar://problem/39010557>

        Reviewed by Ryosuke Niwa.

        No JS observable change of behavior.
        Behavior change is observable for injected bundles since they will no longer get access to the full response.
        List of response headers correspond to the one currently being used/exposed for redirections.

        Test: http/wpt/loading/redirect-headers.html

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setRestrictedHTTPResponseAccess):
        (WebCore::RuntimeEnabledFeatures::restrictedHTTPResponseAccess const):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::isSafeToKeepRedirectionHeader):
        (WebCore::ResourceResponseBase::sanitizeRedirectionHTTPHeaderFields):
        * platform/network/ResourceResponseBase.h:

2018-04-03  Andy Estes  <aestes@apple.com>

        [Mac] Prioritize file promises over filenames during drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=184237
        <rdar://problem/38278076>

        Reviewed by Wenson Hsieh.

        When performing a drag operation where the pasteboard contains both a file path and a file
        promise, we have historically preferred to accept the file path. Some versions of Photos.app
        will provide both a low-resolution thumbnail as a file path and its high-resolution
        counterpart as a file promise when dragging a photo, and our current logic leads us to
        choose the low-quality thumbnail.

        This patch changes our logic to prefer file promises over file paths. This matches the
        behavior of Finder and ensures we accept high-resolution assets from Photos.app.

        Covered by existing file promise drag tests. beginDragWithFilePromises() was updated to
        write a bogus file path to the pasteboard along with the legitimate file promise.

        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::asFilenames const):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readFilePaths):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::numberOfFiles const):

2018-04-03  Mark Lam  <mark.lam@apple.com>

        Fix mis-application of WTF_PREPARE_VTBL_POINTER_FOR_INSPECTION macro.
        https://bugs.webkit.org/show_bug.cgi?id=184276
        <rdar://problem/39109543>

        Rubber-stamped by Michael Saboff.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJSNewlyCreated):

2018-04-03  Yousuke Kimoto  <yousuke.kimoto@sony.com>

        [CMake] gperf path should be given when WebCore/css/makevalues.pl is executed
        https://bugs.webkit.org/show_bug.cgi?id=184224

        Reviewed by Konstantin Tokarev.

        When a building evironment doens't include a path to gperf,
        WebCore/css/makevalue.pl failes due to failing to execute gperf,
        so the full path to gperf should be given like WebCore/css/makeprop.pl.

        No new tests, no Web-facing behavior change.

        * CMakeLists.txt: gperf path is given to css/makevalues.pl.
        * css/makevalues.pl: Add an argument to handle a given gperf path.

2018-04-03  Chris Dumez  <cdumez@apple.com>

        Drop MainFrame class
        https://bugs.webkit.org/show_bug.cgi?id=184191

        Reviewed by Darin Adler.

        Drop MainFrame class and move contents into Page / Frame since there is a 1:1
        relationship between the Page and the MainFrame.

        This is ground work for introducing LocalFrame / RemoteFrame concepts.

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::ApplePaySession::create):
        (WebCore::ApplePaySession::supportsVersion):
        (WebCore::ApplePaySession::canMakePayments):
        (WebCore::ApplePaySession::canMakePaymentsWithActiveCard):
        (WebCore::ApplePaySession::openPaymentSetup):
        (WebCore::ApplePaySession::paymentCoordinator const):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::paymentCoordinator):
        * Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame const):
        (WebCore::AccessibilityObject::visiblePositionForBounds const):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptState.cpp:
        * contentextensions/ContentExtensionsBackend.cpp:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::displayModeEvaluate):
        * dom/DOMImplementation.cpp:
        * dom/Document.cpp:
        * dom/DocumentMarkerController.cpp:
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor):
        * dom/EventDispatcher.cpp:
        * dom/ScriptedAnimationController.cpp:
        * editing/Editor.cpp:
        (WebCore::Editor::scanSelectionForTelephoneNumbers):
        * editing/EditorCommand.cpp:
        * editing/SelectionRectGatherer.cpp:
        (WebCore::SelectionRectGatherer::Notifier::~Notifier):
        * editing/cocoa/WebContentReaderCocoa.mm:
        * editing/markup.cpp:
        * history/CachedFrame.cpp:
        * history/CachedPage.cpp:
        * history/PageCache.cpp:
        (WebCore::destroyRenderTree):
        * html/HTMLMediaElement.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/ImageDocument.cpp:
        * html/MediaElementSession.cpp:
        (WebCore::isMainContentForPurposesOfAutoplay):
        * html/canvas/WebGLRenderingContextBase.cpp:
        * inspector/InspectorClient.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorOverlay.cpp:
        * inspector/PageScriptDebugServer.cpp:
        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::mainFrame):
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        * loader/DocumentLoader.cpp:
        * loader/DocumentWriter.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::setState):
        * loader/HistoryController.cpp:
        * loader/NavigationDisabler.h:
        * loader/ProgressTracker.cpp:
        * loader/ResourceLoadObserver.cpp:
        * loader/ResourceLoader.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubresourceLoader.cpp:
        * loader/appcache/ApplicationCacheHost.cpp:
        * loader/archive/mhtml/MHTMLArchive.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * page/AutoscrollController.cpp:
        * page/Chrome.cpp:
        * page/ContextMenuController.cpp:
        * page/DOMWindow.cpp:
        * page/DebugPageOverlays.cpp:
        (WebCore::MouseWheelRegionOverlay::updateRegion):
        (WebCore::NonFastScrollableRegionOverlay::updateRegion):
        (WebCore::RegionOverlay::create):
        (WebCore::RegionOverlay::RegionOverlay):
        (WebCore::RegionOverlay::~RegionOverlay):
        (WebCore::DebugPageOverlays::ensureRegionOverlayForPage):
        (WebCore::DebugPageOverlays::showRegionOverlay):
        (WebCore::DebugPageOverlays::hideRegionOverlay):
        (WebCore::DebugPageOverlays::regionChanged):
        (WebCore::DebugPageOverlays::regionOverlayForPage const):
        (WebCore::DebugPageOverlays::updateOverlayRegionVisibility):
        (WebCore::DebugPageOverlays::settingsChanged):
        * page/DebugPageOverlays.h:
        (WebCore::DebugPageOverlays::hasOverlaysForPage const):
        (WebCore::DebugPageOverlays::hasOverlays):
        (WebCore::DebugPageOverlays::didLayout):
        (WebCore::DebugPageOverlays::didChangeEventHandlers):
        * page/DragController.cpp:
        (WebCore::DragController::performDragOperation):
        (WebCore::DragController::tryDHTMLDrag):
        (WebCore::DragController::beginDrag):
        (WebCore::DragController::doSystemDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::clearLatchedState):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/FocusController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::dropChildren):
        (WebCore::Frame::selfOnlyRef):
        (WebCore::Frame::selfOnlyDeref):
        * page/Frame.h:
        (WebCore::Frame::mainFrame const):
        * page/FrameTree.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::setContentsSize):
        (WebCore::FrameView::didChangeScrollOffset):
        (WebCore::FrameView::setViewExposedRect):
        * page/History.cpp:
        * page/MainFrame.cpp: Removed.
        * page/MainFrame.h: Removed.
        * page/MemoryRelease.cpp:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::m_applicationManifest):
        (WebCore::Page::setDeviceScaleFactor):
        (WebCore::Page::latchingState):
        (WebCore::Page::pushNewLatchingState):
        (WebCore::Page::resetLatchingState):
        (WebCore::Page::popLatchingState):
        (WebCore::Page::removeLatchingStateForTarget):
        (WebCore::Page::setPaymentCoordinator):
        * page/Page.h:
        (WebCore::Page::mainFrame):
        (WebCore::Page::mainFrame const):
        (WebCore::Page::wheelEventDeltaFilter):
        (WebCore::Page::pageOverlayController):
        (WebCore::Page::servicesOverlayController):
        (WebCore::Page::paymentCoordinator const):
        (WebCore::Page::applicationManifest const):
        (WebCore::Page::performanceLogging const):
        * page/PageConsoleClient.cpp:
        * page/PageDebuggable.cpp:
        * page/PageGroup.cpp:
        * page/PageGroupLoadDeferrer.cpp:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::controller const):
        * page/PageOverlayController.cpp:
        (WebCore::PageOverlayController::PageOverlayController):
        (WebCore::PageOverlayController::createRootLayersIfNeeded):
        (WebCore::PageOverlayController::layerWithDocumentOverlays):
        (WebCore::PageOverlayController::layerWithViewOverlays):
        (WebCore::PageOverlayController::installPageOverlay):
        (WebCore::PageOverlayController::updateForceSynchronousScrollLayerPositionUpdates):
        (WebCore::PageOverlayController::didChangeViewExposedRect):
        (WebCore::PageOverlayController::updateSettingsForLayer):
        (WebCore::PageOverlayController::deviceScaleFactor const):
        (WebCore::PageOverlayController::notifyFlushRequired):
        (WebCore::PageOverlayController::tiledBackingUsageChanged):
        * page/PageOverlayController.h:
        * page/PageSerializer.cpp:
        * page/PerformanceLogging.cpp:
        (WebCore::PerformanceLogging::PerformanceLogging):
        (WebCore::PerformanceLogging::didReachPointOfInterest):
        * page/PerformanceLogging.h:
        * page/PerformanceMonitor.cpp:
        * page/ResourceUsageOverlay.cpp:
        (WebCore::ResourceUsageOverlay::~ResourceUsageOverlay):
        (WebCore::ResourceUsageOverlay::initialize):
        * page/SettingsBase.cpp:
        * page/SpatialNavigation.cpp:
        * page/UserContentProvider.cpp:
        * page/ios/FrameIOS.mm:
        * page/mac/DragControllerMac.mm:
        * page/mac/EventHandlerMac.mm:
        (WebCore::latchingIsLockedToPlatformFrame):
        (WebCore::latchingIsLockedToAncestorOfThisFrame):
        (WebCore::EventHandler::clearOrScheduleClearingLatchedStateIfNeeded):
        (WebCore::EventHandler::platformPrepareForWheelEvents):
        (WebCore::EventHandler::platformRecordWheelEvent):
        (WebCore::EventHandler::platformCompleteWheelEvent):
        (WebCore::EventHandler::platformCompletePlatformWidgetWheelEvent):
        * page/mac/PageMac.mm:
        * page/mac/ServicesOverlayController.h:
        (WebCore::ServicesOverlayController::page const):
        * page/mac/ServicesOverlayController.mm:
        (WebCore::ServicesOverlayController::Highlight::Highlight):
        (WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
        (WebCore::ServicesOverlayController::Highlight::deviceScaleFactor const):
        (WebCore::ServicesOverlayController::ServicesOverlayController):
        (WebCore::ServicesOverlayController::invalidateHighlightsOfType):
        (WebCore::ServicesOverlayController::buildPotentialHighlightsIfNeeded):
        (WebCore::ServicesOverlayController::remainingTimeUntilHighlightShouldBeShown const):
        (WebCore::ServicesOverlayController::buildPhoneNumberHighlights):
        (WebCore::ServicesOverlayController::buildSelectionHighlight):
        (WebCore::ServicesOverlayController::hasRelevantSelectionServices):
        (WebCore::ServicesOverlayController::createOverlayIfNeeded):
        (WebCore::ServicesOverlayController::telephoneNumberRangesForFocusedFrame):
        (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight):
        (WebCore::ServicesOverlayController::mouseEvent):
        (WebCore::ServicesOverlayController::handleClick):
        (WebCore::ServicesOverlayController::mainFrame const):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        * page/scrolling/ScrollingCoordinator.cpp:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * plugins/DOMMimeType.cpp:
        * plugins/PluginInfoProvider.cpp:
        (WebCore::PluginInfoProvider::refresh):
        * rendering/RenderBox.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::hasAnyAdditionalCompositedLayers const):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::appendDocumentOverlayLayers):
        (WebCore::RenderLayerCompositor::attachRootLayer):
        (WebCore::RenderLayerCompositor::detachRootLayer):
        (WebCore::RenderLayerCompositor::rootLayerAttachmentChanged):
        * rendering/RenderObject.cpp:
        * replay/UserInputBridge.cpp:
        * storage/StorageEventDispatcher.cpp:
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::suspendMemoryCacheClientCalls):
        * svg/SVGSVGElement.cpp:
        * svg/graphics/SVGImage.cpp:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::installMockPageOverlay):
        (WebCore::Internals::pageOverlayLayerTreeAsText const):
        * testing/MockPageOverlay.cpp:
        * testing/MockPageOverlay.h:
        * testing/MockPageOverlayClient.cpp:
        (WebCore::MockPageOverlayClient::installOverlay):
        (WebCore::MockPageOverlayClient::layerTreeAsText):
        * testing/MockPageOverlayClient.h:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::MockPaymentCoordinator):
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeMerchantValidation):
        (WebCore::MockPaymentCoordinator::changeShippingOption):
        (WebCore::MockPaymentCoordinator::changePaymentMethod):
        (WebCore::MockPaymentCoordinator::acceptPayment):
        (WebCore::MockPaymentCoordinator::cancelPayment):
        * testing/MockPaymentCoordinator.h:
        * workers/service/context/ServiceWorkerThreadProxy.cpp:

2018-04-03  Sihui Liu  <sihui_liu@apple.com>

        The referer header is not set after redirect
        https://bugs.webkit.org/show_bug.cgi?id=182644
        <rdar://problem/37479048>

        Reviewed by Youenn Fablet.

        Update referrer policy and recompute referrer in redirection check, so Referer header would be set after it's removed from cross-origin request.

        Add support for Referrer-Policy header, so referrer policy would be changed based on redirect response. 

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::processReferrerPolicy):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::updateRequestReferrer):
        * loader/CrossOriginAccessControl.h:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::setReferrerPolicy):
        (WebCore::ResourceLoader::referrerPolicy const):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl):
        (WebCore::SubresourceLoader::updateReferrerPolicy):
        * loader/SubresourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
        (WebCore::CachedResourceRequest::updateForAccessControl):
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders):
        * platform/ReferrerPolicy.cpp: Added.
        (WebCore::parseReferrerPolicy):
        * platform/ReferrerPolicy.h:
        * platform/network/HTTPHeaderNames.in:

2018-04-03  Chris Dumez  <cdumez@apple.com>

        Make SecurityOrigin safe to create and use from any thread
        https://bugs.webkit.org/show_bug.cgi?id=184216

        Reviewed by Youenn Fablet.

        We found that we have a decent amount of code constructing and using SecurityOrigin
        objects from non-main threads. Unfortunately, this was not safe, mostly due to
        SecurityOrigin's reliance on the SchemeRegistry.

        This patch makes it safe to construct a SecurityOrigin on any thread A and use
        it later on the same thread A. However, developers still need to call isolatedCopy()
        if they want to pass such object to another thread B.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay const):
        * page/SecurityOrigin.h:
        * page/SecurityPolicy.cpp:
        (WebCore::originAccessMapLock):
        (WebCore::originAccessMap):
        (WebCore::SecurityPolicy::isAccessWhiteListed):
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::resetOriginAccessWhitelists):
        * platform/SchemeRegistry.cpp:
        (WebCore::schemeRegistryLock):
        (WebCore::allBuiltinSchemes):
        (WebCore::builtinLocalURLSchemes):
        (WebCore::localURLSchemes):
        (WebCore::displayIsolatedURLSchemes):
        (WebCore::builtinSecureSchemes):
        (WebCore::secureSchemes):
        (WebCore::builtinSchemesWithUniqueOrigins):
        (WebCore::schemesWithUniqueOrigins):
        (WebCore::builtinEmptyDocumentSchemes):
        (WebCore::emptyDocumentSchemes):
        (WebCore::schemesForbiddenFromDomainRelaxation):
        (WebCore::builtinCanDisplayOnlyIfCanRequestSchemes):
        (WebCore::canDisplayOnlyIfCanRequestSchemes):
        (WebCore::notAllowingJavascriptURLsSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::schemesAllowingLocalStorageAccessInPrivateBrowsing):
        (WebCore::schemesAllowingDatabaseAccessInPrivateBrowsing):
        (WebCore::builtinCORSEnabledSchemes):
        (WebCore::CORSEnabledSchemes):
        (WebCore::ContentSecurityPolicyBypassingSchemes):
        (WebCore::cachePartitioningSchemes):
        (WebCore::serviceWorkerSchemes):
        (WebCore::alwaysRevalidatedSchemes):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
        (WebCore::SchemeRegistry::canDisplayOnlyIfCanRequest):
        (WebCore::SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest):
        (WebCore::SchemeRegistry::registerURLSchemeAsBypassingContentSecurityPolicy):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsBypassingContentSecurityPolicy):
        (WebCore::SchemeRegistry::schemeShouldBypassContentSecurityPolicy):
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme):
        (WebCore::SchemeRegistry::registerURLSchemeServiceWorkersCanHandle):
        (WebCore::SchemeRegistry::canServiceWorkersHandleURLScheme):
        (WebCore::SchemeRegistry::isServiceWorkerContainerCustomScheme):
        * platform/SchemeRegistry.h:

2018-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Stop using ResourceHandle to load GResources
        https://bugs.webkit.org/show_bug.cgi?id=184259

        Reviewed by Sergio Villar Senin.

        GResources are loaded in the WebProcess using ResourceHandle because soup handles them transparently. But now
        that we no longer use ResourceHandle, we can add a simple loader for GResources, similar to the one used for
        data URLS, since loading a GResource is a matter of calling g_resources_lookup_data() in the end.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::start): Check if resource to load is a GResource and call loadGResource().
        * loader/ResourceLoader.h:
        * loader/soup/ResourceLoaderSoup.cpp: Added.
        (WebCore::ResourceLoader::loadGResource): Load the GResource in a GTask thread.
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::DataSegment::data const):
        (WebCore::SharedBuffer::DataSegment::size const):
        * platform/SharedBuffer.h:
        * platform/glib/SharedBufferGlib.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::create):

2018-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Enchant] Clean up TextCheckerEnchant
        https://bugs.webkit.org/show_bug.cgi?id=184233

        Reviewed by Michael Catanzaro.

        Several cleanups and improvements:

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::singleton): Make TextCheckerEnchant a singleton since it's always used as a
        singleton.
        (WebCore::TextCheckerEnchant::EnchantDictDeleter::operator() const):
        (WebCore::TextCheckerEnchant::TextCheckerEnchant):
        (WebCore::TextCheckerEnchant::ignoreWord): Convert to utf8 once instead of on every loop iteration.
        (WebCore::TextCheckerEnchant::learnWord): Ditton.
        (WebCore::TextCheckerEnchant::checkSpellingOfWord): m_enchantDictionaries is now a Vector of std::unique_ptr.
        (WebCore::TextCheckerEnchant::getGuessesForWord): Convert to utf8 once instead of on every loop iteration.
        (WebCore::TextCheckerEnchant::updateSpellCheckingLanguages): Get only the first language instead of building a
        vector to get its first item. Use WTFMove to replace m_enchantDictionaries with the new Vector.
        (WebCore::TextCheckerEnchant::loadedSpellCheckingLanguages const): Use a lambda to get the list of languages
        already converted to String and iterate only once.
        (WebCore::TextCheckerEnchant::availableSpellCheckingLanguages const): Ditto.
        (WebCore::enchantDictDescribeCallback): Deleted.
        (WebCore::TextCheckerEnchant::~TextCheckerEnchant): Deleted.
        (WebCore::TextCheckerEnchant::freeEnchantBrokerDictionaries): Deleted.
        * platform/text/enchant/TextCheckerEnchant.h:

2018-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Segfaults in enchant_broker_free_dict()
        https://bugs.webkit.org/show_bug.cgi?id=183738

        Reviewed by Michael Catanzaro.

        Check enchant_broker_request_dict() didn't return nullptr before adding it to the m_enchantDictionaries vector.

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::updateSpellCheckingLanguages):

2018-04-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] NetworkProcess from WebKitGtk+ 2.19.9x SIGSEVs in NetworkStorageSession (secret search callback)
        https://bugs.webkit.org/show_bug.cgi?id=183346

        Reviewed by Michael Catanzaro.

        This might happen if a request is cancelled right after the password request starts and before it finishes. We
        should cancel the password search when the network request is cancelled, not only when the NetworkStorageSession
        is destroyed.

        * platform/network/NetworkStorageSession.h:
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::SecretServiceSearchData::SecretServiceSearchData): Helper struct to keep the request cancellable and
        completion handler.
        (WebCore::NetworkStorageSession::getCredentialFromPersistentStorage): Create a SecretServiceSearchData for the
        request.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Pass the request cancellable to
        NetworkStorageSession::getCredentialFromPersistentStorage().

2018-04-02  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Replace video with a placeholder image during fullscreen transition
        https://bugs.webkit.org/show_bug.cgi?id=184188
        <rdar://problem/38940307>

        Reviewed by Youenn Fablet.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::willExitFullscreen):
        * html/HTMLMediaElement.h:
        * platform/cocoa/VideoFullscreenChangeObserver.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.h:
        * platform/cocoa/VideoFullscreenModelVideoElement.mm:
        (VideoFullscreenModelVideoElement::willExitFullscreen):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::updateVideoFullscreenInlineImage):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::updateVideoFullscreenInlineImage):
        * platform/graphics/VideoFullscreenLayerManager.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoFullscreenInlineImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVideoFullscreenLayer):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.h:
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm:
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoLayer):
        (WebCore::VideoFullscreenLayerManagerObjC::updateVideoFullscreenInlineImage):
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenLayer):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::preparedToExitFullscreen):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::willExitFullscreen):

2018-04-02  Eric Carlson  <eric.carlson@apple.com>

        Define AVKit softlink macro
        https://bugs.webkit.org/show_bug.cgi?id=184241

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        * platform/ios/WebAVPlayerController.mm:
        * platform/mac/PlaybackSessionInterfaceMac.mm:
        * platform/mac/VideoFullscreenInterfaceMac.mm:

2018-04-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Update date picker UI to latest specifications
        https://bugs.webkit.org/show_bug.cgi?id=184234
        <rdar://problem/38804760>

        Reviewed by Timothy Hatcher.

        Tweak localizable strings. Day, month and year labels should be fully capitalized, and there needs to be a
        string for the "Set" button title.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::datePickerSetButtonTitle):
        (WebCore::datePickerDayLabelTitle):
        (WebCore::datePickerMonthLabelTitle):
        (WebCore::datePickerYearLabelTitle):
        * platform/LocalizedStrings.h:

2018-04-02  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r228260):WebHTMLView beeps at every keydown for Chinese/Japanese/Korean Input Method
        https://bugs.webkit.org/show_bug.cgi?id=184231

        Reviewed by Alexey Proskuryakov.

        The bug was caused by EventHandler::internalKeyEvent calling setDefaultHandled and expecting it to stay true
        after dispatching the event even though m_defaultHandled is always cleared after r228260. This results in
        EventHandler::internalKeyEvent returning false, and resulting in a beep.

        Unfortunately, no new tests since there is no facility to detect this case in layout tests, and we can't
        easily emulate or trigger a real input method in API tests.

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

2018-04-02  Jer Noble  <jer.noble@apple.com>

        AudioBufferSourceNode start method causes OfflineAudioContext to start running
        https://bugs.webkit.org/show_bug.cgi?id=181939
        <rdar://problem/36755393>

        Reviewed by Eric Carlson.

        Test: webaudio/offlineaudiocontext-restriction.html

        Don't respect playback restrictions for offline AudioContexts.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::isOfflineContext const):
        (WebCore::AudioContext::userGestureRequiredForAudioStart const):
        (WebCore::AudioContext::pageConsentRequiredForAudioStart const):
        (WebCore::AudioContext::isOfflineContext): Deleted.

2018-04-02  Alejandro G. Castro  <alex@igalia.com>

        [GTK] Make libwebrtc backend buildable for GTK  port
        https://bugs.webkit.org/show_bug.cgi?id=178860

        Reviewed by Youenn Fablet.

        This is the first step to add webrtc support to the GTK port using
        the libwebrtc backend.

        No new tests, no new feature added, it should be tested by current
        tests.

        * CMakeLists.txt: Add the new files to the compilation and set the
        new includes in the libwebrtc library.
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        Reorder the includes alphabetically and add some that are missing.
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        Ditto.
        * Sources.txt: Add new file to the compilation.
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.cpp:
        Added. Initial implementation for GTK and WPE.
        * platform/mediastream/gstreamer/RealtimeIncomingAudioSourceLibWebRTC.h:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.cpp:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeIncomingVideoSourceLibWebRTC.h:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.cpp:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceLibWebRTC.h:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.cpp:
        Added. Ditto.
        * platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceLibWebRTC.h:
        Added. Ditto.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp: Added includes
        for the compilation.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.h: Added, inherit from
        the LibWebRTCProvider to adapt for glib.

2018-04-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use WTF::Lock instead of GMutex
        https://bugs.webkit.org/show_bug.cgi?id=184227

        Reviewed by Saam Barati.

        Prefer WTF::Lock over GMutex since these locks are just protecting WebKit C++ fields.

        No behavior change.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer):
        (WebCore::AudioSourceProviderGStreamer::provideInput):
        (WebCore::AudioSourceProviderGStreamer::handleAudioBuffer):
        (WebCore::AudioSourceProviderGStreamer::clearAdapters):
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize const):
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        (WebCore::MediaPlayerPrivateGStreamerBase::copyVideoTextureToPlatformTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::nativeImageForCurrentTime):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:

2018-03-31  Brent Fulgham  <bfulgham@apple.com>

        Show punycode if URL contains hyphen character
        https://bugs.webkit.org/show_bug.cgi?id=184221
        <rdar://problem/38044633>

        Reviewed by Darin Adler.

        Revise our "lookalike character" logic to include the hyphen,
        non-breaking hyphen, and minus sign.

        Test: fast/url/host.html

        * platform/mac/WebCoreNSURLExtras.mm:
        (WebCore::isLookalikeCharacter):

2018-03-31  Filip Pizlo  <fpizlo@apple.com>

        JSObject shouldn't do index masking
        https://bugs.webkit.org/show_bug.cgi?id=184194

        Reviewed by Yusuke Suzuki.

        No new tests because no new behavior.

        * bindings/js/JSDOMConvertSequences.h:
        (WebCore::Detail::NumericSequenceConverter::convertArray):
        (WebCore::Detail::SequenceConverter::convertArray):

2018-03-30  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r229828): Facebook login popup is blank
        https://bugs.webkit.org/show_bug.cgi?id=184206
        <rdar://problem/39057006>

        Reviewed by Wenson Hsieh.

        Since r229828, we freeze the layer tree during the navigation policy check.
        We freeze in WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction()
        and unfreeze in WebFrameLoaderClient::didDecidePolicyForNavigationAction().

        WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction() gets called
        from PolicyChecker::checkNavigationPolicy() which has 3 call sites in
        FrameLoader and one in DocumentLoader for redirects. The call sites in
        FrameLoader were taking care of calling didDecidePolicyForNavigationAction()
        on the FrameLoaderClient in their completion handler, but the DocumentLoader
        call site was failing to do so. As a result, the layer tree would stay frozen.

        To make this a lot less error prone, I moved the call to
        WebFrameLoaderClient::didDecidePolicyForNavigationAction() to
        PolicyChecker::checkNavigationPolicy(), inside the completion handler passed
        to WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(). This way,
        even if new code starts calling PolicyChecker::checkNavigationPolicy(), we
        do not need to worry about letting the client know when the policy decision
        is made.

        No new tests, covered by existing redirection tests with the
        new assertion I added.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueFragmentScrollAfterNavigationPolicy):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-03-30  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: tint all pixels drawn by shader program when hovering ShaderProgramTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=175223

        Reviewed by Matt Baker.

        Test: inspector/canvas/setShaderProgramHighlighted.html

        * html/canvas/InspectorShaderProgram.h:
        (WebCore::InspectorShaderProgram::highlighted):
        (WebCore::InspectorShaderProgram::setHighlighted):

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::InspectorScopedShaderProgramHighlight::InspectorScopedShaderProgramHighlight):
        (WebCore::InspectorScopedShaderProgramHighlight::~InspectorScopedShaderProgramHighlight):
        (WebCore::InspectorScopedShaderProgramHighlight::showHighlight):
        (WebCore::InspectorScopedShaderProgramHighlight::hideHighlight):
        (WebCore::InspectorScopedShaderProgramHighlight::saveBlendValue):
        (WebCore::InspectorScopedShaderProgramHighlight::hasBufferBinding):
        (WebCore::InspectorScopedShaderProgramHighlight::hasFramebufferParameterAttachment):
        (WebCore::WebGLRenderingContextBase::drawArrays):
        (WebCore::WebGLRenderingContextBase::drawElements):
        If the current shader program has been marked as highlighted, apply a blend right before
        `drawArrays` and `drawElements` is called, tinting the resulting pixels so that they are
        visually distinguished from pixels drawn by other shader programs.

        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::setShaderProgramHighlighted):
        (WebCore::InspectorCanvasAgent::isShaderProgramHighlighted):

        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::isShaderProgramHighlighted):
        (WebCore::InspectorInstrumentation::isShaderProgramHighlightedImpl):

2018-03-30  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Adopt list view controller UI for numeric input types
        https://bugs.webkit.org/show_bug.cgi?id=184184
        <rdar://problem/37238916>

        Reviewed by Timothy Hatcher.

        Add a localized string for the OK button shown on number pads in extra zoomed form controls.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::numberPadOKButtonTitle):
        * platform/LocalizedStrings.h:

2018-03-30  Ryosuke Niwa  <rniwa@webkit.org>

        Copying a list from Microsoft Word to TinyMCE fails when mso-list is the first property
        https://bugs.webkit.org/show_bug.cgi?id=182938
        <rdar://problem/37683007>

        Reviewed by Wenson Hsieh.

        Made the logic to detect Microsoft Word's mso-list CSS property more generic by detecting
        inline styles which start with "mso-list:" and one which line-break right before it: "\nmso-list:"

        Tests: PasteHTML.PreservesMSOList

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::shouldPreserveMSOListStyleForElement):

2018-03-30  Youenn Fablet  <youenn@apple.com>

        NetworkLoadChecker should upgrade redirects if needed
        https://bugs.webkit.org/show_bug.cgi?id=184098

        Reviewed by Chris Dumez.

        Test: imported/w3c/web-platform-tests/beacon/upgrade-beacon.https.html

        * page/csp/ContentSecurityPolicy.h:

2018-03-30  Daniel Bates  <dabates@apple.com>

        ASSERTION FAILED: ASSERT(!containsImage || MIMETypeRegistry::isSupportedImageResourceMIMEType([resource MIMEType])) in -[NSPasteboard(WebExtras) _web_writePromisedRTFDFromArchive:containsImage:]
        https://bugs.webkit.org/show_bug.cgi?id=184161

        Reviewed by Per Arne Vollan.

        Fixes an assertion failure when quiting an app that uses a Legacy WebKit web view
        after dragging-and-dropping a PDF embedded using an HTML image element into the
        same web view.

        When performing a drag-and-drop of a PDF document image (WebCore::PDFDocumentImage) we create a WebArchive
        from the main frame's WebHTMLView and promise AppKit that will provide a Rich Text Format (RTF) document
        from this archive if needed. For some reason, on app termination AppKit requests that the WebHTMLView
        fullfill its RTF document promise for the WebArchive created at the start of the drag operation. WebKit
        expects that the created WebArchive is either for an inline image (e.g. <img>) or an image document that
        has a supported image resource MIME type (by querying MIMETypeRegistry::isSupportedImageResourceMIMEType())
        and checks for these cases in this order. PDF/PostScript are not listed in the set of supported image
        resource MIME types. So, the first check fails and WebKit assumes that the WebArchive was created from
        an image document of a supported image resource MIME type. However, the WebArchive was created from a
        WebHTMLView and has MIME type text/html. Therefore the assertion fails. We need to add PDF and PostScript
        to the set of supported image resource MIME types so that WebKit does not fall back to the WebHTMLView
        code path. Historically, PDF and PostScript were in the set supported image resource MIME types. Over time
        the set of MIME types for image resouces (images loaded as a document) became identical to the set of MIME
        types for images loaded inline (e.g. <img>) and this set omitted the MIME types for PDF and PostScript.

        Additionally it is sufficient to implement MIMETypeRegistry::isSupportedImageResourceMIMEType() in terms
        of MIMETypeRegistry::isSupportedImageMIMEType() and MIMETypeRegistry::isPDFOrPostScriptMIMEType() instead
        of allocating a dedicated HashSet for the supported image resource MIME types (as we currently do).

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Assert that PDF is a supported image MIME type before
        instantiating an ImageDocument.
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes): Remove unnecessary allocation of a HashSet for the support
        image resource MIME types.
        (WebCore::MIMETypeRegistry::isSupportedImageResourceMIMEType): Write in terms of MIMETypeRegistry::isSupportedImageMIMEType()
        and MIMETypeRegistry::isPDFOrPostScriptMIMEType().
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes): Deleted.
        * platform/MIMETypeRegistry.h:

2018-03-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] CSSTransition objects should have fill: backwards to allow seeking prior to start time
        https://bugs.webkit.org/show_bug.cgi?id=184129

        Reviewed by Dean Jackson.

        In order to allow a CSS Transition to be seeked prior to its start time, it needs to have its fill mode set
        to backwards. Adding code to set the fill mode in CSSTransition::initialize() yields early timing model
        invalidation and we could get in a situation where stylesWouldYieldNewCSSTransitionsBlendingKeyframes()
        was called before we had a chance to create blending keyframes for a CSS transitions, since the call
        to create blending keyframes is made after the call to initialize(), so we now cater for this case.

        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::initialize):
        * animation/CSSTransition.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const):

2018-03-30  Daniel Bates  <dabates@apple.com>

        Remove unused MIMETypeRegistry::getSupportedImageMIMETypesForEncoding()
        https://bugs.webkit.org/show_bug.cgi?id=184154

        Reviewed by Per Arne Vollan.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding): Deleted.
        * platform/MIMETypeRegistry.h:

2018-03-30  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230102.

        Caused assertion failures on JSC bots.

        Reverted changeset:

        "A stack overflow in the parsing of a builtin (called by
        createExecutable) cause a crash instead of a catchable js
        exception"
        https://bugs.webkit.org/show_bug.cgi?id=184074
        https://trac.webkit.org/changeset/230102

2018-03-30  Robin Morisset  <rmorisset@apple.com>

        A stack overflow in the parsing of a builtin (called by createExecutable) cause a crash instead of a catchable js exception
        https://bugs.webkit.org/show_bug.cgi?id=184074
        <rdar://problem/37165897>

        Reviewed by Keith Miller.

        I had to slightly change the type of some bindings between JSC and WebCore. No functional change intended on the WebCore side.

        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        (WebCore::JSBuiltinReadableStreamDefaultReaderPrivateConstructor::initializeExecutable):
        (WebCore::JSBuiltinReadableStreamDefaultControllerPrivateConstructor::initializeExecutable):
        (WebCore::JSBuiltinReadableByteStreamControllerPrivateConstructor::initializeExecutable):
        (WebCore::JSBuiltinReadableStreamBYOBReaderPrivateConstructor::initializeExecutable):
        (WebCore::JSBuiltinReadableStreamBYOBRequestPrivateConstructor::initializeExecutable):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::initializeExecutable):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeExecutable):

2018-03-29  Antoine Quint  <graouts@apple.com>

        [Web Animations] Correctly obtain the timing function for a given keyframe
        https://bugs.webkit.org/show_bug.cgi?id=184146

        Reviewed by Dean Jackson.

        The way we would get the timing function for a given KeyframeValue stored in a KeyframeList was really suboptimal.
        When keyframes were created, we would set the animated element's style on each keyframe, and set keyframe-specific
        properties and values on top. When figuring out the timing function for a KeyframeValue, we would look at its render
        style, go through its list of animations, which could include animations that are irrelevant to this specific keyframe
        list since all animations from the animated element are referenced, and we would have to look up the correct animation
        by name and get the timing function, even though the timing function stored on the animation was now specific to this
        particular keyframe.

        We now simply set a m_timingFunction member on a KeyframeValue, which is null if no explicit animation-timing-function
        was provided for this keyframe in CSS, and otherwise set to a valid TimingFunction.

        This fixes our behavior for a 4 existing animation tests when opted into the CSS Animations and CSS Transitions as
        Web Animations feature.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::timingFunctionForKeyframeAtIndex):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty const):
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::createFromCSSText):
        (WebCore::TimingFunction::createFromCSSValue):
        * platform/animation/TimingFunction.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeValue::timingFunction const): Deleted.
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeValue::timingFunction const):
        (WebCore::KeyframeValue::setTimingFunction):

2018-03-29  Ryosuke Niwa  <rniwa@webkit.org>

        Copying a list from Microsoft Word to TinyMCE fails when mso-list is on tags other than P
        https://bugs.webkit.org/show_bug.cgi?id=182954
        <rdar://problem/37713141>

        Reviewed by Wenson Hsieh.

        Fixed the bug by relaxing the restriction that we only preserve mso-list on p.

        Tests: PasteHTML.PreservesMSOListOnH4

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::shouldPreserveMSOListStyleForElement):

2018-03-29  JF Bastien  <jfbastien@apple.com>

        Use Forward.h instead of forward-declaring WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=184172
        <rdar://problem/39026146>

        Reviewed by Yusuke Suzuki.

        As part of #184164 I'm changing WTF::String, and the forward
        declarations are just wrong because I'm making it templated. We
        should use Forward.h anyways, so do that instead.

        * css/makeprop.pl:
        * platform/cocoa/PlaybackSessionInterface.h:
        * platform/ios/Device.h:
        * platform/ios/PlaybackSessionInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/win/PathWalker.h:
        * testing/js/WebCoreTestSupport.h:

2018-03-29  Ross Kirsling  <ross.kirsling@sony.com>

        MSVC __forceinline slows down JSC release build fivefold after r229391
        https://bugs.webkit.org/show_bug.cgi?id=184062

        Reviewed by Alex Christensen.

        * platform/graphics/FormatConverter.cpp:
        Factor ALWAYS_INLINE_EXCEPT_MSVC out to WTF.

2018-03-29  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230087.

        Introduced LayoutTest failures.

        Reverted changeset:

        "FrameSelection::appearanceUpdateTimerFired should be robust
        against layout passes underneath it"
        https://bugs.webkit.org/show_bug.cgi?id=183395
        https://trac.webkit.org/changeset/230087

2018-03-29  Wenson Hsieh  <wenson_hsieh@apple.com>

        FrameSelection::appearanceUpdateTimerFired should be robust against layout passes underneath it
        https://bugs.webkit.org/show_bug.cgi?id=183395
        <rdar://problem/38055732>

        Reviewed by Zalan Bujtas.

        In the case where a FrameSelection updates its appearance when m_appearanceUpdateTimer is fired, the
        FrameSelection's Frame is unprotected, and can be removed by arbitrary script. This patch applies a simple
        mitigation by wrapping the Frame in a Ref when firing the appearance update timer, and ensuring that layout is
        really up to date before calling updateAppearanceAfterLayoutOrStyleChange() from the timer.

        Test: editing/selection/iframe-update-selection-appearance.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::appearanceUpdateTimerFired):

2018-03-29  Daniel Bates  <dabates@apple.com>

        Substitute ArchiveFactory::isArchiveMIMEType() for ArchiveFactory::isArchiveMimeType().

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitLoad):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::isArchiveMIMEType):
        (WebCore::ArchiveFactory::isArchiveMimeType): Deleted.
        * loader/archive/ArchiveFactory.h:
        * platform/MIMETypeRegistry.h:

2018-03-29  Daniel Bates  <dabates@apple.com>

        MIMETypeRegistry should return const HashSets
        https://bugs.webkit.org/show_bug.cgi?id=184150

        Reviewed by Per Arne Vollan.

        Only getSupportedNonImageMIMETypes() needs to return a non-const HashSet so that
        LegacyWebKit can modify the set of non-image MIME types.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageResourceMIMETypes):
        (WebCore::MIMETypeRegistry::getSupportedImageMIMETypesForEncoding):
        (WebCore::MIMETypeRegistry::getSupportedMediaMIMETypes):
        (WebCore::MIMETypeRegistry::getPDFMIMETypes):
        (WebCore::MIMETypeRegistry::getUnsupportedTextMIMETypes):
        * platform/MIMETypeRegistry.h:

2018-03-29  Brady Eidson  <beidson@apple.com>

        Update Service Worker feature status.
        https://bugs.webkit.org/show_bug.cgi?id=184139

        Reviewed by Chris Dumez.

        * features.json:

2018-03-29  Chris Dumez  <cdumez@apple.com>

        Drop DOMWindow::frames() / DOMWindow::window() methods
        https://bugs.webkit.org/show_bug.cgi?id=184112

        Reviewed by Daniel Bates.

        Drop DOMWindow::frames() / DOMWindow::window() methods as they are just aliases for DOMWindow::self().

        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2018-03-29  Commit Queue  <commit-queue@webkit.org>

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

        Broke mac port. web content process crashes while loading any
        web page (Requested by rniwa on #webkit).

        Reverted changeset:

        "MSVC __forceinline slows down JSC release build fivefold
        after r229391"
        https://bugs.webkit.org/show_bug.cgi?id=184062
        https://trac.webkit.org/changeset/230062

2018-03-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement more CSSPropertyBlendingClient methods
        https://bugs.webkit.org/show_bug.cgi?id=184077

        Reviewed by Dean Jackson.

        We only had stubs for several of the CSSPropertyBlendingClient methods and thus always implied that we
        were animating non-matching transform, filter and backdrop-filter properties. We now implement those using
        the same code used in KeyframeAnimation. This allows for 31 new tests to opt into the CSS Animations and
        CSS Transitions as Web Animations feature.

        We also ensure we only run a CSSAnimationController assertion in FrameView::didDestroyRenderTree() if
        we're not using the CSS Animations and CSS Transitions as Web Animations feature.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::copyPropertiesFromSource):
        (WebCore::KeyframeEffectReadOnly::updateBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::setBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingTransformFunctionLists):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingFilterFunctionLists):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingBackdropFilterFunctionLists):
        (WebCore::KeyframeEffectReadOnly::computeCSSAnimationBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::computeCSSTransitionBlendingKeyframes):
        * animation/KeyframeEffectReadOnly.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::didDestroyRenderTree):

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Align XMLHttpRequest's open() / send() / abort() with the latest specification
        https://bugs.webkit.org/show_bug.cgi?id=184108

        Reviewed by Youenn Fablet.

        Align XMLHttpRequest's open() / send() / abort() with the latest specification:
        - https://xhr.spec.whatwg.org

        No new tests, rebaselined existing layout tests.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::open):
        Align with https://xhr.spec.whatwg.org/#the-open()-method:
        - Change the order of some steps to match the order in the spec. In particular,
          open() no longer resets the state to UNSENT or abort any existing load when it
          fails early due to being passed a bad method.

        (WebCore::XMLHttpRequest::createRequest):
        Align with https://xhr.spec.whatwg.org/#the-send()-method:
        - Use the simpler "upload listener flag" logic from the spec instead of our more
          complex m_uploadEventsAllowed flag. This avoids constructing a SecurityOrigin
          objects on a background thread when XHR is used inside Web Workers, which was
          not thread-safe.
        - Set the upload complete flag when the request has no body as per step 9.
        - After firing the loadstartEvent, return early if the state is no longer OPEN or
          if the send flag is unset, as per step 11.3.

        (WebCore::XMLHttpRequest::abort):
        Align with https://xhr.spec.whatwg.org/#the-abort()-method:
        - Only set the state to UNSENT if the state is still DONE after firing the error
          events, as per step 3.

        (WebCore::XMLHttpRequest::didSendData):
        Use new "upload listener flag".

        (WebCore::XMLHttpRequest::dispatchErrorEvents):
        Align with https://xhr.spec.whatwg.org/#request-error-steps:
        - Stop firing a progress event in case of error as this is not as per specification
          and Firefox does not fire those either.

        * xml/XMLHttpRequest.h:

2018-03-28  Timothy Hatcher  <timothy@apple.com>

        Consolidate NSColor to WebCore::Color conversion and fix system colors.

        https://bugs.webkit.org/show_bug.cgi?id=184096
        rdar://problem/38918925

        Reviewed by Tim Horton.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (CreateCGColorIfDifferent): Use CGColor property on NSColor, don't manually create new CGColor.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        (WebCore::makeRGBAFromNSColor): Move pattern code from RenderThemeMac's convertNSColorToColor.
        Also use nextafter for proper RGBA float conversion.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::color): Use colorFromNSColor.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor const): Use colorFromNSColor.
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const): Ditto.
        (WebCore::RenderThemeMac::systemColor const): Ditto.
        (WebCore::paintAttachmentTitleBackground): Ditto.
        (WebCore::convertNSColorToColor): Deleted.

2018-03-28  Said Abou-Hallawa  <sabouhallawa@apple.com>

        The SVGAnimatedProperty wrappers have to be detached from the referenced values before the SVGAnimatedType is deleted
        https://bugs.webkit.org/show_bug.cgi?id=183972

        Reviewed by Daniel Bates.

        If the SVGAnimatedType is a list type, e.g. SVGLengthListValues, the wrappers
        of the animated properties have to be detached from the items in the list
        before it's deleted.

        * svg/SVGAnimateElementBase.cpp:
        (WebCore::SVGAnimateElementBase::clearAnimatedType):

2018-03-28  Ross Kirsling  <ross.kirsling@sony.com>

        MSVC __forceinline slows down JSC release build fivefold after r229391
        https://bugs.webkit.org/show_bug.cgi?id=184062

        Reviewed by Alex Christensen.

        * platform/graphics/FormatConverter.cpp:
        Factor ALWAYS_INLINE_EXCEPT_MSVC out to WTF.

2018-03-28  Zalan Bujtas  <zalan@apple.com>

        Make it possible to override the screen size
        https://bugs.webkit.org/show_bug.cgi?id=184111
        <rdar://problem/38972181>

        Reviewed by Tim Horton.

        We just call screenSize() atm.

        * page/Chrome.cpp:
        (WebCore::Chrome::overrideScreenSize const):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/PlatformScreen.h:
        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenRect):
        (WebCore::overrideScreenSize):

2018-03-28  Timothy Hatcher  <timothy@apple.com>

        Include the 'text' color keyword as a system color.

        https://bugs.webkit.org/show_bug.cgi?id=184113
        rdar://problem/38779267

        Reviewed by Tim Horton.

        * css/StyleColor.cpp:
        (WebCore::StyleColor::isColorKeyword): Don't check CSSValueMenu, it is a system color and is included.
        (WebCore::StyleColor::isSystemColor): Include CSSValueText. Check CSSValueWebkitFocusRingColor in the range,
        since it is immediately after CSSValueAppleSystemYellow.

2018-03-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Multiple select appearance doesn't update when selecting or deselecting rows in the picker view
        https://bugs.webkit.org/show_bug.cgi?id=184110
        <rdar://problem/38796648>

        Reviewed by Tim Horton.

        HTMLSelectElement::optionSelectedByUser is invoked upon user interaction with a select menu. This currently
        takes two separate codepaths, depending on whether or not the menu list appearance is being used to render the
        select. If a menu list appearance is used, we call selectOption(), which updates validity, updates the element
        renderer, and then dispatches a `change` event if needed.

        However, if updateSelectedState() is used, we only update form validity and then dispatch the `change` event
        without updating the renderer, leaving it stale.

        Test: fast/forms/ios/ipad/multiple-select-updates-renderer.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::optionSelectedByUser):

        Update the renderer after updating the DOM to reflect the selected option.

2018-03-28  Daniel Bates  <dabates@apple.com>

        Substitute "strong password confirmation auto fill" for "strong confirmation password auto fill"
        <rdar://problem/36518856>

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::AXAutoFillStrongConfirmationPasswordLabel):

2018-03-28  Daniel Bates  <dabates@apple.com>

        WebSocket cookie incorrectly stored
        https://bugs.webkit.org/show_bug.cgi?id=184100
        <rdar://problem/37928715>

        Reviewed by Brent Fulgham.

        A cookie received in a WebSocket response should be stored with respect to the
        origin of the WebSocket server in order for it to be sent in a subsequent request.

        Also removed a FIXME about implementing support for the long since
        deprecated Set-Cookie2 header.

        Test: http/tests/websocket/tests/hybi/websocket-cookie-overwrite-behavior.html

        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer):
        * Modules/websockets/WebSocketHandshake.h:

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Do process swap when opening a cross-origin URL via window.open(url, '_blank', 'noopener')
        https://bugs.webkit.org/show_bug.cgi?id=183962
        <rdar://problem/38817833>

        Reviewed by Brady Eidson.

        Pass extra bits of information to the UIProcess via NavigationAction:
        - Is it a cross origin navigation caused by window.open()
        - Does the navigated frame have an opener

        This information is useful to determine on UIProcess side if we want
        to swap WebProcess.

        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setIsCrossOriginWindowOpenNavigation):
        (WebCore::FrameLoadRequest::isCrossOriginWindowOpenNavigation const):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        * loader/NavigationAction.h:
        (WebCore::NavigationAction::setIsCrossOriginWindowOpenNavigation):
        (WebCore::NavigationAction::isCrossOriginWindowOpenNavigation const):
        (WebCore::NavigationAction::setOpener):
        (WebCore::NavigationAction::opener const):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):

2018-03-28  Chris Dumez  <cdumez@apple.com>

        Thread safety issue in IDBFactory' shouldThrowSecurityException()
        https://bugs.webkit.org/show_bug.cgi?id=184064

        Reviewed by Ryosuke Niwa.

        shouldThrowSecurityException() gets called on a non-main thread but
        it ended up using the SchemeRegistry via SecurityOrigin::canAccessDatabase()
        which calls SecurityOrigin::isLocal().

        Since using the SchemeRegistry from the background thread is not safe
        (we recently added locks which we're trying to remove), and since SecurityOrigin
        methods are often called from background threads, this patch make SecurityOrigin::isLocal()
        safe to call from a background thread. To achieve this, we now query the SchemeRegistry
        in the SecurityOrigin constructor instead as SecurityOrigin objects are expected to be
        constructed on the main thread.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isLocal const): Deleted.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::isLocal const):

2018-03-28  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r230033.

        The LayoutTests modified in this change fail an assertion on
        WK1.

        Reverted changeset:

        "[Web Animations] Implement more CSSPropertyBlendingClient
        methods"
        https://bugs.webkit.org/show_bug.cgi?id=184077
        https://trac.webkit.org/changeset/230033

2018-03-28  Chris Dumez  <cdumez@apple.com>

        WebSocket::didReceiveMessage() may construct a SecurityOrigin object on a non-main thread
        https://bugs.webkit.org/show_bug.cgi?id=184068

        Reviewed by Youenn Fablet.

        WebSocket::didReceiveMessage() may construct a SecurityOrigin object on a non-main thread,
        which is not safe. We now use SecurityOriginData since we only need an origin String and
        it is safe to construct a SecurityOriginData on any thread.

        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveMessage):

2018-03-28  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Make boosted text autosizing values switchable at runtime
        https://bugs.webkit.org/show_bug.cgi?id=184092
        <rdar://problem/38939917>

        Reviewed by Tim Horton.

        In r228697, we introduced a new set of boosted text autosizing constants tuned for extra zoom mode, which are
        currently hard-coded as default values in SettingsBase. However, we've since identified cases where clients may
        want to opt in or out of boosted text autosizing values and just use the existing values.

        This replaces settings to adjust text autosizing constants with a flag to enable or disable boosted text
        autosizing; when changed, we update all three text autosizing parameters to their default or boosted values, and
        then trigger style recalculation.

        Test: TextAutosizingBoost.ChangeAutosizingBoostAtRuntime

        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::shouldEnableTextAutosizingBoostChanged):
        (WebCore::SettingsBase::defaultOneLineTextMultiplierCoefficient): Deleted.
        (WebCore::SettingsBase::defaultMultiLineTextMultiplierCoefficient): Deleted.
        (WebCore::SettingsBase::defaultMaxTextAutosizingScaleIncrease): Deleted.

        Changed these to constant values instead of helper functions, and also introduced boosted text autosizing
        constants for use in extra zoom mode.

        * page/SettingsBase.h:
        (WebCore::SettingsBase::oneLineTextMultiplierCoefficient const):
        (WebCore::SettingsBase::multiLineTextMultiplierCoefficient const):
        (WebCore::SettingsBase::maxTextAutosizingScaleIncrease const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::extraDefaultStyleSheet):

        Tweak the stylesheet to make `-webkit-text-size-adjust: auto` overridable by web content. Adding the !important
        is breaking many websites that positioned text such that it is positioned within layout viewport bounds without
        text autosizing.

2018-03-28  Brent Fulgham  <bfulgham@apple.com>

        Avoid uninitialized mach ports
        https://bugs.webkit.org/show_bug.cgi?id=184090
        <rdar://problem/37261129>

        Reviewed by Chris Dumez.

        It is possible for mach_port_allocate to return an error, but we rarely check its return value. The value
        of the argument passed to mach_port_allocate is not guaranteed to be valid when it returns an error, so
        there is a potential for us to try to use invalid ports.

        We should always check return values, and ensure that the mach port variables we seek to initialize are
        kept in a valid state.

        No new tests, no Web-facing behavior change.

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::attachToAppleGraphicsControl): Initialize masterPort to a default value.

2018-03-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement more CSSPropertyBlendingClient methods
        https://bugs.webkit.org/show_bug.cgi?id=184077

        Reviewed by Dean Jackson.

        We only had stubs for several of the CSSPropertyBlendingClient methods and thus always implied that we
        were animating non-matching transform, filter and backdrop-filter properties. We now implement those using
        the same code used in KeyframeAnimation. This allows for 31 new tests to opt into the CSS Animations and
        CSS Transitions as Web Animations feature.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::copyPropertiesFromSource):
        (WebCore::KeyframeEffectReadOnly::updateBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::setBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingTransformFunctionLists):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingFilterFunctionLists):
        (WebCore::KeyframeEffectReadOnly::checkForMatchingBackdropFilterFunctionLists):
        (WebCore::KeyframeEffectReadOnly::computeCSSAnimationBlendingKeyframes):
        (WebCore::KeyframeEffectReadOnly::computeCSSTransitionBlendingKeyframes):
        * animation/KeyframeEffectReadOnly.h:

2018-03-28  Antoine Quint  <graouts@apple.com>

        [Web Animations] Comparing two matching FramesTimingFunction objects fails
        https://bugs.webkit.org/show_bug.cgi?id=184078

        Reviewed by Jon Lee.

        Fix a stupid mistake in the == operator for FramesTimingFunction. Without a correct check, we would mistakenly interrupt and
        restart any transition with a frames() timing function when we check that the Animation objects are similar.

        * platform/animation/TimingFunction.h:

2018-03-28  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Remove UpdateAtlas
        https://bugs.webkit.org/show_bug.cgi?id=184042

        Reviewed by Žan Doberšek.

        Remove UpdateAtlas and AreaAllocator classes. Instead of using UpdateAtlas as a cache
        of buffers to render tiles with cairo, allocate a new buffer for each tile instead.

        Covered by existent tests.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * platform/TextureMapper.cmake:
        * platform/graphics/texmap/coordinated/AreaAllocator.cpp: Removed.
        * platform/graphics/texmap/coordinated/AreaAllocator.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h:
        (): Deleted.
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp: Removed.
        * platform/graphics/texmap/coordinated/UpdateAtlas.h: Removed.
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2018-03-27  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, rolling out r230008.

        Lots of HTTP test failures

        Reverted changeset:

        "Remove unused libsoup ResourceHandle implementation"
        https://bugs.webkit.org/show_bug.cgi?id=184048
        https://trac.webkit.org/changeset/230008

2018-03-27  Chris Dumez  <cdumez@apple.com>

        Make it possible to call ContentSecurityPolicy::upgradeInsecureRequestIfNeeded() from non-main threads
        https://bugs.webkit.org/show_bug.cgi?id=184029

        Reviewed by Youenn Fablet.

        Make it possible to call ContentSecurityPolicy::upgradeInsecureRequestIfNeeded() from non-main threads
        by having it use SecurityOriginData (which is safe to construct on non-main threads) instead of
        SecurityOrigin (which isn't).

        ContentSecurityPolicy::upgradeInsecureRequestIfNeeded() is already called from non-main thread in
        FetchLoader, XHR and WebSocket when used in workers. This wasn't safe.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * page/csp/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::upgradeInsecureRequestIfNeeded const):
        (WebCore::ContentSecurityPolicy::setUpgradeInsecureRequests):
        (WebCore::ContentSecurityPolicy::takeNavigationRequestsToUpgrade):
        (WebCore::ContentSecurityPolicy::setInsecureNavigationRequestsToUpgrade):
        * page/csp/ContentSecurityPolicy.h:

2018-03-27  Daniel Bates  <dabates@apple.com>

        Attempt to fix media control layout tests after <https://trac.webkit.org/changeset/230006/>
        (https://bugs.webkit.org/show_bug.cgi?id=179983)

        Exempt elements in user agent shadow DOM from having to perform a potentially CORS-
        enabled fetch for a mask image to try to fix the following tests from timing out:
            media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-inline.html
            media/modern-media-controls/media-controller/media-controller-inline-to-fullscreen-to-pip-to-inline.html

        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingImage):

2018-03-27  Per Arne Vollan  <pvollan@apple.com>

        The layout test fast/canvas/webgl/read-pixels-test.html is timing out.
        https://bugs.webkit.org/show_bug.cgi?id=183923
        <rdar://problem/38756869>

        Reviewed by Brent Fulgham.

        The test is timing out when we do not interact directly with the WindowServer, causing
        OpenGL to fall back to software rendering. In this mode, any call to CGLChoosePixelFormat
        requesting an accelerated pixel format will fail because it cannot determine which GPU is
        connected to the display.

        OpenGL treats all GPUs as if they were offline when used in a process (like the WebContent
        process) that does not directly control the display.

        We can get correct behavior if we tell OpenGL which GPU is currently connected to the
        display, and if we instruct CGLChoosePixelFormat to create an offline renderer pixel format
        by including the 'kCGLPFAAllowOfflineRenderers' flag in its arguments.

        We can use CGLSetVirtualScreen with an OpenGL display mask that tells the OpenGL framework
        which GPU it should use.

        See https://developer.apple.com/library/content/technotes/tn2229/_index.html#//apple_ref/doc/uid/DTS40008924-CH1-SUBSECTION7
        for details on how the virtual screen is found from the OpenGL display mask.

        No new tests, covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::setPixelFormat):
        (WebCore::identifyAndSetCurrentGPU):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::setOpenGLDisplayMask):
        (WebCore::GraphicsContext3D::allowOfflineRenderers):

2018-03-27  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorGetAssertion
        https://bugs.webkit.org/show_bug.cgi?id=183881
        <rdar://problem/37258628>

        Reviewed by Brent Fulgham.

        This patch does the following few things:
        1) It implements the spec: https://www.w3.org/TR/webauthn/#op-get-assertion as of 5 December 2017.
        2) It tweaks encoding/decoding of PublicKeyCredentialRequestOptions such that options can be passed
        between UI and Web processes.
        3) It refines the way how LocalAuthenticator::makeCredential find intersection between
        excludeCredentialDescriptorList and existing credentials in the authenticator, such that it is faster.
        Basically, it takes the CredentialID from the list and treat it as an ASCII string and put it into a
        HashSet<String>. It should not matter if a duplicated CredentialID is added. If the hash set is not
        empty, the algorithm then queries Keychain for all CredentialIDs related to the current RP ID once.
        For every queried CredentialID, the algorithm then treats it as an ASCII string as well and look for
        a match in the hash set to produce the intersetction. The new way is also employed in
        LocalAuthenticator::getAssertion as well.
        4) It abstracts the way to produce authData and thus reorders a bit of code in
        LocalAuthenticator::makeCredential.

        Covered by API tests.

        * Modules/webauthn/AuthenticatorManager.cpp:
        (WebCore::AuthenticatorManager::create const):
        (WebCore::AuthenticatorManager::discoverFromExternalSource const):
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (WebCore::PublicKeyCredentialRequestOptions::encode const):
        (WebCore::PublicKeyCredentialRequestOptions::decode):
        * Modules/webauthn/cocoa/LocalAuthenticator.h:
        * Modules/webauthn/cocoa/LocalAuthenticator.mm:
        (WebCore::LocalAuthenticatorInternal::buildAuthData):
        (WebCore::LocalAuthenticatorInternal::produceHashSet):
        (WebCore::LocalAuthenticator::makeCredential):
        (WebCore::LocalAuthenticator::getAssertion):
        (WebCore::LocalAuthenticator::issueClientCertificate const):
        * WebCore.xcodeproj/project.pbxproj:

2018-03-27  Chris Dumez  <cdumez@apple.com>

        Avoid constructing SecurityOrigin objects from non-main threads
        https://bugs.webkit.org/show_bug.cgi?id=184024

        Reviewed by Youenn Fablet.

        Avoid constructing SecurityOrigin objects from non-main threads as much as possible
        as it is not safe. This patch gets rid of most offending cases but not all of them
        yet, which is why I haven't added a ASSERT(isMainThread()) to the SecurityOrigin
        constructor yet.

        For example, ContentSecurityPolicy::upgradeInsecureRequestIfNeeded() currently
        gets called from non-main threads and construct a SecurityOrigin. Fixing this
        will require some refactoring that would have made this patch much larger.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::matchRegistration):
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        * testing/Internals.cpp:
        (WebCore::Internals::hasServiceWorkerRegistration):
        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::create):
        (WebCore::DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope):
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.cpp:
        (WebCore::DedicatedWorkerThread::createWorkerGlobalScope):
        * workers/DedicatedWorkerThread.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerLocation.cpp:
        (WebCore::WorkerLocation::origin const):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadStartupData::WorkerThreadStartupData):
        (WebCore::WorkerThread::workerThread):
        * workers/WorkerThread.h:
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        (WebCore::ServiceWorkerGlobalScope::ServiceWorkerGlobalScope):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::mayHaveServiceWorkerRegisteredForOrigin):
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        (WebCore::fireMessageEvent):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorker):
        * workers/service/context/ServiceWorkerThread.h:

2018-03-27  Alex Christensen  <achristensen@webkit.org>

        Remove unused libsoup ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=184048

        Reviewed by Michael Catanzaro.

        This code is unused since r228901 so let's remove it!

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandleInternal::soupSession):
        (WebCore::ResourceHandle::cancelledOrClientless):
        (WebCore::ResourceHandle::ensureReadBuffer):
        (WebCore::ResourceHandle::currentStreamPosition const):
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse):
        (WebCore::ResourceHandle::didStartRequest):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::releaseForDownload):
        (WebCore::ResourceHandle::sendPendingRequest):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueDidReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedCancellation):
        (WebCore::ResourceHandle::receivedChallengeRejection):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::sessionFromContext): Deleted.
        (WebCore::ResourceHandle::create): Deleted.
        (WebCore::ResourceHandle::ResourceHandle): Deleted.
        (WebCore::isAuthenticationFailureStatusCode): Deleted.
        (WebCore::tlsErrorsChangedCallback): Deleted.
        (WebCore::gotHeadersCallback): Deleted.
        (WebCore::applyAuthenticationToRequest): Deleted.
        (WebCore::restartedCallback): Deleted.
        (WebCore::shouldRedirect): Deleted.
        (WebCore::shouldRedirectAsGET): Deleted.
        (WebCore::continueAfterWillSendRequest): Deleted.
        (WebCore::doRedirect): Deleted.
        (WebCore::redirectSkipCallback): Deleted.
        (WebCore::wroteBodyDataCallback): Deleted.
        (WebCore::cleanupSoupRequestOperation): Deleted.
        (WebCore::nextMultipartResponsePartCallback): Deleted.
        (WebCore::sendRequestCallback): Deleted.
        (WebCore::continueAfterDidReceiveResponse): Deleted.
        (WebCore::startingCallback): Deleted.
        (WebCore::networkEventCallback): Deleted.
        (WebCore::createSoupMessageForHandleAndRequest): Deleted.
        (WebCore::createSoupRequestAndMessageForHandle): Deleted.
        (WebCore::ResourceHandle::timeoutFired): Deleted.
        (WebCore::waitingToSendRequest): Deleted.
        (WebCore::readCallback): Deleted.

2018-03-27  Chris Dumez  <cdumez@apple.com>

        Move online state detection from the WebProcess to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=183989
        <rdar://problem/37093299>

        Reviewed by Youenn Fablet.

        Move online state detection from the WebProcess to the NetworkProcess. This avoid executing the same (expensive) code in
        EACH web process whenever a network interface's state changes. Now, the Network Process monitors network interfaces
        and determines the online state whenever an interface's state changes. If the onLine state changes, it notifies all
        its connected WebProcesses via IPC.

        * inspector/agents/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        * loader/LoaderStrategy.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::onLine const):
        * page/Page.cpp:
        * platform/network/NetworkStateNotifier.h:
        * workers/Worker.cpp:
        (WebCore::Worker::Worker):
        (WebCore::Worker::notifyFinished):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):

2018-03-27  Daniel Bates  <dabates@apple.com>

        CSS mask images should be retrieved using potentially CORS-enabled fetch
        https://bugs.webkit.org/show_bug.cgi?id=179983
        <rdar://problem/35678149>

        Reviewed by Brent Fulgham.

        As per <https://drafts.fxtf.org/css-masking-1/#priv-sec> (Editor’s Draft, 23 December 2017)
        we should fetch CSS mask images using a potentially CORS-enabled fetch.

        Both cross-origin CSS shape-outside images and CSS mask images may be sensitive to timing
        attacks that can be used to reveal their pixel data when retrieved without regard to CORS.
        For the same reason that we fetch CSS shape-outside images using a potentially CORS-enabled
        fetch we should fetch CSS mask the same way. This also makes the behavior of WebKit more
        closely align with the behavior in the spec.

        Test: http/tests/security/css-mask-image.html

        * page/Settings.yaml: Add a setting for toggle "Anonymous" mode fetching of mask images (defaults: true).
        We need this setting to avoid breaking the developer convenience feature that some modern media controls
        layout tests employ to load assets from the filesystem as opposed to using the hardcoded data URLs baked
        into the WebKit binary.
        * style/StylePendingResources.cpp: Substitute LoadPolicy::NoCORS and LoadPolicy::Anonymous for
        LoadPolicy::Normal and LoadPolicy::ShapeOutside, respectively, to match the terminology used
        in the HTML, CSS Shapes Module Level 1, and CSS Masking Module Level 1 specs.
        (WebCore::Style::loadPendingImage): Ditto.
        (WebCore::Style::loadPendingResources): Use load policy LoadPolicy::Anonymous when fetching
        a mask image or shape-outside image.

2018-03-27  Zalan Bujtas  <zalan@apple.com>

        RenderBox::parent/firstChild/nextSibling/previousSiblingBox() functions should type check.
        https://bugs.webkit.org/show_bug.cgi?id=184032
        <rdar://problem/38384984>

        Reviewed by Antti Koivisto.

        We cannot rely on the correctness of the render tree structure when querying for parent/child/next and previous
        sibling since some features (multicolumn/spanners) move subtrees out of their original position (which is highly
        undesired and should not be encouraged at all though).
        It should also be noted that these functions are not equivalent of typeOfChildren<RenderBox> and the following usage
            for (auto* boxChild = firstChildBox(); boxChild; boxChild = boxChild->nextSiblingBox())
        can lead to unexpected result.
 
        Test: fast/multicol/parent-box-when-spanner-is-present.html

        * rendering/RenderBox.h:
        (WebCore::RenderBox::parentBox const):
        (WebCore::RenderBox::firstChildBox const):
        (WebCore::RenderBox::lastChildBox const):
        (WebCore::RenderBox::previousSiblingBox const):
        (WebCore::RenderBox::nextSiblingBox const):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):

2018-03-27  Brent Fulgham  <bfulgham@apple.com>

        Further refine cookie read/write logging
        https://bugs.webkit.org/show_bug.cgi?id=184044
        <rdar://problem/38915610>

        Reviewed by Chris Dumez.

        Export 'shouldBlockCookies' so that it can be accessed by the WebKit framework.

        * platform/network/NetworkStorageSession.h:

2018-03-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Stop using internals.pauseAnimationAtTimeOnElement() in favor of Web Animations API for animations tests
        https://bugs.webkit.org/show_bug.cgi?id=184038

        Reviewed by Dean Jackson.

        Expose a new method to indicate that the runtime flag for CSS Animations and CSS Transitions as Web Animations is enabled.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2018-03-27  Thibault Saunier  <tsaunier@igalia.com>

        [GStreamer] Enhance debugging in the BasePlayer
        https://bugs.webkit.org/show_bug.cgi?id=184035

        Reviewed by Philippe Normand.

        No behaviour changes so no test were added/enabled.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage):
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize const):
        (WebCore::MediaPlayerPrivateGStreamerBase::setVolume):
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChangedCallback):
        (WebCore::MediaPlayerPrivateGStreamerBase::setMuted):
        (WebCore::MediaPlayerPrivateGStreamerBase::muted const):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceAttached):
        (WebCore::MediaPlayerPrivateGStreamerBase::cdmInstanceDetached):
        (WebCore::MediaPlayerPrivateGStreamerBase::dispatchDecryptionKey):
        (WebCore::MediaPlayerPrivateGStreamerBase::handleProtectionEvent):

2018-03-27  Eric Carlson  <eric.carlson@apple.com>

        Make AVFoundationEnabled preference available on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183876
        <rdar://problem/38726459>

        Reviewed by Youenn Fablet.

        Test: AVFoundationPref API test.

        * html/HTMLAudioElement.idl: There is no need for a runtime setting to enable/disable audio,
        there is already settings.mediaEnabled.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Fail if there are no media engines registered.
        (WebCore::HTMLMediaElement::noneSupported): Return early if m_error has already been set.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Remove a typo.

        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::audioEnabled const): Deleted.
        * page/RuntimeEnabledFeatures.h:

2018-03-27  Fujii Hironori  <Hironori.Fujii@sony.com>

        [GTK] Layout test editing/deleting/delete-surrogatepair.html crashing with CRITICAL **: enchant_dict_check: assertion 'g_utf8_validate(word, len, NULL)' failed
        https://bugs.webkit.org/show_bug.cgi?id=176799

        Reviewed by Carlos Garcia Campos.

        The length of a surrogate-pair UTF-16 character is 2 even though
        the number of characters is 1. An incorrect string length was
        passed to enchant_dict_check if the string contains a
        surrogate-pair character because the length was calculated by
        applying UTF-16 character position to UTF-8 string.

        No new tests (Covered by existing tests).

        * platform/text/enchant/TextCheckerEnchant.cpp:
        (WebCore::TextCheckerEnchant::checkSpellingOfWord): Changed the
        type of an argument `word` from CString to String. Convert a
        substring of the argument into UTF-8.
        (WebCore::TextCheckerEnchant::checkSpellingOfString): Pass the
        original UTF-16 string to checkSpellingOfWord instead of a
        converted UTF-8 string.
        * platform/text/enchant/TextCheckerEnchant.h: Changed the type of
        an argument `word` from CString to String.

2018-03-26  Ms2ger  <Ms2ger@igalia.com>

        Remove an unnecessary const_cast from BitmapTextureGL::updateContents().
        https://bugs.webkit.org/show_bug.cgi?id=184007

        Reviewed by Žan Doberšek.

        No new tests.

        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2018-03-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_animation-currenttime.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183819

        Reviewed by Dean Jackson.

        The current time for a CSS Animation exposed via the API should be clamped between 0 and the animation duration.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::bindingsCurrentTime const):
        * animation/CSSAnimation.h:
        * animation/WebAnimation.h:

2018-03-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Correctly handle timing functions specified by CSS Animations and CSS Transitions
        https://bugs.webkit.org/show_bug.cgi?id=183935

        Reviewed by Dean Jackson.

        We were incorrectly reflecting the animation-timing-function and transition-timing-function values on the generated
        DeclarativeAnimation effect timing "easing" property. In fact, those values should only be represented on the keyframes.

        In the case of a CSS Animation, the animation-timing-function property set on the element's style serves as the default
        value used for all keyframes, and individual keyframes can specify an overriding animation-timing-function. For a CSS
        Transition, the transition-timing-function property set on the element's style serves as the timing function of the
        from keyframe.

        To correctly reflect this, we provide a new timingFunctionForKeyframeAtIndex() function on KeyframeEffectReadOnly
        which will return the right TimingFunction object at a given index, regardless of the animation type. In the case
        of getKeyframes(), we manually return "linear" for the "to" keyframe since timingFunctionForKeyframeAtIndex()
        would otherwise return the same timing function as the "from" keyframe. This avoids creating an extra
        LinearTimingFunction object.

        As a result, a number of Mozilla imported tests progress since we have correct information on the "easing" property
        of objects returned by getKeyframes() and the "progress" reported by getComputedTiming() now always uses a linear
        timing function.

        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::syncPropertiesWithBackingAnimation): The timing function of the backing Animation should
        not be reflected on the effect's timing object.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::getKeyframes): Return the correct timing function for a keyframe, and use a "linear"
        value for the "to" keyframe of a CSS Transition.
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffectReadOnly::timingFunctionForKeyframeAtIndex):
        * animation/KeyframeEffectReadOnly.h:

2018-03-26  Chris Dumez  <cdumez@apple.com>

        Use SecurityOriginData more consistently in Service Worker code
        https://bugs.webkit.org/show_bug.cgi?id=183969

        Reviewed by Darin Adler.

        Use SecurityOriginData more consistently in Service Worker code to avoid constructing
        SecurityOrigin objects unnecessarily.

        I also updated SecurityOrigin to use SecurityOriginData as a data member. This reduces
        code duplication a bit. This also avoids constructing SecurityOriginData unnecessarily
        in some cases as callers can now use SecurityOrigin::data() instead of
        SecurityOriginData::fromSecurityOrigin().

        No new tests, no Web-facing behavior change.

        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::origin const):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::storageDirectory const):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::mediaKeysStorageDirectory const):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory const):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::securityOrigin):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::securityOrigin const):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory const):
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        * page/DOMWindow.cpp:
        (WebCore:: const):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        (WebCore::SecurityOrigin::canAccess const):
        (WebCore::SecurityOrigin::canDisplay const):
        (WebCore::SecurityOrigin::domainForCachePartition const):
        (WebCore::SecurityOrigin::isLocal const):
        (WebCore::SecurityOrigin::toString const):
        (WebCore::SecurityOrigin::toRawString const):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::isSameSchemeHostPort const):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::protocol const):
        (WebCore::SecurityOrigin::host const):
        (WebCore::SecurityOrigin::port const):
        (WebCore::SecurityOrigin::data const):
        (WebCore::SecurityOrigin::isHTTPFamily const):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::toString const):
        (WebCore::SecurityOriginData::fromFrame):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::fromURL):
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::relatesToOrigin const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        * workers/service/server/SWOriginStore.cpp:
        (WebCore::SWOriginStore::add):
        (WebCore::SWOriginStore::remove):
        (WebCore::SWOriginStore::clear):
        * workers/service/server/SWOriginStore.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::markAllWorkersForOriginAsTerminated):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::needsServerToContextConnectionForOrigin const):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::connectionForOrigin):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::securityOrigin const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::origin const):
        (WebCore::SWServerWorker::securityOrigin const):
        * workers/service/server/SWServerWorker.h:

2018-03-26  Brent Fulgham  <bfulgham@apple.com>

        Warn against cookie access in the WebContent process using ProcessPrivilege assertions
        https://bugs.webkit.org/show_bug.cgi?id=183911
        <rdar://problem/38762306>

        Reviewed by Youenn Fablet.

        Add a set of ProcessPrivilege assertions to enforce the rule that the WebContent process
        should never call Cookie API directly. That should only happen in the Networking or
        UIProcess. 

        Add a new static flag to NetworkStorageSession that indicates if the current process has
        permission to interact with the Cookie API.

        No new tests since there is no change in behavior.

        * platform/network/NetworkStorageSession.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession):
        (WebCore::NetworkStorageSession::processMayUseCookieAPI): Added.
        (WebCore::NetworkStorageSession::permitProcessToUseCookieAPI): Added. This also adds
        the appropriate flag to the ProcessPrivileges data for the current process.
        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::createCFStorageSessionForIdentifier): Do not create cookie storage if the current
        process is prohibited from interacting with the Cookie API.
        (WebCore::NetworkStorageSession::NetworkStorageSession): Add assertions.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Do not create cookie storage if
        the current process is prohibited from interacting with the Cookie API.
        (WebCore::NetworkStorageSession::defaultStorageSession): Ditto.
        (WebCore::NetworkStorageSession::ensureSession): Ditto.
        (WebCore::NetworkStorageSession::cookieStorage const): Ditto.
        * platform/network/cocoa/CookieStorageObserver.mm:
        (WebCore::CookieStorageObserver::CookieStorageObserver): Assert if accessed from untrusted process.
        (WebCore::CookieStorageObserver::startObserving): Ditto.
        (WebCore::CookieStorageObserver::stopObserving): Ditto.
        * platform/network/cocoa/NetworkStorageSessionCocoa.mm:
        (WebCore::NetworkStorageSession::setCookie):
        (WebCore::NetworkStorageSession::setCookies):
        (WebCore::NetworkStorageSession::deleteCookie):
        (WebCore::nsCookiesToCookieVector):
        (WebCore::NetworkStorageSession::getAllCookies):
        (WebCore::NetworkStorageSession::getCookies):
        (WebCore::NetworkStorageSession::flushCookieStore):
        (WebCore::NetworkStorageSession::nsCookieStorage const):
        (WebCore::createPrivateStorageSession):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::httpCookies):
        (WebCore::deleteHTTPCookie):
        (WebCore::httpCookiesForURL):
        (WebCore::filterCookies):
        (WebCore::applyPartitionToCookies):
        (WebCore::cookiesInPartitionForURL):
        (WebCore::cookiesForSession):
        (WebCore::setHTTPCookiesForURL):
        (WebCore::deleteAllHTTPCookies):
        (WebCore::setCookiesFromDOM):
        (WebCore::httpCookieAcceptPolicy):
        (WebCore::deleteCookie):
        (WebCore::deleteCookiesForHostnames):
        (WebCore::deleteAllCookiesModifiedSince):

2018-03-26  Alex Christensen  <achristensen@webkit.org>

        Merge ResourceHandleClient::willCacheResponseAsync with ResourceHandleClient::willCacheResponse
        https://bugs.webkit.org/show_bug.cgi?id=183965

        Reviewed by Chris Dumez.

        It turns out that ResourceHandleClient::willCacheResponseAsync didn't do anything and the logic in
        ResourceHandleClient::willCacheResponse was not being called.  This makes it so there is one code
        path and it executes the logic in ResourceHandleClient::willCacheResponse.

        * loader/EmptyFrameLoaderClient.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cocoa/SubresourceLoaderCocoa.mm:
        (WebCore::SubresourceLoader::willCacheResponseAsync):
        (WebCore::SubresourceLoader::willCacheResponse): Deleted.
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponseAsync):
        (WebCore::ResourceLoader::willCacheResponse): Deleted.
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::willCacheResponseAsync): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        (WebCore::ResourceHandleClient::willCacheResponse): Deleted.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::continueWillCacheResponse): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillCacheResponse): Deleted.
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::continueWillCacheResponse): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueWillCacheResponse:]): Deleted.

2018-03-26  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Upload correct buffer in BitmapTextureGL::updateContents()
        https://bugs.webkit.org/show_bug.cgi?id=184004

        Reviewed by Žan Doberšek.

        Do not upload the original buffer. Upload the result of creating a subImage buffer
        if it was required.

        Covered by existent tests.

        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2018-03-25  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Clean up TextureMapperPlatformLayer, TextureMapperBackingStore code
        https://bugs.webkit.org/show_bug.cgi?id=183985

        Reviewed by Michael Catanzaro.

        Clean up TextureMapperPlatformLayer and TextureMapperBackingStore
        headers and implementation files. Remove dubious whitespace, use #pragma
        once, clean up constructors, destructors, method definitions and remove
        unnecessary includes in favor of forward declarations where possible.

        The TextureMapperPlatformLayer::swapBuffers() method is removed as it
        wasn't called or overridden anywhere.

        No new tests -- no change in functionality.

        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (WebCore::TextureMapperBackingStore::drawRepaintCounter):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::setClient):
        (WebCore::TextureMapperPlatformLayer::TextureMapperPlatformLayer): Deleted.
        (WebCore::TextureMapperPlatformLayer::swapBuffers): Deleted.

2018-03-25  Dan Bernstein  <mitz@apple.com>

        [Xcode] Remove workaround only needed for deploying to iOS 10.0 and earlier
        https://bugs.webkit.org/show_bug.cgi?id=183999

        Reviewed by Sam Weinig.

        * Configurations/WebCore.xcconfig: Removed build settings.
        * Configurations/WebCoreTestSupport.xcconfig: Removed location of phony WebKitLegacy from
          frameworks search path.
        * Configurations/WebKitLegacyStub.iOS.tbd: Removed.
        * WebCore.xcodeproj/project.pbxproj: Removed script build phase from the Derived Sources target.

2018-03-25  Commit Queue  <commit-queue@webkit.org>

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

        Caused many layout tests to crash on Apple High Sierra,
        Sierra, iOS Simulator and GTK Linux Debug test bots (Requested
        by dydz on #webkit).

        Reverted changeset:

        "Use SecurityOriginData more consistently in Service Worker
        code"
        https://bugs.webkit.org/show_bug.cgi?id=183969
        https://trac.webkit.org/changeset/229954

2018-03-23  Alex Christensen  <achristensen@webkit.org>

        Use completion handlers for ResourceHandleClient::canAuthenticateAgainstProtectionSpaceAsync
        https://bugs.webkit.org/show_bug.cgi?id=183966

        Reviewed by Chris Dumez.

        No change in behavior.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::canAuthenticateAgainstProtectionSpaceAsync):
        * loader/ResourceLoader.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::canAuthenticateAgainstProtectionSpaceAsync):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueCanAuthenticateAgainstProtectionSpace:]): Deleted.

2018-03-24  Chris Dumez  <cdumez@apple.com>

        Use SecurityOriginData more consistently in Service Worker code
        https://bugs.webkit.org/show_bug.cgi?id=183969

        Reviewed by Darin Adler.

        Use SecurityOriginData more consistently in Service Worker code to avoid constructing
        SecurityOrigin objects unnecessarily.

        I also updated SecurityOrigin to use SecurityOriginData as a data member. This reduces
        code duplication a bit. This also avoids constructing SecurityOriginData unnecessarily
        in some cases as callers can now use SecurityOrigin::data() instead of
        SecurityOriginData::fromSecurityOrigin().

        No new tests, no Web-facing behavior change.

        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::origin const):
        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::storageDirectory const):
        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::mediaKeysStorageDirectory const):
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.cpp:
        (WebCore::WebKitMediaKeySession::mediaKeysStorageDirectory const):
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
        (WebCore::IDBClient::IDBConnectionToServer::getAllDatabaseNames):
        * Modules/webdatabase/Database.cpp:
        (WebCore::Database::securityOrigin):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::securityOrigin const):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerMediaKeysStorageDirectory const):
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin):
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        * page/DOMWindow.cpp:
        (WebCore:: const):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        (WebCore::SecurityOrigin::canAccess const):
        (WebCore::SecurityOrigin::canDisplay const):
        (WebCore::SecurityOrigin::domainForCachePartition const):
        (WebCore::SecurityOrigin::isLocal const):
        (WebCore::SecurityOrigin::toString const):
        (WebCore::SecurityOrigin::toRawString const):
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::isSameSchemeHostPort const):
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::protocol const):
        (WebCore::SecurityOrigin::host const):
        (WebCore::SecurityOrigin::port const):
        (WebCore::SecurityOrigin::data const):
        (WebCore::SecurityOrigin::isHTTPFamily const):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::toString const):
        (WebCore::SecurityOriginData::fromFrame):
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::fromURL):
        * storage/StorageNamespaceProvider.cpp:
        (WebCore::StorageNamespaceProvider::localStorageArea):
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        * workers/service/ServiceWorkerRegistrationKey.cpp:
        (WebCore::ServiceWorkerRegistrationKey::relatesToOrigin const):
        * workers/service/ServiceWorkerRegistrationKey.h:
        * workers/service/server/SWOriginStore.cpp:
        (WebCore::SWOriginStore::add):
        (WebCore::SWOriginStore::remove):
        (WebCore::SWOriginStore::clear):
        * workers/service/server/SWOriginStore.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistration):
        (WebCore::SWServer::removeRegistration):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::markAllWorkersForOriginAsTerminated):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::needsServerToContextConnectionForOrigin const):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::connectionForOrigin):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::securityOrigin const):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::origin const):
        (WebCore::SWServerWorker::securityOrigin const):
        * workers/service/server/SWServerWorker.h:

2018-03-24  Commit Queue  <commit-queue@webkit.org>

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

        not actually necessary (Requested by thorton on #webkit).

        Reverted changeset:

        "Fix the build"
        https://trac.webkit.org/changeset/229792

2018-03-23  Tim Horton  <timothy_horton@apple.com>

        Fix the geolocation build
        https://bugs.webkit.org/show_bug.cgi?id=183975

        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        (WebCore::GeolocationPosition::GeolocationPosition):

2018-03-23  Tim Horton  <timothy_horton@apple.com>

        Fix the build with no pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=183973

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:
        * platform/ios/PlatformPasteboardIOS.mm:

2018-03-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Fix some localizable strings after r229878
        https://bugs.webkit.org/show_bug.cgi?id=183963

        Reviewed by Tim Horton.

        The WEB_UI_STRING macro was incorrectly used for certain localized strings pertaining to extra zoom mode. To
        correct this, make the "Done" string use WEB_UI_STRING with actual UI-facing text; since day, year and month
        labels in the date picker are less generalizable to other UI, leave these as unique keys, but change them to
        use WEB_UI_STRING_KEY instead.

        Additionally, remove now-unused localizable strings for the text input view controller.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::formControlDoneButtonTitle):
        (WebCore::datePickerDayLabelTitle):
        (WebCore::datePickerMonthLabelTitle):
        (WebCore::datePickerYearLabelTitle):

2018-03-23  Chris Dumez  <cdumez@apple.com>

        NetworkStateNotifier::updateStateWithoutNotifying() is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=183760
        <rdar://problem/37093299>

        Reviewed by Ryosuke Niwa.

        Update NetworkStateNotifier::updateStateWithoutNotifying() to stop calling
        SCDynamicStoreCopyKeyList(). SCDynamicStoreCopyKeyList() is expensive as it
        expects its key parameter to be a regular expression and it can match several
        keys. It is also unnecessary in our case since we already have an exact key.
        We now call the more efficient SCDynamicStoreCopyValue() instead, which is
        the right thing to call when we have an exact key.

        This change was suggested by the SC team.

        This was tested manually as there is no easy way to write an automated test
        for this.

        In a follow-up, I also plan to call this code in the UIProcess (or NetworkProcess)
        to avoid calling it once per WebProcess.

        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateStateWithoutNotifying):

2018-03-23  Daniel Bates  <dabates@apple.com>

        Unreviewed, rolling out r229868.

        Caused media controls tests to timeout. Will investigate
        offline.

        Reverted changeset:

        "CSS mask images should be retrieved using potentially CORS-
        enabled fetch"
        https://bugs.webkit.org/show_bug.cgi?id=179983
        https://trac.webkit.org/changeset/229868

2018-03-23  Mark Lam  <mark.lam@apple.com>

        Add pointer profiling hooks to the CSS JIT.
        https://bugs.webkit.org/show_bug.cgi?id=183947
        <rdar://problem/38803593>

        Reviewed by JF Bastien.

        No new tests needed.  Covered by existing tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        - Added a missing application of WTF_PREPARE_VTBL_POINTER_FOR_INSPECTION().

        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJSNewlyCreated):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):
        * cssjit/SelectorCompiler.h:
        (WebCore::SelectorCompiler::ruleCollectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::querySelectorSimpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::ruleCollectorSelectorCheckerFunctionWithCheckingContext):
        (WebCore::SelectorCompiler::querySelectorSelectorCheckerFunctionWithCheckingContext):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const):
        (WebCore::SelectorDataList::execute const):

2018-03-23  Sihui Liu  <sihui_liu@apple.com>

        Local storage getItem() for an empty string returned UNDEFINED value.
        https://bugs.webkit.org/show_bug.cgi?id=69138
        <rdar://problem/13410974>

        Reviewed by Brady Eidson.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::getColumnBlobAsString):

2018-03-23  Chris Dumez  <cdumez@apple.com>

        Promptly terminate service worker processes when they are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=183873
        <rdar://problem/38676995>

        Reviewed by Youenn Fablet.

        The StorageProcess now keeps track of service worker clients for each security
        origin. When there is no longer any clients for a given security origin, the
        StorageProcess asks the service worker process for the given origin to terminate
        and severs its connection to it.

        Change is covered by API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::markAllWorkersForOriginAsTerminated):
        Pass the security origin since this is called when a service worker process
        crashes. When a service worker process for origin A crashes, we only want
        to mark service workers in origin A as terminated, not ALL of them.

        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::needsServerToContextConnectionForOrigin const):
        Tweak logic so that we only relaunch a service worker process if we still
        have clients for its security origin.

        * workers/service/server/SWServer.h:
        (WebCore::SWServer::disableServiceWorkerProcessTerminationDelay):
        Add a way to disable the service worker termination delay to facilitate
        testing.

        * workers/service/server/SWServerToContextConnection.h:

2018-03-23  Brady Eidson  <beidson@apple.com>

        Go to back/forward list items after a process-swapped navigation.
        <rdar://problem/38690544> and https://bugs.webkit.org/show_bug.cgi?id=183920

        Reviewed by Andy Estes.

        Covered by new API test.

        Most of the changes to WebCore are teaching HistoryItem navigations to know when they should
        do a policy check or not.

        * WebCore.xcodeproj/project.pbxproj:

        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::goBackOrForward):
        (WebCore::BackForwardController::goBack):
        (WebCore::BackForwardController::goForward):

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setStateObject): Actually push state object changes to the UIProcess.
          This was a long standing bug that made it difficult to effectively test this change.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        (WebCore::FrameLoader::loadItem):
        (WebCore::FrameLoader::retryAfterFailedCacheOnlyMainResourceLoad):
        * loader/FrameLoader.h:
        * loader/FrameLoaderTypes.h:

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem):
        (WebCore::HistoryController::setDefersLoading):
        (WebCore::HistoryController::recursiveGoToItem):
        * loader/HistoryController.h:

        * loader/NavigationPolicyCheck.h:

        * page/Page.cpp:
        (WebCore::Page::goToItem):
        * page/Page.h:

2018-03-23  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Fix decoder key isPrevalentResource->isVeryPrevalentResource
        https://bugs.webkit.org/show_bug.cgi?id=183950
        <rdar://problem/38806275>

        Reviewed by Brent Fulgham.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::decode):
            Now isVeryPrevalentResource is decoded to the correct field.

2018-03-23  Youenn Fablet  <youenn@apple.com>

        WebProcessPool should not ask to register all clients for each service worker process creation
        https://bugs.webkit.org/show_bug.cgi?id=183941

        Reviewed by Chris Dumez.

        Covered by existing unit tests.
        Register all Documents of a process no matter its session ID when asked to.
        Make sure that whenever a WebProcess is asked to do so, any further Document will be registered
        by calling setMayHaveRegisteredServiceWorkers().
        This ensures that a WebProcess created before any service worker but empty at the time a service worker is created
        will actually register all its future clients.

        Add some assertions to ensure that a client is not registered twice.

        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):
        * workers/service/ServiceWorkerProvider.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registerServiceWorkerClient):

2018-03-23  Eric Carlson  <eric.carlson@apple.com>

        HTMLElement factory doesn't need to call MediaPlayer::isAvailable
        https://bugs.webkit.org/show_bug.cgi?id=183946
        <rdar://problem/38802687>

        Reviewed by Youenn Fablet.

        Test: media/media-disabled.html

        * dom/make_names.pl:
        (printConstructorInterior):
        * page/Settings.yaml:
        * page/SettingsDefaultValues.h:

2018-03-23  David Kilzer  <ddkilzer@apple.com>

        Stop using dispatch_set_target_queue()
        <https://webkit.org/b/183908>
        <rdar://problem/33553533>

        Reviewed by Daniel Bates.

        No new tests since no change in behavior.

        * platform/mediastream/mac/AVMediaCaptureSource.mm:
        (WebCore::globaVideoCaptureSerialQueue): Remove use of
        dispatch_set_target_queue() by changing dispatch_queue_create()
        to dispatch_queue_create_with_target().

2018-03-23  Youenn Fablet  <youenn@apple.com>

        Use libwebrtc ObjectiveC H264 encoder and decoder
        https://bugs.webkit.org/show_bug.cgi?id=183912

        Reviewed by Eric Carlson.

        No observable change of behavior.
        Made use of libwebrtc WebKit utilities.
        Updated RealtimeINcomingVideoSourceCocoa as it now receives ObjcVideoFrame.

        * Configurations/WebCore.xcconfig:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::~LibWebRTCProviderCocoa):
        (WebCore::LibWebRTCProviderCocoa::setH264HardwareEncoderAllowed):
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        (WebCore::LibWebRTCProviderCocoa::setActive):
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: Renamed from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.cpp.
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * testing/Internals.cpp: Removed commented out include.

2018-03-23  Youenn Fablet  <youenn@apple.com>

        DocumentThreadableLoader should send credentials after redirections and preflight if fetch option credentials is include
        https://bugs.webkit.org/show_bug.cgi?id=183928

        Reviewed by Chris Dumez.

        Tests: imported/w3c/web-platform-tests/fetch/api/cors/cors-cookies-redirect.any.html
               imported/w3c/web-platform-tests/fetch/api/cors/cors-cookies-redirect.any.worker.html

        In case mode is include, keep sending credentials even after redirection with preflight.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):

2018-03-23  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r229858

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:

2018-03-23  Youenn Fablet  <youenn@apple.com>

        Allow fully whitelisted plug-ins to match non HTTP URLs
        https://bugs.webkit.org/show_bug.cgi?id=183938
        rdar://problem/38534312

        Reviewed by Chris Dumez.

        Covered by manual testing and unit testing.

        * platform/URL.cpp:
        (WebCore::URL::isMatchingDomain const):

2018-03-23  Youenn Fablet  <youenn@apple.com>

        ActiveDOMObject should assert that they are destroyed in the thread they are created
        https://bugs.webkit.org/show_bug.cgi?id=183671

        Reviewed by Chris Dumez.

        No change of behavior.
        Moved MessagePort assertion to ActiveDOMObject.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::~MessagePort):
        * dom/MessagePort.h:

2018-03-23  Youenn Fablet  <youenn@apple.com>

        Safari WebKitWebRTCAudioModule crash during <video> tag update when audio track present in MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=181180
        <rdar://problem/36302375>

        Reviewed by Eric Carlson.

        Test: webrtc/video-update-often.html

        AudioTrackPrivateMediaStreamCocoa needs to be destroyed in the main thread since it owns a Ref to its MediaStreamTrackPrivate.
        We can still ref it on a background thread but we always deref it on the main thread.

        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        (WebCore::AudioTrackPrivateMediaStreamCocoa::audioSamplesAvailable):
        (WebCore::AudioTrackPrivateMediaStreamCocoa::render):

2018-03-23  Sergio Villar Senin  <svillar@igalia.com>

        [css-grid] Fix auto repeat tracks computation with definite min sizes
        https://bugs.webkit.org/show_bug.cgi?id=183933

        Reviewed by Javier Fernandez.

        Indefinitely sized containers use the specified definite min-size (if any) as available
        space in order to compute the number of auto repeat tracks to create. A bug in that code was
        causing the grid to be one track larger than expected. That was only happening in the case
        of the free space being a multiple of the total size of the autorepeat tracks.

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

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

2018-03-23  Miguel Gomez  <magomez@igalia.com>

        [GTK][WPE] Avoid software color conversion inside BitmapTextureGL
        https://bugs.webkit.org/show_bug.cgi?id=183892

        Reviewed by Žan Doberšek.

        Always use RGBA format on BitmapTextureGL (when no other format is specifically requested). When
        the texture is updated from BGRA content, use a flag to indicate the shader to perform a color
        conversion during the painting. This way we don't need to swap the R and B components on the CPU.
        Also, remove one of the lists in BitmapTexturePool as now all of them have the same format, and
        remove the UpdateContentsFlag as we never need to modify the original image data.

        Covered by existent tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        * platform/graphics/texmap/BitmapTexture.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/BitmapTexture.h:
        * platform/graphics/texmap/BitmapTextureGL.cpp:
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::BitmapTextureGL::didReset):
        (WebCore::BitmapTextureGL::updateContents):
        (WebCore::BitmapTextureGL::applyFilters):
        (WebCore::swizzleBGRAToRGBA): Deleted.
        (WebCore::BitmapTextureGL::updateContentsNoSwizzle): Deleted.
        * platform/graphics/texmap/BitmapTextureGL.h:
        (WebCore::BitmapTextureGL::colorConvertFlags const):
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::acquireTexture):
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        * platform/graphics/texmap/BitmapTexturePool.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::updateBackingStoreIfNeeded):
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::TextureMapperContextAttributes::get):
        * platform/graphics/texmap/TextureMapperContextAttributes.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::drawNumber):
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintIntoSurface):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::paintToTextureMapper):
        * platform/graphics/texmap/TextureMapperTile.cpp:
        (WebCore::TextureMapperTile::updateContents):
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
        (WebCore::TextureMapperTiledBackingStore::updateContents):
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:

2018-03-23  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Add standard containers with FastAllocator specialization
        https://bugs.webkit.org/show_bug.cgi?id=183789

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBKeyData.h:
        * Modules/mediasource/SampleMap.h:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/webauthn/cbor/CBORValue.h:
        It did not use FastAllocator for its container.

        * page/WheelEventTestTrigger.h:
        * platform/audio/PlatformMediaSessionManager.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction):
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/wpe/PlatformPasteboardWPE.cpp:
        * rendering/OrderIterator.h:

2018-03-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] infinite repeat counts aren't reflected for CSS Animations
        https://bugs.webkit.org/show_bug.cgi?id=183932

        Reviewed by Dean Jackson.

        The "infinite" value for animation-repeat-count is reflected as a special value which resolves to -1. We need to check
        for this special value before setting the iterations count on the AnimationEffectTimingReadOnly object.

        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation):

2018-03-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Correctly cancel animations when a parent gets a "display: none" style or when an element is removed
        https://bugs.webkit.org/show_bug.cgi?id=183919

        Reviewed by Dean Jackson.

        The old CSSAnimationController provided a cancelAnimations(Element&) method that allowed for animations for a given element
        to be canceled when a parent element in the hierarchy gets a "display: none" style or if an element with animations is removed.
        We add a similar cancelAnimationsForElement(Element&) method on AnimationTimeline and update CSSAnimationController::cancelAnimations()
        call sites to use AnimationTimeline::cancelAnimationsForElement() when the flag to use Web Animations is on.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::cancelAnimationsForElement): Iterate over all animations for the provided element and call cancel() on them.
        * animation/AnimationTimeline.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::animatedStyleForRenderer): Drive-by fix while I was reviewed call sites to animationsForElement() to make
        sure we don't create extra RefPtr<> objects.
        * dom/Element.cpp:
        (WebCore::Element::removedFromAncestor): Call AnimationTimeline::cancelAnimationsForElement() if the Web Animations flag is on when an
        element is removed.
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::clearHostElement): Call AnimationTimeline::cancelAnimationsForElement() if the Web Animations flag is on when
        a pseudo-element is removed.
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers): Call AnimationTimeline::cancelAnimationsForElement() if the Web Animations flag is on
        for all children elements when an element gets a "display: none" style.

2018-03-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Animated transform styles are ignored when calling getComputedStyle()
        https://bugs.webkit.org/show_bug.cgi?id=183918

        Reviewed by Dean Jackson.

        Strictly looking at whether the renderer has a transform is a bad idea when determining whether a
        transform is applied for an element. Looking at the RenderStyle is preferable because in the case
        of animations running on the compositor, such as a transform-only animation or transition, the
        renderer doesn't necessarily have a transform style on it, since we don't blend properties in
        software as the animation progresses. Instead, all of the blending is performed by the compositor,
        and only the computed style object has the software-blended transform style on it.

        We do need to account for inline renderers though as these do not support transforms.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::computedTransform):

2018-03-22  Antoine Quint  <graouts@apple.com>

        [Web Animations] Support "transition: all" for CSS Transitions as Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=183917

        Reviewed by Dean Jackson.

        We now support "transition: all" CSS Transitions by iterating over all known CSS properties should the mode
        of the backing animation be AnimateAll. Any property that we find to have a different value in the previous
        and current style will have a backing CSSTransition object created for it. To support this, we now explicitly
        provide a CSSPropertyID when creating a CSSTransition since we can no longer infer the transition property
        from the backing animation, as Animation objects with mode AnimateAll report CSSPropertyInvalid as their
        property.

        * animation/AnimationTimeline.cpp:
        (WebCore::shouldBackingAnimationBeConsideredForCSSTransition): New method that checks whether a given backing
        Animation object is suitable for consideration as a CSSTransition, where the mode must not be either AnimateNone
        or AnimateUnknownProperty, and should the mode be AnimateSingleProperty, the property must not be CSSPropertyInvalid.
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): We now assemble the list of previously animated
        properties by looking at the m_elementToCSSTransitionByCSSPropertyID map and getting its keys. Then we compile
        all backing Animation objects found in the old style that match the conditions enforced by the new method
        shouldBackingAnimationBeConsideredForCSSTransition(). Then as we iterate over backing Animation objects found
        in the new style, we iterate over all known CSS properties if the mode is AnimateAll, indicating that we're dealing
        with a "transition: all" style. If we're dealing with a single property, we only process that single property.
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create): Expect a new CSSPropertyID parameter when creating a new CSSTransition since
        we can no longer infer it from the backing Animation object.
        (WebCore::CSSTransition::CSSTransition): Expect a new CSSPropertyID parameter when creating a new CSSTransition
        since we can no longer infer it from the backing Animation object.
        (WebCore::CSSTransition::matchesBackingAnimationAndStyles const): We can no longer use the == overloaded operator
        for backing Animation objects to determine whether their respective properties match since this would compare the
        "property" member of both Animation objects and when going from a "transition: all" style to one targeting a single
        property, we would falsely identify mis-matching Animation objects. Instead, we pass a false flag to animationsMatch()
        which indicates that we don't care about matching the transition property itself.
        * animation/CSSTransition.h: Expose a new property() accessor which returns the CSSPropertyID passed at construction.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::computeCSSTransitionBlendingKeyframes): Use the new property() accessor on
        CSSTransition to get at the transition property.
        * platform/animation/Animation.cpp:
        (WebCore::Animation::animationsMatch const): Replace the boolean parameter, which was not in use in WebCore, to indicate
        whether we should match the property-related fields. We need this in CSSTransition::matchesBackingAnimationAndStyles().
        * platform/animation/Animation.h:

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Adopt WK_ALTERNATE_FRAMEWORKS_DIR in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=183930
        <rdar://problem/38782249>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:

2018-03-22  Commit Queue  <commit-queue@webkit.org>

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

        Some webrtc tests are timing out on iOS simulator (Requested
        by youenn on #webkit).

        Reverted changeset:

        "Use libwebrtc ObjectiveC H264 encoder and decoder"
        https://bugs.webkit.org/show_bug.cgi?id=183912
        https://trac.webkit.org/changeset/229876

2018-03-22  Megan Gardner  <megan_gardner@apple.com>

        Expose more system colors via CSS
        https://bugs.webkit.org/show_bug.cgi?id=183764
        <rdar://problem/36975898>

        Reviewed by Tim Horton.

        Test: fast/css/apple-system-control-colors.html

        Expose Apple specific system colors via CSS.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2018-03-22  Nan Wang  <n_wang@apple.com>

        AX: Web table row count is incorrect when role row is added to <tr> in DOM
        https://bugs.webkit.org/show_bug.cgi?id=183922

        Reviewed by Chris Fleizach.

        Although the parent table for an ARIA grid row should be an ARIA table, we
        should return the native table if the row is native <tr>.

        Test: accessibility/row-with-aria-role-in-native-table.html

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::parentTable const):

2018-03-22  Chris Dumez  <cdumez@apple.com>

        Include security origin in the service worker process name
        https://bugs.webkit.org/show_bug.cgi?id=183913

        Reviewed by Youenn Fablet.

        Updated localizable strings.

        * English.lproj/Localizable.strings:

2018-03-22  Youenn Fablet  <youenn@apple.com>

        Use libwebrtc ObjectiveC H264 encoder and decoder
        https://bugs.webkit.org/show_bug.cgi?id=183912

        Reviewed by Eric Carlson.

        No observable change of behavior.
        Made use of libwebrtc WebKit utilities.
        Updated RealtimeINcomingVideoSourceCocoa as it now receives ObjcVideoFrame.

        * Configurations/WebCore.xcconfig:
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::~LibWebRTCProviderCocoa):
        (WebCore::LibWebRTCProviderCocoa::setH264HardwareEncoderAllowed):
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        (WebCore::LibWebRTCProviderCocoa::setActive):
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: Renamed from Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.cpp.
        (WebCore::RealtimeIncomingVideoSourceCocoa::pixelBufferFromVideoFrame):
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        * testing/Internals.cpp: Removed commented out include.

2018-03-22  Michael Catanzaro  <mcatanzaro@gnome.org>

        Unreviewed, fix format string warnings in service worker code

        On Linux x86_64, uint64_t is unsigned long, not unsigned long long.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):

2018-03-22  Daniel Bates  <dabates@apple.com>

        Expose SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest() as WebKit SPI
        https://bugs.webkit.org/show_bug.cgi?id=183907
        <rdar://problem/38759127>

        Reviewed by Alex Christensen.

        Exports SchemeRegistry::registerAsCanDisplayOnlyIfCanRequest() so that we can use it from WebKit.

        * platform/SchemeRegistry.h:

2018-03-22  Daniel Bates  <dabates@apple.com>

        CSS mask images should be retrieved using potentially CORS-enabled fetch
        https://bugs.webkit.org/show_bug.cgi?id=179983
        <rdar://problem/35678149>

        Reviewed by Brent Fulgham.

        As per <https://drafts.fxtf.org/css-masking-1/#priv-sec> (Editor's Draft, 23 December 2017)
        we should fetch CSS mask images using a potentially CORS-enabled fetch.

        Both cross-origin CSS shape-outside images and CSS mask images may be sensitive to timing
        attacks that can be used to reveal their pixel data when retrieved without regard to CORS.
        For the same reason that we fetch CSS shape-outside images using a potentially CORS-enabled
        fetch we should fetch CSS mask the same way. This also makes the behavior of WebKit more
        closely align with the behavior in the spec.

        Test: http/tests/security/css-mask-image.html

        * style/StylePendingResources.cpp: Substitute LoadPolicy::NoCORS and LoadPolicy::Anonymous for
        LoadPolicy::Normal and LoadPolicy::ShapeOutside, respectively, to match the terminology used
        in the HTML, CSS Shapes Module Level 1, and CSS Masking Module Level 1 specs.
        (WebCore::Style::loadPendingImage): Ditto.
        (WebCore::Style::loadPendingResources): Use load policy LoadPolicy::Anonymous when fetching
        a mask image or shape-outside image.

2018-03-22  Zalan Bujtas  <zalan@apple.com>

        [Simple line layout] Text with letter spacing is not positioned properly.
        https://bugs.webkit.org/show_bug.cgi?id=183079
        <rdar://problem/38762569>

        Reviewed by Antti Koivisto.

        We need to recompute RenderText::m_canUseSimplifiedTextMeasuring when the font cascade changes
        since we might not be able to use the fast path anymore.

        Test: fast/text/simple-line-layout-dynamic-letter-word-spacing.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::styleDidChange):

2018-03-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make imported/mozilla/css-animations/test_event-dispatch.html pass reliably
        https://bugs.webkit.org/show_bug.cgi?id=183845

        Reviewed by Dean Jackson.

        Finish the work to get DOM events for CSS Animations and CSS Transitions dispatching as specified.

        * animation/AnimationEffectReadOnly.cpp: Move timeEpsilon to be shared as part of WebAnimationUtilities.h since we now need it in
        WebAnimation::timeToNextRequiredTick().
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): We add a pre-emptive return clause when we know that the AnimationList
        for previous and current styles are a match.
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::matchesBackingAnimationAndStyles const): Ensure we have a valid effect before downcasting it.
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::initialize): We need to call pause() for declarative animations that aren't playing so that the animation's
        playState is set correctly and the animation is not idle.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimationSchedule): We no longer need to pass the current time to timeToNextRequiredTick() since the method has
        been reworked to use the animation's current time, which is based on the timeline's current time.
        (WebCore::DocumentTimeline::updateAnimations): Avoid creating a copy when iterating over pending hardware animations.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const): We should never generate new blending keyframes if the
        old and new styles contain the same value, since there would be no transition between two equal values, and we should only look at whether the new
        style value and the recorded target value differ to determine if new blending keyframes are necessary.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timeToNextRequiredTick const): We correct our scheduling code which was shown to be broken in several of the newly-imported
        Mozilla tests. Any running animation is now scheduled to invalidate again on the next tick, and we use timeEpsilon from WebAnimationUtilities.h to
        correctly check if we're right at the active threshold, when we also invalidate on the next tick. If our current time is negative, in other words
        when the animation has not yet started, we schedule this animation's next tick to be the negative of that value. In all other cases, no invalidation
        needs to be scheduled.
        * animation/WebAnimation.h: We move updateFinishedState() to private since this method is not actually used outside of WebAnimation.cpp.
        * animation/WebAnimationUtilities.h: Move timeEpsilon to be shared as part of WebAnimationUtilities.h.

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Improve readability of WebCore's OTHER_LDFLAGS
        https://bugs.webkit.org/show_bug.cgi?id=183909
        <rdar://problem/38760992>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebCore.xcconfig:

2018-03-22  Tim Horton  <timothy_horton@apple.com>

        Adopt USE(OPENGL[_ES]) in more places
        https://bugs.webkit.org/show_bug.cgi?id=183882
        <rdar://problem/37912195>

        Reviewed by Dan Bernstein.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::hasMuxableGPU):
        (WebCore::GraphicsContext3DManager::updateHighPerformanceState):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::texImageIOSurface2D):
        * platform/graphics/cocoa/WebGLLayer.h:
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        * platform/graphics/ios/GraphicsContext3DIOS.h:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        Make it a bit more clear which code is platform-dependent and which code is GL/GLES-dependent.

2018-03-22  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Make TextureMapperContextAttributes thread-specific
        https://bugs.webkit.org/show_bug.cgi?id=183895

        Reviewed by Carlos Garcia Campos.

        Store the TextureMapperContextAttributes in a thread-specific manner.
        The TextureMapperContextAttributes::get() method is now used to retrieve
        a reference to that thread-specific object. If it's not been initialized
        yet, then the current GL context is used for the initialization, as it
        used to be done in the now-removed initialize() method.

        TextureMapperPlatformLayerBuffer::clone() method now doesn't need to
        be passed a TextureMapperGL object, since the texture can be created
        directly by calling BitmapTextureGL::create(), passing the
        TextureMapperContextAttributes object that's retrieved from the
        thread-specific storage. This further simplifies the
        TextureMapperPlatformLayerProxy::Compositor interface, removing the
        texmapGL() getter from it.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::pushTextureToCompositor):
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::threadSpecificAttributes):
        (WebCore::TextureMapperContextAttributes::get):
        (WebCore::TextureMapperContextAttributes::initialize): Deleted.
        * platform/graphics/texmap/TextureMapperContextAttributes.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.cpp:
        (WebCore::TextureMapperPlatformLayerBuffer::clone):
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

2018-03-22  Zalan Bujtas  <zalan@apple.com>

        SVG root is skipped while marking percentage height descendants dirty.
        https://bugs.webkit.org/show_bug.cgi?id=183877

        Reviewed by Antti Koivisto.

        Calling continingBlock() to get to the correct container works as long as the ancestor inline element
        renderers are wrapped in anonymous blocks (continuation for example).

        While the SVG root renderer is an inline renderer, it is not wrapped or normalized in any way,
        so containingBlock() will elegantly skip it and return an SVG root ancestor.
        dirtyForLayoutFromPercentageHeightDescendants calls containingBlock() to walk up
        on the ancestor chain to mark elements dirty. This fails when there's an SVG subtree in the block chain.
        This patch marks the SVG subtree chain dirty to ensure that layout will get to all the dirty leaf renderers 
        (note that the SVG subtree is supposed to have only statically positioned elements so parent == containing block).

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dirtyForLayoutFromPercentageHeightDescendants):

2018-03-22  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Build failure when ENABLE_VIDEO, ENABLE_WEB_AUDIO and ENABLE_XSLT are disabled
        https://bugs.webkit.org/show_bug.cgi?id=183896

        Reviewed by Yusuke Suzuki.

        No new tests needed.

        * bindings/js/JSWebAnimationCustom.cpp: Add missing #include of Document.h

2018-03-21  Chris Dumez  <cdumez@apple.com>

        Regression(r229828): WebKit.NoHistoryItemScrollToFragment API test is failing on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183886

        Reviewed by Wenson Hsieh.

        Since r229828, the FrameLoader needs to call FrameLoaderClient::didDecidePolicyForNavigationAction()
        whenever a navigation policy decision is made. I added such a call r229828 to
        FrameLoader::continueLoadAfterNavigationPolicy() but forgot to add one to
        FrameLoader::continueFragmentScrollAfterNavigationPolicy(), which is the equivalent
        for fragment navigations.

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

2018-03-21  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Disconnect the SVGPathSegList items from their SVGPathElement before rebuilding a new list
        https://bugs.webkit.org/show_bug.cgi?id=183723
        <rdar://problem/38517871>

        Reviewed by Daniel Bates.

        When setting the "d" attribute directly on a path, we rebuild the list
        of path segments held for creating the property tear off. The old path
        segments need to get disconnected from the path element. We already do 
        that when a path segment is replaced or removed.

        Test: svg/dom/reuse-pathseg-after-changing-d.html

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::clear): SVGPathSegListValues::clearContextAndRoles()
        will now be called from SVGPathSegListValues::clear() via SVGListProperty::clearValues().
        (WebCore::SVGPathSegList::replaceItem):
        (WebCore::SVGPathSegList::removeItem):
        (WebCore::SVGPathSegList::clearContextAndRoles): Deleted.
        * svg/SVGPathSegList.h: SVGPathSegListValues::clearContextAndRoles() will
        now be called from SVGPathSegListValues::clear() via SVGListProperty::initializeValues().
        * svg/SVGPathSegListValues.cpp:
        (WebCore::SVGPathSegListValues::clearItemContextAndRole):
        (WebCore::SVGPathSegListValues::clearContextAndRoles):
        * svg/SVGPathSegListValues.h:
        (WebCore::SVGPathSegListValues::operator=):
        (WebCore::SVGPathSegListValues::clear):

2018-03-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure animationcancel and transitioncancel events are dispatched
        https://bugs.webkit.org/show_bug.cgi?id=183864

        Reviewed by Dean Jackson.

        In order to correctly dispatch animationcancel and transitioncancel events, we must call cancel() on CSSAnimation and CSSTransitions
        objects that are removed while in a play or pause phase. Additionally, we cancel declarative animations that are moving from a valid
        to a null timeline. Finally, when cancel() is called on a declarative animation, we record the timestamp and manually call
        invalidateDOMEvents() passing that timestamp in to ensure that the right phase change is recorded and results in the queuing of
        animationcancel and transitioncancel events.

        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): Make sure we cancel all recorded CSS Animations when we newly get a
        "display: none" style. We also call the new cancelOrRemoveDeclarativeAnimation() method, instead of removing animations outright,
        for all animations that previously existed but are no longer listed in the current style.
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): Like in updateCSSAnimationsForElement(), we cancel all recorded CSS
        Transitions when we newly get a "display: none" style. We now use the refactored removeDeclarativeAnimation() method to remove an
        a transition for a property that was already transitioned in the previous style but has a new backing Animation object. Finally,
        like in updateCSSAnimationsForElement(), we call the new cancelOrRemoveDeclarativeAnimation() method, instead of removing transitions
        outright, for all transitions that previously existed but are no longer listed in the current style.
        (WebCore::AnimationTimeline::removeDeclarativeAnimation): Refactor code into this new method to remove a declarative animation.
        (WebCore::AnimationTimeline::cancelOrRemoveDeclarativeAnimation): Cancels a DeclarativeAnimation if it's active or removes it right away.
        * animation/AnimationTimeline.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::setTimeline): If we're moving from a valid timeline to a null timeline, call cancel() on this animation
        such that an animationcancel or transitioncancel event can be dispatched.
        (WebCore::DeclarativeAnimation::cancel): Cancelations require the computation of the time at which a declarative animation was canceled,
        so we record the animation's active time as it's canceled and manually call invalidateDOMEvents() with that time after the general cancel()
        code has run.
        (WebCore::DeclarativeAnimation::invalidateDOMEvents): Accept an explicit timestamp for cancel events.
        * animation/DeclarativeAnimation.h:
        * animation/WebAnimation.h:

2018-03-21  Chris Dumez  <cdumez@apple.com>

        ScrollViewInsetTests.RestoreInitialContentOffsetAfterCrash API test is failing with async delegates
        https://bugs.webkit.org/show_bug.cgi?id=183787

        Reviewed by Wenson Hsieh.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        * loader/FrameLoaderClient.h:

2018-03-21  Eric Carlson  <eric.carlson@apple.com>

        Clean up platform VideoFullscreenLayerManager
        https://bugs.webkit.org/show_bug.cgi?id=183859
        <rdar://problem/38715419>

        Reviewed by Jer Noble.

        No new tests, no functional change.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/VideoFullscreenLayerManager.h: Copied from Source/WebCore/platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.h.
        (WebCore::VideoFullscreenLayerManager::~VideoFullscreenLayerManager):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformLayer const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenFrame):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoLayerGravity):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::requiresTextTrackRepresentation const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::syncTextTrackBounds):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setTextTrackRepresentation):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVideoFullscreenFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::requiresTextTrackRepresentation const):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::syncTextTrackBounds):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setTextTrackRepresentation):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::destroyLayers):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::platformLayer const):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVideoFullscreenLayer):
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVideoFullscreenFrame):
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.h: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.h.
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManagerObjC.mm: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm.
        (-[WebVideoContainerLayer setBounds:]):
        (-[WebVideoContainerLayer setPosition:]):
        (WebCore::VideoFullscreenLayerManagerObjC::VideoFullscreenLayerManagerObjC):
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoLayer):
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenLayer):
        (WebCore::VideoFullscreenLayerManagerObjC::setVideoFullscreenFrame):
        (WebCore::VideoFullscreenLayerManagerObjC::didDestroyVideoLayer):
        (WebCore::VideoFullscreenLayerManagerObjC::requiresTextTrackRepresentation const):
        (WebCore::VideoFullscreenLayerManagerObjC::syncTextTrackBounds):
        (WebCore::VideoFullscreenLayerManagerObjC::setTextTrackRepresentation):

2018-03-21  Antoine Quint  <graouts@apple.com>

        [Web Animations] Dispatch DOM events for CSS Transitions and CSS Animations implemented as Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=183781

        Reviewed by Dean Jackson.

        Now that we've implemented CSS Animations and CSS Transitions as Web Animations (webkit.org/b/183504) we can dispatch DOM events
        for targets of DeclarativeAnimation objects. To do that, we add a new invalidateDOMEvents() method on DeclarativeAnimations which
        is called when the timer scheduled after the timing model has been invalidated fires in DocumentTimeline::performInvalidationTask().
        When we check for DOM events to dispatch, we look at the last recorded phase and iteration and determine whether the state of the
        animation has changed. We use a GenericEventQueue to enqueue the events such that they are dispatched asynchronously at a moment
        when it is safe to evaluate script.

        * animation/AnimationEffectReadOnly.h: Make currentIteration() public since we now need it in DeclarativeAnimation::invalidateDOMEvents().
        * animation/CSSAnimation.cpp:
        (WebCore::CSSAnimation::create): Pass the animation target to the constructor instead of its document.
        (WebCore::CSSAnimation::CSSAnimation): Pass the animation target to the superclass instead of its document.
        * animation/CSSAnimation.h:
        * animation/CSSTransition.cpp:
        (WebCore::CSSTransition::create): Pass the animation target to the constructor instead of its document.
        (WebCore::CSSTransition::CSSTransition): Pass the animation target to the superclass instead of its document.
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp:
        (WebCore::DeclarativeAnimation::DeclarativeAnimation): Expect an Element instead of a Document and use that element as the target of the
        GenericEventQueue that we initialize. We also register this element as our m_target.
        (WebCore::DeclarativeAnimation::~DeclarativeAnimation): Close the GenericEventQueue member upon destruction.
        (WebCore::DeclarativeAnimation::initialize): We need to call pause() for declarative animations that aren't playing so that the animation's
        playState is set correctly and the animation is not idle.
        (WebCore::DeclarativeAnimation::phaseWithoutEffect const): Because we may need to get an animation's current phase in invalidateDOMEvents()
        after an animation's effect has been removed, we provide an alternate way to compute the phase just by looking at the animation's current time.
        (WebCore::DeclarativeAnimation::invalidateDOMEvents): Based on the previous and current pending state, iteration and phase, we enqueue animation
        and transition DOM events as specified by the CSS Animations Level 2 and CSS Transitions Level 2 specifications.
        (WebCore::DeclarativeAnimation::enqueueDOMEvent): Enqueue an event on the GenericEventQueue based on the animation type.
        * animation/DeclarativeAnimation.h:
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::performInvalidationTask): We call invalidateDOMEvents() on all declarative animations registered with this timeline
        now that the timing model has been invalidated.
        * dom/EventNames.h: Add the names of newly-implemented events (animationcancel, transitioncancel, transitionrun and transitionstart).
        * dom/GlobalEventHandlers.idl: Add new attribute-based event handlers for the newly-implemented events.
        * html/HTMLAttributeNames.in: Add new attribute-based event handlers for the newly-implemented events.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createEventHandlerNameMap): Add new attribute-based event handlers for the newly-implemented events.

2018-03-21  Per Arne Vollan  <pvollan@apple.com>

        Compile error when not using IOSurface canvas backing store.
        https://bugs.webkit.org/show_bug.cgi?id=183855

        Reviewed by Brent Fulgham.

        The method IOSurface::createFromImageBuffer is only referenced when IOSurface
        is used as canvas backing store.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Track dirty rects that need update in CoordinatedGraphicsLayer
        https://bugs.webkit.org/show_bug.cgi?id=175376

        Reviewed by Carlos Garcia Campos.

        Follow the GraphicsLayerCA class and track rectangles in need of display
        in a Vector object. In case the whole layer needs updating, it's marked
        separately, and further rects are ignored.

        During layer flush, all the rects are used to invalidate the backing
        store, or a single layer-sized rect is used in case the whole layer has
        to be updated. We can also bail early from updateContentBuffers() if
        there are no dirty rects recorded and there's no pending visible rect
        adjustment.

        At the end of updateContentBuffers() we now test for an existing
        previous backing store before inquiring the backing store if the visible
        area is already covered, enabling deletion of this backing store.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplay):
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):
        (WebCore::CoordinatedGraphicsLayer::updateContentBuffers):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

2018-03-21  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE] Build failure with ENABLE_VIDEO=OFF when GStreamer is not available
        https://bugs.webkit.org/show_bug.cgi?id=183811

        Reviewed by Philippe Normand.

        Add build guards for USE_GSTREAMER.

        No new tests, it is a build fix.

        * platform/graphics/gstreamer/GStreamerUtilities.h:

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Draw Cairo patterns with cairo_paint_with_alpha()
        https://bugs.webkit.org/show_bug.cgi?id=183774

        Reviewed by Carlos Garcia Campos.

        In the drawPatternToCairoContext() helper in CairoOperations.cpp source
        file, always clip the painting region to the specified rectangle and
        then use cairo_paint_with_alpha() to paint the passed-in pattern object,
        not relaying rasterization to cairo_fill() when using opaque alpha. We
        still clamp the alpha value to the 0.0 - 1.0 range.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawPatternToCairoContext):

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Have TextureMapperLayer::applyAnimationsRecursively() return running animation status
        https://bugs.webkit.org/show_bug.cgi?id=183771

        Reviewed by Carlos Garcia Campos.

        TextureMapperLayer::applyAnimationsRecursively() should return true when
        the TextureMapperLayer tree has currently-running animations that
        require continuous scene update.

        TextureMapperAnimation::ApplicationResult gains the hasRunningAnimation
        member that's set to true if any of the applied animations are still in
        playing state. That information is then returned in syncAnimations(),
        and the result is accumulated in the top applyAnimationsRecursively()
        call and returned there to the caller.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::apply):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::applyAnimationsRecursively):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-21  Zan Dobersek  <zdobersek@igalia.com>

        Use-after-move in SWContextManager::terminateWorker() with Linux x86_64 calling convention
        https://bugs.webkit.org/show_bug.cgi?id=183783

        Reviewed by Chris Dumez.

        In SWContextManager::terminateWorker(), some calling conventions can
        end up moving the ServiceWorkerThreadProxy RefPtr into the lambda struct
        before that proxy's thread (on which the lambda is bound to execute) is
        retrieved.

        Avoid this by taking a reference to the thread in a separate earlier
        expression, before the RefPtr is moved into the lambda in the following
        one.

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):

2018-03-21  Timothy Horton  <timothy_horton@apple.com>

        Fix the build

        * platform/network/cf/FormDataStreamCFNet.cpp:

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE_MEDIA_PLAYER and HAVE_CORE_VIDEO
        https://bugs.webkit.org/show_bug.cgi?id=183803
        <rdar://problem/38690487>

        Reviewed by Sam Weinig.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::configureWireLessTargetMonitoring):
        (WebCore::MediaSessionManageriOS::updateNowPlayingInfo):
        (-[WebMediaSessionHelper initWithCallback:]):
        (-[WebMediaSessionHelper dealloc]):
        (-[WebMediaSessionHelper hasWirelessTargetsAvailable]):
        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasAvailableVideoFrame const):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::getRGBAImageData const):
        * platform/graphics/cv/PixelBufferConformerCV.cpp:
        * platform/graphics/cv/PixelBufferConformerCV.h:
        * platform/graphics/cv/TextureCacheCV.h:
        * platform/graphics/cv/TextureCacheCV.mm:
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        * platform/graphics/cv/VideoTextureCopierCV.h:
        Make it possible to disable our dependency on MediaPlayer and CoreVideo.

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Enable the minimal simulator feature flag when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=183807

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2018-03-19  Ryosuke Niwa  <rniwa@webkit.org>

        Expose content attributes on _WKLinkIconParameters
        https://bugs.webkit.org/show_bug.cgi?id=183768

        Reviewed by Alex Christensen.

        Collect a vector of content attributes upon finding touch and fav-icons in order to expose it in a WebKit API.

        Tests: IconLoading.DefaultFavicon

        * html/LinkIconCollector.cpp:
        (WebCore::LinkIconCollector::iconsOfTypes): Collect attributes.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startIconLoading): Use an empty vector for /favicon.ico.
        * platform/LinkIcon.h:
        (WebCore::LinkIcon::encode const): Encode the vector of content attributes.
        (WebCore::LinkIcon::decode): Ditto for decoding.

2018-03-20  Zalan Bujtas  <zalan@apple.com>

        RenderTreeNeedsLayoutChecker fails with absolutely positioned svg and <use>
        https://bugs.webkit.org/show_bug.cgi?id=183718

        Reviewed by Antti Koivisto.

        This patch ensures after resolving the style for an SVG element with a corresponding element (<use>),
        we adjust this style for the cloned SVG element too.

        Test: svg/in-html/path-with-absolute-positioned-svg-and-use-crash.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustSVGElementStyle):
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/StyleResolver.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::resolveCustomStyle):

2018-03-20  Brady Eidson  <beidson@apple.com>

        First piece of process swapping on navigation.
        https://bugs.webkit.org/show_bug.cgi?id=183665

        Reviewed by Andy Estes.

        Covered by API test(s)

        This patch:
        - A new PolicyAction::Suspend for future use in this feature
        - Makes sure that loads triggered as part of a process swap do *not* re-consult the policy delegate

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::continueAfterContentPolicy):

        * loader/FrameLoadRequest.h:
        (WebCore::FrameLoadRequest::setShouldCheckNavigationPolicy):
        (WebCore::FrameLoadRequest::shouldCheckNavigationPolicy const):

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoader.h:

        * loader/FrameLoaderTypes.h: Add a new Policy type "Suspend" to be used in the future
          by the process-swap-on-navigation mechanism.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):

2018-03-20  Chris Dumez  <cdumez@apple.com>

        QuickLook.NavigationDelegate API test is failing on iOS with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183791

        Reviewed by Alex Christensen.

        Update PreviewLoader to not send data (or call finishFinishLoading) until
        the resource response has been processed.

        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]):
        (-[WebPreviewLoader connection:didReceiveData:lengthReceived:]):
        (-[WebPreviewLoader connectionDidFinishLoading:]):

2018-03-20  Antoine Quint  <graouts@apple.com>

        [Web Animations] Update the timing model when pending tasks schedule changes
        https://bugs.webkit.org/show_bug.cgi?id=183785

        Reviewed by Dean Jackson.

        Changing the time at which a pending play or pause task is scheduled changes the pending
        state of the animation and thus should notify that the timing model has changed and invalidate
        the effect.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeToRunPendingPlayTask):
        (WebCore::WebAnimation::setTimeToRunPendingPauseTask):
        (WebCore::WebAnimation::updatePendingTasks):

2018-03-20  Tim Horton  <timothy_horton@apple.com>

        Add and adopt WK_PLATFORM_NAME and adjust default feature defines
        https://bugs.webkit.org/show_bug.cgi?id=183758
        <rdar://problem/38017644>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2018-03-19  Tim Horton  <timothy_horton@apple.com>

        Apply some SDK checks in LocalDefaultSystemAppearance
        https://bugs.webkit.org/show_bug.cgi?id=183767
        <rdar://problem/38649611>

        Reviewed by Zalan Bujtas.

        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance):

2018-03-19  Chris Dumez  <cdumez@apple.com>

        Have one service worker process per security origin
        https://bugs.webkit.org/show_bug.cgi?id=183600
        <rdar://problem/35280128>

        Reviewed by Brady Eidson.

        Split service workers from different origins into their own processes
        for security reasons.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::tryInstallContextData):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::runServiceWorkerIfNecessary):
        (WebCore::SWServer::markAllWorkersAsTerminated):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::~SWServerToContextConnection):
        (WebCore::SWServerToContextConnection::connectionForOrigin):
        * workers/service/server/SWServerToContextConnection.h:
        (WebCore::SWServerToContextConnection::origin):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        (WebCore::SWServerWorker::securityOrigin const):
        (WebCore::SWServerWorker::contextConnection):
        * workers/service/server/SWServerWorker.h:

2018-03-19  Megan Gardner  <megan_gardner@apple.com>

        Have select element respect current appearance
        https://bugs.webkit.org/show_bug.cgi?id=183753

        Reviewed by Tim Horton.

        Not currently testable, will add tests in a later patch.

        Have the menu lists/select elements follow the system colors.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMenuListStyle const):

2018-03-19  Nan Wang  <n_wang@apple.com>

        AX: embedded attachments do not work correctly with text marker APIs on macOS
        https://bugs.webkit.org/show_bug.cgi?id=183751

        Reviewed by Chris Fleizach.

        In WebKit1, embedded attachments are not working well with text marker APIs.
        We should use the corresponding attachment view in the following cases:
        1. Hit testing on an attachment object.
        2. Getting the attachment object at a text marker position.
        3. Asking for the associated element with NSAccessibilityAttachmentTextAttribute. 

        Not able to construct a layout test because it relies on embedded attachments.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetElement):
        (-[WebAccessibilityObjectWrapper accessibilityHitTest:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2018-03-19  Jiewen Tan  <jiewen_tan@apple.com>

        Unreviewed, another quick fix for r229699

        Restricts ENABLE_WEB_AUTHN to only macOS and iOS.

        * Configurations/FeatureDefines.xcconfig:

2018-03-19  Daniel Bates  <dabates@apple.com>

        Fix case of Strong Password localized string

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::autoFillStrongPasswordLabel):

2018-03-19  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsitePoliciesAutoplayQuirks API test times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183702
        <rdar://problem/38566060>

        Reviewed by Alex Christensen.

        The issue is that the test calls loadHTMLString then loadRequest right after, without
        waiting for the first load to complete first. loadHTMLString is special as it relies
        on substitute data and which schedules a timer to commit the data. When doing the
        navigation policy check for the following loadRequest(), the substitute data timer
        would fire and commit its data and load. This would in turn cancel the pending
        navigation policy check for the loadRequest().

        With sync policy delegates, this is not an issue because we take care of stopping
        all loaders when receiving the policy decision, which happens synchronously. However,
        when the policy decision happens asynchronously, the pending substitute data load
        does not get cancelled in time and it gets committed.

        To address the issue, we now cancel any pending provisional load before doing the
        navigation policy check.

        Test: fast/loader/inner-iframe-loads-data-url-into-parent-on-unload-crash-async-delegate.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clearProvisionalLoadForPolicyCheck):
        * loader/FrameLoader.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        Cancel any pending provisional load before starting the navigation policy check. This call
        needs to be here rather than in the call site of policyChecker().checkNavigationPolicy()
        because there is code in PolicyChecker::checkNavigationPolicy() which relies on
        FrameLoader::activeDocumentLoader().
        Also, we only cancel the provisional load if there is a policy document loader. In some
        rare cases (when we receive a redirect after navigation policy has been decided for the
        initial request), the provisional document loader needs to receive navigation policy
        decisions so we cannot clear the provisional document loader in such case.

2018-03-19  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Require fullscreen for video playback
        https://bugs.webkit.org/show_bug.cgi?id=183742
        <rdar://problem/38235862>

        Reviewed by Jer Noble.

        * Modules/modern-media-controls/media/playback-support.js:
        (PlaybackSupport.prototype.syncControl): Always show the play button.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Return immediately if playback requires fullscreen
        (WebCore::HTMLMediaElement::didBecomeFullscreenElement): Call updatePlayState in case 
        playback is pending.
        * html/HTMLMediaElement.h:
        * platform/cocoa/VideoFullscreenModel.h:
        (WebCore::VideoFullscreenModel::presentingViewController): New.
        (WebCore::VideoFullscreenModel::createVideoFullscreenViewController): New.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode):
        * platform/ios/PlaybackSessionInterfaceAVKit.mm:
        (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged):

        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm: Wrap AVPlayerLayerView so we can change its
        behavior.
        (WebAVPlayerLayerView_playerLayer):
        (WebAVPlayerLayerView_videoView):
        (allocWebAVPlayerLayerViewInstance):
        (-[WebAVPlayerViewController initWithFullscreenInterface:]):
        (-[WebAVPlayerViewController playerViewControllerShouldHandleDoneButtonTap:]):
        (-[WebAVPlayerViewController enterFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController exitFullScreenAnimated:completionHandler:]):
        (-[WebAVPlayerViewController NO_RETURN_DUE_TO_ASSERT]):
        (-[WebAVPlayerViewController isPictureInPicturePossible]):
        (-[WebAVPlayerViewController isPictureInPictureActive]):
        (-[WebAVPlayerViewController isPictureInPictureSuspended]):
        (-[WebAVPlayerViewController pictureInPictureActive]):
        (-[WebAVPlayerViewController pictureInPictureWasStartedWhenEnteringBackground]):
        (-[WebAVPlayerViewController view]):
        (-[WebAVPlayerViewController showsPlaybackControls]):
        (-[WebAVPlayerViewController setShowsPlaybackControls:]):
        (-[WebAVPlayerViewController setAllowsPictureInPicturePlayback:]):
        (-[WebAVPlayerViewController setDelegate:]):
        (-[WebAVPlayerViewController setPlayerController:]):
        (-[WebAVPlayerViewController avPlayerViewController]):
        (-[WebAVPlayerViewController removeFromParentViewController]):
        (VideoFullscreenInterfaceAVKit::setupFullscreen):
        (fallbackViewController):
        (VideoFullscreenInterfaceAVKit::presentingViewController):
        (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason):
        (VideoFullscreenInterfaceAVKit::doSetup):
        (WebCore::supportsPictureInPicture):

2018-03-19  Per Arne Vollan  <pvollan@apple.com>

        When the WebContent process is blocked from accessing the WindowServer, the call CVDisplayLinkCreateWithCGDisplay will fail.
        https://bugs.webkit.org/show_bug.cgi?id=183604
        <rdar://problem/38305109>

        Reviewed by Brent Fulgham.

        The call to CVDisplayLinkCreateWithCGDisplay can instead be made in the UIProcess. Notify the WebContent process
        about display updates by sending a message from the UIProcess on each screen update. This patch adds an extra
        IPC step when notifying the WebContent process about display updates. However, the MotionMark benchmark shows no
        performance regression when running it with this patch. A possible explanation for this is that the high priority
        display link thread is now running in the UIProcess instead of the WebContent process, which means there will be
        more available CPU resources for the WebContent process. A run loop observer is added to make sure that only one
        display callback (for each display observer) is executed in a single iteration of the run loop. This will make
        sure we are not filling the IPC message queue with unhandled display link messages.

        No new tests, covered by existing tests. 

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

2018-03-19  Megan Gardner  <megan_gardner@apple.com>

        Ensure local appearance actually mirrors the app's appearance
        https://bugs.webkit.org/show_bug.cgi?id=183743

        Reviewed by Tim Horton.

        Not currently testable, will add tests in a later patch.

        Current appearance isn't always accurate by default and needs to be set manually.

        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):

2018-03-19  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GCC 4.9 build-fix after r229672.

        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:
        (Nicosia::createCommand): Don't depend on implicit conversion of the
        returning std::unique_ptr<> object, and instead only wrap the
        heap-allocated PaintingOperation-derived in a std::unique_ptr<> at the
        point of return.

2018-03-18  Commit Queue  <commit-queue@webkit.org>

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

        Causes fast/loader/inner-iframe-loads-data-url-into-parent-on-
        unload-crash.html to fail with async delegates (Requested by
        cdumez_ on #webkit).

        Reverted changeset:

        "WebKit.WebsitePoliciesAutoplayQuirks API test times out with
        async policy delegates"
        https://bugs.webkit.org/show_bug.cgi?id=183702
        https://trac.webkit.org/changeset/229689

2018-03-17  Tim Horton  <timothy_horton@apple.com>

        Correct redefined fnfErr type
        https://bugs.webkit.org/show_bug.cgi?id=183728
        <rdar://problem/38590063>

        Reviewed by Dan Bernstein.

        * platform/network/cf/FormDataStreamCFNet.cpp:
        CFStreamError's error parameter takes a SInt32, not an int.
        Make sure our redefinition has a compatible type.

2018-03-17  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement authenticatorMakeCredential
        https://bugs.webkit.org/show_bug.cgi?id=183527
        <rdar://problem/35275886>

        Reviewed by Brent Fulgham.

        This patch does the following few things:
        1) It implements the authenticatorMakeCredential logic from the spec: https://www.w3.org/TR/webauthn/#op-make-cred.
        2) It tweaks enocding and deocding of PublicKeyCredentialCreationOptions between UIProccess and WebProcess.
        3) It soft links LocalAuthentication.Framework to WebCore, which was linked to WebKit.
        4) It creates SPI header for DeviceIdentity.Framework, and provides stubs to link it to WebCore.

        Here is a detailed explanantion of 1):
        1. A helper class called LocalAuthenticator is crafted to represent Apple platform attached authenticator, i.e.
        the devices themselves. All operations are currently restricted to iOS at this moment as macOS lacks attestation
        support.
        2. To do testing, this helper class is then moved from WebKit to WebCore even though all operations can only happens
        in the UIProcess. We currently lack the ability to pretend a https environment in TestWebKitAPI which is required by
        the WebAuthN API, and thus it is moved to WebCore to perform unit tesing flavor API tests. This is not enough as it
        can't test message exchange between the UI and Web processes. We will address this in a subsequent patch.
        3. More on testing: The attestation process is abstracted into a protected method such that the testing enviroment can
        override it with self attestation as network access is restricted in the WebKit testing enviroment. Also, swizzlers of
        LocalAuthentication API are provided to override the behavoir of LAContext.
        4. More on testing: The actual Apple attestation can only happen in real device and with network access, therefore
        it can only be covered by manual tests at this moment.
        5. Back to LocalAuthenticator, it currently has two public methods:
                5.1. makeCredential(): This method is the one does all the magic.
                + It first checks some parameters.
                + It then invokes LAContext to get user consent.
                + It then talks to Apple Attestation Privacy CA to do attestations.
                + It then stores necessary information into the Keychain.
                + Finally it generates the attestation object.
                5.2 isAvailable():
                To check if a LocalAuthenticator is available or not.
        6. Even though files are of .mm format, they are written in a way that mixes NS, CF and C++ types. Here is the rule:
                6.1 Use CF type only if it is requested by APIs.
                6.2 Use NS type to manipulate all Objc objects.
                6.3 Use C++ otherwise.

        Covered by API tests.

        * Configurations/WebCore.xcconfig:
        * Modules/credentialmanagement/CredentialsMessenger.cpp:
        (WebCore::getIdFromAttestationObject): Deleted.
        Decoding attestation object is tedious. UIProcess will instead return credential ID and attestation object
        at the same time. Therefore, this method is removed.
        * Modules/credentialmanagement/CredentialsMessenger.h:
        (WebCore::CreationReturnBundle::CreationReturnBundle): Deleted.
        (WebCore::AssertionReturnBundle::AssertionReturnBundle): Deleted.
        * Modules/webauthn/COSEConstants.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialType.h.
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (WebCore::PublicKeyCredentialCreationOptions::isolatedPartialCopyPtr const):
        (WebCore::PublicKeyCredentialCreationOptions::Parameters::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::Parameters::decode):
        (WebCore::PublicKeyCredentialCreationOptions::encode const):
        (WebCore::PublicKeyCredentialCreationOptions::decode):
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        (WebCore::PublicKeyCredentialDescriptor::encode const):
        (WebCore::PublicKeyCredentialDescriptor::decode):
        * Modules/webauthn/PublicKeyCredentialType.h:
        * Modules/webauthn/cocoa/LocalAuthenticator.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h.
        * Modules/webauthn/cocoa/LocalAuthenticator.mm: Added.
        (WebCore::LocalAuthenticatorInternal::freePtrs):
        (WebCore::LocalAuthenticator::makeCredential const):
        (WebCore::LocalAuthenticator::isAvailable const):
        (WebCore::LocalAuthenticator::issueClientCertificate const):
        * SourcesCocoa.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/cocoa/LocalAuthenticationSoftLink.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialType.h.
        * platform/cocoa/LocalAuthenticationSoftLink.mm: Added.
        * testing/MockCredentialsMessenger.cpp:
        (WebCore::MockCredentialsMessenger::setCreationReturnBundle):
        (WebCore::MockCredentialsMessenger::makeCredential):
        (WebCore::MockCredentialsMessenger::makeCredentialReply):
        (WebCore::MockCredentialsMessenger::setAttestationObject): Deleted.
        * testing/MockCredentialsMessenger.h:
        * testing/MockCredentialsMessenger.idl:

2018-03-16  Brent Fulgham  <bfulgham@apple.com>

        Correct debug assertion in Range::borderAndTextRects
        https://bugs.webkit.org/show_bug.cgi?id=183710
        <rdar://problem/38466976>

        Reviewed by Ryosuke Niwa.

        A debug assertion will fire if Range::borderAndTextRects is asked to evaluate a set of selected elements, where one of the elements does not have a parent.

        We should consider a nullptr parent as satisfying the condition of a parent not being present in the selection set.

        Tests: fast/dom/range/range-selection-empty-body.html

        * dom/Range.cpp:
        (WebCore::Range::borderAndTextRects const):

2018-03-15  Filip Pizlo  <fpizlo@apple.com>

        Put the DOM in IsoHeaps
        https://bugs.webkit.org/show_bug.cgi?id=183546

        Reviewed by Daniel Bates.

        No new tests because no change in behavior.
        
        This puts all descendants of WebCore::Node in isoheaps, so that UAFs on the DOM cannot be
        used for RCE attacks. This probably also makes it harder to use UAFs for UXSS, since it means
        that DOM UAFs cannot be used for universal read gadgets.
        
        This looks neutral on Speedometer and membuster, though I did have one round of testing
        that led me to believe that membuster was regressed - I just wasn't able to reproduce that
        result on subsequent testing.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Attr.cpp:
        * dom/Attr.h:
        * dom/CDATASection.cpp:
        * dom/CDATASection.h:
        * dom/CharacterData.cpp:
        * dom/CharacterData.h:
        * dom/Comment.cpp:
        * dom/Comment.h:
        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/DocumentFragment.cpp:
        * dom/DocumentFragment.h:
        * dom/DocumentType.cpp:
        * dom/DocumentType.h:
        * dom/Node.cpp:
        * dom/Node.h:
        * dom/ProcessingInstruction.cpp:
        * dom/ProcessingInstruction.h:
        * dom/PseudoElement.cpp:
        * dom/PseudoElement.h:
        * dom/ShadowRoot.cpp:
        * dom/ShadowRoot.h:
        * dom/StyledElement.cpp:
        * dom/StyledElement.h:
        * dom/TemplateContentDocumentFragment.cpp: Added.
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.cpp:
        * dom/Text.h:
        * dom/XMLDocument.cpp: Added.
        * dom/XMLDocument.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FTPDirectoryDocument.h:
        * html/FileInputType.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.cpp:
        * html/HTMLAreaElement.h:
        * html/HTMLAttachmentElement.cpp:
        * html/HTMLAttachmentElement.h:
        * html/HTMLBDIElement.cpp: Added.
        * html/HTMLBDIElement.h:
        * html/HTMLBRElement.cpp:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.cpp:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.cpp:
        * html/HTMLDListElement.h:
        * html/HTMLDataElement.cpp:
        * html/HTMLDataElement.h:
        * html/HTMLDataListElement.cpp:
        * html/HTMLDataListElement.h:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDetailsElement.h:
        * html/HTMLDirectoryElement.cpp:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.cpp:
        * html/HTMLDivElement.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.cpp:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.cpp:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.cpp:
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.cpp:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.cpp:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.cpp:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.cpp:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.cpp:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.cpp:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.cpp:
        * html/HTMLMenuElement.h:
        * html/HTMLMenuItemElement.cpp:
        * html/HTMLMenuItemElement.h:
        * html/HTMLMetaElement.cpp:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.cpp:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.cpp:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.cpp:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionElement.h:
        * html/HTMLOutputElement.cpp:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.cpp:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.cpp:
        * html/HTMLParamElement.h:
        * html/HTMLPictureElement.cpp:
        * html/HTMLPictureElement.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLPreElement.cpp:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.cpp:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.cpp:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLSlotElement.cpp:
        * html/HTMLSlotElement.h:
        * html/HTMLSourceElement.cpp:
        * html/HTMLSourceElement.h:
        * html/HTMLSpanElement.cpp:
        * html/HTMLSpanElement.h:
        * html/HTMLStyleElement.cpp:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.cpp:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.cpp:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowElement.cpp:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.cpp:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTimeElement.cpp:
        * html/HTMLTimeElement.h:
        * html/HTMLTitleElement.cpp:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.cpp:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.cpp: Added.
        * html/HTMLUnknownElement.h:
        * html/HTMLWBRElement.cpp:
        * html/HTMLWBRElement.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/LabelableElement.cpp:
        * html/LabelableElement.h:
        * html/MediaController.cpp:
        (MediaController::create): Deleted.
        (MediaController::MediaController): Deleted.
        (MediaController::addMediaElement): Deleted.
        (MediaController::removeMediaElement): Deleted.
        (MediaController::containsMediaElement const): Deleted.
        (MediaController::buffered const): Deleted.
        (MediaController::seekable const): Deleted.
        (MediaController::played): Deleted.
        (MediaController::duration const): Deleted.
        (MediaController::currentTime const): Deleted.
        (MediaController::setCurrentTime): Deleted.
        (MediaController::unpause): Deleted.
        (MediaController::play): Deleted.
        (MediaController::pause): Deleted.
        (MediaController::setDefaultPlaybackRate): Deleted.
        (MediaController::playbackRate const): Deleted.
        (MediaController::setPlaybackRate): Deleted.
        (MediaController::setVolume): Deleted.
        (MediaController::setMuted): Deleted.
        (playbackStateWaiting): Deleted.
        (playbackStatePlaying): Deleted.
        (playbackStateEnded): Deleted.
        (MediaController::playbackState const): Deleted.
        (MediaController::reportControllerState): Deleted.
        (eventNameForReadyState): Deleted.
        (MediaController::updateReadyState): Deleted.
        (MediaController::updatePlaybackState): Deleted.
        (MediaController::updateMediaElements): Deleted.
        (MediaController::bringElementUpToSpeed): Deleted.
        (MediaController::isBlocked const): Deleted.
        (MediaController::hasEnded const): Deleted.
        (MediaController::scheduleEvent): Deleted.
        (MediaController::asyncEventTimerFired): Deleted.
        (MediaController::clearPositionTimerFired): Deleted.
        (MediaController::hasAudio const): Deleted.
        (MediaController::hasVideo const): Deleted.
        (MediaController::hasClosedCaptions const): Deleted.
        (MediaController::setClosedCaptionsVisible): Deleted.
        (MediaController::supportsScanning const): Deleted.
        (MediaController::beginScrubbing): Deleted.
        (MediaController::endScrubbing): Deleted.
        (MediaController::beginScanning): Deleted.
        (MediaController::endScanning): Deleted.
        (MediaController::canPlay const): Deleted.
        (MediaController::isLiveStream const): Deleted.
        (MediaController::hasCurrentSrc const): Deleted.
        (MediaController::returnToRealtime): Deleted.
        (MediaController::startTimeupdateTimer): Deleted.
        (MediaController::scheduleTimeupdateEvent): Deleted.
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/PluginDocument.cpp:
        * html/PluginDocument.h:
        * html/RubyElement.cpp:
        * html/RubyElement.h:
        * html/RubyTextElement.cpp:
        * html/RubyTextElement.h:
        * html/TextDocument.cpp:
        * html/TextDocument.h:
        * html/shadow/AutoFillButtonElement.cpp:
        * html/shadow/AutoFillButtonElement.h:
        * html/shadow/DetailsMarkerControl.cpp:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/ImageControlsRootElement.cpp:
        * html/shadow/ImageControlsRootElement.h:
        * html/shadow/MediaControlElementTypes.cpp:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        * html/shadow/MediaControls.h:
        * html/shadow/ProgressShadowElement.cpp:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.cpp:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.cpp:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/shadow/mac/ImageControlsButtonElementMac.cpp:
        * html/shadow/mac/ImageControlsButtonElementMac.h:
        * html/shadow/mac/ImageControlsRootElementMac.cpp:
        * html/shadow/mac/ImageControlsRootElementMac.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/VTTCue.cpp:
        * html/track/VTTCue.h:
        * html/track/WebVTTElement.cpp:
        * html/track/WebVTTElement.h:
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h:
        * mathml/MathMLAnnotationElement.cpp:
        * mathml/MathMLAnnotationElement.h:
        * mathml/MathMLElement.cpp:
        * mathml/MathMLElement.h:
        * mathml/MathMLFractionElement.cpp:
        * mathml/MathMLFractionElement.h:
        * mathml/MathMLMathElement.cpp:
        * mathml/MathMLMathElement.h:
        * mathml/MathMLMencloseElement.cpp:
        * mathml/MathMLMencloseElement.h:
        * mathml/MathMLOperatorElement.cpp:
        * mathml/MathMLOperatorElement.h:
        * mathml/MathMLPaddedElement.cpp:
        * mathml/MathMLPaddedElement.h:
        * mathml/MathMLPresentationElement.cpp:
        * mathml/MathMLPresentationElement.h:
        * mathml/MathMLRootElement.cpp:
        * mathml/MathMLRootElement.h:
        * mathml/MathMLRowElement.cpp:
        * mathml/MathMLRowElement.h:
        * mathml/MathMLScriptsElement.cpp:
        * mathml/MathMLScriptsElement.h:
        * mathml/MathMLSelectElement.cpp:
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLSpaceElement.cpp:
        * mathml/MathMLSpaceElement.h:
        * mathml/MathMLTokenElement.cpp:
        * mathml/MathMLTokenElement.h:
        * mathml/MathMLUnderOverElement.cpp:
        * mathml/MathMLUnderOverElement.h:
        * mathml/MathMLUnknownElement.cpp: Added.
        * mathml/MathMLUnknownElement.h:
        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.cpp:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.cpp:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateElementBase.cpp:
        * svg/SVGAnimateElementBase.h:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.cpp:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.cpp:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontFaceElement.cpp:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.cpp:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.cpp:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.cpp:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.cpp:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.cpp:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGHKernElement.cpp:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.cpp:
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.cpp:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.cpp:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        * svg/SVGTitleElement.h:
        * svg/SVGUnknownElement.cpp: Added.
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.cpp:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.cpp:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:

2018-03-16  Youenn Fablet  <youenn@apple.com>

        Ensure Document::responseReceived and clearResource are called on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183709

        Reviewed by Chris Dumez.

        No change of behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        (WebCore::DocumentLoader::clearMainResource):

2018-03-16  Chris Dumez  <cdumez@apple.com>

        WebKit.WebsitePoliciesAutoplayQuirks API test times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183702

        Reviewed by Alex Christensen.

        The issue is that the test calls loadHTMLString then loadRequest right after, without
        waiting for the first load to complete first. loadHTMLString is special as it relies
        on substitute data and which schedules a timer to commit the data. When doing the
        navigation policy check for the following loadRequest(), the substitute data timer
        would fire and commit its data and load. This would in turn cancel the pending
        navigation policy check for the loadRequest().

        With sync policy delegates, this is not an issue because we take care of stopping
        all loaders when receiving the policy decision, which happens synchronously. However,
        when the policy decision happens asynchronously, the pending substitute data load
        does not get cancelled in time and it gets committed.

        To address the issue, this patch updates loadWithDocumentLoader() to cancel any
        provisional load when there is an asynchronous navigation policy decision pending.

        Change covered by new API test.

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

2018-03-16  Brent Fulgham  <bfulgham@apple.com>

        Set a trap to catch an infrequent form-related nullptr crash
        https://bugs.webkit.org/show_bug.cgi?id=183704
        <rdar://problem/37579354>

        Reviewed by Ryosuke Niwa.

        Make FormState a FrameDestructionObserver. We expect all relevant FormState objects to have been
        cleaned up prior to the frame being destroyed. If we find such a case, we'd like to see the
        stack trace to see what's going on.

        * loader/FormState.cpp:
        (WebCore::FormState::FormState):
        (WebCore::FormState::willDetachPage): RELEASE_ASSERT_NOT_REACHED if we ever get here.
        * loader/FormState.h:

2018-03-16  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: AccessibilityNodeObject::textForLabelElement() doesn't follow AccName calculation rules
        https://bugs.webkit.org/show_bug.cgi?id=183661

        Reviewed by Chris Fleizach.

        Have AccessibilityNodeObject::textForLabelElement() return the value from
        accessibleNameForNode() instead of innerText(). The former falls back on
        the latter if there is no author-provided accessible name.

        Tests: accessibility/aria-label-on-label-element.html
               accessibility/label-with-pseudo-elements.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::textForLabelElement const):
        (WebCore::AccessibilityNodeObject::titleElementText const):

2018-03-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix crash on websocket with bad handshake message.
        https://bugs.webkit.org/show_bug.cgi?id=183686

        Reviewed by Youenn Fablet.

        The closing cleanup was called multiple times. Add flag to detect
        it is already closed or not.

        No new tests because it is covered by existing test:
        - LayoutTests/http/tests/websocket/tests/hybi/bad-handshake-crash.html

        * platform/network/curl/SocketStreamHandleImpl.h:
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::SocketStreamHandleImpl::platformClose):
        (WebCore::SocketStreamHandleImpl::didReceiveData):

2018-03-16  Jer Noble  <jer.noble@apple.com>

        Make Fullscreen API an Experimental Feature
        https://bugs.webkit.org/show_bug.cgi?id=183662

        Reviewed by Jon Lee.

        The Fullscreen APIs should be guarded by a Setting, so they are not present in the DOM when the
        Experimental Feature is disabled.

        * dom/Document.idl:
        * dom/Element.idl:

2018-03-16  Megan Gardner  <megan_gardner@apple.com>

        Ensure that style is updated when the effective appearance changes
        https://bugs.webkit.org/show_bug.cgi?id=183690
        <rdar://problem/38385900>

        Reviewed by Tim Horton and Wenson Hsieh.

        Only exposing a function to outside WebCore, no tests needed.

        * page/Page.h:

2018-03-16  Chris Dumez  <cdumez@apple.com>

        WebKit.RestoreSessionStateContainingScrollRestorationDefault API test is failing with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183679

        Reviewed by Alex Christensen.

        Update CachedRawResource::didAddClient() to not send data until we've received
        the policy decision for the response.

        No new tests, covered by new API test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::handleSubstituteDataLoadNow):
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentLoader.h:
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::responseReceived):
        * loader/DocumentThreadableLoader.h:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::responseReceived):
        * loader/MediaResourceLoader.h:
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::responseReceived):
        * loader/appcache/ApplicationCacheResourceLoader.h:
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::didAddClient):
        (WebCore::CachedRawResource::responseReceived):
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::responseReceived):
        * loader/cache/KeepaliveRequestTracker.cpp:
        (WebCore::KeepaliveRequestTracker::responseReceived):
        * loader/cache/KeepaliveRequestTracker.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        (WebCore::WebCoreAVFResourceLoader::responseReceived):

2018-03-16  Youenn Fablet  <youenn@apple.com>

        Name Service Worker threads differently from regular Worker threads
        https://bugs.webkit.org/show_bug.cgi?id=183698

        Reviewed by Chris Dumez.

        No observable change of behavior.
        For debugging purposes, knowing that a thread is a service worker thread might help give context.
        It might also identify on a crash log whether the process is a service worker process or a regular web process.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::start):
        * workers/WorkerThread.h:
        (WebCore::WorkerThread::isServiceWorkerThread const):
        * workers/service/context/ServiceWorkerThread.h:

2018-03-16  Youenn Fablet  <youenn@apple.com>

        IceCandidates leak on webrtc/datachannel/basic.html and other tests
        https://bugs.webkit.org/show_bug.cgi?id=183676
        <rdar://problem/36116228>

        Reviewed by Eric Carlson.

        Covered by manual testing using --leaks option on WK1.
        WebKit should not release the candidates since libwebrtc is not taking ownership.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doSetLocalDescription):
        (WebCore::LibWebRTCPeerConnectionBackend::doSetRemoteDescription):

2018-03-16  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add Cairo-specific GraphicsContext operation recorder
        https://bugs.webkit.org/show_bug.cgi?id=183593

        Reviewed by Carlos Garcia Campos.

        Add Nicosia::CairoOperationRecorder, GraphicsContextImpl implementation
        that records all GraphicsContext operations for deferred replay on a
        different thread. Recording here mostly consists of storing all the
        Cairo resources in a thread-safe manner, which is eased by the atomic
        reference counting used in Cairo.

        Nicosia::PaintingOperation derivatives are used for operations or state
        updates that require recording. Instances of these classes are appended
        to a Vector<> object that is then pushed into a thread pool in
        Nicosia::PaintingEngineThreaded , replaying all the operations against
        the Cairo context established from an associated target Nicosia::Buffer.

        This GraphicsContextImpl implementation is now used in the
        PaintingContextCairo::ForRecording constructor to construct the
        GraphicsContext implementation that will be used for recording.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp: Added.
        (Nicosia::getContext):
        (Nicosia::OperationData::arg const const):
        (Nicosia::createCommand):
        (Nicosia::CairoOperationRecorder::CairoOperationRecorder):
        (Nicosia::m_commandList):
        (Nicosia::CairoOperationRecorder::updateState):
        (Nicosia::CairoOperationRecorder::clearShadow):
        (Nicosia::CairoOperationRecorder::setLineCap):
        (Nicosia::CairoOperationRecorder::setLineDash):
        (Nicosia::CairoOperationRecorder::setLineJoin):
        (Nicosia::CairoOperationRecorder::setMiterLimit):
        (Nicosia::CairoOperationRecorder::fillRect):
        (Nicosia::CairoOperationRecorder::fillRoundedRect):
        (Nicosia::CairoOperationRecorder::fillRectWithRoundedHole):
        (Nicosia::CairoOperationRecorder::fillPath):
        (Nicosia::CairoOperationRecorder::fillEllipse):
        (Nicosia::CairoOperationRecorder::strokeRect):
        (Nicosia::CairoOperationRecorder::strokePath):
        (Nicosia::CairoOperationRecorder::strokeEllipse):
        (Nicosia::CairoOperationRecorder::clearRect):
        (Nicosia::CairoOperationRecorder::drawGlyphs):
        (Nicosia::CairoOperationRecorder::drawImage):
        (Nicosia::CairoOperationRecorder::drawTiledImage):
        (Nicosia::CairoOperationRecorder::drawNativeImage):
        (Nicosia::CairoOperationRecorder::drawPattern):
        (Nicosia::CairoOperationRecorder::drawRect):
        (Nicosia::CairoOperationRecorder::drawLine):
        (Nicosia::CairoOperationRecorder::drawLinesForText):
        (Nicosia::CairoOperationRecorder::drawLineForDocumentMarker):
        (Nicosia::CairoOperationRecorder::drawEllipse):
        (Nicosia::CairoOperationRecorder::drawPath):
        (Nicosia::CairoOperationRecorder::drawFocusRing):
        (Nicosia::CairoOperationRecorder::save):
        (Nicosia::CairoOperationRecorder::restore):
        (Nicosia::CairoOperationRecorder::translate):
        (Nicosia::CairoOperationRecorder::rotate):
        (Nicosia::CairoOperationRecorder::scale):
        (Nicosia::CairoOperationRecorder::concatCTM):
        (Nicosia::CairoOperationRecorder::setCTM):
        (Nicosia::CairoOperationRecorder::getCTM):
        (Nicosia::CairoOperationRecorder::beginTransparencyLayer):
        (Nicosia::CairoOperationRecorder::endTransparencyLayer):
        (Nicosia::CairoOperationRecorder::clip):
        (Nicosia::CairoOperationRecorder::clipOut):
        (Nicosia::CairoOperationRecorder::clipPath):
        (Nicosia::CairoOperationRecorder::clipBounds):
        (Nicosia::CairoOperationRecorder::applyDeviceScaleFactor):
        (Nicosia::CairoOperationRecorder::roundToDevicePixels):
        (Nicosia::CairoOperationRecorder::append):
        * platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h: Added.
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::ForRecording::ForRecording):

2018-03-16  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Clean up TextureMapperLayer constructor
        https://bugs.webkit.org/show_bug.cgi?id=183634

        Reviewed by Michael Catanzaro.

        In the TextureMapperLayer header, only declare the constructor, and move
        all the previous member initialization to the point of declaration of
        these member variables.

        In the TextureMapperLayer implementation file, the constructor and
        destructor are moved into proper order at the top of the file. The
        former is defaulted, and the latter remains unchanged.

        No change in behavior.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::~TextureMapperLayer):
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-16  Miguel Gomez  <magomez@igalia.com>

        [GTK] When using EGL, request an OpenGL core profile when possible
        https://bugs.webkit.org/show_bug.cgi?id=178719

        Reviewed by Carlos Garcia Campos.

        When using EGL and OpenGL, try to request a context with version >= 3.2 with a core profile
        whenever possible. In order to to this, we require EGL version 1.5 or version 1.4 with the
        extension EGL_KHR_create_context. If EGL requirements are not met, or we cannot get a
        context with version >= 3.2 then use whatever EGL gives us.

        Covered by existent tests.

        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createPbufferContext):
        (WebCore::GLContextEGL::createSurfacelessContext):
        (WebCore::GLContextEGL::createContextForEGLVersion):
        * platform/graphics/egl/GLContextEGL.h:
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        (WebCore::GLContextEGL::createWPEContext):
        * platform/graphics/egl/GLContextEGLWayland.cpp:
        (WebCore::GLContextEGL::createWaylandContext):
        * platform/graphics/egl/GLContextEGLX11.cpp:
        (WebCore::GLContextEGL::createPixmapContext):

2018-03-16  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Don't use the TextureMapperAnimation::Client interface to apply animation
        https://bugs.webkit.org/show_bug.cgi?id=183656

        Reviewed by Carlos Garcia Campos.

        Don't have the TextureMapperLayer class inherit from the
        TextureMapperAnimation::Client interface just for the purposes of
        synchronization of animation-affected attributes in syncAnimations().
        For that purpose it's enough to provide a struct that is passed to that
        method, and with the TextureMapperAnimation class filling out any of the
        animated attributes that need to be updated.

        TextureMapperAnimation::ApplicationResult struct is introducted for that
        purpose. std::optional<> members in it are assigned values during the
        application process, if an appropriate animation affects them. The
        relevant member values in TextureMapperLayer are then updated, or value
        from the default state is used.

        TextureMapperAnimation::Client is removed.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::apply):
        (WebCore::TextureMapperAnimation::applyInternal):
        (WebCore::TextureMapperAnimations::apply):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::syncAnimations):
        (WebCore::TextureMapperLayer::setAnimatedTransform): Deleted.
        (WebCore::TextureMapperLayer::setAnimatedOpacity): Deleted.
        (WebCore::TextureMapperLayer::setAnimatedFilters): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-16  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: main WebGL canvas on acko.net has no reported size
        https://bugs.webkit.org/show_bug.cgi?id=178798
        <rdar://problem/35175740>

        Reviewed by Brian Burg.

        When the main frame navigates, the DOMAgent would recieve two InspectorInstrumentation calls,
        one when the frame begins its navigation and the other when the document for that frame has
        loaded. Both of these would discard the DOMAgent's bindings, which included the map of
        `nodeId`s. This was an issue for canvases, as the frontend would be notified whenever any
        canvas is created, which would usually occur before the `DOMContentLoaded` event is fired.
        As a result, the canvases would attempt to retrieve their associated node, only to have the
        DOMAgent discard those bindings quickly thereafter.

        This patch removes DOMAgent's and DOMDebuggerAgent's (parity) instrumentation hooks for the
        latter event, ensuring that the bindings are only discarded once.

        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded): Deleted.

        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::frameDocumentUpdated): Added.
        (WebCore::InspectorDOMDebuggerAgent::mainFrameDOMContentLoaded): Deleted.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):

2018-03-15  Tim Horton  <timothy_horton@apple.com>

        Include CADisplayLink explicitly where needed, instead of all of CA
        https://bugs.webkit.org/show_bug.cgi?id=183689
        <rdar://problem/38528719>

        Reviewed by Wenson Hsieh.

        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:

2018-03-15  Tim Horton  <timothy_horton@apple.com>

        Include MobileCoreServices in the WebCore prefix header
        https://bugs.webkit.org/show_bug.cgi?id=183688
        <rdar://problem/38527621>

        Reviewed by Dan Bernstein.

        * WebCorePrefix.h:

2018-03-15  Megan Gardner  <megan_gardner@apple.com>

        Create MediaQueryParserContext to provide additional context for the evaluation of media queries
        https://bugs.webkit.org/show_bug.cgi?id=183677

        Reviewed by Tim Horton.

        We need additional context for parsing media queries to make sure they are parsed correctly and valid.

        Not currently testable, will add tests in a later patch.

        * WebCore.xcodeproj/project.pbxproj:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::create):
        (WebCore::MediaQuerySet::set):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        * css/MediaList.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::mediaAttributeMatches):
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::featureWithValidDensity):
        (WebCore::featureWithValidPositiveLength):
        (WebCore::featureWithPositiveInteger):
        (WebCore::featureWithPositiveNumber):
        (WebCore::featureWithZeroOrOne):
        (WebCore::isFeatureValidWithoutValue):
        (WebCore::MediaQueryExpression::MediaQueryExpression):
        * css/MediaQueryExpression.h:
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::matchMedia):
        * css/MediaQueryParserContext.cpp: Added.
        (WebCore::MediaQueryParserContext::MediaQueryParserContext):
        * css/MediaQueryParserContext.h: Added.
        (WebCore::MediaQueryParserContext::MediaQueryParserContext):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium const):
        * css/StyleRuleImport.cpp:
        (WebCore::StyleRuleImport::StyleRuleImport):
        (WebCore::StyleRuleImport::setCSSStyleSheet):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::consumeImportRule):
        (WebCore::CSSParserImpl::consumeMediaRule):
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::parseMediaQuerySet):
        (WebCore::MediaQueryParser::parseMediaCondition):
        (WebCore::MediaQueryParser::MediaQueryParser):
        (WebCore::MediaQueryData::addExpression):
        * css/parser/MediaQueryParser.h:
        (WebCore::MediaQueryData::setMediaQueryParserContext):
        * css/parser/SizesAttributeParser.cpp:
        (WebCore::SizesAttributeParser::parse):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createCSSStyleSheet):
        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::createSheet):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::setCSSStyleSheet):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::initializeStyleSheet):
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLLinkElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::parsedMediaAttribute const):
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):

2018-03-15  Commit Queue  <commit-queue@webkit.org>

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

        it is causing a crash in API tests (Requested by youenn on
        #webkit).

        Reverted changeset:

        "ActiveDOMObject should assert that they are destroyed in the
        thread they are created"
        https://bugs.webkit.org/show_bug.cgi?id=183671
        https://trac.webkit.org/changeset/229639

2018-03-15  Youenn Fablet  <youenn@apple.com>

        Bad configuration parameters should make RTCPeerConnection constructor throw
        https://bugs.webkit.org/show_bug.cgi?id=183615

        Reviewed by Eric Carlson.

        Implement more of https://w3c.github.io/webrtc-pc/#set-pc-configuration.
        Throw an error whenever underlying libwebrtc set configuration fails.

        Covered by rebased test.

        * Modules/mediastream/PeerConnectionBackend.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::iceServersFromConfiguration):
        (WebCore::RTCPeerConnection::initializeConfiguration):
        (WebCore::RTCPeerConnection::setConfiguration):
        * Modules/mediastream/RTCPeerConnection.js:
        (initializeRTCPeerConnection):
        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:

2018-03-15  Youenn Fablet  <youenn@apple.com>

        replaceTrack triggers negotiationneeded
        https://bugs.webkit.org/show_bug.cgi?id=180342
        <rdar://problem/35822426>

        Reviewed by Eric Carlson.

        Covered by updated test.
        Fix the case of replacing a track for which data is already flowing.
        We should probably do the same for null tracks when fully implementing transceivers.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::enqueueReplaceTrackTask):

2018-03-15  Keith Rollin  <krollin@apple.com>

        Telemetry for stalled webpage loads
        https://bugs.webkit.org/show_bug.cgi?id=183221
        <rdar://problem/36549013>

        Reviewed by Chris Dumez.

        Add telemetry for page loads, tracking the pages that succeed, fail,
        or are canceled. This information will be used to track the overall
        health of our page loading as time goes on.

        No new tests -- no new/changed user-level functionality.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::telemetryPageLoadKey):
        (WebCore::DiagnosticLoggingKeys::timedOutKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::canceledMoreThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::failedMoreThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::occurredKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan2SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan5SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededLessThan20SecondsKey):
        (WebCore::DiagnosticLoggingKeys::succeededMoreThan20SecondsKey):
        * page/DiagnosticLoggingKeys.h:
        * platform/network/cf/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::getNSURLErrorDomain const):
        (WebCore::ResourceError::getCFErrorDomainCFNetwork const):
        (WebCore::ResourceError::mapPlatformError):

2018-03-15  Youenn Fablet  <youenn@apple.com>

        ActiveDOMObject should assert that they are destroyed in the thread they are created
        https://bugs.webkit.org/show_bug.cgi?id=183671

        Reviewed by Chris Dumez.

        No change of behavior.
        Moved MessagePort assertion to ActiveDOMObject.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::~ActiveDOMObject):
        * dom/ActiveDOMObject.h:
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::~MessagePort):
        * dom/MessagePort.h:

2018-03-15  Youenn Fablet  <youenn@apple.com>

        MessagePort is not always destroyed on the right thread
        https://bugs.webkit.org/show_bug.cgi?id=183619
        <rdar://problem/38204711>

        Reviewed by Chris Dumez.

        Add assertion to ensure MessagePort is destroyed in the right thread.
        Modify methods taking a ref in a lambda to rely on weak pointers and refing the WorkerThread if in a worker context.
        It is safe to ref the WorkerThread since it is thread safe ref counted and we are passing the ref to the main thread
        where the WorkerThread is expected to be destroyed.

        Test: http/tests/workers/worker-messageport-2.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::updateActivity):
        (WebCore::MessagePort::hasPendingActivity const):
        * dom/MessagePort.h:

2018-03-15  Jer Noble  <jer.noble@apple.com>

        Adopt new AVURLAssetUseClientURLLoadingExclusively AVURLAsset creation option.
        https://bugs.webkit.org/show_bug.cgi?id=183660

        Reviewed by Jon Lee.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):

2018-03-15  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix tiny mistake in r229615 that caused API tests failures.

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

2018-03-15  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Remove TextureMapperLayer::texture()
        https://bugs.webkit.org/show_bug.cgi?id=183635

        Reviewed by Michael Catanzaro.

        Remove the unused TextureMapperLayer::texture() method. This enables
        removing the virtual TextureMapperBackingStore::texture() method, as
        well as the implementations of it in TextureMapperTiledBackingStore and
        CoordinatedBackingStore classes.

        No change in behavior.

        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        (WebCore::TextureMapperTiledBackingStore::texture const): Deleted.
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:

2018-03-15  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Don't bother caching pattern transform matrix
        https://bugs.webkit.org/show_bug.cgi?id=183633

        Reviewed by Michael Catanzaro.

        Remove the m_patternTransform and m_patternTransformDirty member
        variables from the TextureMapperLayer class. These unnecessarily
        complicate the state update methods that need to compare the given
        attribute against the current state, and only update it if it has
        changed.

        Instead, compute the pattern TransformationMatrix value on-the-fly in
        the paintSelf() method, if at all necessary.

        No change in functionality.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        (WebCore::TextureMapperLayer::setContentsRect):
        (WebCore::TextureMapperLayer::setContentsTileSize):
        (WebCore::TextureMapperLayer::setContentsTilePhase):
        (WebCore::TextureMapperLayer::computePatternTransformIfNeeded): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-14  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Add clearing of storage access to WebResourceLoadStatisticsStore::clearInMemory()
        https://bugs.webkit.org/show_bug.cgi?id=183641
        <rdar://problem/38469497>

        Reviewed by Brent Fulgham and Chris Dumez.

        No new tests. This change is to stabilize existing layout tests.
        See Ryan Haddad's comment in https://bugs.webkit.org/show_bug.cgi?id=183620.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::removeAllStorageAccess):
            New function to clear out all storage access entries.

2018-03-14  Youenn Fablet  <youenn@apple.com>

        imported/w3c/web-platform-tests/WebCryptoAPI/wrapKey_unwrapKey/wrapKey_unwrapKey.worker.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=183602

        Reviewed by Chris Dumez.

        Introduce a map of ScriptExecutionContext that is read/write protected using a Lock.
        This allows introducing postTaskTo taking a ScriptExecutionContext identifier and callable from any thread.
        Use that method in Crypto instead of refing/unrefing  the context.
        Lock only happens if context does some postTask activity. This is governed by calling or not the new contextIdentifier() getter.

        Covered by crypto tests no longer failing m_workerGlobalScope->hasOneRef() assertion.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::dispatchAlgorithmOperation):
        * crypto/algorithms/CryptoAlgorithmECDH.cpp:
        (WebCore::CryptoAlgorithmECDH::deriveBits):
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::allScriptExecutionContextsMapLock):
        (WebCore::ScriptExecutionContext::ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::removeFromContextsMap):
        (WebCore::ScriptExecutionContext::checkConsistency const):
        (WebCore::ScriptExecutionContext::postTaskTo):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::contextIdentifier const):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):

2018-03-14  Chris Dumez  <cdumez@apple.com>

        Reduce use of SWServerToContextConnection::globalServerToContextConnection()
        https://bugs.webkit.org/show_bug.cgi?id=183626

        Reviewed by Youenn Fablet.

        Reduce use of SWServerToContextConnection::globalServerToContextConnection() as we are moving towards
        having multiple context connections.

        No new tests, no expected behavior change.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::serverToContextConnectionCreated):
        (WebCore::SWServer::runServiceWorkerIfNecessary):
        (WebCore::SWServer::runServiceWorker):
        (WebCore::SWServer::terminateWorkerInternal):
        (WebCore::SWServer::markAllWorkersAsTerminated):
        (WebCore::SWServer::workerContextTerminated):
        (WebCore::SWServer::fireInstallEvent):
        (WebCore::SWServer::fireActivateEvent):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerToContextConnection.cpp:
        (WebCore::SWServerToContextConnection::findClientByIdentifier):
        (WebCore::SWServerToContextConnection::matchAll):
        (WebCore::SWServerToContextConnection::claim):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextConnection):
        (WebCore::SWServerWorker::matchAll):
        * workers/service/server/SWServerWorker.h:

2018-03-14  Youenn Fablet  <youenn@apple.com>

        MessagePort should remove its listeners when being closed
        https://bugs.webkit.org/show_bug.cgi?id=183644

        Reviewed by Chris Dumez.

        Test: http/tests/workers/worker-messageport.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::contextDestroyed):

2018-03-14  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary StorageToWebProcessConnection::workerContextProcessConnectionCreated()
        https://bugs.webkit.org/show_bug.cgi?id=183624

        Reviewed by Youenn Fablet.

        Pass in context connection to SWServer::serverToContextConnectionCreated() to avoid
        relying on the deprecated globalServerToContextConnection().

        No new tests, no expected behavior change.

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

2018-03-14  Mark Lam  <mark.lam@apple.com>

        Enhance the MacroAssembler and LinkBuffer to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=183623
        <rdar://problem/38443314>

        Reviewed by Michael Saboff.

        No new tests.  Just adding PtrTags required by new MacroAssembler API.

        * cssjit/FunctionCall.h:
        (WebCore::FunctionCall::prepareAndCall):
        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):

2018-03-14  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement accessible dismiss action on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183352
        <rdar://problem/38161500>

        Reviewed by Zalan Bujtas.

        Test: accessibility/ios-simulator/AOM-dismiss-event.html

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

2018-03-14  Youenn Fablet  <youenn@apple.com>

        Update libwebrtc up to 36af4e9614f707f733eb2340fae66d6325aaac5b
        https://bugs.webkit.org/show_bug.cgi?id=183481

        Reviewed by Eric Carlson.

        Covered by existing tests.
        Updated libwebrtc binding code.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillEncodingParameters):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:

2018-03-14  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r229567

        * Configurations/FeatureDefines.xcconfig:

2018-03-13  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Immediately forward cookie access for domains with previous user interaction when there's an opener document
        https://bugs.webkit.org/show_bug.cgi?id=183620
        <rdar://problem/38431469>

        Reviewed by Brent Fulgham.

        Tests: http/tests/storageAccess/deny-storage-access-under-opener.html
               http/tests/storageAccess/grant-storage-access-under-opener.html

        It turns out the fix in https://bugs.webkit.org/show_bug.cgi?id=183577
        wasn't enough to address the compatibility issues with popups. Some of
        them just detect their unpartitioned cookies, auto-dismiss themselves,
        and expect their unpartitioned cookies to be available under the opener
        afterwards. We should grant them access if the popup's domain has had
        user interaction _previously_.

        Note that we still need https://bugs.webkit.org/show_bug.cgi?id=183577
        because if the popup's domain has not received user interaction
        previously, we will not grant it storage access on just the window open.

        * dom/Document.cpp:
        (WebCore::Document::hasRequestedPageSpecificStorageAccessWithUserInteraction):
        (WebCore::Document::setHasRequestedPageSpecificStorageAccessWithUserInteraction):
        (WebCore::Document::hasGrantedPageSpecificStorageAccess): Deleted.
        (WebCore::Document::setHasGrantedPageSpecificStorageAccess): Deleted.
            Renamed from *Granted* to *Requested* since there is now a case
            where access will not be granted, i.e. when the popup domain has
            not had user interaction previously.
        * dom/Document.h:
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setRequestStorageAccessUnderOpenerCallback):
            Renamed *Grant* to *Request*.
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::ResourceLoadObserver::logWindowCreation):
            New function called from DOMWindow::createWindow().
        (WebCore::ResourceLoadObserver::requestStorageAccessUnderOpener):
            New convenience function.
        (WebCore::ResourceLoadObserver::setGrantStorageAccessUnderOpenerCallback): Deleted.
            Renamed *Grant* to *Request*.
        * loader/ResourceLoadObserver.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
            Now calls ResourceLoadObserver::logWindowCreation() if a window
            was created and the opener has a document and a page ID.

2018-03-13  Chris Dumez  <cdumez@apple.com>

        fast/loader/javascript-url-iframe-remove-on-navigate.html is a flaky crash on iOS with async delegates
        https://bugs.webkit.org/show_bug.cgi?id=183610

        Reviewed by Youenn Fablet.

        The issue was that in DocumentLoader::loadMainResource(), the call to requestMainResource() which
        return null due to the load getting cancelled synchronously. If this load is the parent frame's last
        pending load, then the 'load' event gets fired in the parent frame. In the test, the parent frame's
        load event handler does a document.write() call which blows away the iframe. As a result, when
        we return from the requestMainResource(), m_frame is null and we crash later on dereferencing it.

        No new tests, covered by fast/loader/javascript-url-iframe-remove-on-navigate-async-delegate.html
        which was crashing flakily.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::loadMainResource):

2018-03-13  Jer Noble  <jer.noble@apple.com>

        [iOS] Muted media playback can interrupt out-of-process audio
        https://bugs.webkit.org/show_bug.cgi?id=183606
        <rdar://problem/37466253>

        Reviewed by Eric Carlson.

        Test: Updated TestWebKitAPI test to verify the correct AVAudioSession category is set.

        A non-playing, non-muted media element will cause the AVAudioSession category to be set to
        "playing" when a muted media element begins playback. Ignore these non-playing elements for
        the purposes of determining the AVAudioSession category.

        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
        (PlatformMediaSessionManager::updateSessionState):

2018-03-13  Youenn Fablet  <youenn@apple.com>

        Calling removeTrack with RTCRtpSender does not set SenderTrack to null
        https://bugs.webkit.org/show_bug.cgi?id=183308

        Reviewed by Eric Carlson.

        Covered by updated test.

        * Modules/mediastream/RTCRtpSender.cpp:
        (WebCore::RTCRtpSender::stop): Set track to null when being stopped i.e. removed.
        * Modules/mediastream/RTCRtpSender.h:

2018-03-13  Youenn Fablet  <youenn@apple.com>

        Changing link element rel attribute from preload to stylesheet should succeed loading the stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=183601
        <rdar://problem/38309441>

        Reviewed by Antti Koivisto.

        Test: http/wpt/preload/change-link-rel-attribute.html

        * loader/LinkPreloadResourceClients.h:
        (WebCore::LinkPreloadResourceClient::clearResource): Remove the call to CachedResource::cancelLoad.
        This call is expected to be called by ResourceLoader when cancelling the load from below CachedResource.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::allClientsRemoved): In case of preload,
        cancel the load if not finished when there is no more client attached to it.
        * loader/cache/CachedResource.h:

2018-03-12  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Immediately forward cookie access at user interaction when there's an opener document
        https://bugs.webkit.org/show_bug.cgi?id=183577
        <rdar://problem/38266987>

        Reviewed by Brent Fulgham.

        Tested manually on live websites.
        No new automated tests because of a bug in WebKitTestRunner:
        https://bugs.webkit.org/show_bug.cgi?id=183578
        The event sender triggers gestures in the opener rather than
        in the popup.

        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
            Clears the new m_primaryDomainsGrantedPageSpecificStorageAccess.
        (WebCore::Document::hasGrantedPageSpecificStorageAccess):
        (WebCore::Document::setHasGrantedPageSpecificStorageAccess):
        * dom/Document.h:
            Added member m_primaryDomainsGrantedPageSpecificStorageAccess
            where we store domains that have been granted access.
        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setGrantStorageAccessUnderOpenerCallback):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
            Now checks if there is a cross-origin opener and if so, immediately
            grants cookie access to the popup's domain if it is partitioned or
            blocked. 
        * loader/ResourceLoadObserver.h:
        * platform/network/NetworkStorageSession.h:
            Added member m_pagesGrantedStorageAccess.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStoragePartition const):
        (WebCore::NetworkStorageSession::hasStorageAccess const):
            Renamed from hasStorageAccessForFrame since the frameID now is optional.
        (WebCore::NetworkStorageSession::grantStorageAccess):
            Renamed from grantStorageAccessForFrame since the frameID now is optional.
        (WebCore::NetworkStorageSession::removeStorageAccessForAllFramesOnPage):
            Now removes the pageID entry in m_pagesGrantedStorageAccess.
        (WebCore::NetworkStorageSession::hasStorageAccessForFrame const): Deleted.
            Renamed since the frameID now is optional.
        (WebCore::NetworkStorageSession::grantStorageAccessForFrame): Deleted.
            Renamed since the frameID now is optional.

2018-03-12  Tim Horton  <timothy_horton@apple.com>

        Stop using SDK conditionals to control feature definitions
        https://bugs.webkit.org/show_bug.cgi?id=183430
        <rdar://problem/38251619>

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig: Renamed.

2018-03-12  Chris Dumez  <cdumez@apple.com>

        Return boolean from DOMTokenList's replace() method
        https://bugs.webkit.org/show_bug.cgi?id=183567

        Reviewed by Youenn Fablet.

        Have DOMTokenList's replace() method return a boolean indicating if the
        token was replaced, as per:
        - https://dom.spec.whatwg.org/#dom-domtokenlist-replace

        This is a recent addition to the DOM specification:
        - https://github.com/whatwg/dom/pull/582

        No new tests, rebaselined existing test.

        * html/DOMTokenList.cpp:
        (WebCore::replaceInOrderedSet):
        (WebCore::DOMTokenList::replace):
        * html/DOMTokenList.h:
        * html/DOMTokenList.idl:

2018-03-12  Brian Burg  <bburg@apple.com>

        Ignore some deprecation warnings encountered when compiling with newer versions of ICU
        https://bugs.webkit.org/show_bug.cgi?id=183584
        <rdar://problem/38395317>

        Reviewed by Daniel Bates.

        Ignore new deprecation warnings. Where a function has more than one
        deprecation warning, mark out the entire function so it remains readable.

        * editing/TextIterator.cpp:
        * platform/graphics/SurrogatePairAwareTextIterator.cpp:
        (WebCore::SurrogatePairAwareTextIterator::normalizeVoicingMarks):
        * platform/text/TextEncoding.cpp:

2018-03-12  Yoav Weiss  <yoav@yoav.ws>

        Runtime flag for link prefetch and remove link subresource.
        https://bugs.webkit.org/show_bug.cgi?id=183540

        Reviewed by Chris Dumez.

        This patch removes the LINK_PREFETCH build time flag, removes
        link subresource, adds an off-by-default runtime flag for link
        prefetch and makes sure link prefetch only works when this flag is on.

        Subresource is removed as it's not a part of any spec, nor supported by any
        other browser. It was replaced by link preload.

        No new tests as this is not adding any new functionality.

        * Configurations/FeatureDefines.xcconfig: Remove the LINK_PREFETCH flag.
        * html/LinkRelAttribute.cpp:
        (WebCore::LinkRelAttribute::LinkRelAttribute): Put prefetch support behind the runtime flag.
        (WebCore::LinkRelAttribute::isSupported): Add prefetch.
        * html/LinkRelAttribute.h: Remove the LINK_PREFETCH flag.
        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient): Remove the LINK_PREFETCH flag.
        (WebCore::LinkLoader::prefetchIfNeeded): Move the prefetch code to `prefetchIfNeeded()`. Remove subresource bits.
        (WebCore::LinkLoader::loadLink): Call `prefetchIfNeeded()`.
        * loader/LinkLoader.h:
        * loader/ResourceLoadInfo.cpp:
        (WebCore::toResourceType): Remove the LINK_PREFETCH flag as well as subresource.
        * loader/SubresourceLoader.cpp:
        (WebCore::logResourceLoaded): Remove the LINK_PREFETCH flag as well as subresource.
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::defaultPriorityForResourceType): Remove the LINK_PREFETCH flag as well as subresource.
        (WebCore::CachedResource::load): Remove the LINK_PREFETCH flag.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::ignoreForRequestCount const): Remove the LINK_PREFETCH flag as well as subresource.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource): Remove the LINK_PREFETCH flag as well as subresource.
        (WebCore::CachedResourceLoader::requestLinkResource): Remove subresource.
        (WebCore::contentTypeFromResourceType): Remove the LINK_PREFETCH flag as well as subresource.
        (WebCore::CachedResourceLoader::checkInsecureContent const): Remove the LINK_PREFETCH flag as well as subresource.
        (WebCore::CachedResourceLoader::shouldUpdateCachedResourceWithCurrentRequest): Remove the LINK_PREFETCH flag as well as subresource.
        * loader/cache/CachedResourceLoader.h:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setLinkPrefetchEnabled): Set the prefetch flag.
        (WebCore::RuntimeEnabledFeatures::linkPrefetchEnabled const): Get the prefetch flag.

2018-03-12  Youenn Fablet  <youenn@apple.com>

        RTCPeerConnection's close method should update signalingState
        https://bugs.webkit.org/show_bug.cgi?id=174314
        <rdar://problem/33267977>

        Reviewed by Eric Carlson.

        Covered by rebased test.
        Add closed as signalingState enum value.
        Set peer connection signaling state to closed once close is called.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::doClose):
        * Modules/mediastream/RTCSignalingState.idl:
        * platform/mediastream/RTCSignalingState.h:

2018-03-12  Mark Lam  <mark.lam@apple.com>

        Make a NativeFunction into a class to support pointer profiling.
        https://bugs.webkit.org/show_bug.cgi?id=183573
        <rdar://problem/38384697>

        Reviewed by Filip Pizlo.

        No new tests because there's no new behavior.  Only updating bindings.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHashTableValueArray):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:

2018-03-12  Tim Horton  <timothy_horton@apple.com>

        Use a different SPI header for some AudioToolbox enums
        https://bugs.webkit.org/show_bug.cgi?id=183574
        <rdar://problem/38385889>

        Reviewed by Anders Carlsson.

        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/mediastream/mac/AudioTrackPrivateMediaStreamCocoa.cpp:
        Adjust SPI imports.

2018-03-12  Danyao Wang  <danyao@chromium.org>

        Add a query and fragment exception to history API's unique origin restriction.
        https://bugs.webkit.org/show_bug.cgi?id=183028

        Reviewed by Brent Fulgham.

        Tests: http/tests/navigation/pushstate-at-unique-origin-denied.php
               Tools/TestWebKitAPI/Tests/WebCore/URL.cpp

        * page/History.cpp:
        (WebCore::History::stateObjectAdded):

2018-03-12  Antti Koivisto  <antti@apple.com>

        Don't invalidate descendants for nth pseudo classes unless needed
        https://bugs.webkit.org/show_bug.cgi?id=183566

        Reviewed by Zalan Bujtas.

        We currently invalidate the whole subtrees that may match :nth-child and similar. In many common
        cases we know that only the direct siblings may be affected.

        * css/SelectorChecker.cpp:
        (WebCore::localContextForParent):
        (WebCore::SelectorChecker::matchRecursively const):

            Track if the context matches the subject element if the selector or its siblings only.

        (WebCore::SelectorChecker::checkOne const):

            Use different bits of descendant and child invalidation cases.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentMatchesRightmostOrAdjacentElement):
        (WebCore::SelectorCompiler::constructFragmentsInternal):

            Track if the context matches the subject element if the selector or its siblings only.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthLastChild):

            Use different bits of descendant and child invalidation cases.

        * dom/Element.cpp:
        (WebCore::invalidateForForwardPositionalRules):
        (WebCore::invalidateForBackwardPositionalRules):

            Invalidate more precisely based on the new bits.

        (WebCore::checkForSiblingStyleChanges):
        (WebCore::Element::setDescendantsAffectedByForwardPositionalRules):
        (WebCore::Element::setDescendantsAffectedByBackwardPositionalRules):
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
        (WebCore::Element::rareDataDescendantsAffectedByForwardPositionalRules const):
        (WebCore::Element::rareDataDescendantsAffectedByBackwardPositionalRules const):

            New bits.

        * dom/Element.h:
        (WebCore::Element::descendantsAffectedByForwardPositionalRules const):
        (WebCore::Element::descendantsAffectedByBackwardPositionalRules const):
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::descendantsAffectedByForwardPositionalRules const):
        (WebCore::ElementRareData::setDescendantsAffectedByForwardPositionalRules):
        (WebCore::ElementRareData::descendantsAffectedByBackwardPositionalRules const):
        (WebCore::ElementRareData::setDescendantsAffectedByBackwardPositionalRules):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetStyleRelations):
        * style/StyleRelations.cpp:
        (WebCore::Style::commitRelationsToRenderStyle):
        (WebCore::Style::commitRelations):
        * style/StyleRelations.h:

2018-03-12  Javier Fernandez  <jfernandez@igalia.com>

        Remove GridLayout runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=183484

        Reviewed by Myles C. Maxfield.

        The Grid Layout feature has been enabled by default for almost a
        year, so I think it's time to remove the runtime flag and the
        codepath run when the feature is disabled.

        No new tests, because there are no changes in functionality.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertContentAlignmentData):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        * dom/Document.cpp:
        * dom/Document.h:
        * page/RuntimeEnabledFeatures.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::alignmentOffset):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialDefaultAlignment):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2018-03-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement CSS Animations and CSS Transitions as Web Animations
        https://bugs.webkit.org/show_bug.cgi?id=183504
        <rdar://problem/38372965>

        Reviewed by Dean Jackson and Jon Lee.

        Tests: webanimations/css-animations.html
               webanimations/css-transitions.html

        This patch implements CSS Animations and CSS Transitions as Web Animations. The main changes are:

        * StyleTreeResolver: StyleTreeResolver now has a code path to add CSSAnimation and CSSTransition objects onto the DocumentTimeline
        to be picked up by the Web Animations engine. The previous CSSAnimationController code path is preserved if the runtime flag is disabled.

        * AnimationTimeline: we add two new methods, updateCSSAnimationsForElement() and updateCSSTransitionsForElement() which are called from
        TreeResolver::createAnimatedElementUpdate(). These look at the AnimationList for the old and new RenderStyle objects and create, update
        and remove matching CSSAnimation and CSSTransition instances.

        * DeclarativeAnimation: a new superclass to both CSSAnimation and CSSTransition which introduces the concept of a backingAnimation(),
        which is an Animation held by the RenderStyle objects, and two virtual methods with base implementations, initialize() which is called
        upon creating by create() methods in subclasses, and syncPropertiesWithBackingAnimation() which ensures that properties on the
        DeclarativeAnimation objects (Web Animations side) match the backing animation (CSS side).

        * KeyframeEffectReadOnly: two new important methods to create blending keyframes (KeyframeList) based on backing Animation objects,
        computeCSSAnimationBlendingKeyframes() and computeCSSTransitionBlendingKeyframes().

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffectReadOnly.h:
        (WebCore::AnimationEffectReadOnly::isKeyframeEffectReadOnly const): We fix this method such that calling it on a KeyframeEffect, which
        is a subclass of KeyframeEffectReadOnly, returns true.
        * animation/AnimationEffectTimingReadOnly.cpp: In order for DeclarativeAnimation::syncPropertiesWithBackingAnimation() to set the timing
        function for a declarative animation's effect, we need a public method to set an effect's timing function outside of just the "easing"
        property setter exposed via the JS API. So we introduce a setTimingFunction() method and call it from setEasing().
        (WebCore::AnimationEffectTimingReadOnly::setEasing):
        (WebCore::AnimationEffectTimingReadOnly::setTimingFunction):
        * animation/AnimationEffectTimingReadOnly.h:
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::~AnimationTimeline): Clear all maps and sets containing WebAnimation references to ensure these get destructed
        when the AnimationTimeline is being destructed and should no longer hold a reference to them.
        (WebCore::AnimationTimeline::relevantMapForAnimation): We store various subclasses of WebAnimation in dedicated maps so we can composite
        animations in the correct order when animating. This function returns the correct map for a given animation such that animationWasAddedToElement()
        and animationWasRemovedFromElement() mutate the right map.
        (WebCore::AnimationTimeline::animationWasAddedToElement):
        (WebCore::AnimationTimeline::animationWasRemovedFromElement):
        (WebCore::AnimationTimeline::animationsForElement): Make sure to look for animations in the lists of CSS Animations and CSS Transitions as well
        as Web Animations.
        (WebCore::AnimationTimeline::updateCSSAnimationsForElement): This method is called by TreeResolver::createAnimatedElementUpdate() during style
        resolution. It compares the AnimationList of the previous style and the new style for a given element, checks that animations with a given name
        that were not present in the old AnimationList have a new matching CSSAnimation object for them added to the AnimationTimeline, that animations
        with a given name that are no longer present in the new AnimationList have their matching CSSAnimation object removed from the AnimationTimeline,
        and that animations with a given name that are present in both the old and new AnimationList have their matching CSSAnimation updated to match
        the current state of the animation in the AnimationList.
        (WebCore::AnimationTimeline::updateCSSTransitionsForElement): Similarly to updateCSSAnimationsForElement(), this method is called during style
        resolution by TreeResolver::createAnimatedElementUpdate(). Its role is to create or remove CSSTransition objects based on the AnimationList found
        in the old and new styles for a given element. It follows a slightly different logic than updateCSSAnimationsForElement() since for CSS Transitions,
        there is no need to update CSSTransition objects for a CSS property existing in both the old and new AnimationList, since when a CSS transitions
        property is changed, a whole new transition is initiated. However, it's important to check that different Animation objects and styles would actually
        result in different timing properties and blending keyframes, so check for this as well before creating new CSSTransition objects.
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::animations const): Change the m_animations type from HashSet to ListHashSet to guarantee we preserve the insertion order which is
        required by getAnimations().
        (WebCore::AnimationTimeline::hasElementAnimations const): Indicates to DocumentTimeline::updateAnimations() that there are animations targeting the provided element.
        (WebCore::AnimationTimeline::elementToAnimationsMap):
        (WebCore::AnimationTimeline::elementToCSSAnimationsMap):
        (WebCore::AnimationTimeline::elementToCSSTransitionsMap):
        * animation/CSSAnimation.cpp: CSSAnimation is now a subclass of DeclarativeAnimation and subclasses initialize() and syncPropertiesWithBackingAnimation()
        to perform work specific to CSS Animations.
        (WebCore::CSSAnimation::create): Set the animationName property based on the provided backing animation.
        (WebCore::CSSAnimation::CSSAnimation):
        (WebCore::CSSAnimation::initialize): Create the blending keyframes for this CSSAnimation.
        (WebCore::CSSAnimation::syncPropertiesWithBackingAnimation): Reflect the animation-fill-mode, animation-direction, animation-iteration-count and
        animation-play-state CSS properties on the AnimationEffectTimingReadOnly object associated with this CSSAnimation.
        * animation/CSSAnimation.h:
        * animation/CSSTransition.cpp: CSSTransition is now a subclass of DeclarativeAnimation.
        (WebCore::CSSTransition::create): Set the transitionProperty property based on the provided backing animation.
        (WebCore::CSSTransition::CSSTransition):
        (WebCore::CSSTransition::matchesBackingAnimationAndStyles const):
        (WebCore::CSSTransition::canBeListed const): Subclass this method such that we also check that we have blending keyframes for a CSSTransition to be
        listed by calls to getAnimations().
        * animation/CSSTransition.h:
        * animation/DeclarativeAnimation.cpp: Added. This new WebAnimation subclass now is the common base class for both CSSAnimation and CSSTransition.
        It establishes a relationship with a "backing animation", which is an Animation obtained from a style's AnimationList while resolving styles.
        These backing animations contain all of the parsed CSS styles related to CSS Animations and CSS Transitions and we use those to set matching properties
        of the Web Animations timing model in the new syncPropertiesWithBackingAnimation() virtual method, which subclasses can override to perform further
        work that is specific to a given declarative animation type. The initialize() method is called during create() methods to perform common animation
        setup work. Note that while both initialize() and syncPropertiesWithBackingAnimation() are called, we suspend invalidation to that animation's effect
        since these methods are meant to be called during style invalidation and we would hit an assertion if we followed the usual route of calling
        updateStyleIfNeeded() on the target's document during invalidation.
        (WebCore::DeclarativeAnimation::DeclarativeAnimation):
        (WebCore::DeclarativeAnimation::setBackingAnimation):
        (WebCore::DeclarativeAnimation::initialize): Create a KeyframeEffectReadOnly for this animation and set the provided element as its target, set that
        element's document's timeline and play the animation if the backing animation's play state is playing.
        (WebCore::DeclarativeAnimation::syncPropertiesWithBackingAnimation): Reflect the {animation|transition}-delay, {animation|transition}-duration and
        {animation|transition}-timing-function properties as set on the backing animation.
        * animation/DeclarativeAnimation.h: Added.
        (WebCore::DeclarativeAnimation::backingAnimation const):
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::updateAnimations): Trigger style invalidation for elements targeted not just by WebAnimation instances, but also by any
        of the DeclarativeAnimation subclasses. We also remove the call to updateFinishedState() which should have been removed when we implemented correct
        support for asynchronous WebAnimation operations.
        (WebCore::DocumentTimeline::animatedStyleForRenderer): Declarative animations are backed by KeyframeEffectReadOnly effects, so make sure we check
        for KeyframeEffectReadOnly or one of its subclasses and not just KeyframeEffect since there now are animation types that use the ReadOnly variant.
        (WebCore::DocumentTimeline::runningAnimationsForElementAreAllAccelerated): Same as for animatedStyleForRenderer, check for KeyframeEffectReadOnly
        and not simply KeyframeEffect.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::invalidateElement): Stop forcing a style resolution as we invalidate element, marking them as dirty is sufficient. Calls to getAnimations()
        already force a style resolution as needed.
        (WebCore::KeyframeEffectReadOnly::create): Add a new create() method that only provides a target and which is used by DeclarativeAnimation::initialize().
        (WebCore::KeyframeEffectReadOnly::getKeyframes): The previous implementation of getKeyframes() used the ParsedKeyframe list held as m_parsedKeyframes
        to compute keyframes. In the case of declarative animations, there are no ParsedKeyframe since the JS API was not involved, so we use the blending keyframes
        to look for keyframe data.
        (WebCore::KeyframeEffectReadOnly::computeCSSAnimationBlendingKeyframes): Called by CSSAnimation::initialize(), this function creates blending keyframes by
        looking up the keyframes date obtained from the @keyframes rule with this backing animation's name.
        (WebCore::KeyframeEffectReadOnly::computeCSSTransitionBlendingKeyframes): Called by CSSTransition::create(), this function creates blending keyframes by
        creating a 0-offset keyframe with the old style and a 1-offset keyframe with the new style as provided during TreeResolver::createAnimatedElementUpdate().
        (WebCore::KeyframeEffectReadOnly::stylesWouldYieldNewCSSTransitionsBlendingKeyframes const): Called by AnimationTimeline::updateCSSTransitionsForElement()
        to check that a provided backing Animation and a pair of old and new RenderStyles that may be different objects actually would yield different timing
        properties and keyframe CSS values for a given CSS transition to avoid the deletion and creation of CSSTransition objects.
        (WebCore::KeyframeEffectReadOnly::shouldRunAccelerated): We mistakenly assumed we always had blending keyframes, which is not always the case with a
        CSSTransition where the transition style itself might be set first, but the target value after. So we should only run accelerated provided there are blending
        keyframes at least, the function already returning false if it finds a blending keyframe animating a non-accelerated CSS property.
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle): Check that there actually is a matching ParsedKeyframe to read the timing function from.
        * animation/KeyframeEffectReadOnly.h:
        (WebCore::KeyframeEffectReadOnly::hasBlendingKeyframes const):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::~WebAnimation): We used to do something very wrong when a WebAnimation was destroyed which uncovered crashes when dealing with
        declarative animations. In AnimationTimeline's updateCSSAnimationsForElement() and updateCSSTransitionsForElement(), when we identify that a DeclarativeAnimation
        no longer matches an Animation from the current style's AnimationList, we set that DeclarativeAnimation's effect to null and call removeAnimation() on
        the timeline. This removes all references from AnimationTimeline to this DeclarativeAnimation and leads to ~WebAnimation being called. Calling removeAnimation()
        again in the destructor means that we'd hit ASSERT_WITH_SECURITY_IMPLICATION(!m_deletionHasBegun) in ref(). It was also meaningless to perform this work in
        the WebAnimation destructor since an animation could never be destroyed if it were still registered on a timeline.
        (WebCore::WebAnimation::suspendEffectInvalidation): DeclarativeAnimation instances have their timing model properties set during style invalidation, so we need
        a mechanism to allow the usual effect invalidation to be suspended in this case. We now maintain a simple m_suspendCount count that increases and decreases with
        calls to this method and unsuspendEffectInvalidation() and a isEffectInvalidationSuspended() method returning true whenever that count is positive.
        (WebCore::WebAnimation::unsuspendEffectInvalidation):
        (WebCore::WebAnimation::timingModelDidChange): Check that effect invalidation is not suspended before proceeding with invalidating the effect.
        (WebCore::WebAnimation::setEffect): Check for KeyframeEffectReadOnly and not just KeyframeEffect since declarative animations have ReadOnly effects.
        (WebCore::WebAnimation::setTimeline): Check for KeyframeEffectReadOnly and not just KeyframeEffect since declarative animations have ReadOnly effects.
        (WebCore::WebAnimation::scheduleMicrotaskIfNeeded): Ensure that the WebAnimation's lifecycle is extended at least to the completion of the scheduled microtask.
        This would otherwise cause crashes after declarative animations were destroyed when they were no longer applied.
        (WebCore::WebAnimation::runPendingPlayTask): Only fulfill the "ready" promise if it hasn't already been, which might have been the case if multiple calls to play()
        are made as a result of updating the animation play state in CSSAnimation::syncPropertiesWithBackingAnimation().
        (WebCore::WebAnimation::runPendingPauseTask): Same as above but with multiple pause() calls.
        (WebCore::WebAnimation::startOrStopAccelerated): Check for KeyframeEffectReadOnly and not just KeyframeEffect since declarative animations have ReadOnly effects.
        (WebCore::WebAnimation::canBeListed const): This new method is called by {Document|Element}::getAnimations() to check that an animation is in the correct state to
        be listed. The Web Animations spec explains that only animations "that have an associated target effect which is current or in effect" can be listed. We implement
        this behavior as specified.
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isDeclarativeAnimation const):
        (WebCore::WebAnimation::isEffectInvalidationSuspended):
        * dom/Document.cpp:
        (WebCore::Document::getAnimations): Ensure that the document's pending styles are resolved before returning animations to ensure that any pending declarative
        animations are created. Additionally, we ensure that we only list qualifying animations that have effects targeting elements that are children of thi document.
        * dom/Element.cpp:
        (WebCore::Element::getAnimations): Same as Document::getAnimations().
        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate): When resolving styles, call into the AnimationTimeline if the runtime flag to enable CSS Animations and
        CSS Transitions as Web Animations is on. Otherwise, use CSSAnimationController.

2018-03-12  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Crash in WebCore::PlatformDisplayWayland::~PlatformDisplayWayland
        https://bugs.webkit.org/show_bug.cgi?id=176490

        Reviewed by Žan Doberšek.

        Destroy the wl_display with wl_display_disconnect() (client process API), not
        wl_display_destroy() (server process API). It has to be destroyed last, so explicitly
        destroy the wl_registry and wl_compositor first.

        * platform/graphics/wayland/PlatformDisplayWayland.cpp:
        (WebCore::PlatformDisplayWayland::~PlatformDisplayWayland):

2018-03-10  Megan Gardner  <megan_gardner@apple.com>

        Media query for default appearance
        https://bugs.webkit.org/show_bug.cgi?id=183539
        <rdar://problem/38326388>

        Reviewed by Tim Horton.

        Not currently testable, will add tests in a later patch.

        Write a media query to evaluate appearance.

        * css/CSSValueKeywords.in:
        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::defaultAppearanceEvaluate):
        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent):
        (WebCore::isFeatureValidWithoutValue):
        * page/Page.h:
        (WebCore::Page::defaultAppearance const):
        (WebCore::Page::setDefaultAppearance):

2018-03-10  Daniel Bates  <dabates@apple.com>

        InlineTextBox should own shadow data
        https://bugs.webkit.org/show_bug.cgi?id=183359
        <rdar://problem/38171343>

        Reviewed by Darin Adler.

        Following r229147 we recompute the selection style, including any shadow data, whenever we
        paint the inline text box. Therefore, InlineTextBox needs to take ownership of the shadow
        data or it may be deallocated before it can be used.

        Covered by existing tests.

        * rendering/InlineTextBox.cpp: Changed data type of InlineTextBox::MarkedTextStyle::textShadow
        from const ShadowData* to std::optional<ShadowData>. Also removed explicitly deleted equality
        and inequality operators as they are unnecessary. Layout tests should catch if these are ever
        implemented and used when painting because the painted results will be wrong.
        (WebCore::InlineTextBox::computeStyleForUnmarkedMarkedText const): Clone ShadowData.
        (WebCore::InlineTextBox::resolveStyleForMarkedText): Simplified logic.
        (WebCore::InlineTextBox::paintMarkedTextForeground): Modified code now that MarkedTextStyle
        holds a std::optional<ShadowData>.
        (WebCore::InlineTextBox::paintMarkedTextDecoration): Ditto.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle): Changed the out parameter type from const ShadowData*
        to std::optional<ShadowData>& and modified code as needed.
        * rendering/TextPaintStyle.h:
        * rendering/style/ShadowData.cpp: Removed unncessary #include of header LayoutRect.h.
        This header will be included via ShadowData.h.
        (WebCore::ShadowData::clone): Convenience method that returns an std::optional to a
        cloned ShadowData object.
        * rendering/style/ShadowData.h:

2018-03-09  Zalan Bujtas  <zalan@apple.com>

        Turn off offset*/scroll* optimization for input elements with shadow content
        https://bugs.webkit.org/show_bug.cgi?id=182383
        <rdar://problem/37114190>

        Reviewed by Antti Koivisto.

        We normally ensure clean tree before calling offsetHeight/Width, scrollHeight/Width.
        In certain cases (see updateLayoutIfDimensionsOutOfDate() for details), it's okay to return
        the previously computed values even when some part of the tree is dirty.
        In case of shadow content, updateLayoutIfDimensionsOutOfDate() might return false (no need to layout)
        for the root, while true (needs layout) for the shadow content.
        This could confuse the caller (Element::scrollWidth/Height etc) and lead to incorrect result.

        Test: fast/forms/scrollheight-with-mutation-crash.html

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

2018-03-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] Copying a table from the Numbers app and pasting into iCloud Numbers fails
        https://bugs.webkit.org/show_bug.cgi?id=183485
        <rdar://problem/38041984>

        Reviewed by Ryosuke Niwa.

        After r222656, WebKit now treats raw image data on the pasteboard as files for the purposes of computing
        DataTransfer.files and DataTransfer.types. However, this is combined with existing policies that suppress
        DataTransfer.getData and DataTransfer.setData when the pasteboard contains files (generalized to copy/paste in
        r222688). This means we now don't allow web pages to access "text/plain" in the case where the user copies part
        of a table from the native Numbers app since Numbers additionally writes a snapshot of the table to the platform
        pasteboard.

        This restriction on getData/setData was intended to prevent web pages from extracting users' file paths when
        pasting or dropping, so it doesn't make sense to enforce this restriction even when there is only in-memory
        image data on the pasteboard. To fix this bug, we make Pasteboard::fileContentState() differentiate between
        cases where there are (real) files on the pasteboard, and cases where we've fallen back to treating image data
        as files.

        Rebaselined existing LayoutTests to match new behavior.
        Also covered by 4 new API tests:
            - PasteMixedContent.ImageDataAndPlainText
            - PasteMixedContent.ImageDataAndPlainTextAndURL
            - PasteMixedContent.ImageDataAndPlainTextAndURLAndHTML
            - UIPasteboardTests.DataTransferGetDataWhenPastingImageAndText

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::shouldSuppressGetAndSetDataToAvoidExposingFilePaths const):

        If custom pasteboard data is enabled, suppress getData and setData if and only if we might actually expose file
        paths (see Pasteboard::fileContentState).

        (WebCore::DataTransfer::types const):

        Only allow "text/html" or "text/uri-list" in the case where there are actual files in the pasteboard. If there's
        only image data, add all of the DOM-safe types back into the list of types.

        * platform/Pasteboard.h:
        * platform/StaticPasteboard.h:

        Add an enum type to represent the result of Pasteboard::fileContentState.
        -   NoFileOrImageData indicates that there was nothing on the pasteboard that could be considered a file
            from the point of view of the page.
        -   InMemoryImage indicates that there are no files on the pasteboard, but there is image data that we consider
            to be files, exposed via DataTransfer API.
        -   MayContainFilePaths indicates that there might be file paths on the pasteboard. This means that the source
            has either written file paths to the pasteboard (for example, through NSFilenamesPboardType) or the source
            has written image data along with a URL type of some sort that does not match one of the allowed URL schemes
            that are safe to expose (currently, these are http-family, data, or blob).

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

        Refactor to return one of the three enum types described above.

        (WebCore::Pasteboard::containsFiles): Deleted.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::fileContentState):
        (WebCore::Pasteboard::containsFiles): Deleted.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::fileContentState):
        (WebCore::Pasteboard::containsFiles): Deleted.
        * platform/wpe/PasteboardWPE.cpp:
        (WebCore::Pasteboard::fileContentState):
        (WebCore::Pasteboard::containsFiles): Deleted.

        Adjust for Pasteboard::fileContentState() tweaks.

2018-03-09  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit seems to be running spell checker even on non-editable content text
        https://bugs.webkit.org/show_bug.cgi?id=183456
        <rdar://problem/38076042>

        Reviewed by Joanmarie Diggs.

        Test: accessibility/mac/attributed-string/attributed-string-does-not-includes-misspelled-for-non-editable.html

        Only apply misspelled attributes if it's for editable text. It's not useful or performant to do this for static text.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetSpelling):

2018-03-09  Nan Wang  <n_wang@apple.com>

        AX: AOM: More accessibility events support
        https://bugs.webkit.org/show_bug.cgi?id=183023
        <rdar://problem/37764380>

        Reviewed by Chris Fleizach.

        The test is crashing when we call updateBackingStore when 
        the AXObjectCache object is gone. Added a check to fix that.

        Modified the test by using the right format of setTimeout and extended the delay.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):

2018-03-09  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed. Fix WinCairo build after r229497.

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

2018-03-09  Ross Kirsling  <ross.kirsling@sony.com>

        Clean up MIMETypeRegistry::mimeTypeAssociationMap for Curl
        https://bugs.webkit.org/show_bug.cgi?id=170529

        Reviewed by Alex Christensen.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):
        (WebCore::mimeTypeAssociationMap): Deleted.
        Create map with makeNeverDestroyed and a loop instead.

2018-03-09  Brian Burg  <bburg@apple.com>

        Web Inspector: there should only be one way for async backend commands to send failure
        https://bugs.webkit.org/show_bug.cgi?id=183524

        Reviewed by Timothy Hatcher.

        Remove some useless ErrorString arguments. Fix some bugs where we
        may never call the callback in an early exit situation.

        Covered by existing Inspector and protocol generator tests.

        * inspector/agents/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::executeSQL):
        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        (WebCore::getDocumentAndIDBFactoryFromFrameOrSendFailure):
        (WebCore::InspectorIndexedDBAgent::requestDatabaseNames):
        (WebCore::InspectorIndexedDBAgent::requestDatabase):
        (WebCore::InspectorIndexedDBAgent::requestData):
        (WebCore::InspectorIndexedDBAgent::clearObjectStore):
        (WebCore::assertDocument): Deleted.
        (WebCore::assertIDBFactory): Deleted.
        Modernize this code a little bit to share the document/idbFactory extraction code.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::loadResource):
        * inspector/agents/InspectorNetworkAgent.h:

2018-03-09  Youenn Fablet  <youenn@apple.com>

        Crash in ServiceWorkerContainer::ready
        https://bugs.webkit.org/show_bug.cgi?id=183380

        Reviewed by Chris Dumez.

        Not using 'this' through lambdas.
        Instead rely on the last lambda that is passed a ScriptExecutionContext& to get back 'this' which is a ServiceWorkerContainer.

        Should be covered by imported/w3c/web-platform-tests/service-workers/service-worker/register-default-scope.https.html no longer crashing.
        Although it should probably be LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/ready.https.html that should crash
        since this is the main test using ready.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ready):

2018-03-09  Youenn Fablet  <youenn@apple.com>

        RealtimeOutgoingAudioSource and RealtimeOutgoingVideoSource should be destroyed on the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183483
        <rdar://problem/38214152>

        Reviewed by Eric Carlson.

        When dereferencing from libwebrtc code path, schedule a call to deref on main thread.
        WebCore dereferencing is happening in the main thread so this guarantees destruction on the main thread.

        Covered by updated mock libwebrtc peer connection backend.
        We make mock senders to keep a reference to their source which are RealtimeOutgoingXXSource.
        We then make mock peer connection backend to free the mock senders in a background thread.

        * Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
        (WebCore::LibWebRTCPeerConnectionBackend::doStop):
        * platform/mediastream/RealtimeOutgoingAudioSource.cpp:
        (WebCore::RealtimeOutgoingAudioSource::stop):
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::stop):
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * testing/MockLibWebRTCPeerConnection.cpp:
        (WebCore::ThreadKeeper::create):
        (WebCore::ThreadKeeper::setThread):
        (WebCore::MockLibWebRTCPeerConnection::~MockLibWebRTCPeerConnection):
        * testing/MockLibWebRTCPeerConnection.h:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Unconditionalize more methods in VideoFullscreenInterface (and related classes)
        https://bugs.webkit.org/show_bug.cgi?id=183501

        Reviewed by Eric Carlson.

        No need for these methods to be PLATFORM(MAC) only.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::ensureControlsManager):
        * platform/ios/VideoFullscreenInterfaceAVKit.h:
        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::isPlayingVideoInEnhancedFullscreen const):
        * platform/mac/VideoFullscreenInterfaceMac.h:

2018-03-09  Youenn Fablet  <youenn@apple.com>

        ServiceWorker should respect IDB and DOMCache partitioning
        https://bugs.webkit.org/show_bug.cgi?id=183496

        Reviewed by Brady Eidson.

        Test: http/wpt/service-workers/third-party-registration.html

        Set the correct top origin of service worker ScriptExecutionContext.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):

2018-03-09  Youenn Fablet  <youenn@apple.com>

        Cannot change audio input source device
        https://bugs.webkit.org/show_bug.cgi?id=175975
        <rdar://problem/34073589>

        Reviewed by Eric Carlson.

        Covered by manually testing https://webrtc.github.io/samples/src/content/devices/input-output/ with a USB web cam.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::setCaptureDeviceID):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Add new CSS env constants for use with fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=183498

        Reviewed by Dean Jackson.

        Tests: fullscreen/fullscreen-auto-hide-delay.html
               fullscreen/fullscreen-inset-top.html

        * dom/ConstantPropertyMap.cpp:
        (WebCore::ConstantPropertyMap::nameForProperty const):
        (WebCore::variableDataForPositiveDuration):
        (WebCore::ConstantPropertyMap::setFullscreenInsetTop):
        (WebCore::ConstantPropertyMap::setFullscreenAutoHideDelay):
        * dom/ConstantPropertyMap.h:
        * page/Page.cpp:
        (WebCore::Page::setFullscreenInsetTop):
        (WebCore::Page::setFullscreenAutoHideDelay):
        * page/Page.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setFullscreenInsetTop):
        (WebCore::Internals::setFullscreenAutoHideDelay):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-03-09  Zalan Bujtas  <zalan@apple.com>

        RenderTreeBuilder::splitAnonymousBoxesAroundChild should take multicolumn spanners into account.
        https://bugs.webkit.org/show_bug.cgi?id=183493
        <rdar://problem/38030461>

        Reviewed by Antti Koivisto.

        Multicolumn spanners are taken out of their original position and placed next
        to a RenderMultiColumnSet. splitAnonymousBoxesAroundChild needs to know the original parent (in the render tree context).

        Test: fast/multicol/adjust-beforeChild-for-spanner-crash.html

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::attachIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::adjustBeforeChildForMultiColumnSpannerIfNeeded):
        * rendering/updating/RenderTreeBuilderMultiColumn.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveChildrenInternal):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::attach):

2018-03-09  Jer Noble  <jer.noble@apple.com>

        Add isPictureInPictureActive messaging across WebKit process boundary
        https://bugs.webkit.org/show_bug.cgi?id=183499

        Reviewed by Eric Carlson.

        * platform/cocoa/PlaybackSessionModel.h:
        (WebCore::PlaybackSessionModelClient::pictureInPictureActiveChanged):
        * platform/cocoa/PlaybackSessionModelMediaElement.h:
        * platform/cocoa/PlaybackSessionModelMediaElement.mm:
        (WebCore::PlaybackSessionModelMediaElement::updateForEventName):
        (WebCore::PlaybackSessionModelMediaElement::isPictureInPictureActive const):
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (VideoFullscreenControllerContext::isPictureInPictureActive const):

2018-03-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement connection limit.
        https://bugs.webkit.org/show_bug.cgi?id=183016

        Implement both connection limit per host and total
        connection limit on curl network layer.

        Reviewed by Youenn Fablet.

        No new tests because there's no behavior change.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::EnvironmentVariableReader::sscanTemplate<signed>):
        (WebCore::CurlContext::CurlContext):
        (WebCore::CurlMultiHandle::setMaxConnects):
        (WebCore::CurlMultiHandle::setMaxTotalConnections):
        (WebCore::CurlMultiHandle::setMaxHostConnections):
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::scheduler):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::startWithJobManager):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        (WebCore::CurlRequest::pausedStatusChanged):
        * platform/network/curl/CurlRequestScheduler.cpp:
        (WebCore::CurlRequestScheduler::CurlRequestScheduler):
        (WebCore::CurlRequestScheduler::workerThread):
        (WebCore::CurlRequestScheduler::singleton): Deleted.
        * platform/network/curl/CurlRequestScheduler.h:

2018-03-09  Jer Noble  <jer.noble@apple.com>

        webkitfullscreenchange event not fired at the same time as :-webkit-full-screen pseudo selector changes; causes glitchiness
        https://bugs.webkit.org/show_bug.cgi?id=183383

        Reviewed by Eric Carlson.

        Fire the webkitfullscreenchange event at the same time as the pseudo class selector changes, during the handling
        of webkitDidEnterFullScreenForElement. For WebKit2 clients, this is guaranteed to be asynchronous, since the
        calling method originates in the UIProcess. For WebKit1 clients (and WKTR and DRT), there's the possibility that
        webkitWillEnterFullScreenForElement will be called synchronously from within
        Document::requestFullScreenForElement(), so break that synchronousness by starting the
        ChromeClient::enterFullScreenForElement(...) process in a async task.

        Previously, the firing of the fullscreenchange event was done through a zero-length timer. Use a
        GenericTaskQueue instead.

        A number of layout tests depend on the behavior that the element will be in fullscreen when the 'playing' event
        fires. This was true for DRT (but not WKTR), since its fullscreen implementations were deliberately synchronous, but
        won't necessarily be true for all ports. Fix this in a subsequent patch.

        * dom/Document.cpp:
        (WebCore::Document::requestFullScreenForElement):
        (WebCore::Document::webkitExitFullscreen):
        (WebCore::Document::webkitWillEnterFullScreenForElement):
        (WebCore::Document::webkitDidEnterFullScreenForElement):
        (WebCore::Document::webkitDidExitFullScreenForElement):
        (WebCore::Document::dispatchFullScreenChangeEvents):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::setPlaying):

2018-03-09  Zan Dobersek  <zdobersek@igalia.com>

        [Nicosia] Add threaded PaintingEngine implementation
        https://bugs.webkit.org/show_bug.cgi?id=183511

        Reviewed by Carlos Garcia Campos.

        Add Nicosia::PaintingEngineThreaded, class that internally uses a thread
        pool in which painting tasks are executed.

        Implementation for now defaults to using GLib's GThreadPool, defaulting
        to 4 threads that are exclusive to this pool. These parameters should be
        fine-tuned in the future, or even made configurable, but are a solid
        basis for testing.

        In PaintingEngineThreaded::paint(), PaintingContext implementation is
        used to record all the operations, and the gathered Vector is combined
        with the Buffer object and dispatched into the thread pool. In the
        thread function, the provided buffer and painting operations are run
        through the PaintingContext implementation, replaying all the operations
        on a painting context that draws into the given buffer.

        The recorded operation objects implement the PaintingOperation interface
        contain all the data necessary to replay a given operation. They can be
        executed against a PaintingOperationReplay object, as is the case during
        PaintingContext::replay(), or they can be dumped into a TextStream
        object for debugging purposes.

        PaintingContext now also provides the record() and replay() static
        functions. PaintingContext objects now differ per purpose, which can be
        either for painting or for recording. paint() and replay() use a
        for-painting PaintingContext, and record() uses a for-recording one.
        The for-painting PaintingContext receives a Buffer object, i.e. a memory
        area on which it can draw, while the for-recording PaintingContext uses
        the passed-in PaintingOperations Vector that should store all the
        recorded operations.

        The current Cairo implementation of PaintingContext is moved into
        PaintingContextCairo::ForPainting. PaintingContextCairo::ForRecording is
        added but is currently no-op until a Cairo-specific GraphicsContextImpl
        with recording capabilities is added, allowing any call on the
        GraphicsContext object used in PaintingContext::record() to be recorded
        for later replay. PaintingOperationReplayCairo, inheriting from
        PaintingOperationReplay, will be used for replay purposes, providing
        only reference to the PlatformContextCairo object that is constructed in
        PaintingContextCairo::ForPainting.

        The Cairo-specific GraphicsContextImpl implementation will be added in
        a separate patch. After that, PaintingEngine::create() will be modified
        so that the Nicosia::PaintingEngineThreaded implementation can be used
        for testing purposes, probably by setting an environment variable.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/NicosiaPaintingContext.cpp:
        (Nicosia::PaintingContext::createForPainting):
        (Nicosia::PaintingContext::createForRecording):
        (Nicosia::PaintingContext::create): Deleted.
        * platform/graphics/nicosia/NicosiaPaintingContext.h:
        (Nicosia::PaintingContext::paint):
        (Nicosia::PaintingContext::record):
        (Nicosia::PaintingContext::replay):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.cpp: Added.
        (Nicosia::s_threadFunc):
        (Nicosia::paintLayer):
        (Nicosia::PaintingEngineThreaded::PaintingEngineThreaded):
        (Nicosia::PaintingEngineThreaded::~PaintingEngineThreaded):
        (Nicosia::PaintingEngineThreaded::paint):
        * platform/graphics/nicosia/NicosiaPaintingEngineThreaded.h: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaPaintingContext.cpp.
        * platform/graphics/nicosia/NicosiaPaintingOperation.h: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaPaintingContext.cpp.
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::ForPainting::ForPainting):
        (Nicosia::PaintingContextCairo::ForPainting::~ForPainting):
        (Nicosia::PaintingContextCairo::ForPainting::graphicsContext):
        (Nicosia::PaintingContextCairo::ForPainting::replay):
        (Nicosia::PaintingContextCairo::ForRecording::ForRecording):
        (Nicosia::PaintingContextCairo::ForRecording::graphicsContext):
        (Nicosia::PaintingContextCairo::ForRecording::replay):
        (Nicosia::PaintingContextCairo::PaintingContextCairo): Deleted.
        (Nicosia::PaintingContextCairo::~PaintingContextCairo): Deleted.
        (Nicosia::PaintingContextCairo::graphicsContext): Deleted.
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.h:
        * platform/graphics/nicosia/cairo/NicosiaPaintingOperationReplayCairo.h: Copied from Source/WebCore/platform/graphics/nicosia/NicosiaPaintingContext.cpp.
        (Nicosia::PaintingOperationReplayCairo::PaintingOperationReplayCairo):

2018-03-09  Zan Dobersek  <zdobersek@igalia.com>

        Remove some unused cruft in TextureMapperLayer.

        The ScrollingClient class is not used anymore since r229318.
        findScrollableContentsLayerAt() is similarly unused, but also lacking
        an actual definition. ContentsLayerCount enum can also be purged.

        Rubber-stamped by Carlos Garcia Campos.

        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-08  Zan Dobersek  <zdobersek@igalia.com>

        Add basic synchronization capability to Nicosia::Buffer
        https://bugs.webkit.org/show_bug.cgi?id=183500

        Reviewed by Carlos Garcia Campos.

        Have Nicosia::Buffer track a painting state, and allow that state to be
        modified and accessed from different threads. The PaintingState enum
        value is protected by a Lock object, and can be modified via the
        beginPainting() and completePainting() methods. Additionally, the
        waitUntilPaintingComplete() method allows the caller to wait until the
        painting is complete for the given Nicosia::Buffer object.

        This added state doesn't affect a Nicosia::Buffer object internally, and
        doesn't have any effect on  existing usages of Nicosia::Buffer (which
        are not multi-threaded).

        * platform/graphics/nicosia/NicosiaBuffer.cpp:
        (Nicosia::Buffer::beginPainting):
        (Nicosia::Buffer::completePainting):
        (Nicosia::Buffer::waitUntilPaintingComplete):
        * platform/graphics/nicosia/NicosiaBuffer.h:

2018-03-08  Zan Dobersek  <zdobersek@igalia.com>

        Move NicosiaPaintingContextCairo files under Cairo-specific directory
        https://bugs.webkit.org/show_bug.cgi?id=183497

        Reviewed by Carlos Garcia Campos.

        Pack Cairo-specific files in the Nicosia subsystem under cairo/.

        * platform/TextureMapper.cmake:
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.cpp: Renamed from Source/WebCore/platform/graphics/nicosia/NicosiaPaintingContextCairo.cpp.
        * platform/graphics/nicosia/cairo/NicosiaPaintingContextCairo.h: Renamed from Source/WebCore/platform/graphics/nicosia/NicosiaPaintingContextCairo.h.

2018-03-08  Nan Wang  <n_wang@apple.com>

        AX: AOM: More accessibility events support
        https://bugs.webkit.org/show_bug.cgi?id=183023
        <rdar://problem/37764380>

        Reviewed by Chris Fleizach.

        Fixed the crash that we shouldn't dispatch the accessibility events if the
        event path is empty.

        Also added a check to not dispatch events if the runtime flag is not enabled.

        Test: accessibility/mac/AOM-events-webarea-crash.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::shouldDispatchAccessibilityEvent const):
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent const):
        * accessibility/AccessibilityObject.h:

2018-03-08  Megan Gardner  <megan_gardner@apple.com>

        Allow WebViews to disable system appearance
        https://bugs.webkit.org/show_bug.cgi?id=183418
        <rdar://problem/36975642>

        Reviewed by Tim Horton.

        Not currently testable, tests will be added in a later patch.

        Allow webviews to choose whether or not to follow the default system appearance.

        * css/StyleColor.cpp:
        (WebCore::StyleColor::colorFromKeyword):
        * css/StyleColor.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::colorFromPrimitiveValue const):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseSystemColor):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserMode.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::setStrokeColor):
        (WebCore::CanvasRenderingContext2DBase::setFillColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        * html/canvas/CanvasStyle.h:
        * page/Page.h:
        (WebCore::Page::useSystemAppearance const):
        (WebCore::Page::setUseSystemAppearance):
        * platform/Theme.cpp:
        (WebCore::Theme::paint):
        * platform/Theme.h:
        * platform/mac/LocalDefaultSystemAppearance.h:
        * platform/mac/LocalDefaultSystemAppearance.mm:
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance):
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView initWithUseSystemAppearance:]):
        (WebCore::paintToggleButton):
        (WebCore::paintButton):
        (WebCore::ThemeMac::ensuredView):
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        (WebCore::ThemeMac::paint):
        (-[WebCoreThemeView init]): Deleted.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::systemColor const):
        (WebCore::RenderTheme::focusRingColor):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::platformFocusRingColor const):
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::systemColor const):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::documentViewFor const):
        (WebCore::RenderThemeMac::platformFocusRingColor const):
        (WebCore::RenderThemeMac::systemColor const):
        (WebCore::RenderThemeMac::paintCellAndSetFocusedElementNeedsRepaintIfNecessary):
        (WebCore::RenderThemeMac::paintSliderThumb):
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextPaintStyle):

2018-03-08  Megan Gardner  <megan_gardner@apple.com>

        Ensure default appearance for selection form control
        https://bugs.webkit.org/show_bug.cgi?id=183482
        <rdar://problem/38274894>

        Reviewed by Tim Horton.
  
        The appearance for selection form controls was not set to default.

        Not currently testable, will add tests in a later patch.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const):

2018-03-08  Per Arne Vollan  <pvollan@apple.com>

        [Win] Compile error: pal/ExportMacros.h not found.
        https://bugs.webkit.org/show_bug.cgi?id=183467

        Reviewed by Brent Fulgham.

        PAL header files are no longer located under the WebCore folder in forwarding headers. An additional
        build step is required to copy the PAL header files to the internal include folder.

        No new tests, no change in functionality. 

        * PlatformWin.cmake:
        * WebCore.vcxproj/WebCore.proj:

2018-03-08  Megan Gardner  <megan_gardner@apple.com>

        Ensure system appearance is default for legacy webkit
        https://bugs.webkit.org/show_bug.cgi?id=183473
        <rdar://problem/38210306>

        Reviewed by Tim Horton.

        Need to set the appearance on the window for legacy webkit due to differences in drawing.

        Not currently testable, will add tests in a later patch.

        * platform/mac/ThemeMac.mm:
        (WebCore::paintButton):

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

        libwebrtc update broke internal builds
        https://bugs.webkit.org/show_bug.cgi?id=183454

        Reviewed by Eric Carlson.

        No change of behavior.
        Fixed header search paths.
        Removed deleted file from XCode project as an additional clean-up.

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:

2018-03-08  Per Arne Vollan  <pvollan@apple.com>

        NSAnimation is not working in the WebContent process when WindowServer access is blocked.
        https://bugs.webkit.org/show_bug.cgi?id=183291

        Reviewed by Dean Jackson.

        The animation can be implemented by using an NSTimer instead. Use the existing Bezier timing
        function to create a smooth animation.

        No new tests. This code is used to fade scrollbars in and out by animating the alpha value.
        This scrollbar setting is not the default in macOS, which makes it non trivial to create
        layout tests for this.

        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPartAnimation initWithScrollbar:featureToAnimate:animateFrom:animateTo:duration:]):
        (-[WebScrollbarPartAnimation startAnimation]):
        (-[WebScrollbarPartAnimation setCurrentProgress:setCurrentProgress:]):
        (-[WebScrollbarPartAnimation invalidate]):
        (-[WebScrollbarPartAnimation setDuration:]):
        (-[WebScrollbarPartAnimation stopAnimation]):
        (-[WebScrollbarPartAnimation setCurrentProgress:]): Deleted.

2018-03-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Templatize SVGAnimatedType
        https://bugs.webkit.org/show_bug.cgi?id=183017

        Reviewed by Dean Jackson.

        This is a work toward https://bugs.webkit.org/show_bug.cgi?id=168586. The
        goal to have SVGAnimatedType be type independent. The appropriate method
        of this template will be implicitly instantiated based to the type of the
        animated attribute(s).

        * Sources.txt: Delete SVGAnimatedType.cpp since its function became template
        functions or short enough to be inline functions.
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedAngleAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        Use the template functions SVGAnimatedType::create<>() and SVGAnimatedType::as<>().

        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString):
        (WebCore::SVGAnimatedBooleanAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedBooleanAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedBooleanAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString):
        (WebCore::SVGAnimatedColorAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString):
        (WebCore::SVGAnimatedEnumerationAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedEnumerationAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedEnumerationAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromString):
        (WebCore::SVGAnimatedLengthAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString):
        (WebCore::SVGAnimatedLengthListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedLengthListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedLengthListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedLengthListAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberListAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPathAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString):
        (WebCore::SVGAnimatedPointListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPointListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPointListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedPointListAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::constructFromString):
        (WebCore::SVGAnimatedRectAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedRectAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedRectAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedRectAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::constructFromString):
        (WebCore::SVGAnimatedStringAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedStringAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedStringAnimator::calculateAnimatedValue):
        Ditto.

        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        (WebCore::SVGAnimatedTransformListAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedTransformListAnimator::resetAnimValToBaseVal):
        (WebCore::SVGAnimatedTransformListAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedTransformListAnimator::calculateAnimatedValue):
        (WebCore::SVGAnimatedTransformListAnimator::calculateDistance):
        Ditto.

        * svg/SVGAnimatedType.cpp: Removed.
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::create):
        (WebCore::SVGAnimatedType::SVGAnimatedType):
        (WebCore::SVGAnimatedType::~SVGAnimatedType):
        (WebCore::SVGAnimatedType::as const):
        (WebCore::SVGAnimatedType::as):
        (WebCore::SVGAnimatedType::type const):
        (WebCore::SVGAnimatedType::valueAsString const):
        (WebCore::SVGAnimatedType::setValueAsString):
        (WebCore::SVGAnimatedType::supportsAnimVal):
        (WebCore::SVGAnimatedType::angleAndEnumeration const): Deleted.
        (WebCore::SVGAnimatedType::boolean const): Deleted.
        (WebCore::SVGAnimatedType::color const): Deleted.
        (WebCore::SVGAnimatedType::enumeration const): Deleted.
        (WebCore::SVGAnimatedType::integer const): Deleted.
        (WebCore::SVGAnimatedType::integerOptionalInteger const): Deleted.
        (WebCore::SVGAnimatedType::length const): Deleted.
        (WebCore::SVGAnimatedType::lengthList const): Deleted.
        (WebCore::SVGAnimatedType::number const): Deleted.
        (WebCore::SVGAnimatedType::numberList const): Deleted.
        (WebCore::SVGAnimatedType::numberOptionalNumber const): Deleted.
        (WebCore::SVGAnimatedType::path const): Deleted.
        (WebCore::SVGAnimatedType::pointList const): Deleted.
        (WebCore::SVGAnimatedType::preserveAspectRatio const): Deleted.
        (WebCore::SVGAnimatedType::rect const): Deleted.
        (WebCore::SVGAnimatedType::string const): Deleted.
        (WebCore::SVGAnimatedType::transformList const): Deleted.
        (WebCore::SVGAnimatedType::angleAndEnumeration): Deleted.
        (WebCore::SVGAnimatedType::boolean): Deleted.
        (WebCore::SVGAnimatedType::color): Deleted.
        (WebCore::SVGAnimatedType::enumeration): Deleted.
        (WebCore::SVGAnimatedType::integer): Deleted.
        (WebCore::SVGAnimatedType::integerOptionalInteger): Deleted.
        (WebCore::SVGAnimatedType::length): Deleted.
        (WebCore::SVGAnimatedType::lengthList): Deleted.
        (WebCore::SVGAnimatedType::number): Deleted.
        (WebCore::SVGAnimatedType::numberList): Deleted.
        (WebCore::SVGAnimatedType::numberOptionalNumber): Deleted.
        (WebCore::SVGAnimatedType::path): Deleted.
        (WebCore::SVGAnimatedType::pointList): Deleted.
        (WebCore::SVGAnimatedType::preserveAspectRatio): Deleted.
        (WebCore::SVGAnimatedType::rect): Deleted.
        (WebCore::SVGAnimatedType::string): Deleted.
        (WebCore::SVGAnimatedType::transformList): Deleted.
        Replace the union by a Variant. Replace all the type specific functions
        by the template functions create() and as(). Use WTF::visit to get the
        value stored in the variant. Use the SVGPropertyTraits to perform the
        required operation.

        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValue):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForType):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForType):
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::stopAnimValAnimationForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValDidChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::animValWillChangeForTypes):
        (WebCore::SVGAnimatedTypeAnimator::executeAction):
        Rename the parameters and the local variables to match their types. Use
        the SVGAnimatedType template functions create() and as().

        * svg/SVGLengthValue.h:
        (WebCore::SVGPropertyTraits<SVGLengthValue>::parse): This was moved from
        SVGAnimatedType::setValueAsString()
        (WebCore::SVGPropertyTraits<SVGLengthValue>::toString): This was moved from
        SVGAnimatedType::valueAsString().

        * svg/SVGMarkerTypes.h: Add placeholders for parse() and toString() so
        SVGAnimatedType::valueAsString() and setValueAsString() can compile for 
        all types.

        * svg/SVGNumberListValues.h:
        (WebCore::SVGPropertyTraits<SVGNumberListValues>::parse):
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::parse):
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::toString):
        * svg/SVGPointListValues.h:
        (WebCore::SVGPropertyTraits<SVGPointListValues>::parse):
        (WebCore::SVGPropertyTraits<SVGPointListValues>::toString):
        * svg/SVGPreserveAspectRatioValue.h:
        (WebCore::SVGPropertyTraits<SVGPreserveAspectRatioValue>::fromString):
        (WebCore::SVGPropertyTraits<SVGPreserveAspectRatioValue>::parse):
        (WebCore::SVGPropertyTraits<SVGPreserveAspectRatioValue>::toString):
        Ditto.

        * svg/SVGTransformListValues.h:
        (WebCore::SVGPropertyTraits<SVGTransformListValues>::parse):
        Ditto.

        * svg/SVGValue.h: Added. SVGValueVariant is the replacement of the union
        SVGAnimatedType::DataUnion.

        * svg/properties/SVGPropertyInfo.h:
        Add a minimum and maximum AnimatedPropertyType so, SVGAnimatedType::type()
        can assert that the index of the variant is in the range of this enum.

        * svg/properties/SVGPropertyTraits.h:
        (WebCore::SVGPropertyTraits<bool>::parse):
        (WebCore::SVGPropertyTraits<unsigned>::parse):
        (WebCore::SVGPropertyTraits<int>::parse):
        Ditto.

2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC][WebCore] Extend jsDynamicCast for WebCore types in WebCore and remove jsDynamicDowncast
        https://bugs.webkit.org/show_bug.cgi?id=183449

        Reviewed by Mark Lam.

        This patch removes jsDynamicDowncast. Our JSC::jsDynamicCast can have a way to inject a fast
        path that is similar to jsDynamicDowncast. WebCore can leverage this functionality to add
        a fast path for WebCore's extended JS object types (JSEvent, JSElement, JSNode, and JSDocument).

        No behavior change.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/CommonVM.cpp:
        (WebCore::lexicalFrameFromCommonVM):
        * bindings/js/JSDOMConvertBufferSource.h:
        (WebCore::toPossiblySharedArrayBufferView):
        * bindings/js/JSDOMConvertPromise.h:
        (WebCore::Converter<IDLPromise<T>>::convert):
        * bindings/js/JSDOMExceptionHandling.cpp:
        (WebCore::reportException):
        (WebCore::retrieveErrorMessage):
        * bindings/js/JSDOMIterator.h:
        (WebCore::IteratorTraits>::next):
        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::JSDOMWindowProxy::toWrapped):
        * bindings/js/JSDOMWrapperCache.h:
        * bindings/js/JSDocumentCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSDocument>::inherits):
        (WebCore::jsDocumentCast): Deleted.
        * bindings/js/JSDynamicDowncast.h: Removed.
        * bindings/js/JSElementCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSElement>::inherits):
        (WebCore::jsElementCast): Deleted.
        * bindings/js/JSEventCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSEvent>::inherits):
        (WebCore::jsEventCast): Deleted.
        * bindings/js/JSEventTargetCustom.cpp:
        (WebCore::jsEventTargetCast):
        * bindings/js/JSNodeCustom.h:
        (JSC::JSCastingHelpers::InheritsTraits<WebCore::JSNode>::inherits):
        (WebCore::jsNodeCast): Deleted.
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSReadableStreamSourceCustom.cpp:
        (WebCore::JSReadableStreamSource::start):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::toJSDedicatedWorkerGlobalScope):
        (WebCore::toJSWorkerGlobalScope):
        (WebCore::toJSServiceWorkerGlobalScope):
        * bindings/js/ReadableStream.cpp:
        (WebCore::ReadableStream::create):
        (WebCore::ReadableStream::isDisturbed):
        * bindings/js/ReadableStream.h:
        (WebCore::JSReadableStreamWrapperConverter::toWrapped):
        * bindings/js/ScriptModuleLoader.cpp:
        (WebCore::ScriptModuleLoader::evaluate):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::serialize):
        * bindings/js/StructuredClone.cpp:
        (WebCore::structuredCloneArrayBufferView):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetCastingHelperForThisObject):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::jsInterfaceNameConstructor):
        (WebCore::setJSInterfaceNameConstructor):
        (WebCore::JSInterfaceName::toWrapped):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::IDLAttribute<JSMapLike>::cast):
        (WebCore::IDLOperation<JSMapLike>::cast):
        (WebCore::jsMapLikeConstructor):
        (WebCore::setJSMapLikeConstructor):
        (WebCore::JSMapLike::toWrapped):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::IDLAttribute<JSReadOnlyMapLike>::cast):
        (WebCore::IDLOperation<JSReadOnlyMapLike>::cast):
        (WebCore::jsReadOnlyMapLikeConstructor):
        (WebCore::setJSReadOnlyMapLikeConstructor):
        (WebCore::JSReadOnlyMapLike::toWrapped):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::IDLAttribute<JSTestActiveDOMObject>::cast):
        (WebCore::IDLOperation<JSTestActiveDOMObject>::cast):
        (WebCore::jsTestActiveDOMObjectConstructor):
        (WebCore::setJSTestActiveDOMObjectConstructor):
        (WebCore::JSTestActiveDOMObject::toWrapped):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::IDLAttribute<JSTestCEReactions>::cast):
        (WebCore::IDLOperation<JSTestCEReactions>::cast):
        (WebCore::jsTestCEReactionsConstructor):
        (WebCore::setJSTestCEReactionsConstructor):
        (WebCore::JSTestCEReactions::toWrapped):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::IDLAttribute<JSTestCEReactionsStringifier>::cast):
        (WebCore::IDLOperation<JSTestCEReactionsStringifier>::cast):
        (WebCore::jsTestCEReactionsStringifierConstructor):
        (WebCore::setJSTestCEReactionsStringifierConstructor):
        (WebCore::JSTestCEReactionsStringifier::toWrapped):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::IDLAttribute<JSTestCallTracer>::cast):
        (WebCore::IDLOperation<JSTestCallTracer>::cast):
        (WebCore::jsTestCallTracerConstructor):
        (WebCore::setJSTestCallTracerConstructor):
        (WebCore::JSTestCallTracer::toWrapped):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::jsTestClassWithJSBuiltinConstructorConstructor):
        (WebCore::setJSTestClassWithJSBuiltinConstructorConstructor):
        (WebCore::JSTestClassWithJSBuiltinConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::setJSTestCustomConstructorWithNoInterfaceObjectConstructor):
        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::toWrapped):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        (WebCore::IDLAttribute<JSTestDOMJIT>::cast):
        (WebCore::IDLOperation<JSTestDOMJIT>::cast):
        (WebCore::jsTestDOMJITConstructor):
        (WebCore::setJSTestDOMJITConstructor):
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::IDLAttribute<JSTestEnabledBySetting>::cast):
        (WebCore::IDLOperation<JSTestEnabledBySetting>::cast):
        (WebCore::jsTestEnabledBySettingConstructor):
        (WebCore::setJSTestEnabledBySettingConstructor):
        (WebCore::JSTestEnabledBySetting::toWrapped):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::IDLAttribute<JSTestEventConstructor>::cast):
        (WebCore::jsTestEventConstructorConstructor):
        (WebCore::setJSTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::IDLOperation<JSTestEventTarget>::cast):
        (WebCore::jsTestEventTargetConstructor):
        (WebCore::setJSTestEventTargetConstructor):
        (WebCore::JSTestEventTarget::toWrapped):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::IDLAttribute<JSTestException>::cast):
        (WebCore::jsTestExceptionConstructor):
        (WebCore::setJSTestExceptionConstructor):
        (WebCore::JSTestException::toWrapped):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::IDLAttribute<JSTestGenerateIsReachable>::cast):
        (WebCore::jsTestGenerateIsReachableConstructor):
        (WebCore::setJSTestGenerateIsReachableConstructor):
        (WebCore::JSTestGenerateIsReachable::toWrapped):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::IDLAttribute<JSTestGlobalObject>::cast):
        (WebCore::IDLOperation<JSTestGlobalObject>::cast):
        (WebCore::jsTestGlobalObjectConstructor):
        (WebCore::setJSTestGlobalObjectConstructor):
        (WebCore::JSTestGlobalObject::toWrapped):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::jsTestIndexedSetterNoIdentifierConstructor):
        (WebCore::setJSTestIndexedSetterNoIdentifierConstructor):
        (WebCore::JSTestIndexedSetterNoIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::jsTestIndexedSetterThrowingExceptionConstructor):
        (WebCore::setJSTestIndexedSetterThrowingExceptionConstructor):
        (WebCore::JSTestIndexedSetterThrowingException::toWrapped):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::IDLOperation<JSTestIndexedSetterWithIdentifier>::cast):
        (WebCore::jsTestIndexedSetterWithIdentifierConstructor):
        (WebCore::setJSTestIndexedSetterWithIdentifierConstructor):
        (WebCore::JSTestIndexedSetterWithIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::IDLAttribute<JSTestInterface>::cast):
        (WebCore::IDLOperation<JSTestInterface>::cast):
        (WebCore::jsTestInterfaceConstructor):
        (WebCore::setJSTestInterfaceConstructor):
        (WebCore::JSTestInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        (WebCore::IDLAttribute<JSTestInterfaceLeadingUnderscore>::cast):
        (WebCore::jsTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
        (WebCore::JSTestInterfaceLeadingUnderscore::toWrapped):
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::IDLOperation<JSTestIterable>::cast):
        (WebCore::jsTestIterableConstructor):
        (WebCore::setJSTestIterableConstructor):
        (WebCore::JSTestIterable::toWrapped):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        (WebCore::IDLAttribute<JSTestJSBuiltinConstructor>::cast):
        (WebCore::IDLOperation<JSTestJSBuiltinConstructor>::cast):
        (WebCore::jsTestJSBuiltinConstructorConstructor):
        (WebCore::setJSTestJSBuiltinConstructorConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::IDLOperation<JSTestMediaQueryListListener>::cast):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        (WebCore::setJSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::jsTestNamedAndIndexedSetterNoIdentifierConstructor):
        (WebCore::setJSTestNamedAndIndexedSetterNoIdentifierConstructor):
        (WebCore::JSTestNamedAndIndexedSetterNoIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::jsTestNamedAndIndexedSetterThrowingExceptionConstructor):
        (WebCore::setJSTestNamedAndIndexedSetterThrowingExceptionConstructor):
        (WebCore::JSTestNamedAndIndexedSetterThrowingException::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::IDLOperation<JSTestNamedAndIndexedSetterWithIdentifier>::cast):
        (WebCore::jsTestNamedAndIndexedSetterWithIdentifierConstructor):
        (WebCore::setJSTestNamedAndIndexedSetterWithIdentifierConstructor):
        (WebCore::JSTestNamedAndIndexedSetterWithIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        (WebCore::setJSTestNamedConstructorConstructor):
        (WebCore::JSTestNamedConstructor::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::jsTestNamedDeleterNoIdentifierConstructor):
        (WebCore::setJSTestNamedDeleterNoIdentifierConstructor):
        (WebCore::JSTestNamedDeleterNoIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::jsTestNamedDeleterThrowingExceptionConstructor):
        (WebCore::setJSTestNamedDeleterThrowingExceptionConstructor):
        (WebCore::JSTestNamedDeleterThrowingException::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::IDLOperation<JSTestNamedDeleterWithIdentifier>::cast):
        (WebCore::jsTestNamedDeleterWithIdentifierConstructor):
        (WebCore::setJSTestNamedDeleterWithIdentifierConstructor):
        (WebCore::JSTestNamedDeleterWithIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::jsTestNamedDeleterWithIndexedGetterConstructor):
        (WebCore::setJSTestNamedDeleterWithIndexedGetterConstructor):
        (WebCore::JSTestNamedDeleterWithIndexedGetter::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::jsTestNamedGetterCallWithConstructor):
        (WebCore::setJSTestNamedGetterCallWithConstructor):
        (WebCore::JSTestNamedGetterCallWith::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::jsTestNamedGetterNoIdentifierConstructor):
        (WebCore::setJSTestNamedGetterNoIdentifierConstructor):
        (WebCore::JSTestNamedGetterNoIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::IDLOperation<JSTestNamedGetterWithIdentifier>::cast):
        (WebCore::jsTestNamedGetterWithIdentifierConstructor):
        (WebCore::setJSTestNamedGetterWithIdentifierConstructor):
        (WebCore::JSTestNamedGetterWithIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::jsTestNamedSetterNoIdentifierConstructor):
        (WebCore::setJSTestNamedSetterNoIdentifierConstructor):
        (WebCore::JSTestNamedSetterNoIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::jsTestNamedSetterThrowingExceptionConstructor):
        (WebCore::setJSTestNamedSetterThrowingExceptionConstructor):
        (WebCore::JSTestNamedSetterThrowingException::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::IDLOperation<JSTestNamedSetterWithIdentifier>::cast):
        (WebCore::jsTestNamedSetterWithIdentifierConstructor):
        (WebCore::setJSTestNamedSetterWithIdentifierConstructor):
        (WebCore::JSTestNamedSetterWithIdentifier::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::IDLOperation<JSTestNamedSetterWithIndexedGetter>::cast):
        (WebCore::jsTestNamedSetterWithIndexedGetterConstructor):
        (WebCore::setJSTestNamedSetterWithIndexedGetterConstructor):
        (WebCore::JSTestNamedSetterWithIndexedGetter::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::IDLOperation<JSTestNamedSetterWithIndexedGetterAndSetter>::cast):
        (WebCore::jsTestNamedSetterWithIndexedGetterAndSetterConstructor):
        (WebCore::setJSTestNamedSetterWithIndexedGetterAndSetterConstructor):
        (WebCore::JSTestNamedSetterWithIndexedGetterAndSetter::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::jsTestNamedSetterWithOverrideBuiltinsConstructor):
        (WebCore::setJSTestNamedSetterWithOverrideBuiltinsConstructor):
        (WebCore::JSTestNamedSetterWithOverrideBuiltins::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::IDLAttribute<JSTestNamedSetterWithUnforgableProperties>::cast):
        (WebCore::IDLOperation<JSTestNamedSetterWithUnforgableProperties>::cast):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesConstructor):
        (WebCore::setJSTestNamedSetterWithUnforgablePropertiesConstructor):
        (WebCore::JSTestNamedSetterWithUnforgableProperties::toWrapped):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::IDLAttribute<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::cast):
        (WebCore::IDLOperation<JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins>::cast):
        (WebCore::jsTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor):
        (WebCore::setJSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltinsConstructor):
        (WebCore::JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins::toWrapped):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::IDLAttribute<JSTestNode>::cast):
        (WebCore::IDLOperation<JSTestNode>::cast):
        (WebCore::jsTestNodeConstructor):
        (WebCore::setJSTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::IDLAttribute<JSTestObj>::cast):
        (WebCore::IDLOperation<JSTestObj>::cast):
        (WebCore::jsTestObjConstructor):
        (WebCore::setJSTestObjConstructor):
        (WebCore::JSTestObj::toWrapped):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        (WebCore::setJSTestOverloadedConstructorsConstructor):
        (WebCore::JSTestOverloadedConstructors::toWrapped):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::jsTestOverloadedConstructorsWithSequenceConstructor):
        (WebCore::setJSTestOverloadedConstructorsWithSequenceConstructor):
        (WebCore::JSTestOverloadedConstructorsWithSequence::toWrapped):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::IDLOperation<JSTestOverrideBuiltins>::cast):
        (WebCore::jsTestOverrideBuiltinsConstructor):
        (WebCore::setJSTestOverrideBuiltinsConstructor):
        (WebCore::JSTestOverrideBuiltins::toWrapped):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::jsTestPluginInterfaceConstructor):
        (WebCore::setJSTestPluginInterfaceConstructor):
        (WebCore::JSTestPluginInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::IDLAttribute<JSTestPromiseRejectionEvent>::cast):
        (WebCore::jsTestPromiseRejectionEventConstructor):
        (WebCore::setJSTestPromiseRejectionEventConstructor):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::IDLAttribute<JSTestSerialization>::cast):
        (WebCore::IDLOperation<JSTestSerialization>::cast):
        (WebCore::jsTestSerializationConstructor):
        (WebCore::setJSTestSerializationConstructor):
        (WebCore::JSTestSerialization::toWrapped):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        (WebCore::jsTestSerializationIndirectInheritanceConstructor):
        (WebCore::setJSTestSerializationIndirectInheritanceConstructor):
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        (WebCore::IDLAttribute<JSTestSerializationInherit>::cast):
        (WebCore::IDLOperation<JSTestSerializationInherit>::cast):
        (WebCore::jsTestSerializationInheritConstructor):
        (WebCore::setJSTestSerializationInheritConstructor):
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        (WebCore::IDLAttribute<JSTestSerializationInheritFinal>::cast):
        (WebCore::IDLOperation<JSTestSerializationInheritFinal>::cast):
        (WebCore::jsTestSerializationInheritFinalConstructor):
        (WebCore::setJSTestSerializationInheritFinalConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::IDLAttribute<JSTestSerializedScriptValueInterface>::cast):
        (WebCore::IDLOperation<JSTestSerializedScriptValueInterface>::cast):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        (WebCore::setJSTestSerializedScriptValueInterfaceConstructor):
        (WebCore::JSTestSerializedScriptValueInterface::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::IDLOperation<JSTestStringifier>::cast):
        (WebCore::jsTestStringifierConstructor):
        (WebCore::setJSTestStringifierConstructor):
        (WebCore::JSTestStringifier::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::IDLOperation<JSTestStringifierAnonymousOperation>::cast):
        (WebCore::jsTestStringifierAnonymousOperationConstructor):
        (WebCore::setJSTestStringifierAnonymousOperationConstructor):
        (WebCore::JSTestStringifierAnonymousOperation::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::IDLOperation<JSTestStringifierNamedOperation>::cast):
        (WebCore::jsTestStringifierNamedOperationConstructor):
        (WebCore::setJSTestStringifierNamedOperationConstructor):
        (WebCore::JSTestStringifierNamedOperation::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::IDLOperation<JSTestStringifierOperationImplementedAs>::cast):
        (WebCore::jsTestStringifierOperationImplementedAsConstructor):
        (WebCore::setJSTestStringifierOperationImplementedAsConstructor):
        (WebCore::JSTestStringifierOperationImplementedAs::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::IDLOperation<JSTestStringifierOperationNamedToString>::cast):
        (WebCore::jsTestStringifierOperationNamedToStringConstructor):
        (WebCore::setJSTestStringifierOperationNamedToStringConstructor):
        (WebCore::JSTestStringifierOperationNamedToString::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::IDLAttribute<JSTestStringifierReadOnlyAttribute>::cast):
        (WebCore::IDLOperation<JSTestStringifierReadOnlyAttribute>::cast):
        (WebCore::jsTestStringifierReadOnlyAttributeConstructor):
        (WebCore::setJSTestStringifierReadOnlyAttributeConstructor):
        (WebCore::JSTestStringifierReadOnlyAttribute::toWrapped):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::IDLAttribute<JSTestStringifierReadWriteAttribute>::cast):
        (WebCore::IDLOperation<JSTestStringifierReadWriteAttribute>::cast):
        (WebCore::jsTestStringifierReadWriteAttributeConstructor):
        (WebCore::setJSTestStringifierReadWriteAttributeConstructor):
        (WebCore::JSTestStringifierReadWriteAttribute::toWrapped):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::IDLAttribute<JSTestTypedefs>::cast):
        (WebCore::IDLOperation<JSTestTypedefs>::cast):
        (WebCore::jsTestTypedefsConstructor):
        (WebCore::setJSTestTypedefsConstructor):
        (WebCore::JSTestTypedefs::toWrapped):
        * bridge/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * html/HTMLMediaElement.cpp:
        (WebCore::controllerJSValue):
        (WebCore::HTMLMediaElement::updateCaptionContainer):
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):

2018-03-08  Yusuke Suzuki  <utatane.tea@gmail.com>

        [JSC] Add inherits<T>(VM&) leveraging JSCast fast path
        https://bugs.webkit.org/show_bug.cgi?id=183429

        Reviewed by Mark Lam.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * bindings/js/JSDOMConvertDate.cpp:
        (WebCore::valueToDate):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::scriptExecutionContext const):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::toWrapped):
        * bindings/js/JSEventTargetCustom.cpp:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::pushEventHandlerScope const):
        * bindings/js/JSXPathNSResolverCustom.cpp:
        (WebCore::JSXPathNSResolver::toWrapped):
        * bindings/js/ScriptState.cpp:
        (WebCore::domWindowFromExecState):
        (WebCore::scriptExecutionContextFromExecState):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::isArray):
        (WebCore::CloneSerializer::isMap):
        (WebCore::CloneSerializer::isSet):
        (WebCore::CloneSerializer::dumpArrayBufferView):
        (WebCore::CloneSerializer::dumpDOMPoint):
        (WebCore::CloneSerializer::dumpDOMRect):
        (WebCore::CloneSerializer::dumpDOMMatrix):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::readArrayBufferView):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateOverloadDispatcher):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameterOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithDistinguishingUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWith2DistinguishingUnionsOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethodWithNonDistinguishingUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableUnionOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionOverloadWithNullableNonDistinguishingParameterOverloadDispatcher):
        (WebCore::jsTestObjPrototypeFunctionTestPromiseOverloadedFunctionOverloadDispatcher):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        * bridge/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):
        (JSC::Bindings::callRuntimeConstructor):
        * inspector/WebInjectedScriptHost.cpp:
        (WebCore::WebInjectedScriptHost::subtype):
        (WebCore::WebInjectedScriptHost::isHTMLAllCollection):

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

        Stop linking ApplicationServices directly
        https://bugs.webkit.org/show_bug.cgi?id=182867
        <rdar://problem/38252142>

        Reviewed by Alex Christensen.

        The frameworks that we use that live inside ApplicationServices
        have mostly moved out, so import them directly.

        * Configurations/WebCore.xcconfig:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        * platform/MIMETypeRegistry.cpp:
        * platform/graphics/ComplexTextController.cpp:
        * platform/graphics/cg/ColorCG.cpp:
        * platform/graphics/cg/ImageDecoderCG.cpp:
        * platform/graphics/cg/UTIRegistry.cpp:
        * platform/graphics/cocoa/FontCocoa.mm:
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        * platform/graphics/mac/GlyphPageMac.cpp:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        * platform/graphics/win/FontCGWin.cpp:
        * platform/graphics/win/FontCacheWin.cpp:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        * platform/graphics/win/ImageCGWin.cpp:
        * platform/graphics/win/SimpleFontDataCGWin.cpp:

2018-03-07  Tim Horton  <timothy_horton@apple.com>

        Sort and separate FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=183427

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:
        Sort and split FeatureDefines into paragraphs
        (to make it easier to sort later).

2018-03-07  Zalan Bujtas  <zalan@apple.com>

        Invalid innerTextRenderer in RenderTextControlSingleLine::styleDidChange()
        https://bugs.webkit.org/show_bug.cgi?id=183385
        <rdar://problem/38085397>

        Reviewed by Antti Koivisto.

        When HTMLInputElement::updateType() is called with a dirty value, we eagerly change the m_inputType first
        and then we take care of the dirty value by calling setAttributeWithoutSynchronization().
        With a DOMSubtreeModified event listener attached, setAttributeWithoutSynchronization() can end up running some
        layout code (offsetHeight) with a renderer - m_inputType mismatch.

        This patch ensures that we don't change the m_inputType until after we finished setting the new value.

        Test: fast/DOM/HTMLInputElement/input-value-and-type-change-crash.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):

2018-03-07  Chris Dumez  <cdumez@apple.com>

        Get rid of custom bindings for History's replaceState() / pushState()
        https://bugs.webkit.org/show_bug.cgi?id=183372

        Reviewed by Youenn Fablet.

        Get rid of custom bindings for History's replaceState() / pushState() by
        moving the cached state from the wrapper to the History implementation
        object.

        No new tests, no web-facing behavior change.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::state const):
        (WebCore::JSHistory::visitAdditionalChildren):
        * page/History.cpp:
        (WebCore::History::cachedState):
        (WebCore::History::stateObjectAdded):
        * page/History.h:
        (WebCore::History::pushState):
        (WebCore::History::replaceState):
        * page/History.idl:

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

        Match unsupported plugins based on domains and not origin
        https://bugs.webkit.org/show_bug.cgi?id=183384

        Reviewed by Chris Dumez.

        Move from an origin-keyed map to a vector of plugins.
        We iterate through the vector and a match happens if the page host name ends with the provided matching domain.
        This allows supporting rules for *.mydomain.com by passing 'mydomain.com'.
        Covered by existing tests.
        We are not testing subdomains like www.localhost since there is no support in our CI but this is tested through Unit tests.

        * loader/EmptyClients.cpp:
        * platform/URL.cpp:
        (WebCore::URL::isMatchingDomain const):
        * platform/URL.h:
        * plugins/PluginData.h:
        (WebCore::isSupportedPlugin):
        (WebCore::SupportedPluginName::decode):
        (WebCore::SupportedPluginName::encode const):
        * plugins/PluginInfoProvider.h:

2017-12-18  Youenn Fablet  <youenn@apple.com>

        Update to libwebrtc revision 4e70a72571dd26b85c2385e9c618e343428df5d3
        https://bugs.webkit.org/show_bug.cgi?id=180843

        Reviewed by Eric Carlson.

        Covered by existing tests.

        Moving H264 codecs and factories to libwebrtc.
        Updating LibWebRTCProvider according new libwebrtc API.
        Updating ref counting according new libwebrtc API.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
        (WebCore::LibWebRTCMediaEndpoint::AddRef const):
        (WebCore::LibWebRTCMediaEndpoint::Release const):
        (WTF::LogArgument<webrtc::RTCStats>::toString):
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RealtimeOutgoingAudioSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.h:
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
        (WebCore::LibWebRTCProvider::createPeerConnectionFactory):
        * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProviderCocoa::~LibWebRTCProviderCocoa):
        (WebCore::LibWebRTCProviderCocoa::createDecoderFactory):
        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
        (WebCore::LibWebRTCProviderCocoa::setActive):
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.h:
        * platform/mediastream/libwebrtc/VideoToolBoxDecoderFactory.cpp: Removed.
        * platform/mediastream/libwebrtc/VideoToolBoxEncoderFactory.cpp: Removed.
        * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp:
        (WebCore::ConvertToI420):
        (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated):
        * testing/Internals.cpp:
        (WebCore::Internals::setH264HardwareEncoderAllowed):
        * testing/MockLibWebRTCPeerConnection.h:

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

        replaceState cause back/forward malfunction on html page with <base href="/"> tag
        https://bugs.webkit.org/show_bug.cgi?id=182678
        <rdar://problem/37517821>

        Reviewed by Chris Dumez.

        replaceState should not change URL when the URL argument is NULL, but should change URL when the URL argument is an empty string.

        Test: http/tests/history/replacestate-no-url.html

        * page/History.cpp:
        (WebCore::History::urlForState):

2018-03-07  Antti Koivisto  <antti@apple.com>

        Don't invalidate descendants for sibling combinators unless needed
        https://bugs.webkit.org/show_bug.cgi?id=183410
        <rdar://problem/38227297>

        Reviewed by Zalan Bujtas.

        If we know the matched sibling combinator doesn't affect descendants we shouldn't invalidate them.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively const):

            Use different bit for the descendant case.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::fragmentMatchesTheRightmostElement):

            Remove unneeded context assert.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker):

            Use different bit for the descendant case.

        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorCheckerExcludingPseudoElements):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasPseudoElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateRequestedPseudoElementEqualsToSelectorPseudoElement):
        * dom/Element.cpp:
        (WebCore::invalidateForSiblingCombinators):

            Invalidate the target sibling or all descendants based on the bits.

        * dom/Element.h:
        (WebCore::Element::descendantsAffectedByPreviousSibling const):
        (WebCore::Element::setDescendantsAffectedByPreviousSibling const):
        * dom/Node.h:
        * style/StyleRelations.cpp:
        (WebCore::Style::commitRelationsToRenderStyle):
        (WebCore::Style::commitRelations):
        * style/StyleRelations.h:

            Add DescendantsAffectedByPreviousSibling bit. AffectedByPreviousSibling is now just about the target element.

2018-03-07  Antti Koivisto  <antti@apple.com>

        checkForSiblingStyleChanges should use internal versions of the invalidation functions
        https://bugs.webkit.org/show_bug.cgi?id=183405
        <rdar://problem/38218310>

        Reviewed by Zalan Bujtas.

        Non-internal invalidateStyleForElement/Subtree() implement sibling combinator invalidation. Checking this
        is only needed if the element in question changed somehow. In checkForSiblingStyleChanges we know that
        another element changed and we really just want to invalidate.

        * css/SelectorChecker.cpp:
        (WebCore::isFirstOfType):
        (WebCore::SelectorChecker::checkOne const):

        Also make :first-of-type use ChildrenAffectedByForwardPositionalRules for invalidation similar to :last-of-type
        for more correct invalidation.

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

2018-03-07  Yusuke Suzuki  <utatane.tea@gmail.com>

        HTML `pattern` attribute should set `u` flag for regular expressions
        https://bugs.webkit.org/show_bug.cgi?id=151598

        Reviewed by Chris Dumez.

        This patch attaches "u" flag to the RegExp compiled for HTML "pattern" attribute[1].

        [1]: https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch const):

2018-03-07  Frederic Wang  <fwang@igalia.com>

        Relayout frames after AsyncFrameScrolling or FrameFlattening option is changed
        https://bugs.webkit.org/show_bug.cgi?id=183081

        Reviewed by Antonio Gomes.

        The frames may be resized when the FrameFlattening option is modified and hence this patch
        forces a relayout. It also does that when AsyncFrameScrolling is modified too, since that
        may imply changes in frame flattening after bug 173704. Forcing a relayout will also be
        enough to trigger other updates for async frame scrolling in the future (see bug 149264 and
        bug 171667).

        Test: platform/ios/fast/frames/flattening/iframe-flattening-async-frame-scrolling-dynamic.html

        * page/Settings.yaml: Call setNeedsRelayoutAllFrames when one of the AsyncFrameScrolling or
        FrameFlattening options is changed.
        * page/SettingsBase.cpp: Include RenderWidget to make call on frame->ownerRenderer().
        (WebCore::SettingsBase::setNeedsRelayoutAllFrames):  Make layout and preferred widths dirty
        on all frames in the page and schedule a relayout.
        * page/SettingsBase.h: Declare setNeedsRelayoutAllFrames().

2018-03-07  Alejandro G. Castro  <alex@igalia.com>

        Make NetworkRTCResolver port agnostic
        https://bugs.webkit.org/show_bug.cgi?id=178855

        Reviewed by Youenn Fablet.

        Add new API in the DNSResolveQueue allowing to revolve hostnames and get the result. Add platform
        specific code for soup platform and refactor the other platforms. Added new API to the DNS API header
        and move the general code to the DNS.cpp file, that way we can reuse that code in all the platforms
        and leave the ResolveQueue class of the platforms in a file.

        No new tests because this is a refactor.

        * PlatformAppleWin.cmake: Move the DNSCFNet class to DNSResolveQueueCFNet.
        * PlatformMac.cmake: Ditto.
        * Sources.txt: Add the DNS.cpp for compilation.
        * SourcesCocoa.txt: Move the DNSCFNet class to DNSResolveQueueCFNet.
        * WebCore.xcodeproj/project.pbxproj: Move the DNSCFNet class to DNSResolveQueueCFNet, add the DNS.cpp
        for compilation. Add the new DNSResolveQueueCFNet class.
        * platform/Curl.cmake: Move the DNSCFNet class to DNSResolveQueueCurl.
        * platform/network/DNS.cpp: Add this file with the default implementation of the DNS functions for
        all the platforms.
        (WebCore::prefetchDNS): Copied from every platform implementation.
        (WebCore::resolveDNS): Add the function, resolves a hostname, receives the identifier of the operation
        and the completion handler.
        (WebCore::stopResolveDNS): Add the function, stops a resolution operation, receives the identifier
        of the operation.
        * platform/network/DNS.h: Add the new APIs resolveDNS and stopResolveDNS with the classes used for the
        implementation.
        (WebCore::IPAddress::IPAddress): Add this class used to send the resolved address information, it does
        not depend on libwebrtc rtc classes.
        (WebCore::IPAddress::get): Get a reference to the struct sockaddr_in in the IPAddress class.
        (WebCore::DNSCompletionHandler): Add this CompletionHandler type to be used when resolving the DNS
        address.
        * platform/network/DNSResolveQueue.cpp: Add the DNSResolveQueue platform instantiation in the singleton.
        (WebCore::DNSResolveQueue::singleton): Use DNSResolveQueue platform classes when creating the singleton..
        (WebCore::DNSResolveQueue::resolve): Add this method to get the address of a hostname, it sends the
        identifier and the completion handler to use when returning the result.
        (WebCore::DNSResolveQueue::stopResolve): Add this method to stop the resolve operation when required.
        * platform/network/DNSResolveQueue.h: Add the new methods and make the class abstract, so that every
        platform can implement the functions.
        * platform/network/cf/DNSResolveQueueCFNet.cpp: Renamed from Source/WebCore/platform/network/cf/DNSCFNet.cpp.
        Add the methods to the new class DNSResolveQueueCFNet, move the prefetchDNS to the DNS.cpp general
        implementation.
        * platform/network/cf/DNSResolveQueueCFNet.h: Add the new class inheriting from the DNSResolveQueue. Add the
        new methods, we have to implement these methods and move the NetworkRTCResolver for COCOA code here.
        (WebCore::DNSResolveQueueCF::resolve): Dummy method, not implemented.
        (WebCore::DNSResolveQueueCF::stopResolve): Ditto.
        * platform/network/curl/DNSResolveQueueCurl.cpp: Renamed from Source/WebCore/platform/network/curl/DNSCurl.cpp.
        * platform/network/curl/DNSResolveQueueCurl.h: Add the new class inheriting from the DNSResolveQueue.
        (WebCore::DNSResolveQueueCurl::resolve): Ditto.
        (WebCore::DNSResolveQueueCurl::stopResolve): Ditto.
        * platform/network/soup/DNSResolveQueueSoup.h: New class inheriting from the DNSResolveQueue class, adding
        a HasMap with the active operations, it allows stopping them.
        * platform/network/soup/DNSResolveQueueSoup.cpp: Renamed from Source/WebCore/platform/network/curl/DNSSoup.cpp.
        (WebCore::resolvedWithObserverCallback): Called when the result address from the soup platform is ready,
        sends the address to the completion handler.
        (WebCore::DNSResolveQueueSoup::resolve): Launch the resolve operation with the soup library.
        (WebCore::DNSResolveQueueSoup::stopResolve): Stop the resolve operation on process with a GCancellable.

2018-03-06  Brian Burg  <bburg@apple.com>

        [Cocoa] Stop copying ForwardingHeaders directory that no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=183396

        Reviewed by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj:
        Rename the phase to "Copy ICU Headers". ForwardingHeaders are no longer a thing.

2018-03-06  Youenn Fablet  <youenn@apple.com>

        didReceiveServerRedirectForProvisionalNavigation is not called in case of document redirection with service worker registration change
        https://bugs.webkit.org/show_bug.cgi?id=183299
        <rdar://problem/37547029>

        Reviewed by Alex Christensen.

        In case of redirection with service worker registration change, we cancel the load and create a new one.
        This prevent ResourceLoader::willSendRequestInternal to call the didReceiveServerRedirectForProvisionalNavigation
        callback. We thus explictly call this callback after restarting the load with the new service worker step.
        We only call this callback if the main resource is there as we do not want to call it if it was blocked by content extension.

        Test: http/wpt/service-workers/navigation-redirect-main-frame.https.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::restartLoadingDueToServiceWorkerRegistrationChange):

2018-03-06  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Remove unnecessary copied ResourceRequest member variable.
        https://bugs.webkit.org/show_bug.cgi?id=183010

        Reviewed by Youenn Fablet.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::resourceRequest const):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::addCacheValidationHeaders):
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::restartRequestWithCredential):
        (WebCore::ResourceHandle::continueAfterWillSendRequest):

2018-03-06  Nan Wang  <n_wang@apple.com>

        AX: Flaky test after r229310
        https://bugs.webkit.org/show_bug.cgi?id=183376
        <rdar://problem/38188685>

        Reviewed by Chris Fleizach.

        The test that forces the context menu to show sometimes locks up 
        the test runner. Also, we missed a case where calling AXShowMenu
        action on a combobox is not dispatching the accessibility event.

        Using the combobox example to test the event dispatching in order to
        avoid the test hang.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformShowMenuAction]):
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):

2018-03-06  Chris Dumez  <cdumez@apple.com>

        fast/loader/redirect-to-invalid-url-using-meta-refresh-disallowed.html fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183345

        Reviewed by Alex Christensen.

        FrameLoader::loadURL() was calling loadWithNavigationAction() and then resetting the
        m_quickRedirectComing flag right after. This works if the navigation policy decision
        triggered by loadWithNavigationAction() is made synchronously. However, when it is
        made asynchronously, the flag gets reset too early, before the policy decision
        handler has been called. This is an issue because the policy decision handler
        relies on the m_quickRedirectComing flag.

        Similarly, FrameLoader::loadFrameRequest() was calling loadPostRequest() / loadURL()
        and then focusing a frame right after. This does not work as intended when the navigation
        policy decision is made asynchronously.

        To address the issue, we now pass a completion handler that gets called when the operation
        has actually completion, after the policy decision has been made. This maintains the
        behavior in place with synchronous policy delegates.

        Test: fast/loader/redirect-to-invalid-url-using-meta-refresh-disallowed-async-delegates.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithNavigationAction):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::reloadWithOverrideEncoding):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::loadPostRequest):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/FrameLoader.h:

2018-03-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a new CSSTransition subclass of WebAnimation
        https://bugs.webkit.org/show_bug.cgi?id=183373
        <rdar://problem/38181985>

        Reviewed by Dean Jackson.

        Adding a new CSSAnimation subclass which we will create in a later patch while resolving styles
        upon identifying that a new CSS Animation has been added to an element.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSTransition.cpp: Added.
        (WebCore::CSSTransition::create):
        (WebCore::CSSTransition::CSSTransition):
        * animation/CSSTransition.h: Added.
        * animation/CSSTransition.idl: Added.
        * animation/KeyframeEffect.cpp:
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isCSSTransition const):
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/WebCoreBuiltinNames.h:

2018-03-06  Megan Gardner  <megan_gardner@apple.com>

        Ensure system appearance is default for web content
        https://bugs.webkit.org/show_bug.cgi?id=183354
        <rdar://problem/36975571>
        <rdar://problem/38162381>

        Make sure the the system appearance for web content is default, and
        consolidate that code to a single class.

        Reviewed by Tim Horton.

        Not currently testable, will add tests in a future patch.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/LocalDefaultSystemAppearance.h: Added.
        * platform/mac/LocalDefaultSystemAppearance.mm: Added.
        (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance):
        (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance):
        * platform/mac/ThemeMac.mm:
        (-[WebCoreThemeView init]):
        (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor const):

2018-03-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a new runtime flag to control whether CSS Animations and CSS Transitions should run using the Web Animations timeline
        https://bugs.webkit.org/show_bug.cgi?id=183370
        <rdar://problem/38180729>

        Reviewed by Dean Jackson.

        Before we start creating WebAnimation objects to perform CSS Animations and CSS Transitions, which will replace the existing codepath
        involving CSSAnimationController and CompositeAnimation, we need a runtime flag that will allow all the new code to be turned off by
        default while we bring this feature up.

        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCSSAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled):
        (WebCore::RuntimeEnabledFeatures::cssAnimationsAndCSSTransitionsBackedByWebAnimationsEnabled const):

2018-03-06  Daniel Bates  <dabates@apple.com>

        Make more use of USE(OPENGL_ES) and replace typedefs with C++11 using statements
        in TextureCacheCV.h

        Rubber-stamped by Tim Horton.

        * platform/graphics/cv/TextureCacheCV.h:

2018-03-06  Antti Koivisto  <antti@apple.com>

        Cache hasComplexSelectorsForStyleAttribute bit
        https://bugs.webkit.org/show_bug.cgi?id=183363

        Reviewed by Andreas Kling.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectFeatures const):
        (WebCore::DocumentRuleSets::hasComplexSelectorsForStyleAttribute const):

        Cache the bit to avoid hash lookups.

        * css/DocumentRuleSets.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::shouldSynchronizeStyleAttributeImmediatelyForInvalidation): Deleted.

        Move code to DocumentRuleSets.

2018-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Change the type of SVGToOTFFontConverter::m_weight to be not a char
        https://bugs.webkit.org/show_bug.cgi?id=183339

        Reviewed by Alex Christensen.

        No new tests because there is no behavior change.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::SVGToOTFFontConverter::appendOS2Table):
        (WebCore::SVGToOTFFontConverter::SVGToOTFFontConverter):

2018-03-06  Antoine Quint  <graouts@apple.com>

        [Web Animations] Add a new CSSAnimation subclass of WebAnimation
        https://bugs.webkit.org/show_bug.cgi?id=183371
        <rdar://problem/38181724>

        Reviewed by Dean Jackson.

        Adding a new CSSAnimation subclass which we will create in a later patch while resolving styles
        upon identifying that a new CSS Animation has been added to an element.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/CSSAnimation.cpp: Added.
        (WebCore::CSSAnimation::create):
        (WebCore::CSSAnimation::CSSAnimation):
        * animation/CSSAnimation.h: Added.
        * animation/CSSAnimation.idl: Added.
        * animation/KeyframeEffectReadOnly.cpp
        * animation/WebAnimation.h:
        (WebCore::WebAnimation::isCSSAnimation const):
        * animation/WebAnimation.idl:
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/WebCoreBuiltinNames.h:

2018-03-06  Ms2ger  <Ms2ger@igalia.com>

        Explicitly qualify some method calls on this in lambdas in Service Worker code.
        https://bugs.webkit.org/show_bug.cgi?id=183367

        Reviewed by Chris Dumez.

        No new tests -- no change in behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::matchAll):

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Remove unused scrolling-related code in TextureMapperLayer, CoordinatedGraphics stack
        https://bugs.webkit.org/show_bug.cgi?id=183340

        Reviewed by Michael Catanzaro.

        TextureMapperLayer::scrollBy() method is completely unused and can be
        removed. This opens the gates on removing majority of scrolling-related
        code in TextureMapperLayer, CoordinatedGraphicsLayer and
        CoordinatedGraphicsScene classes, along with smaller bits in other
        closely-associated classes.

        We're able to remove two virtual method overrides in the
        ScrollingCoordinatorCoordinatedGraphics class.

        TextureMapperLayer can drop the ScrollingClient member variable, along
        with multiple others. Various unused methods in that class are removed
        as well.

        CoordinatedGraphicsLayer and GraphicsLayerTextureMapper can both remove
        the custom scrolling state tracking.

        No new tests -- no change in behavior.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::scrollableAreaScrollLayerDidChange): Deleted.
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::willDestroyScrollableArea): Deleted.
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::commitLayerChanges):
        (WebCore::GraphicsLayerTextureMapper::didCommitScrollOffset): Deleted.
        (WebCore::GraphicsLayerTextureMapper::setIsScrollable): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::hitTest): Deleted.
        (WebCore::TextureMapperLayer::scrollableLayerHitTestCondition): Deleted.
        (WebCore::TextureMapperLayer::findScrollableContentsLayerAt): Deleted.
        (WebCore::TextureMapperLayer::mapScrollOffset): Deleted.
        (WebCore::TextureMapperLayer::commitScrollOffset): Deleted.
        (WebCore::TextureMapperLayer::scrollBy): Deleted.
        (WebCore::TextureMapperLayer::didCommitScrollOffset): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::CoordinatedGraphicsLayer):
        (WebCore::CoordinatedGraphicsLayer::syncLayerState):
        (WebCore::CoordinatedGraphicsLayer::resetLayerState):
        (WebCore::CoordinatedGraphicsLayer::setScrollableArea): Deleted.
        (WebCore::CoordinatedGraphicsLayer::commitScrollOffset): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Apply TextureMapperLayer animations with a single MonotonicTime value
        https://bugs.webkit.org/show_bug.cgi?id=183360

        Reviewed by Sergio Villar Senin.

        When animations are being applied on the TextureMapperLayer tree, the
        monotonic time value is retrieved repeatedly in TextureMapperAnimation
        class. Instead of spawning repeated syscalls that are required to obtain
        the time value, TextureMapperLayer::applyAnimationsRecursively() now
        accepts a MonotonicTime value that should be used for all animation
        updates.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::apply):
        (WebCore::TextureMapperAnimation::computeTotalRunningTime):
        (WebCore::TextureMapperAnimations::apply):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        (WebCore::TextureMapperAnimation::keyframes const):
        (WebCore::TextureMapperAnimation::animation const):
        (WebCore::TextureMapperAnimation::boxSize const): Deleted.
        (WebCore::TextureMapperAnimation::listsMatch const): Deleted.
        (WebCore::TextureMapperAnimation::startTime const): Deleted.
        (WebCore::TextureMapperAnimation::pauseTime const): Deleted.
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::applyAnimationsRecursively):
        (WebCore::TextureMapperLayer::syncAnimations):
        * platform/graphics/texmap/TextureMapperLayer.h:

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        [CoordGraphics] Clean up CoordinatedImageBacking
        https://bugs.webkit.org/show_bug.cgi?id=183332

        Reviewed by Carlos Garcia Campos.

        Clean up the CoordinatedImageBacking class. Prefer reference values in
        class functions, methods and member variables, where possible. Move
        member variables into a more sensible order. Initialize a few member
        variables at the place of declaration.

        Drop releaseSurfaceIfNeeded() and updateVisibilityIfNeeded() methods,
        integrating them into the update() method, which was the only place
        where they were called from.

        We don't have to keep a reference to the buffer object, since we're
        not using it internally after it's been passed to the client's
        updateImageBacking() implementation.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::syncImageBacking):
        (WebCore::CoordinatedGraphicsLayer::releaseImageBackingIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        (WebCore::CoordinatedImageBacking::getCoordinatedImageBackingID):
        (WebCore::CoordinatedImageBacking::CoordinatedImageBacking):
        (WebCore::CoordinatedImageBacking::addHost):
        (WebCore::CoordinatedImageBacking::removeHost):
        (WebCore::CoordinatedImageBacking::update):
        (WebCore::CoordinatedImageBacking::clearContentsTimerFired):
        (WebCore::CoordinatedImageBacking::create): Deleted.
        (WebCore::CoordinatedImageBacking::markDirty): Deleted.
        (WebCore::CoordinatedImageBacking::releaseSurfaceIfNeeded): Deleted.
        (WebCore::CoordinatedImageBacking::updateVisibilityIfNeeded): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:

2018-03-06  Zan Dobersek  <zdobersek@igalia.com>

        GraphicsLayerTextureMapper: remove the setAnimations() method
        https://bugs.webkit.org/show_bug.cgi?id=183358

        Reviewed by Carlos Garcia Campos.

        Remove the GraphicsLayerTextureMapper::setAnimations() method. This was
        not called from anywhere, and is not the way animations are generated
        for a given GraphicsLayer object (that would be addAnimation() method).

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setAnimations): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:

2018-03-06  Nan Wang  <n_wang@apple.com>

        AX: AOM: More accessibility events support
        https://bugs.webkit.org/show_bug.cgi?id=183023
        <rdar://problem/37764380>

        Reviewed by Chris Fleizach.

        Accessibility events.
        Spec: https://wicg.github.io/aom/spec/phase2.html

        This change adds support for these new events:
          accessiblecontextmenu
          accessibledecrement
          accessibledismiss
          accessiblefocus
          accessibleincrement
          accessiblescrollintoview
          accessibleselect

        Note: The show context menu action is only supported on macOS now.
        The dismiss action is not implemented for all the platforms yet.

        Test: accessibility/mac/AOM-events-all.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::setSelected):
        * accessibility/AccessibilityMediaObject.cpp:
        (WebCore::AccessibilityMediaObject::increment):
        (WebCore::AccessibilityMediaObject::decrement):
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::setSelected):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::increment):
        (WebCore::AccessibilityNodeObject::decrement):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent const):
        (WebCore::AccessibilityObject::dispatchAccessibilityEventWithType const):
        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent const):
        (WebCore::AccessibilityObject::scrollToMakeVisible const):
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent): Deleted.
        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setFocused):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityShowContextMenu]):
        * dom/Element.idl:
        * dom/EventNames.h:

2018-03-05  Yusuke Suzuki  <utatane.tea@gmail.com>

        Fix std::make_unique / new[] using system malloc
        https://bugs.webkit.org/show_bug.cgi?id=182975

        Reviewed by JF Bastien.

        Use Vector, FAST_ALLOCATED, or UniqueArray instead.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * css/StyleRule.h:
        * cssjit/CompiledSelector.h:
        * html/HTMLFrameSetElement.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::copyTexSubImage2D):
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::LRUImageBufferCache):
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::bubbleToFront):
        * html/canvas/WebGLRenderingContextBase.h:
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        (): Deleted.
        * platform/Length.h:
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/gstreamer/FFTFrameGStreamer.cpp:
        (WebCore::FFTFrame::FFTFrame):
        * platform/graphics/FormatConverter.h:
        (WebCore::FormatConverter::FormatConverter):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::texImage2DResourceSafe):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::getDirtyRects):
        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::flipImageSurfaceVertically):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::getActiveAttribImpl):
        (WebCore::GraphicsContext3D::getActiveUniformImpl):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::getShaderLog):
        (WebCore::getProgramLog):
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        (WebCore::ImageBufferData::putData):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::PNGImageReader):
        (WebCore::PNGImageReader::close):
        (WebCore::PNGImageReader::interlaceBuffer const):
        (WebCore::PNGImageReader::createInterlaceBuffer):
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decodeFrame):
        * platform/network/curl/SocketStreamHandleImpl.h:
        (WebCore::SocketStreamHandleImpl::SocketData::SocketData):
        * platform/network/curl/SocketStreamHandleImplCurl.cpp:
        (WebCore::createCopy):
        (WebCore::SocketStreamHandleImpl::readData):
        (): Deleted.
        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::SocketStreamHandleImpl::connected):
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2018-03-05  Yoav Weiss  <yoav@yoav.ws>

        Support for preconnect Link headers
        https://bugs.webkit.org/show_bug.cgi?id=181657

        Reviewed by Darin Adler.

        Move the preconnect functionality into its own function, and
        also call this function when Link headers are processed.

        Test: http/tests/preconnect/link-header-rel-preconnect-http.php

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Call preconnectIfNeeded.
        (WebCore::LinkLoader::preconnectIfNeeded): Preconnect to a host functionality moved here.
        (WebCore::LinkLoader::loadLink): Call preconnectIfNeeded.
        * loader/LinkLoader.h:

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

        Add ChildrenAffectedByForwardPositionalRules bit for nth-child pseudo class marking
        https://bugs.webkit.org/show_bug.cgi?id=183341
        <rdar://problem/38151470>

        Reviewed by Zalan Bujtas.

        Use it instead of AffectsNextSibling/AffectedByPreviousSibling bits, similar to ChildrenAffectedByBackwardPositionalRules bit.
        This is more efficient and requires way less marking.

        * css/SelectorChecker.cpp:
        (WebCore::countElementsBefore):
        (WebCore::countElementsOfTypeBefore):
        (WebCore::SelectorChecker::checkOne const):

            Mark with ChildrenAffectedByForwardPositionalRules.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChild):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsNthChildOf):

             Mark with ChildrenAffectedByForwardPositionalRules.

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

            Invalidate siblings after added/removed element.

        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        (WebCore::Element::hasFlagsSetDuringStylingOfChildren const):
        (WebCore::Element::rareDataChildrenAffectedByForwardPositionalRules const):

            Add the new marking bit.

        * dom/Element.h:
        (WebCore::Element::childrenAffectedByForwardPositionalRules const):
        (WebCore::Element::attributeWithoutSynchronization const):

            Remove assert so we can use this to get the current unresolved lazy value of style attrbute.

        * dom/ElementRareData.h:
        (WebCore::ElementRareData::childrenAffectedByForwardPositionalRules const):
        (WebCore::ElementRareData::setChildrenAffectedByForwardPositionalRules):
        (WebCore::ElementRareData::ElementRareData):
        (WebCore::ElementRareData::resetStyleRelations):

             Add the new marking bit.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::invalidateStyleAttribute):

            In special case where we have attribute selectors for style attribute, synchronize the attribute immediately so we get invalidation right.
            Tested by fast/css/style-attribute-invalidation-propagates-to-counted-siblings.html    

        * style/StyleRelations.cpp:
        (WebCore::Style::commitRelationsToRenderStyle):
        (WebCore::Style::commitRelations):

            Commit the new bit.

        * style/StyleRelations.h:

2018-03-05  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, remove unused variables.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSpeakAs):
        (WebCore::consumeHangingPunctuation):

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

        fast/loader/onload-policy-ignore-for-frame.html is timing out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183337

        Reviewed by Ryosuke Niwa.

        Make sure we call checkCompleted() before calling checkLoadComplete() in
        FrameLoader::continueLoadAfterNavigationPolicy() when the client tells us
        to ignore the navigation, so that we properly recognize that the load is
        done. This matches what is already done in FrameLoader::receivedMainResourceError().

        Test: fast/loader/onload-policy-ignore-for-frame-async-delegates.html

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

2018-03-05  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Allow user-installed fonts to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=183349

        Rubber stamped by Brent Fulgham.

        Tests: fast/text/user-installed-font.html
               fast/text/user-installed-fonts/disable.html
               fast/text/user-installed-fonts/shadow-disable.html
               fast/text/user-installed-fonts/shadow-family-disable.html
               fast/text/user-installed-fonts/shadow-family.html
               fast/text/user-installed-fonts/shadow-postscript-disable.html
               fast/text/user-installed-fonts/shadow-postscript-family-disable.html
               fast/text/user-installed-fonts/shadow-postscript-family.html
               fast/text/user-installed-fonts/shadow-postscript.html
               fast/text/user-installed-fonts/shadow.html
               fast/text/user-installed-fonts/system-ui.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:

2018-03-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Silence OpenGL and OpenGL ES deprecation warnings in newer SDKs
        https://bugs.webkit.org/show_bug.cgi?id=183350

        Unreviewed.

        * Configurations/WebCore.xcconfig:

2018-03-05  Andy Estes  <aestes@apple.com>

        [Mac] Teach WebCore::Pasteboard about file promise drags
        https://bugs.webkit.org/show_bug.cgi?id=183314
        <rdar://problem/38105493>

        Reviewed by Darin Adler.

        While WebKit does support receiving file promise drags (since r210360), WebCore::Pasteboard
        has not been instructed on how to read their file paths. When the various pasteboard readers
        ask for file paths after a file promise drop, they receive an empty vector. This impacts
        various features, most notably the DataTransfer API.

        Pasteboard actually cannot learn about promised file paths from the pasteboard itself, as
        the pasteboard only contains the dragged files' UTIs. Promised file paths aren't known until
        the WebKits call -[NSFilePromiseReceiver receivePromisedFilesAtDestination:...], at which
        point the file paths are passed to WebCore as part of WebCore::DragData.

        When we construct new Pasteboards for drag and drop, we need to store any promised file
        paths from the DragData. Then, when the various pasteboard readers ask for file paths and
        NSFilesPromisePboardType is on the pasteboard, we can return these promised file paths.

        Tests: editing/pasteboard/data-transfer-items-drag-drop-file-promise.html
               editing/pasteboard/data-transfer-items-drop-file-promise.html
               editing/pasteboard/datatransfer-items-drop-plaintext-file-promise.html
               editing/pasteboard/datatransfer-types-dropping-text-file-promise.html
               editing/pasteboard/drag-file-promises-to-editable-element-as-URLs.html
               editing/pasteboard/drag-file-promises-to-editable-element-as-attachment.html
               editing/pasteboard/file-input-files-access-promise.html

        * platform/FileSystem.h:
        * platform/Pasteboard.h:
        (WebCore::Pasteboard::Pasteboard):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsPromise const):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::createForDragAndDrop):
        (WebCore::toString):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readFilePaths):
        (WebCore::absoluteURLsFromPasteboardFilenames): Deleted.
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::numberOfFiles const):

2018-03-05  Andy Estes  <aestes@apple.com>

        [Mac] Fix the build

        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate): Removed unused variables.

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

        Don't invalidate all children when doing insertion/deletion in presence of backward positional selectors
        https://bugs.webkit.org/show_bug.cgi?id=183325
        <rdar://problem/38134480>

        Reviewed by Zalan Bujtas.

        It is sufficient to invalidate siblings before the mutation point.

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

        We already do sibling walk in the case of forwards positional rules and sibling combinators. The work
        done here is insignifant compared to cost of overinvalidating.

2018-03-05  Ali Juma  <ajuma@chromium.org>

        imported/w3c/web-platform-tests/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html times out with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183297

        Reviewed by Chris Dumez.

        When a FrameLoader's policy document loader is cleared after receiving a navigation policy decision
        to not continue loading, we still need to trigger a check for load completion, since this loader or
        an ancestor loader may have been in state isLoadingInAPISense only because of the existence of
        the just-cleared policy document loader. Without triggering this check, these loaders may never
        call WebFrameLoaderClient::dispatchDidFinishLoad.

        Test: http/wpt/html/semantics/text-level-semantics/the-a-element/a-download-click-404.html

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

2018-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Move currentCPUTime and sleep(Seconds) to CPUTime.h and Seconds.h respectively
        https://bugs.webkit.org/show_bug.cgi?id=183312

        Reviewed by Mark Lam.

        Remove wtf/CurrentTime.h include pragma.

        * Modules/geolocation/Geolocation.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        * Modules/speech/SpeechSynthesis.cpp:
        * contentextensions/ContentExtensionCompiler.cpp:
        * contentextensions/ContentExtensionParser.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/Event.cpp:
        * dom/ScriptedAnimationController.cpp:
        * dom/SimulatedClick.cpp:
        * fileapi/File.cpp:
        * fileapi/FileReader.cpp:
        * history/CachedPage.cpp:
        * html/BaseDateAndTimeInputType.cpp:
        * html/DateTimeInputType.cpp:
        * html/HTMLMediaElement.cpp:
        * html/MediaController.cpp:
        * html/MediaElementSession.cpp:
        * html/MonthInputType.cpp:
        * html/TimeInputType.cpp:
        * html/parser/HTMLParserScheduler.h:
        * inspector/InspectorCanvas.cpp:
        * loader/FrameLoader.cpp:
        * loader/LoadTiming.cpp:
        * loader/NavigationScheduler.cpp:
        * loader/ProgressTracker.cpp:
        * loader/cache/CachedCSSStyleSheet.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedResource.cpp:
        * loader/cache/MemoryCache.cpp:
        * page/DOMTimer.cpp:
        * page/DOMWindow.cpp:
        * page/DragController.cpp:
        * page/EventHandler.cpp:
        * page/FocusController.cpp:
        * page/FrameView.cpp:
        * page/Page.cpp:
        * page/Performance.cpp:
        * page/PerformanceTiming.cpp:
        * page/animation/AnimationBase.cpp:
        * page/animation/CSSAnimationController.cpp:
        * page/mac/WheelEventDeltaFilterMac.mm:
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
        * platform/ScrollAnimationKinetic.cpp:
        * platform/ScrollAnimationSmooth.cpp:
        * platform/ThreadTimers.cpp:
        * platform/Timer.cpp:
        * platform/audio/mac/AudioSampleDataSource.mm:
        * platform/cocoa/ScrollController.mm:
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        * platform/gamepad/mac/HIDGamepad.cpp:
        * platform/graphics/BitmapImage.cpp:
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/LayerPool.cpp:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        * platform/graphics/texmap/BitmapTexturePool.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        * platform/graphics/win/GraphicsLayerDirect2D.cpp:
        * platform/gtk/PlatformKeyboardEventGtk.cpp:
        * platform/gtk/ScrollAnimatorGtk.cpp:
        * platform/ios/LegacyTileCache.mm:
        * platform/ios/LegacyTileLayerPool.mm:
        * platform/ios/ScrollViewIOS.mm:
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        * platform/mock/MockRealtimeMediaSource.cpp:
        * platform/mock/MockRealtimeVideoSource.cpp:
        * platform/network/CacheValidation.cpp:
        * platform/network/DNSResolveQueue.cpp:
        * platform/network/ResourceResponseBase.cpp:
        * platform/network/curl/CurlCacheEntry.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/text/TextEncodingRegistry.cpp:
        * platform/text/win/LocaleWin.cpp:
        * platform/win/MainThreadSharedTimerWin.cpp:
        * platform/win/PlatformMouseEventWin.cpp:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderProgress.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        * testing/MockGamepad.cpp:
        * workers/WorkerRunLoop.cpp:

2018-03-04  Tim Horton  <timothy_horton@apple.com>

        Make !ENABLE(DATA_DETECTION) iOS build actually succeed
        https://bugs.webkit.org/show_bug.cgi?id=183283
        <rdar://problem/38062148>

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

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

        Delete incorrect version of clampTo() function from SVGToOTFFontConversion.cpp
        https://bugs.webkit.org/show_bug.cgi?id=183165

        Reviewed by Darin Adler.

        Some of the calls in SVGToOTFFontConversion.cpp were directed to the function
        in MathExtras.h while the rest were directed to this local static function.
        There should not be two versions with the same name while they are supposed
        to do the same thing. Besides, the local version does not work correctly
        if the type of the argument's max limit is less the max limit of the returned
        type, e.g. char -> uint16_t.

        * svg/SVGToOTFFontConversion.cpp:
        (WebCore::clampTo): Deleted.

2018-03-03  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move styleDidChange mutation logic to RenderTreeUpdater
        https://bugs.webkit.org/show_bug.cgi?id=183273
        <rdar://problem/38054892>

        Reviewed by Antti Koivisto.

        Covered by existing tests.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::noLongerAffectsParentBlock const): Deleted.
        * rendering/RenderElement.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::updateElementRenderer):

2018-03-03  Yoav Weiss  <yoav@yoav.ws>

        Link headers for subresources are not being processes
        https://bugs.webkit.org/show_bug.cgi?id=181789

        Reviewed by Youenn Fablet.

        Triggers Link header processing when the Link headers arrive on a subresource.

        Test: http/tests/preload/link-header-on-subresource.html

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Change the media check conditions.
        * loader/LinkLoader.h: Add a third state for media checks.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse): Preload links from headers for subresources.

2018-03-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        [WTF] Remove RunLoop and RunLoop::Timer's interface using double as seconds
        https://bugs.webkit.org/show_bug.cgi?id=183293

        Reviewed by Alex Christensen.

        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):

2018-03-02  Dean Jackson  <dino@apple.com>

        Remove NP_GLContext since it is unsupported
        https://bugs.webkit.org/show_bug.cgi?id=183305
        <rdar://problem/36875555>

        Reviewed by Simon Fraser.

        * plugins/npapi.h: Remove NP_GLContext and mention that
        it is not supported.

2018-03-02  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html crashes with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183294
        <rdar://problem/38073596>

        Reviewed by Youenn Fablet.

        Drop code that was added to SubresourceLoader::willCancel() in r228852. The purpose of this code
        was to make sure that SubresourceLoader::m_policyForResponseCompletionHandler always gets called,
        even when the load is cancelled. However, this code is not needed (since m_policyForResponseCompletionHandler
        is a CompletionHandler, an assertion will be hit if we fail to call it and we'll know). Calling
        the completionHandler inside SubresourceLoader::willCancel() is too early and leads to crashes.

        The completionHandler currently gets called DocumentLoader::responseReceived() via a call to
        mainResourceLoader->didReceiveResponsePolicy(). Note that in r229177, we made sure that the
        call to didReceiveResponsePolicy() happens *after* the call to continueAfterContentPolicy()
        to maintain our non-async policy delegate behavior. However, continueAfterContentPolicy()
        would end up calling willCancel() and call the completionHandler when shouldContinue was
        false.

        Test: http/wpt/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-async-delegate.html

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

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Fix the build after r229185 and r229184

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer):
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.mm:

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Make the !ENABLE(DEVICE_ORIENTATION) iOS build succeed
        https://bugs.webkit.org/show_bug.cgi?id=183296

        Reviewed by Dan Bernstein.

        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceMotionClientIOS.mm:
        * platform/ios/WebCoreMotionManager.h:
        * platform/ios/WebCoreMotionManager.mm:

2018-03-02  Tim Horton  <timothy_horton@apple.com>

        Make it possible to build for iOS without Celestial
        https://bugs.webkit.org/show_bug.cgi?id=183295
        <rdar://problem/38074468>

        Reviewed by Dan Bernstein.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::exernalDeviceDisplayNameForPlayer):

2018-03-02  Youenn Fablet  <youenn@apple.com>

        Clients should register to StorageProcess with their service worker registration identifier
        https://bugs.webkit.org/show_bug.cgi?id=182313
        <rdar://problem/38044403>

        Reviewed by Chris Dumez.

        Relanding with fixing matchAll for uncontrolled clients.

        No observable change of behavior in regular conditions.
        When service worker process crashes, the service worker identifiers sent by the WebProcess might be wrong
        and we will not be able to retrieve the registration from these identifiers.
        The storage process will be able to still process correctly messages coming from the WebProcess to register clients of the registration.
        Otherwise, there is a chance that WebProcess clients will not be added to the SWServerRegistration.m_clientsUsingRegistration maps.

        * dom/Document.cpp:
        (WebCore::Document::setServiceWorkerConnection):
        * workers/service/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::matchAll):
        (WebCore::SWServer::claim):
        (WebCore::SWServer::registerServiceWorkerClient):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        (WebCore::SWServer::setClientActiveWorker): Deleted.
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::activate):

2018-03-02  Youenn Fablet  <youenn@apple.com>

        Loads for a Document controlled by a Service Worker should not use AppCache
        https://bugs.webkit.org/show_bug.cgi?id=183148

        Reviewed by Chris Dumez.

        Covered by updated test.

        Postponing document loading through app cache after matching service worker registration.
        Trying to load through app cache only if there is no service worker registration.

        Disabling app cache for any load that has a service worker registration identifier.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::tryLoadingRequestFromApplicationCache):
        (WebCore::DocumentLoader::tryLoadingRedirectRequestFromApplicationCache):
        (WebCore::DocumentLoader::restartLoadingDueToServiceWorkerRegistrationChange):
        (WebCore::DocumentLoader::scheduleSubstituteResourceLoad):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadMainResource):
        (WebCore::ApplicationCacheHost::maybeLoadMainResourceForRedirect):
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::scheduleLoadFallbackResourceFromApplicationCache):
        * loader/appcache/ApplicationCacheHost.h:

2018-03-02  Chris Dumez  <cdumez@apple.com>

        fast/events/before-unload-remove-itself.html crashes with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183290
        <rdar://problem/38069045>

        Reviewed by Alex Christensen.

        When the navigation policy happens asynchronously, it is now possible for the
        Frame / FrameLoader to get destroyed between the point that policyChecker().checkNavigationPolicy()
        is called and when continueLoadAfterNavigationPolicy() is called.

        To address the issue, we now protect the Frame and capture it in the lambda passed
        to policyChecker().checkNavigationPolicy().

        Test: fast/events/before-unload-remove-itself-async-delegate.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2018-03-02  Chris Dumez  <cdumez@apple.com>

        Converting a load to a download does not work with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183254
        <rdar://problem/38035334>

        Reviewed by Youenn Fablet.

        Update DocumentLoader::responseReceived() to call didReceiveResponsePolicy()
        on the mainResourceLoader *after* calling continueAfterContentPolicy(),
        not *before*. This makes sure that the WebResourceLoader sends the
        NetworkResourceLoader::ContinueDidReceiveResponse IPC back to the Network
        Process *after* the policy decision has been processed, which restores the
        pre-r228852 order.

        Test: fast/dom/HTMLAnchorElement/anchor-file-blob-convert-to-download-async-delegate.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2018-03-02  Youenn Fablet  <youenn@apple.com>

        Some RealtimeMediaSource methods do not need to be marked as virtual
        https://bugs.webkit.org/show_bug.cgi?id=183272

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/RealtimeMediaSource.h:

2018-03-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove monotonicallyIncreasingTime
        https://bugs.webkit.org/show_bug.cgi?id=182911

        Reviewed by Michael Catanzaro.

        While generic code uses MonotonicTime, CAAnimation uses media time (CFTimeInterval).
        At this boundary, we convert MonotonicTime to media time, this is the same logic to
        the code before this patch.

        * Modules/gamepad/Gamepad.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer):
        (WebCore::SourceBuffer::monitorBufferingRate):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::startSpeakingImmediately):
        (WebCore::SpeechSynthesis::fireEvent):
        * Modules/speech/SpeechSynthesisUtterance.h:
        * contentextensions/ContentExtensionCompiler.cpp:
        (WebCore::ContentExtensions::compileRuleList):
        * contentextensions/ContentExtensionParser.cpp:
        (WebCore::ContentExtensions::parseRuleList):
        * contentextensions/ContentExtensionsBackend.cpp:
        (WebCore::ContentExtensions::ContentExtensionsBackend::actionsForResourceLoad const):
        * dom/Element.cpp:
        (WebCore::Element::setActive):
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        (WebCore::CachedPage::hasExpired const):
        * history/CachedPage.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::startProgressEventTimer):
        (WebCore::HTMLMediaElement::progressEventTimerFired):
        (WebCore::HTMLMediaElement::refreshCachedTime const):
        (WebCore::HTMLMediaElement::invalidateCachedTime const):
        (WebCore::HTMLMediaElement::currentMediaTime const):
        (WebCore::HTMLMediaElement::startPlaybackProgressTimer):
        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::removeBehaviorRestriction):
        (WebCore::MediaElementSession::mostRecentUserInteractionTime const):
        (WebCore::MediaElementSession::resetPlaybackSessionState):
        * html/MediaElementSession.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::PumpSession::PumpSession):
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYield):
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::finalizeFrame):
        * inspector/InspectorCanvas.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::startTracking):
        (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::timestamp):
        * inspector/agents/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::timestamp):
        * inspector/agents/WebHeapAgent.cpp:
        (WebCore::WebHeapAgent::dispatchGarbageCollectedEvent):
        * inspector/agents/WebHeapAgent.h:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::restoreParsedStyleSheet):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didDraw):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::didAccessDecodedData):
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        * page/EventHandler.cpp:
        (WebCore::MaximumDurationTracker::MaximumDurationTracker):
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedElement):
        (WebCore::FocusController::timeSinceFocusWasSet const):
        * page/FocusController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::willPaintContents):
        (WebCore::FrameView::didPaintContents):
        * page/FrameView.h:
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        (WebCore::AnimationBase::beginAnimationUpdateTime const):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::onAnimationStartResponse):
        * page/animation/CSSAnimationController.cpp:
        (WebCore::CSSAnimationControllerPrivate::beginAnimationUpdateTime):
        (WebCore::CSSAnimationControllerPrivate::receivedStartTimeResponse):
        (WebCore::CSSAnimationControllerPrivate::startTimeResponse):
        (WebCore::CSSAnimationController::notifyAnimationStarted):
        * page/animation/CSSAnimationController.h:
        * page/animation/CSSAnimationControllerPrivate.h:
        * page/mac/WheelEventDeltaFilterMac.h:
        * page/mac/WheelEventDeltaFilterMac.mm:
        (WebCore::WheelEventDeltaFilterMac::beginFilteringDeltas):
        (WebCore::WheelEventDeltaFilterMac::updateFromDelta):
        (WebCore::WheelEventDeltaFilterMac::endFilteringDeltas):
        * platform/ControlStates.h:
        (WebCore::ControlStates::timeSinceControlWasFocused const):
        (WebCore::ControlStates::setTimeSinceControlWasFocused):
        * platform/PlatformSpeechSynthesisUtterance.h:
        (WebCore::PlatformSpeechSynthesisUtterance::startTime const):
        (WebCore::PlatformSpeechSynthesisUtterance::setStartTime):
        * platform/gamepad/PlatformGamepad.h:
        (WebCore::PlatformGamepad::lastUpdateTime const):
        (WebCore::PlatformGamepad::connectTime const):
        (WebCore::PlatformGamepad::PlatformGamepad):
        * platform/gamepad/cocoa/GameControllerGamepad.mm:
        (WebCore::GameControllerGamepad::setupAsExtendedGamepad):
        (WebCore::GameControllerGamepad::setupAsGamepad):
        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::HIDGamepad):
        (WebCore::HIDGamepad::valueChanged):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::suspendAnimations):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::notifyAnimationStarted):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerAnimationStarted):
        (WebCore::AVFWrapper::createImageForTimeInRect):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation):
        (WebCore::GraphicsLayerCA::pauseAnimation):
        (WebCore::GraphicsLayerCA::platformCALayerAnimationStarted):
        (WebCore::GraphicsLayerCA::setAnimationOnLayer):
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer):
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerCA::appendToUncommittedAnimations):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation):
        (WebCore::GraphicsLayerCA::AnimationProcessingAction::AnimationProcessingAction):
        * platform/graphics/ca/LayerPool.cpp:
        (WebCore::LayerPool::LayerPool):
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::decayedCapacity const):
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/ca/LayerPool.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerAnimationStarted):
        * platform/graphics/ca/TileGrid.cpp:
        (WebCore::TileGrid::revalidateTiles):
        (WebCore::TileGrid::startedNewCohort):
        (WebCore::TileGrid::TileCohortInfo::timeUntilExpiration):
        (WebCore::TileGrid::cohortRemovalTimerFired):
        * platform/graphics/ca/TileGrid.h:
        (WebCore::TileGrid::TileCohortInfo::TileCohortInfo):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.h:
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (mediaTimeToCurrentTime):
        (-[WebAnimationDelegate animationDidStart:]):
        (PlatformCALayerCocoa::animationStarted):
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::notifyAnimationsStarted):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::animationStarted):
        (PlatformCALayerWin::layerTreeAsString const):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::decodeSample):
        * platform/graphics/texmap/BitmapTexturePool.cpp:
        (WebCore::BitmapTexturePool::releaseUnusedTexturesTimerFired):
        * platform/graphics/texmap/BitmapTexturePool.h:
        (WebCore::BitmapTexturePool::Entry::markIsInUse):
        (WebCore::BitmapTexturePool::Entry::canBeReleased const):
        (): Deleted.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::GraphicsLayerTextureMapper):
        (WebCore::GraphicsLayerTextureMapper::addAnimation):
        (WebCore::GraphicsLayerTextureMapper::pauseAnimation):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::TextureMapperAnimation):
        (WebCore::TextureMapperAnimation::apply):
        (WebCore::TextureMapperAnimation::pause):
        (WebCore::TextureMapperAnimation::resume):
        (WebCore::TextureMapperAnimation::computeTotalRunningTime):
        (WebCore::TextureMapperAnimations::pause):
        (WebCore::TextureMapperAnimations::suspend):
        * platform/graphics/texmap/TextureMapperAnimation.h:
        (WebCore::TextureMapperAnimation::startTime const):
        (WebCore::TextureMapperAnimation::pauseTime const):
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        (WebCore::TextureMapperFPSCounter::TextureMapperFPSCounter):
        (WebCore::TextureMapperFPSCounter::updateFPSAndDisplay):
        * platform/graphics/texmap/TextureMapperFPSCounter.h:
        * platform/graphics/texmap/TextureMapperPlatformLayerBuffer.h:
        (WebCore::TextureMapperPlatformLayerBuffer::markUsed):
        (WebCore::TextureMapperPlatformLayerBuffer::lastUsedTime const):
        (): Deleted.
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
        (WebCore::TextureMapperPlatformLayerProxy::releaseUnusedBuffersTimerFired):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::addAnimation):
        (WebCore::CoordinatedGraphicsLayer::pauseAnimation):
        (WebCore::CoordinatedGraphicsLayer::suspendAnimations):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/mediastream/RealtimeMediaSource.h:
        * platform/mediastream/RealtimeOutgoingVideoSource.cpp:
        (WebCore::RealtimeOutgoingVideoSource::sendFrame):
        * platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
        (WebCore::LibWebRTCAudioModule::StartPlayoutOnAudioThread):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        (WebCore::DisplayCaptureSourceCocoa::stopProducingData):
        (WebCore::DisplayCaptureSourceCocoa::elapsedTime):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
        (WebCore::MockRealtimeAudioSourceMac::render):
        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
        (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::sampleBufferFromPixelBuffer):
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable):
        * platform/mock/MockRealtimeAudioSource.cpp:
        (WebCore::MockRealtimeAudioSource::startProducingData):
        (WebCore::MockRealtimeAudioSource::stopProducingData):
        (WebCore::MockRealtimeAudioSource::elapsedTime):
        (WebCore::MockRealtimeAudioSource::tick):
        (WebCore::MockRealtimeAudioSource::delaySamples):
        * platform/mock/MockRealtimeAudioSource.h:
        (WebCore::MockRealtimeAudioSource::render):
        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::startProducingData):
        (WebCore::MockRealtimeVideoSource::stopProducingData):
        (WebCore::MockRealtimeVideoSource::elapsedTime):
        (WebCore::MockRealtimeVideoSource::drawText):
        (WebCore::MockRealtimeVideoSource::delaySamples):
        (WebCore::MockRealtimeVideoSource::generateFrame):
        * platform/mock/MockRealtimeVideoSource.h:
        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::isUsingProxy):
        * platform/network/DNSResolveQueue.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::suspendAnimations):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::paintFocusRing):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintAreaElementFocusRing):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyAnimationStarted):
        (WebCore::RenderLayerBacking::suspendAnimations):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::didPaintBacking):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::animationProgress const):
        (WebCore::RenderProgress::updateAnimationState):
        * rendering/RenderProgress.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::animationDurationForProgressBar const):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::animationDurationForProgressBar const):
        * rendering/RenderThemeGtk.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::animationDurationForProgressBar const):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::animationDurationForProgressBar const):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::elapsed const):
        (WebCore::SMILTimeContainer::isActive const):
        (WebCore::SMILTimeContainer::isPaused const):
        (WebCore::SMILTimeContainer::isStarted const):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::timerFired):
        * svg/animation/SMILTimeContainer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::delayMediaStreamTrackSamples):
        * testing/MockGamepad.cpp:
        (WebCore::MockGamepad::MockGamepad):
        (WebCore::MockGamepad::updateDetails):
        (WebCore::MockGamepad::setAxisValue):
        (WebCore::MockGamepad::setButtonValue):

2018-03-02  Alejandro G. Castro  <alex@igalia.com>

        Make LibWebRTCProvider port agnostic again after r215424
        https://bugs.webkit.org/show_bug.cgi?id=183080

        Reviewed by Youenn Fablet.

        In the r215424 commit the webRTCAvailable function started to use a function from the DARWIN platform,
        we have moved that code to the cocoa class and created a glib implementation that will be used in the future
        to implement the LibWebRTCProviderGlib class.

        No new tests, this is a refactor.

        * Sources.txt: Add the compilation of the new file.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp: Remove the webRTCAvailable function from this file.
        (WebCore::LibWebRTCProvider::create): We want to use this even when LIBWEBRTC is not used.
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable): Moved the code from the LibWebRTCProvider class.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable): Add the glib implementation, basically true, we are always
        linking libwebrtc for the moment in these situations.

2018-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r222843): [HarfBuzz] Combining enclosed keycap not correctly handled
        https://bugs.webkit.org/show_bug.cgi?id=183246

        Reviewed by Michael Catanzaro.

        We are not correctly handling the combining enclosed keycap since we switched to use
        ComplexTextController. This is because fontForCombiningCharacterSequence() always returns the font of the first
        character, without checking if that font can render the whole sequence or not. Before 222843, the shaper did
        that check when creating the text runs. In this case the sequence was split and a different font was used for the
        text and the mark. This patch makes fontForCombiningCharacterSequence() try to find a suitable font for the
        whole sequence, first looking at the CSS fallbacks and finally at system ones. The result is much better than
        the old one, because we use the same font for both the text and the mark. If there isn't any font to render the
        mark, then we fallback to use the first character font, since we will end up rendering the missing glyph
        character, it's better to use the same font than the first character one.

        Test: fast/text/combining-enclosing-keycap.html

        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::FontCascade::fontForCombiningCharacterSequence const): Check if the first charatcer font can render
        the whole sequence, trying with fallbacks otherwise.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::canRenderCombiningCharacterSequence const): Check if the font face has glyphs for the whole
        sequence not just the first character.

2018-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Remove FontPlatformData fallbacks
        https://bugs.webkit.org/show_bug.cgi?id=183210

        Reviewed by Michael Catanzaro.

        They are only used by FontCache::systemFallbackForCharacters() where a direct FcFontMatch provides the same
        or better results.

        * platform/graphics/FontPlatformData.h: Remove fallbacks.
        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::FontCache::systemFallbackForCharacters): Use FcFontMatch() only.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::fallbacks): Removed.

2018-03-01  Commit Queue  <commit-queue@webkit.org>

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

        it is breaking imported/w3c/web-platform-tests/service-workers
        /service-worker/clients-matchall-exact-controller.https.html
        (Requested by youenn on #webkit).

        Reverted changeset:

        "Clients should register to StorageProcess with their service
        worker registration identifier"
        https://bugs.webkit.org/show_bug.cgi?id=182313
        https://trac.webkit.org/changeset/229153

2018-03-01  Youenn Fablet  <youenn@apple.com>

        Clients should register to StorageProcess with their service worker registration identifier
        https://bugs.webkit.org/show_bug.cgi?id=182313

        Reviewed by Chris Dumez.

        No observable change of behavior in regular conditions.
        When service worker process crashes, the service worker identifiers sent by the WebProcess might be wrong
        and we will not be able to retrieve the registration from these identifiers.
        The storage process will be able to still process correctly messages coming from the WebProcess to register clients of the registration.
        Otherwise, there is a chance that WebProcess clients will not be added to the SWServerRegistration.m_clientsUsingRegistration maps.

        * dom/Document.cpp:
        (WebCore::Document::setServiceWorkerConnection):
        * workers/service/SWClientConnection.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registerServiceWorkerClient):
        * workers/service/server/SWServer.h:

2018-03-01  Youenn Fablet  <youenn@apple.com>

        Add API test to validate setting of service worker and cache storage directories
        https://bugs.webkit.org/show_bug.cgi?id=182543

        Reviewed by Chris Dumez.

        Covered by API tests.

        Add getters to service worker registration directory.

        * testing/Internals.cpp:
        (WebCore::Internals::serviceWorkerRegistrationDirectory):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/SWClientConnection.h:
        * workers/service/server/RegistrationDatabase.h:
        (WebCore::RegistrationDatabase::serviceWorkerRegistrationDirectory const):
        * workers/service/server/RegistrationStore.h:
        (WebCore::RegistrationStore::serviceWorkerRegistrationDirectory const):
        * workers/service/server/SWServer.h:
        (WebCore::SWServer::serviceWorkerRegistrationDirectory const):

2018-03-01  Youenn Fablet  <youenn@apple.com>

        SWServer::removeClientServiceWorkerRegistration should not log an error if there is no registration
        https://bugs.webkit.org/show_bug.cgi?id=183248

        Reviewed by Chris Dumez.

        No change of behavior.
        Removed the error logging.
        As can be seen from running api and layout tests, a web process can ask a registration to be unregistered
        and by the time it goes to the StorageProcess, the registration is already cleared.

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

2018-03-01  Daniel Bates  <dabates@apple.com>

        CSS ::selection stroke-color and stroke-width are not applied to selected text in text fields
        and ::selection:window-inactive stroke-color and stroke-width are never applied
        https://bugs.webkit.org/show_bug.cgi?id=183178

        Reviewed by David Hyatt.

        This change fixes the following two issues:
            1. Properties stroke-color and stroke-width are not applied to the ::selection pseudo-
               element of text fields.
            2. Properties stroke-color and stroke-width are never applied to ::selection:window-inactive
               pseudo elements.

        Currently when computing the paint styles for selected text we query the cached styles for
        the ::selection pseudo element on the renderer. Text fields are implemented using a User Agent
        shadow DOM. With regards to issue (1) the renderer queried was the inner most renderer for
        the text in the text field. But it should have been the shadow host renderer (i.e. the renderer
        for the <input>). With regards to issue (2) we cannot retrieve cached styles for the
        ::selection pseudo element because it can be effected by a pseudo class, :window-inactive,
        which matches when the page is deactivated (i.e. the window is in the background as the user
        made another window the frontmost window). Both of these issues are fixed by making use
        of RenderElement::selectionPseudoStyle().

        Tests: fast/selectors/selection-window-inactive-stroke-color.html
               fast/selectors/selection-window-inactive-text-shadow.html
               fast/selectors/text-field-selection-stroke-color.html
               fast/selectors/text-field-selection-text-shadow.html
               fast/selectors/text-field-selection-window-inactive-stroke-color.html
               fast/selectors/text-field-selection-window-inactive-text-shadow.html

        * rendering/RenderText.h:
        (WebCore::RenderText::selectionPseudoStyle const): Add a convenience function that turns
        around and calls the function of the same name on its parent.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle): Modified to use RenderText::selectionPseudoStyle()
        instead of directly querying for the cached styles for the ::selection pseudo element.

2018-03-01  Per Arne Vollan  <pvollan@apple.com>

        Scrollbar preferences are ignored when the WebContent process doesn't have access to the WindowServer.
        https://bugs.webkit.org/show_bug.cgi?id=183231
        <rdar://problem/37793457>

        Reviewed by Brent Fulgham.

        When the WebContent process doesn't have access to the WindowServer, the scrollbars are always of the overlay type.
        The notification about scrollbar preferences is never received by the WebContent process when there is no
        WindowServer access. This can be fixed by adding an observer of scrollbar preferences in the UI process, and
        notifying the WebProcess about this by sending it a message. This message should also contain the preferred
        scrollbar type, since the call '[NSScroller preferredScrollerStyle]' will always return the overlay style when
        there is no WindowServer access.

        No new tests, covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/NSScrollerImpDetails.mm:
        (WebCore::ScrollerStyle::recommendedScrollerStyle):
        (WebCore::ScrollerStyle::setUseOverlayScrollbars):
        (WebCore::recommendedScrollerStyle): Deleted.
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::mouseEnteredScrollbar const):
        (WebCore::ScrollAnimatorMac::mouseExitedScrollbar const):
        (WebCore::ScrollAnimatorMac::shouldScrollbarParticipateInHitTesting):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::registerScrollbar):
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::usesOverlayScrollbarsChanged):

2018-03-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Temporarily enable user-installed-fonts everywhere until we can stop crashing on launch
        https://bugs.webkit.org/show_bug.cgi?id=183255

        Unreviewed.

        Tests are already disabled.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:

2018-03-01  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Split DNS cache expiration and connection timeout setting.
        https://bugs.webkit.org/show_bug.cgi?id=182979

        It was mis-implemented and was named ambiguous name 'enableTimeout'.
        Implement each feature correctly.

        Reviewed by Per Arne Vollan.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::EnvironmentVariableReader::read):
        (WebCore::EnvironmentVariableReader::defined):
        (WebCore::EnvironmentVariableReader::readAs):
        (WebCore::EnvironmentVariableReader::sscanTemplate):
        (WebCore::EnvironmentVariableReader::sscanTemplate<unsigned>):
        (WebCore::CurlContext::CurlContext):
        (WebCore::safeTimeValue):
        (WebCore::CurlHandle::setDnsCacheTimeout):
        (WebCore::CurlHandle::setConnectTimeout):
        (WebCore::CurlHandle::setTimeout):
        (WebCore::CurlHandle::enableTimeout): Deleted.
        * platform/network/curl/CurlContext.h:
        (WebCore::CurlContext::dnsCacheTimeout const):
        (WebCore::CurlContext::connectTimeout const):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):

2018-03-01  Zalan Bujtas  <zalan@apple.com>

        Remove RenderElement::s_noLongerAffectsParentBlock
        https://bugs.webkit.org/show_bug.cgi?id=183196
        <rdar://problem/38030797>

        Reviewed by Antti Koivisto.

        Remove the hack to track floating/out-of-flow changes between styleWillChange and styleDidChange.

        Covered by existing tests.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::noLongerAffectsParentBlock const):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::noLongerAffectsParentBlock const): Deleted.

2018-03-01  Chris Dumez  <cdumez@apple.com>

        imported/w3c/web-platform-tests/html/browsers/windows/browsing-context.html fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183225
        <rdar://problem/38003828>

        Reviewed by Alex Christensen.

        Bypass navigation policy check when loading about:blank. This does not seem necessary and it would not
        be Web-compatible for such policy check to happen synchronously. This is because an iframe without src
        or src="about:blank" should load synchronously as per HTML specification.

        Test: http/wpt/html/browsers/windows/browsing-context.html

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):

2018-03-01  Christopher Reid  <chris.reid@sony.com>

        [Curl] Linker errors in some curl files due to missing exports
        https://bugs.webkit.org/show_bug.cgi?id=183238

        Reviewed by Alex Christensen.

        No new tests, no change in behavior.

        Adding WEBCORE_EXPORT to functions now used in WebKit.

        * platform/network/NetworkStorageSession.h:
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/CurlContext.h:

2018-03-01  Commit Queue  <commit-queue@webkit.org>

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

        It breaks AppleWin compilation (Requested by alexg__ on
        #webkit).

        Reverted changeset:

        "Make LibWebRTCProvider port agnostic again after r215424"
        https://bugs.webkit.org/show_bug.cgi?id=183080
        https://trac.webkit.org/changeset/229130

2018-03-01  Alejandro G. Castro  <alex@igalia.com>

        Make LibWebRTCProvider port agnostic again after r215424
        https://bugs.webkit.org/show_bug.cgi?id=183080

        Reviewed by Youenn Fablet.

        In the r215424 commit the webRTCAvailable function started to use a function from the DARWIN platform,
        we have moved that code to the cocoa class and created a glib implementation that will be used in the future
        to implement the LibWebRTCProviderGlib class.

        No new tests, this is a refactor.

        * Sources.txt: Add the compilation of the new file.
        * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp: Remove the webRTCAvailable function from this file.
        (WebCore::LibWebRTCProvider::create): We want to use this even when LIBWEBRTC is not used.
        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable): Moved the code from the LibWebRTCProvider class.
        * platform/mediastream/libwebrtc/LibWebRTCProviderGlib.cpp:
        (WebCore::LibWebRTCProvider::webRTCAvailable): Add the glib implementation, basically true, we are always
        linking libwebrtc for the moment in these situations.

2018-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [FreeType] Color emojis in WebKitGTK+ for great justice
        https://bugs.webkit.org/show_bug.cgi?id=183155

        Reviewed by Michael Catanzaro.

        Emojis are actually rendered if there's an emoji font installed in the system, but the size is so tiny that we
        don't see them. This is because for some reason the matrix we are getting from fontconfig contains a scale,
        which we don't expect. We only get the fontconfig matrix to apply rotations in case of oblique fonts, and then we
        always apply the scale for the computed pixel font size. Ignoring the fontconfig matrix scale fixes the issue.

        * platform/graphics/freetype/FontCacheFreeType.cpp:
        (WebCore::fontWeightToFontconfigWeight): Moved here since it's now used by configurePatternForFontDescription().
        (WebCore::configurePatternForFontDescription): Helper function to apply the same options for fallback pattern.
        (WebCore::createFontConfigPatternForCharacters): Use configurePatternForFontDescription().
        (WebCore::findBestFontGivenFallbacks): Adopt the returned reference.
        (WebCore::FontCache::systemFallbackForCharacters): Clean it up.
        (WebCore::FontCache::createFontPlatformData): Use configurePatternForFontDescription().
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::buildScaledFont): Ignore the scale returned by fontconfig matrix.

2018-02-28  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] text samples no longer processed
        https://bugs.webkit.org/show_bug.cgi?id=183212

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample): Refer to
        track stream ID instead of (potentially) manually generated track
        ID stored as hashmap keys.

2018-02-28  Tim Horton  <timothy_horton@apple.com>

        Push WTF_PLATFORM_IOS down into preprocessor.pm instead of trying to determine it inside
        https://bugs.webkit.org/show_bug.cgi?id=183193

        Reviewed by Andy Estes.

        * DerivedSources.make:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        Instead of trying to discern WTF_PLATFORM_IOS inside preprocessor.pm,
        push it down from DerivedSources.make. Also clean up DerivedSources.make
        a tiny bit by adding a variable, FEATURE_AND_PLATFORM_DEFINES, which
        contains both FEATURE_DEFINES and WTF_PLATFORM macros if needed.

2018-02-28  Nan Wang  <n_wang@apple.com>

        AX: AOM: Dispatch accessiblesetvalue event
        https://bugs.webkit.org/show_bug.cgi?id=183021
        <rdar://problem/37764242>

        Reviewed by Chris Fleizach.

        Accessibility events.
        Spec: https://wicg.github.io/aom/spec/phase2.html

        Added a new event type AccessibleSetValueEvent. 

        Test: accessibility/mac/AOM-event-accessiblesetvalue.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canSetValueAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent):
        (WebCore::AccessibilityObject::dispatchAccessibleSetValueEvent):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setValue):
        * accessibility/AccessibilityScrollbar.cpp:
        (WebCore::AccessibilityScrollbar::setValue):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::setValue):
        * accessibility/AccessibleSetValueEvent.cpp: Added.
        (WebCore::AccessibleSetValueEvent::AccessibleSetValueEvent):
        * accessibility/AccessibleSetValueEvent.h: Added.
        (WebCore::AccessibleSetValueEvent::create):
        (WebCore::AccessibleSetValueEvent::value const):
        * accessibility/AccessibleSetValueEvent.idl: Added.
        * dom/Element.idl:
        * dom/EventNames.h:
        * dom/EventNames.in:

2018-02-28  Chris Dumez  <cdumez@apple.com>

        html/browsers/browsing-the-web/navigating-across-documents/006.html fails with async policy delegates
        https://bugs.webkit.org/show_bug.cgi?id=183168
        <rdar://problem/37951341>

        Reviewed by Alex Christensen.

        The test has an anchor element with both a 'click' event handler which submits a form
        and an href attribute. When clicking the link, as per specification, things happen in
        this order:
        1. We fire the click event at the anchor, which will execute the event handler and submit the form.
           Submitting the form *schedules* a navigation to 'click.html'.
        2. We execute the anchor activation code which *navigates* to 'href.html'. The navigation to
           'href' is supposed to cancel the pending navigation to 'click.html' and we should navigate
           to 'href.html', which is what the test asserts.

        The issue for us is that we do not cancel pending navigations until after the navigation
        policy decision is made, when the provisional loads actually starts, in FrameLoader::provisionalLoadStarted().
        Because the policy decision for the navigation can now be made asynchronously, the NavigationScheduler
        timer can now fire while the decision is made and we'll submit the form, thus navigating to
        'click.html'.

        To address the issue, we now cancel any pending navigations in FrameLoader::loadWithDocumentLoader(),
        *before* doing the policy check for the navigation.

        Test: http/wpt/html/browsers/browsing-the-web/navigating-across-documents/006.html

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

2018-02-28  John Wilander  <wilander@apple.com>

        Add a second tier of prevalence to facilitate telemetry on very prevalent domains
        https://bugs.webkit.org/show_bug.cgi?id=183218
        <rdar://problem/37992388>

        Reviewed by Brent Fulgham.

        Test: http/tests/resourceLoadStatistics/classify-as-very-prevalent-based-on-mixed-statistics.html

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
            Handling of the new boolean field isVeryPrevalentResource.
        * loader/ResourceLoadStatistics.h:
            Added the new boolean field isVeryPrevalentResource.

2018-02-28  Alex Christensen  <achristensen@webkit.org>

        Reduce use of NetworkingContext in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=183213

        Reviewed by Brady Eidson.

        NetworkingContext is intended to be used only with ResourceHandle, which is now only used in WebKitLegacy.
        Now that we don't use ResourceHandle in the WebProcess, everything that was done through the NetworkingContext
        can now be done a cleaner way with no change in behavior.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLink):
        * loader/LoaderStrategy.h:
        * platform/network/ProxyServer.h:
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyServersForURL):
        * platform/network/curl/ProxyServerCurl.cpp:
        (WebCore::proxyServersForURL):
        * platform/network/soup/ProxyServerSoup.cpp:
        (WebCore::proxyServersForURL):

2018-02-28  Zalan Bujtas  <zalan@apple.com>

        Remove RenderElement::s_affectsParentBlock
        https://bugs.webkit.org/show_bug.cgi?id=183187
        <rdar://problem/37961079>

        Reviewed by Antti Koivisto.

        Remove the hack to track floating/out-of-flow changes between styleWillChange and styleDidChange.

        Covered by existing tests.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderElement.h:

2018-02-28  Antti Koivisto  <antti@apple.com>

        Filter attribute selectors with selector filter
        https://bugs.webkit.org/show_bug.cgi?id=183200

        Reviewed by Zalan Bujtas.

        Currently selector filtering is done based on tags, classes and ids. We should include attributes too.

        This patch adds filtering based on attribute name (but not content).

        * css/SelectorFilter.cpp:
        (WebCore::isExcludedAttribute):

            Ignore id, class and style attributes. First two are already handled and the last is common but is rarely
            used in selectors.

        (WebCore::collectElementIdentifierHashes):

            Collect attributes.
            Remove the unnecessary StyledElement casting.

        (WebCore::collectSimpleSelectorHash):

            Collect attribute selectors.

        (WebCore::chooseSelectorHashesForFilter):

            Pick attributes with high priority for the filter as it is likely a good signal.

2018-02-27  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Convert VRPlatformDisplayInfo into a class
        https://bugs.webkit.org/show_bug.cgi?id=183162

        Reviewed by Žan Doberšek.

        In preparation for further changes we're transforming the
        VRPlatformDisplayInfo into a class. All the members are now private
        and the class provides the needed getters/setters.

        Apart from that VRDisplayCapabilityFlags is now just an unsigned and
        the different flags are defined in VRDisplayCapabilityFlag enum.
        Another cleanup was the removal of VRDisplayCapabilities.cpp as
        everything can be implemented in the header.

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::VRDisplay):
        (WebCore::VRDisplay::isConnected const):
        (WebCore::VRDisplay::stageParameters const):
        * Modules/webvr/VRDisplayCapabilities.cpp: Removed.
        * Modules/webvr/VRDisplayCapabilities.h:
        (WebCore::VRDisplayCapabilities::hasPosition const):
        (WebCore::VRDisplayCapabilities::hasOrientation const):
        (WebCore::VRDisplayCapabilities::hasExternalDisplay const):
        (WebCore::VRDisplayCapabilities::canPresent const):
        (WebCore::VRDisplayCapabilities::maxLayer const):
        (WebCore::VRDisplayCapabilities::VRDisplayCapabilities):
        * Sources.txt:
        * platform/vr/VRPlatformDisplay.h:
        (WebCore::VRPlatformDisplayInfo::displayName const):
        (WebCore::VRPlatformDisplayInfo::setDisplayName):
        (WebCore::VRPlatformDisplayInfo::isConnected const):
        (WebCore::VRPlatformDisplayInfo::setIsConnected):
        (WebCore::VRPlatformDisplayInfo::isMounted const):
        (WebCore::VRPlatformDisplayInfo::setIsMounted):
        (WebCore::VRPlatformDisplayInfo::capabilityFlags const):
        (WebCore::VRPlatformDisplayInfo::setCapabilityFlags):
        (WebCore::VRPlatformDisplayInfo::displayIdentifier const):
        (WebCore::VRPlatformDisplayInfo::setDisplayIdentifier):
        (WebCore::VRPlatformDisplayInfo::eyeTranslation const):
        (WebCore::VRPlatformDisplayInfo::setEyeTranslation):
        (WebCore::VRPlatformDisplayInfo::eyeFieldOfView const):
        (WebCore::VRPlatformDisplayInfo::setEyeFieldOfView):
        (WebCore::VRPlatformDisplayInfo::renderSize const):
        (WebCore::VRPlatformDisplayInfo::setRenderSize):
        (WebCore::VRPlatformDisplayInfo::setPlayAreaBounds):
        (WebCore::VRPlatformDisplayInfo::playAreaBounds const):
        (WebCore::VRPlatformDisplayInfo::setSittingToStandingTransform):
        (WebCore::VRPlatformDisplayInfo::sittingToStandingTransform const):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):
        (WebCore::VRPlatformDisplayOpenVR::updateEyeParameters):
        (WebCore::VRPlatformDisplayOpenVR::updateStageParameters):

2018-02-27  Commit Queue  <commit-queue@webkit.org>

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

        This patch causes crashes on two SVG tests (Requested by fredw
        on #webkit).

        Reverted changeset:

        "Relayout frames after AsyncFrameScrolling or FrameFlattening
        option is changed"
        https://bugs.webkit.org/show_bug.cgi?id=183081
        https://trac.webkit.org/changeset/229060

2018-02-27  Youenn Fablet  <youenn@apple.com>

        Do not trigger a service worker match in case of document redirection if it will be already served by AppCache
        https://bugs.webkit.org/show_bug.cgi?id=183185
        <rdar://problem/37693796>

        Reviewed by Chris Dumez.

        Disabling service worker matching in case there is a substitute data.
        Otherwise there is a risk for a double load, substitute data first and the new load
        triggered if matching a new registration.
        A future fix should first do service worker registration matching and if there is no registration query appcache.

        Test: http/tests/appcache/main-resource-redirect-with-sw.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):

2018-02-27  Tim Horton  <timothy_horton@apple.com>

        Ensure target triple is propagated correctly to DerivedSources.make
        https://bugs.webkit.org/show_bug.cgi?id=183189
        <rdar://problem/37959694>

        Reviewed by Dan Bernstein.

        If we don't propagate the target triple, we can sometimes build with
        the wrong options enabled.

        * Configurations/Base.xcconfig:
        Mentioning LLVM_TARGET_TRIPLE_SUFFIX here is required to get it to be available to scripts.

        * DerivedSources.make:
        Propagate the target triple into our compiler invocations.

2018-02-27  Doug Russell  <doug@getitdownonpaper.com>

        AX: Spell check and style attributes should be optional when fetching attributed string
        https://bugs.webkit.org/show_bug.cgi?id=160744

        Reviewed by Chris Fleizach.

        The overhead of fetching a spell checked attributed string via AX API is substantial. 
        In some cases on the order of 7/8 of the total time spent fetching the string.

        This change introduces the new attribute AXAttributedStringForTextMarkerRangeWithOptions which accepts an NSDictionary as it's parameter with keys "AXTextMarkerRange" (AXTextMarkerRangeRef) and "AXSpellCheck" (NSNumber(BOOL)).

        AXAttributedStringForTextMarkerRange will remain unchanged.

        Tests: accessibility/mac/attributed-string/attributed-string-for-range-with-options.html
               accessibility/mac/attributed-string/attributed-string-for-range.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributedStringAppendText):
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:spellCheck:]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]): Deleted.

2018-02-27  Daniel Bates  <dabates@apple.com>

        Standardize terminology for marked text
        https://bugs.webkit.org/show_bug.cgi?id=180999

        Reviewed by Zalan Bujtas.

        The name MarkerSubrange is a misnomer for a data structure that associates a text subrange with a type
        and optional document marker. In particular, a MarkerSubrange may not always correspond to a document
        marker. For instance, selected text is represented using a MarkerSubrange that does not have a
        corresponding document marker. Let's standardize on the phrase "marked text" as the canonical way to
        describe these tagged text subranges.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::localSelectionRect const):
        (WebCore::InlineTextBox::MarkedTextStyle::areBackgroundMarkedTextStylesEqual):
        (WebCore::InlineTextBox::MarkedTextStyle::areForegroundMarkedTextStylesEqual):
        (WebCore::InlineTextBox::MarkedTextStyle::areDecorationMarkedTextStylesEqual):
        (WebCore::InlineTextBox::StyledMarkedText::StyledMarkedText):
        (WebCore::createMarkedTextFromSelectionInBox):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintPlatformDocumentMarkers):
        (WebCore::InlineTextBox::paintPlatformDocumentMarker):
        (WebCore::InlineTextBox::computeStyleForUnmarkedMarkedText const):
        (WebCore::InlineTextBox::resolveStyleForMarkedText):
        (WebCore::InlineTextBox::subdivideAndResolveStyle):
        (WebCore::InlineTextBox::coalesceAdjacentMarkedTexts):
        (WebCore::InlineTextBox::collectMarkedTextsForDraggedContent):
        (WebCore::InlineTextBox::collectMarkedTextsForDocumentMarkers):
        (WebCore::InlineTextBox::paintMarkedTexts):
        (WebCore::InlineTextBox::paintMarkedTextBackground):
        (WebCore::InlineTextBox::paintMarkedTextForeground):
        (WebCore::InlineTextBox::paintMarkedTextDecoration):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areBackgroundMarkerSubrangeStylesEqual): Deleted.
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areForegroundMarkerSubrangeStylesEqual): Deleted.
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areDecorationMarkerSubrangeStylesEqual): Deleted.
        (WebCore::InlineTextBox::StyledMarkerSubrange::StyledMarkerSubrange): Deleted.
        (WebCore::createMarkerSubrangeFromSelectionInBox): Deleted.
        (WebCore::InlineTextBox::computeStyleForUnmarkedMarkerSubrange const): Deleted.
        (WebCore::InlineTextBox::resolveStyleForSubrange): Deleted.
        (WebCore::InlineTextBox::coalesceAdjacentSubranges): Deleted.
        (WebCore::InlineTextBox::collectSubrangesForDraggedContent): Deleted.
        (WebCore::InlineTextBox::collectSubrangesForDocumentMarkers): Deleted.
        (WebCore::InlineTextBox::paintMarkerSubranges): Deleted.
        (WebCore::InlineTextBox::paintTextSubrangeBackground): Deleted.
        (WebCore::InlineTextBox::paintTextSubrangeForeground): Deleted.
        (WebCore::InlineTextBox::paintTextSubrangeDecoration): Deleted.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::paintMarkedTexts):
        (WebCore::InlineTextBox::paintMarkerSubranges): Deleted.
        * rendering/MarkedText.cpp: Renamed from Source/WebCore/rendering/MarkerSubrange.cpp.
        (WebCore::subdivide):
        * rendering/MarkedText.h: Renamed from Source/WebCore/rendering/MarkerSubrange.h.
        (WebCore::MarkedText::MarkedText):
        (WebCore::MarkedText::isEmpty const):
        (WebCore::MarkedText::operator!= const):
        (WebCore::MarkedText::operator== const):

2018-02-27  Chris Dumez  <cdumez@apple.com>

        Unreviewed, roll out r228430.

        Roll out r228430 now that it is no longer needed after r228852.

        No new tests, initial fix is still covered by WebKit.RespondToPolicyForNavigationResponseAsynchronously
        API test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::schedule):

2018-02-27  Antoine Quint  <graouts@apple.com>

        [Web Animations] Correct implementation of pending tasks and promises
        https://bugs.webkit.org/show_bug.cgi?id=183161

        Reviewed by Dean Jackson.

        We had an incorrect implementation of the spec due to two misinterpretations.

        The first one is about pending tasks (play and pause) which the spec says should
        be performed by "scheduling a task". In WebCore, this means using postTask() on a
        ScriptExecutionContext, such as Document. One of the big practical changes is that
        calling play() on an animation correctly sets its startTime to null (unresolved)
        immediately after the call to play() returns before setting it to a resolved value
        when the task is performed asynchronously. As a result, the playState is now always
        accurate.

        The second one is about promises where new promises need to be created in certain
        situations called out by the spec. We used to call clear() on them, but this merely
        resets the fulfillment or rejection state of the promise, while the spec requires
        a different object to be returned for the promise. We now create our promises using
        makeUniqueRef<> when new promise objects are expected to be created.

        This patch also corrects a few smaller bugs and spec compliant issues, called out
        below, related to pending tasks and promises uncovered while looking at relevant
        WPT tests.

        * animation/DocumentTimeline.h: Expose the Document used to create this timeline such
        that it may be used by WebAnimation objects registered for this timeline when scheduling
        a task is required via postTask().
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::WebAnimation):
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::cancel): Ensure the finished promise has not already been fulfilled
        before rejecting it. While the spec does not specifically call this out, a promise may not
        be rejected after being fulfilled, and we would hit an ASSERT if we didn't also check that
        it was in the correct pending state before attemping to reject it.
        (WebCore::WebAnimation::resetPendingTasks):
        (WebCore::WebAnimation::finish):
        (WebCore::WebAnimation::updateFinishedState):
        (WebCore::WebAnimation::finishNotificationSteps):
        (WebCore::WebAnimation::play): We used to only check for a pending pause task before canceling
        that task, but the spec says to check for either a pending pause or play task (ie. pending())
        and to cancel whichever is scheduled.
        (WebCore::WebAnimation::runPendingPlayTask): We were missing an assertion called out by the
        spec when running a pending task.
        (WebCore::WebAnimation::pause):
        (WebCore::WebAnimation::runPendingPauseTask):
        (WebCore::WebAnimation::updatePendingTasks): We now use postTask() on the animation's associated
        timeline's document to schedule pending tasks for which the criteria to run are met, ie. there
        is an associated timeline.
        * animation/WebAnimation.h:

2018-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Implement additional SPI for adjusting viewport shrink-to-fit behavior
        https://bugs.webkit.org/show_bug.cgi?id=183100
        <rdar://problem/37840987>

        Reviewed by Tim Horton.

        Introduce new customization options to ViewportConfiguration. The first is m_forceHorizontalShrinkToFit, which
        (when set to true) forces the viewport to scale using shrink-to-fit heuristics, regardless of whether
        "shrink-to-fit=no" is specified via viewport parameters or if content width did not exceed minimum layout size.
        The second is m_viewSize, which reflects the true size of the viewport. See WebKit ChangeLog for more details.

        Tests: ViewportSizingTests.ForceShrinkToFitViewportOverridesViewportParameters
               ViewportSizingTests.ShrinkToFitViewportWithMinimumAllowedLayoutWidth

        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):

        Plumb the real size of the view alongside the minimum layout size when updating the minimum layout size.

        (WebCore::ViewportConfiguration::setForceHorizontalShrinkToFit):
        (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints const):

        Bail early and return true if forceHorizontalShrinkToFit is set. This forces shrink-to-fit even in cases where
        "shrink-to-fit" is set to "no", or content dimensions don't exceed layout dimensions.

        (WebCore::ViewportConfiguration::initialScaleFromSize const):

        Use view dimensions rather than minimum layout dimensions when computing the initial scale. Minimum layout size
        is no longer always equal to the size of the view if the client has specified a minimum allowed layout width. As
        such, when computing the initial scale, to ensure that the content (which was laid out using the minimum layout
        size) fits within the real viewport, we need to divide real viewport dimensions by content dimensions.

        (WebCore::ViewportConfiguration::minimumScale const):

        Similarly, use view size instead of minimum layout size to compute minimum scale.

        (WebCore::ViewportConfiguration::description const):
        * page/ViewportConfiguration.h:

2018-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Unreviewed, fix the debug build after r228877.

        In the case where CAN_DISALLOW_USER_INSTALLED_FONTS is enabled, this function doesn't return anything when
        allowUserInstalledFonts != AllowUserInstalledFonts::No. Fix the build by moving `return nullptr;` back out of
        the `#else`.

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

2018-02-27  Milan Crha  <mcrha@redhat.com>

        Potential privacy issue: DNS prefetching can be re-enabled
        https://bugs.webkit.org/show_bug.cgi?id=182924

        Reviewed by Michael Catanzaro.

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

2018-02-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the procedure to set the target effect of an animation
        https://bugs.webkit.org/show_bug.cgi?id=183146

        Reviewed by Dean Jackson.

        We only had a partial implementation of setEffect() and we now update it to cover the entire
        implementation as mandated by the spec. While this doesn't yield any WPT results changes, this
        patch will help getting a significant number of new PASS results when we get around to implement
        correct support for async procedures (pending pause/play tasks and promises) in the next patch.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setEffect):

2018-02-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Update the playState implementation
        https://bugs.webkit.org/show_bug.cgi?id=183145

        Reviewed by Dean Jackson.

        The Web Animations spec has changed since we first implemented the playState property and the "pending"
        enum value has been dropped since then (there is a separate "pending" property which we also implement).
        We update our implementation to match the latest spec text. This does not change WPT test results a lot,
        but this patch will help getting a significant number of new PASS results when we get around to implementing
        correct support for async procedures (pending pause/play tasks and promises) in a couple of patches.
  
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::playState const):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2018-02-27  Wenson Hsieh  <wenson_hsieh@apple.com>

        Address post-review comment after r229049.
        https://bugs.webkit.org/show_bug.cgi?id=183142

        Reviewed by Tim Horton.

        Wrap a newly added string literal with ASCIILiteral.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::extraDefaultStyleSheet):

2018-02-26  Mark Lam  <mark.lam@apple.com>

        Modernize FINALIZE_CODE and peer macros to use __VA_ARGS__ arguments.
        https://bugs.webkit.org/show_bug.cgi?id=183159
        <rdar://problem/37930837>

        Reviewed by Keith Miller.

        No new tests needed because this is just a refactoring patch.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):

2018-02-26  Dan Bernstein  <mitz@apple.com>

        Removed references to files that were removed in r228912.

        * WebCore.xcodeproj/project.pbxproj: Removed references to SourcesIOS.txt and SourcesMac.txt.

2018-02-26  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Tweak UA stylesheet to improve legibility of rendered text
        https://bugs.webkit.org/show_bug.cgi?id=183142
        <rdar://problem/37912966>

        Reviewed by Tim Horton.

        Force text-size-adjust and hyphens to be always on in EXTRA_ZOOM_MODE. To accomplish this, we override the extra
        style sheet in RenderTheme to include these two style rules.

        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::extraDefaultStyleSheet):

2018-02-26  Don Olmstead  <don.olmstead@sony.com>

        Fix WebCore includes within WebKitLegacy
        https://bugs.webkit.org/show_bug.cgi?id=183147

        Reviewed by Tim Horton.

        No new tests. No change in behavior.

        * PlatformWin.cmake:
        * platform/win/GDIUtilities.h:

2018-02-26  Youenn Fablet  <youenn@apple.com>

        Add some more release logging related to DocumentWriter::addData crash
        https://bugs.webkit.org/show_bug.cgi?id=183141

        Reviewed by Chris Dumez.

        No change of behavior.
        Add some additional release logging to verify whether DocumentWriter::begin was called and exited before updating its state.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/DocumentWriter.h:

2018-02-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Implement the procedure to set the start time
        https://bugs.webkit.org/show_bug.cgi?id=183137

        Reviewed by Dean Jackson.

        Implement the procedure to set the start time as setBindingsStartTime() and use the setStartTime() method as
        an internal method to set the m_startTime instance variable and invalidate the timing model rather than run
        the entire procedure which should only be called when setting the "startTime" property through the JS API.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::setBindingsStartTime):
        (WebCore::WebAnimation::setStartTime):
        (WebCore::WebAnimation::silentlySetCurrentTime):
        (WebCore::WebAnimation::finish):
        (WebCore::WebAnimation::updateFinishedState):
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::runPendingPauseTask):

2018-02-26  Christopher Reid  <chris.reid@sony.com>

        [Curl] Cookies are not being added to the Cookie field in Request Headers
        https://bugs.webkit.org/show_bug.cgi?id=183095

        Reviewed by Alex Christensen.

        Populating the Cookie request header field now that cookies are no longer handled in libcurl.

        * platform/network/curl/CookieJarCurlDatabase.cpp: Renaming the httpOnly variable as its actual use wasn't clear
        * platform/network/curl/ResourceHandleCurl.cpp:

2018-02-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure setting the hold time invalidates the timing model
        https://bugs.webkit.org/show_bug.cgi?id=183136

        Reviewed by Dean Jackson.

        We used to always set the m_holdTime member variable directly, but the computation of the currentTime
        depends on the value of m_holdTime, so setting the hold time should invalidate the timing model as well
        as setting the m_holdTime member variable. In this patch we add a new setHoldTime() private method that
        sets the member variable and invalidates the timing model.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setTimeline):
        (WebCore::WebAnimation::setHoldTime):
        (WebCore::WebAnimation::silentlySetCurrentTime):
        (WebCore::WebAnimation::setCurrentTime):
        (WebCore::WebAnimation::cancel):
        (WebCore::WebAnimation::finish):
        (WebCore::WebAnimation::updateFinishedState):
        (WebCore::WebAnimation::play):
        (WebCore::WebAnimation::runPendingPlayTask):
        (WebCore::WebAnimation::pause):
        (WebCore::WebAnimation::runPendingPauseTask):
        * animation/WebAnimation.h:

2018-02-26  Youenn Fablet  <youenn@apple.com>

        MessagePort is not always destroyed in the right thread
        https://bugs.webkit.org/show_bug.cgi?id=183053

        Reviewed by Chris Dumez.

        Make existingMessagePortForIdentifier take a lambda so that we hold the lock until there
        is no longer a need to keep the MessagePort around.
        This is very time sensitive and does not happen a lot when running WPT tests.

        Update existing call sites to pass a lambda.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::existingMessagePortForIdentifier):
        * dom/MessagePort.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::postMessageToRemote):
        (WebCore::MessagePortChannelProviderImpl::checkProcessLocalPortForActivity):

2018-02-26  Commit Queue  <commit-queue@webkit.org>

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

        This is breaking some websites (Requested by youenn on
        #webkit).

        Reverted changeset:

        "Use no-cache fetch mode when loading main documents with
        location.reload()"
        https://bugs.webkit.org/show_bug.cgi?id=181285
        https://trac.webkit.org/changeset/226745

2018-02-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, USE_GSTREAMER_PLAYBIN3 build fix.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        There is no such ENABLE_GSTREAMER_PLAYBIN3.

2018-02-26  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, manual rollout of r228866 causing EGL_BAD_CONTEXT errors

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        Create an EGL display, even in Wayland.

2018-02-21  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][OpenVR] Retrieve displayId and the z-depth of eye view frustum
        https://bugs.webkit.org/show_bug.cgi?id=182999

        Reviewed by Žan Doberšek.

        Retrieve the z-depth of the eye view frustum and the HMD unique id.
        The unique identifier is generated by the VRPlatormManager whereas
        we use the default values from the spec for the z-depth (those can
        be changed by applications later via JavaScript).

        Once this lands the only remaining data to be retrieved from VR
        backends for VRDisplay is the pose (getPose() call) and the frame
        data (getFrameData() call).

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::VRDisplay):
        (WebCore::VRDisplay::displayId const): Deleted.
        (WebCore::VRDisplay::displayName const): Deleted.
        (WebCore::VRDisplay::depthNear const): Deleted.
        (WebCore::VRDisplay::setDepthNear): Deleted.
        (WebCore::VRDisplay::depthFar const): Deleted.
        (WebCore::VRDisplay::setDepthFar): Deleted.
        * Modules/webvr/VRDisplay.h:
        (WebCore::VRDisplay::displayId const): Moved implementation from
        source file.
        (WebCore::VRDisplay::displayName const): Ditto.
        (WebCore::VRDisplay::depthNear const):
        (WebCore::VRDisplay::setDepthNear):
        (WebCore::VRDisplay::depthFar const):
        (WebCore::VRDisplay::setDepthFar):
        * platform/vr/VRManager.cpp:
        (WebCore::VRManager::generateUniqueDisplayIdentifier):
        * platform/vr/VRManager.h:
        * platform/vr/VRPlatformDisplay.h:
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):

2018-02-26  Charlie Turner  <cturner@igalia.com>

        Fix build error with !LOG_DISABLED
        https://bugs.webkit.org/show_bug.cgi?id=183049

        Reviewed by Philippe Normand.

        The following error message was being reported when doing a
        release build with -DLOG_DISABLED=0:

        ../../Source/WebCore/dom/messageports/MessagePortChannel.cpp: In member function ‘void WebCore::MessagePortChannel::entanglePortWithProcess(const WebCore::MessagePortIdentifier&, WebCore::ProcessIdentifier)’:
../../Source/WebCore/dom/messageports/MessagePortChannel.cpp:85:111: error: ‘logString’ was not declared in this scope
     LOG(MessagePorts, "MessagePortChannel %s (%p) entangling port %s (that port has %zu messages available)", logString().utf8().data(), this, port.logString().utf8().data(), m_pendingMessages[i].size());

        Other uses of logString are guarded by !LOG_DISABLED rather than
        NDEBUG, which was the cause of this issue.

        * dom/messageports/MessagePortChannel.h: Guard using !LOG_DISABLED
        rather than NDEBUG.

2018-02-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] User current executable name instead of g_get_prgname() for gst_init
        https://bugs.webkit.org/show_bug.cgi?id=183119

        Reviewed by Philippe Normand.

        g_get_prgname() is only set for programs using GOptionContext, calling gtk_init or explicitly calling
        g_set_prgname(). Use WTF::getCurrentExecutableName() instead.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):

2018-02-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Disable downloadable binary fonts by default
        https://bugs.webkit.org/show_bug.cgi?id=183102
        <rdar://problem/37860699>

        Reviewed by Tim Horton.

        Disable downloadable binary fonts by default in extra zoom mode by making the initial value of
        `downloadableBinaryFontsEnabled` conditional. Layout tests are not possible at this time; test to be added once
        layout test support is in place.

        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::defaultDownloadableBinaryFontsEnabled):
        * page/SettingsBase.h:

2018-02-25  Chris Dumez  <cdumez@apple.com>

        Service workers do not work well inside Web.app
        https://bugs.webkit.org/show_bug.cgi?id=183105
        <rdar://problem/37864140>

        Reviewed by Youenn Fablet.

        SessionID::defaultSessionID() was hardcoded in the ServiceWorkerThread constructor
        instead of using the sessionID of the SWServer that created the service worker thread.
        As a result, when the Service Worker would establish a SWClientConnection to the
        server, it would use the wrong sessionID and would end up using a different SWServer
        (Since we have a different SWServer instance per sessionID). As a result,
        ServiceWorkerRegistration / ServiceWorker objects inside the service worker would not
        be kept in sync with the server (since they registered themselves with the wrong
        SWServer).

        Covered by new API test.

        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::createPageForServiceWorker):
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/RegistrationStore.h:
        (WebCore::RegistrationStore::server):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::contextData const):

2018-02-24  Fujii Hironori  <Hironori.Fujii@sony.com>

        Null-dereference of the second argument `resource` of DocumentLoader::scheduleSubstituteResourceLoad
        https://bugs.webkit.org/show_bug.cgi?id=182920

        Reviewed by Darin Adler.

        A test case
        imported/w3c/web-platform-tests/html/browsers/offline/appcache/workers/appcache-worker.html
        always crashes due to a null-dereference if compiled and optimized
        by GCC 7.2. The second argument `resource` of
        DocumentLoader::scheduleSubstituteResourceLoad can be null if the
        resource can't be found in cache. I guess GCC optimizes inline
        HashMap::add based on assuming the `resource` never becomes null
        because its type is SubstituteResource&.

        This changes introduces a new method
        DocumentLoader::scheduleCannotShowURLError because it looks tricky
        to pass a nullptr to the second argument of
        scheduleSubstituteResourceLoad.

        No new tests (Covered by existing tests).

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::scheduleCannotShowURLError): Added a new method.
        * loader/DocumentLoader.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        Call scheduleCannotShowURLError if the resource not found in the appcache.

2018-02-17  Darin Adler  <darin@apple.com>

        Prepare for ExtendedColor changes (first step)
        https://bugs.webkit.org/show_bug.cgi?id=182904

        Reviewed by Sam Weinig.

        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createColorValue): Use HashMap::ensure.
        (WebCore::CSSValuePool::createFontFamilyValue): Ditto.
        (WebCore::CSSValuePool::createFontFaceValue): Ditto.

        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::maybeParseValue): Tightened up
        the logic a bit.

        * html/canvas/CanvasRenderingContext2D.cpp: Removed many unneeded includes.

        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::recordAction): Updated for Ref instead of
        RefPtr and to use move semantics.
        (WebCore::buildArrayForAffineTransform): Return Ref instead of RefPtr.
        (WebCore::buildArrayForVector): Ditto.
        (WebCore::InspectorCanvas::buildInitialState): Ditto. Also use auto more.
        (WebCore::InspectorCanvas::buildAction): Ditto.
        (WebCore::InspectorCanvas::buildArrayForCanvasGradient): Ditto.
        (WebCore::InspectorCanvas::buildArrayForCanvasPattern): Ditto.
        (WebCore::InspectorCanvas::buildArrayForImageData): Ditto.
        * inspector/InspectorCanvas.h: Updated for the above. Also us "using" instead
        of typedef and removed unneeded ErrorString typedef and some includes.

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Use auto and Ref.

        * platform/DragData.h: Used pragma once and reorganized includes a bit.

        * platform/graphics/ImageFrame.h:
        (WebCore::ImageFrame::frameBytes const): Use uint32_t instead of RGBA32 to
        prepare for removal of the RGBA32 type coming in a future patch.
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::cacheNativeImageAtIndex): Ditto.
        (WebCore::ImageSource::canUseAsyncDecoding): Ditto.

        * platform/graphics/cocoa/GraphicsContextCocoa.mm: Tweaked #if for Mac-only
        code to use PLATFORM(MAC) to be easier to read.
        (WebCore::GraphicsContext::focusRingColor): Use sRGBColorSpaceRef instead of
        calling CGColorSpaceCreateWithName each time.

        * platform/graphics/texmap/TextureMapperFPSCounter.cpp: Added include needed
        now that it was removed from some header.

        * platform/graphics/win/GraphicsContextPlatformPrivateDirect2D.h: Use uint32_t
        instead of RGBA32 to prepare for removal of the RGBA32 type coming in a future patch.
        * platform/image-decoders/ScalableImageDecoder.cpp:
        (WebCore::ScalableImageDecoder::frameBytesAtIndex const): Ditto.
        * platform/image-decoders/cairo/ImageBackingStoreCairo.cpp:
        (WebCore::ImageBackingStore::image const): Ditto.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow): Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::setPixel): Ditto.
        (WebCore::JPEGImageDecoder::outputScanlines): Ditto.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): Ditto.
        (WebCore::PNGImageDecoder::frameComplete): Ditto.
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decodeFrame): Ditto.
        (WebCore::WEBPImageDecoder::applyPostProcessing): Ditto.

        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::color): Added comments.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paintSelection): Use Color::isVisible.

2018-02-23  Chris Dumez  <cdumez@apple.com>

        Crash under SchemeRegistry::shouldTreatURLSchemeAsLocal(WTF::String const&)
        https://bugs.webkit.org/show_bug.cgi?id=183066
        <rdar://problem/37804111>

        Reviewed by Ryosuke Niwa.

        SecurityOrigin objects are constructed on various threads. However, someone added a
        shouldTreatAsPotentiallyTrustworthy() call to the SecurityOrigin constructor which
        was not thread safe. This is because this function relies on SchemeRegistry::shouldTreatURLSchemeAsSecure()
        and SchemeRegistry::shouldTreatURLSchemeAsLocal() which were relying on global static HashMaps without
        locks.

        Update SecurityOrigin to initialize m_isPotentiallyTrustworthy lazily, to avoid paying
        initialization cost in the constructor. This is only queries by SecurityContext::isSecureContext().

        Make SchemeRegistry::shouldTreatURLSchemeAsLocal() and SchemeRegistry::shouldTreatURLSchemeAsSecure()
        thread-safe, since they are needed to initialize SecurityOrigin::m_isPotentiallyTrustworthy from
        various threads.

        SchemeRegistry::shouldTreatURLSchemeAsSecure() is only called from SecurityOrigin (which requires
        thread-safety), and getUserMedia() which is not hot code so the extra locking there should not
        be an issue.

        SchemeRegistry::shouldTreatURLSchemeAsLocal() is called from SecurityOrigin (which requires thread-
        safety). It is also called from isQuickLookPreviewURL(), MHTMLArchive::create(), Page::userStyleSheetLocationChanged(),
        isRemoteWebArchive() and HTMLPlugInImageElement. All these are not hot code so I do not think
        we need a fast path.

        * page/SecurityOrigin.cpp:
        (WebCore::isLoopbackIPAddress):
        (WebCore::shouldTreatAsPotentiallyTrustworthy):
        (WebCore::SecurityOrigin::isPotentiallyTrustworthy const):
        (WebCore::SecurityOrigin::isLocalHostOrLoopbackIPAddress):
        * page/SecurityOrigin.h:
        * platform/SchemeRegistry.cpp:
        (WebCore::localURLSchemesLock):
        (WebCore::localURLSchemes):
        (WebCore::secureSchemesLock):
        (WebCore::secureSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
        * platform/SchemeRegistry.h:

2018-02-23  Christopher Reid  <chris.reid@sony.com>

        [Curl] Cookie Database files are wrongfully getting deleted when the database is opened
        https://bugs.webkit.org/show_bug.cgi?id=183051

        Reviewed by Per Arne Vollan.

        The file stat logic was backwards causing a wrongful detection of database corruption.
        Fixed the logic and abstracted these calls to use FileSystem.

        * platform/network/curl/CookieJarDB.cpp:

2018-02-23  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Make RenderTreeBuilder::* classes WTF_MAKE_FAST_ALLOCATED
        https://bugs.webkit.org/show_bug.cgi?id=183084
        <rdar://problem/37828706>

        Reviewed by Antti Koivisto.

        * rendering/updating/RenderTreeBuilderBlock.h:
        * rendering/updating/RenderTreeBuilderBlockFlow.h:
        * rendering/updating/RenderTreeBuilderContinuation.h:
        * rendering/updating/RenderTreeBuilderFirstLetter.h:
        * rendering/updating/RenderTreeBuilderFormControls.h:
        * rendering/updating/RenderTreeBuilderFullScreen.h:
        * rendering/updating/RenderTreeBuilderInline.h:
        * rendering/updating/RenderTreeBuilderList.h:
        * rendering/updating/RenderTreeBuilderMathML.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.h:
        * rendering/updating/RenderTreeBuilderRuby.h:
        * rendering/updating/RenderTreeBuilderSVG.h:
        * rendering/updating/RenderTreeBuilderTable.h:
        * rendering/updating/RenderTreeUpdaterGeneratedContent.h:

2018-02-23  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderFullScreen::createPlaceholder to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=183027
        <rdar://problem/37773058>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer):
        * dom/Document.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreenPlaceholder::RenderFullScreenPlaceholder):
        (WebCore::RenderFullScreenPlaceholder::isRenderFullScreenPlaceholder const):
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (): Deleted.
        (WebCore::RenderFullScreen::createPlaceholder): Deleted.
        * rendering/RenderFullScreen.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::createPlaceholderForFullScreen):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderFullScreen.cpp:
        (WebCore::RenderTreeBuilder::FullScreen::createPlaceholder):
        * rendering/updating/RenderTreeBuilderFullScreen.h:

2018-02-23  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Add WARN_UNUSED_RETURN to detach()
        https://bugs.webkit.org/show_bug.cgi?id=183073
        <rdar://problem/37814585>

        Reviewed by Antti Koivisto.

        So that we don't destroy a renderer accidentally.

        * rendering/updating/RenderTreeBuilderBlock.h:
        * rendering/updating/RenderTreeBuilderRuby.h:
        * rendering/updating/RenderTreeBuilderSVG.h:

2018-02-22  Antoine Quint  <graouts@apple.com>

        REGRESSION (r228445): A big pause button shows over YouTube videos if you tap "Tap To Unmute" on iOS
        https://bugs.webkit.org/show_bug.cgi?id=183074
        <rdar://problem/37747028>

        Reviewed by Eric Carlson.

        Test: media/modern-media-controls/start-support/start-support-disable-controls-and-re-enable-post-play.html

        In the fix for webkit.org/b/182668, we made it so that when the "controls" attribute is absent from a media
        element we stop listening to the bulk of media events and prevent controls from updating any DOM properties
        so as to minimize the amount of CPU usage by the Web process.

        An unfortunate side effect was that, if the media controls were disabled at the time the video starts playing,
        the StartSupport class would thus not catch the "play" event and would not be able to set the "hasPlayed"
        property to "true" on the MediaController, which would then prevent the _shouldShowStartButton() from returning
        "false". As a result, if the "controls" attribute was turned back on after the media started playing, they
        would default to showing the start button, which would be then in the play state, ie. showing the pause icon.

        We now set the "hasPlayed" property in the "play" event handler on MediaController, which is always registered
        regardless of the "controls" attribute setting. We also ensure we invalidate the "showStartButton" property on
        the media controls when StartSupport is enabled, which is the case when the "controls" attribute is toggled back
        to "true" from a previous "false" value.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.handleEvent):
        * Modules/modern-media-controls/media/start-support.js:
        (StartSupport):
        (StartSupport.prototype.enable):
        (StartSupport.prototype.handleEvent):
        (StartSupport.prototype._updateShowsStartButton):

2018-02-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer][MiniBrowser] Honor GStreamer command line parameters in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173655
        <rdar://problem/37706341>

        Reviewed by Philippe Normand.

        Do not assume gst is only used in the WebProcess, the MIMETypeRegistry also uses gst to get the list of
        supported media types. Move the code to extract gst options from the process command line to a helper function
        and use it in the UI process to pass the options to the WebProcess, but also in the current process when gst is
        initialized without providing options.

        Fixes several unit tests that use MIMETypeRegistry in the UI process.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::extractGStreamerOptionsFromCommandLine): Helper to get the gst options from the current process
        command line.
        (WebCore::initializeGStreamer): Ensure this is called once. Get the gst options from the given vector or extract
        it from the command line if not provided.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializeGStreamerAndRegisterWebKitElements): Bring back the gst
        initialization here.

2018-02-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] HTTP totalBytes query returns 0 after seeking (sometimes)
        https://bugs.webkit.org/show_bug.cgi?id=183002

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init): Initialize member variables. Also no need
        to set the appsrc size at that point.
        (webKitWebSrcStop): There is no need to reset the size when
        seeking. Size should in most cases represent the Content-Length
        response attribute, even when seeking.
        (webKitWebSrcStart): No need to reset the size attribute.
        (webKitWebSrcQueryWithParent): Let appsrc handle DURATION queries.
        (CachedResourceStreamingClient::responseReceived): Emit duration notification one time only.

2018-02-23  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] media/video-src-blob-using-open-panel.html crashes in Debug
        https://bugs.webkit.org/show_bug.cgi?id=183005

        Reviewed by Xabier Rodriguez-Calvar.

        Test: media/video-src-blob-using-open-panel.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::convertToInternalProtocol): Also convert blob URIs
        because they're handled by our httpsrc element.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcGetProtocols): Prefix blob URIs too, for consistency purpose.

2018-02-22  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove currentTime() / currentTimeMS()
        https://bugs.webkit.org/show_bug.cgi?id=183052

        Reviewed by Mark Lam.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::haveSuitableCachedPosition):
        * dom/DOMTimeStamp.h:
        (WebCore::convertSecondsToDOMTimeStamp):
        * fileapi/File.cpp:
        (WebCore::File::File):
        (WebCore::File::lastModified const):
        * history/HistoryItem.cpp:
        (WebCore::generateSequenceNumber):
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::defaultValueForStepUp const):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::defaultValueForStepUp const):
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::defaultValueForStepUp const):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::defaultValueForStepUp const):
        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::InspectorNetworkAgent::willSendRequest):
        (WebCore::InspectorNetworkAgent::willSendWebSocketHandshakeRequest):
        * loader/EmptyFrameLoaderClient.h:
        * loader/FormSubmission.cpp:
        (WebCore::generateFormDataIdentifier):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::clientRedirected):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/NavigationScheduler.cpp:
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/History.h:
        * page/PageOverlay.cpp:
        (WebCore::PageOverlay::startFadeAnimation):
        (WebCore::PageOverlay::fadeAnimationTimerFired):
        * page/PageOverlay.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        * platform/ios/LegacyTileLayerPool.h:
        * platform/ios/LegacyTileLayerPool.mm:
        (WebCore::LegacyTileLayerPool::LegacyTileLayerPool):
        (WebCore::LegacyTileLayerPool::addLayer):
        (WebCore::LegacyTileLayerPool::decayedCapacity const):
        (WebCore::LegacyTileLayerPool::prune):
        * platform/ios/SystemMemoryIOS.cpp:
        (WebCore::systemMemoryLevel):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:

2018-02-22  Per Arne Vollan  <pvollan@apple.com>

        The WebContent process should not use NSScreen in the screenDepth implementation.
        https://bugs.webkit.org/show_bug.cgi?id=183048

        Reviewed by Brent Fulgham.

        NSScreen method calls should be done in the UIProcess, since these calls will communicate with
        the WindowServer. The screen depth property can be retrieved in the UIProcess, and sent to the
        WebContent process, where it is cached. Whenever screen properties change, the UIProcess will
        send the new screen properties to the WebProcess.

        No new tests, covered by existing tests.

        * platform/ScreenProperties.h:
        (WebCore::ScreenProperties::encode const):
        (WebCore::ScreenProperties::decode):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::getScreenProperties):
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):

2018-02-22  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Rename insertChild() -> attach(), takeChild() -> detach() and removeAndDestroy() -> destroy()
        https://bugs.webkit.org/show_bug.cgi?id=183061
        <rdar://problem/37800269>

        Reviewed by Ryosuke Niwa.

        ...and moveChildTo() -> move() (moveChildrenTo() -> moveChildren()),
        removeFromParentAndDestroyCleaningUpAnonymousWrappers() -> destroyAndCleanUpAnonymousWrappers()

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree):
        (WebCore::Document::setFullScreenRenderer):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::didAttachChild):
        (WebCore::RenderElement::didInsertChild): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        (WebCore::RenderFullScreen::createPlaceholder):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::didAttachChild):
        (RenderMenuList::setText):
        (RenderMenuList::didInsertChild): Deleted.
        * rendering/RenderMenuList.h:
        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::updateTextRenderer):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::setText):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::destroy):
        (WebCore::RenderTreeBuilder::attach):
        (WebCore::RenderTreeBuilder::attachIgnoringContinuation):
        (WebCore::RenderTreeBuilder::detach):
        (WebCore::RenderTreeBuilder::attachToRenderElement):
        (WebCore::RenderTreeBuilder::attachToRenderElementInternal):
        (WebCore::RenderTreeBuilder::move):
        (WebCore::RenderTreeBuilder::moveAllChildren):
        (WebCore::RenderTreeBuilder::moveChildren):
        (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloats):
        (WebCore::RenderTreeBuilder::makeChildrenNonInline):
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):
        (WebCore::RenderTreeBuilder::destroyAndCleanUpAnonymousWrappers):
        (WebCore::RenderTreeBuilder::detachFromRenderGrid):
        (WebCore::RenderTreeBuilder::detachFromRenderElement):
        (WebCore::RenderTreeBuilder::attachToRenderGrid):
        (WebCore::RenderTreeBuilder::removeAndDestroy): Deleted.
        (WebCore::RenderTreeBuilder::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::insertChildIgnoringContinuation): Deleted.
        (WebCore::RenderTreeBuilder::takeChild): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToRenderElement): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToRenderElementInternal): Deleted.
        (WebCore::RenderTreeBuilder::moveChildTo): Deleted.
        (WebCore::RenderTreeBuilder::moveAllChildrenTo): Deleted.
        (WebCore::RenderTreeBuilder::moveChildrenTo): Deleted.
        (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloatsTo): Deleted.
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers): Deleted.
        (WebCore::RenderTreeBuilder::takeChildFromRenderGrid): Deleted.
        (WebCore::RenderTreeBuilder::takeChildFromRenderElement): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToRenderGrid): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::attach):
        (WebCore::RenderTreeBuilder::Block::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Block::attachIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):
        (WebCore::RenderTreeBuilder::Block::detach):
        (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
        (WebCore::RenderTreeBuilder::Block::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation): Deleted.
        (WebCore::RenderTreeBuilder::Block::takeChild): Deleted.
        * rendering/updating/RenderTreeBuilderBlock.h:
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::attach):
        (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloats):
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo): Deleted.
        * rendering/updating/RenderTreeBuilderBlockFlow.h:
        * rendering/updating/RenderTreeBuilderContinuation.cpp:
        (WebCore::RenderTreeBuilder::Continuation::cleanupOnDestroy):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::cleanupOnDestroy):
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        * rendering/updating/RenderTreeBuilderFormControls.cpp:
        (WebCore::RenderTreeBuilder::FormControls::attach):
        (WebCore::RenderTreeBuilder::FormControls::detach):
        (WebCore::RenderTreeBuilder::FormControls::findOrCreateParentForChild):
        (WebCore::RenderTreeBuilder::FormControls::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::FormControls::takeChild): Deleted.
        * rendering/updating/RenderTreeBuilderFormControls.h:
        * rendering/updating/RenderTreeBuilderFullScreen.cpp:
        (WebCore::RenderTreeBuilder::FullScreen::cleanupOnDestroy):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::attach):
        (WebCore::RenderTreeBuilder::Inline::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Inline::attachIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Inline::splitFlow):
        (WebCore::RenderTreeBuilder::Inline::splitInlines):
        (WebCore::RenderTreeBuilder::Inline::childBecameNonInline):
        (WebCore::RenderTreeBuilder::Inline::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation): Deleted.
        * rendering/updating/RenderTreeBuilderInline.h:
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        (WebCore::RenderTreeBuilder::MathML::makeFences):
        (WebCore::RenderTreeBuilder::MathML::attach):
        (WebCore::RenderTreeBuilder::MathML::insertChild): Deleted.
        * rendering/updating/RenderTreeBuilderMathML.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
        (WebCore::RenderTreeBuilder::MultiColumn::handleSpannerRemoval):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::attach):
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):
        (WebCore::RenderTreeBuilder::Ruby::rubyBaseSafe):
        (WebCore::RenderTreeBuilder::Ruby::detach):
        (WebCore::RenderTreeBuilder::Ruby::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::Ruby::takeChild): Deleted.
        * rendering/updating/RenderTreeBuilderRuby.h:
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::attach):
        (WebCore::RenderTreeBuilder::SVG::detach):
        (WebCore::RenderTreeBuilder::SVG::insertChild): Deleted.
        (WebCore::RenderTreeBuilder::SVG::takeChild): Deleted.
        * rendering/updating/RenderTreeBuilderSVG.h:
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::findOrCreateParentForChild):
        (WebCore::RenderTreeBuilder::Table::attach):
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
        (WebCore::RenderTreeBuilder::Table::insertChild): Deleted.
        * rendering/updating/RenderTreeBuilderTable.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::createRenderer):
        (WebCore::RenderTreeUpdater::createTextRenderer):
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownTextRenderer):
        (WebCore::RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded):
        * rendering/updating/RenderTreeUpdaterGeneratedContent.cpp:
        (WebCore::createContentRenderers):

2018-02-22  Chris Dumez  <cdumez@apple.com>

        ResourceRequestBase::isolatedCopy() fails to isolate copy the cachePartition
        https://bugs.webkit.org/show_bug.cgi?id=183059
        <rdar://problem/37800202>

        Reviewed by Youenn Fablet.

        Update ResourceRequestBase::setAsIsolatedCopy() to call isolatedCopy() on the cachePartition as well,
        given that it is a String and it would not be safe to send it to another thread otherwise.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setAsIsolatedCopy):

2018-02-22  Chris Dumez  <cdumez@apple.com>

        ServiceWorkerContainer::startScriptFetchForJob() fails to isolate copy the registrationKey before passing it to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183050
        <rdar://problem/37796881>

        Reviewed by Youenn Fablet.

        Create an isolated copy of the registrationKey before passing it to the main thread in ServiceWorkerContainer's
        startScriptFetchForJob() / jobFinishedLoadingScript() / jobFailedLoadingScript().

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):

2018-02-22  Chris Dumez  <cdumez@apple.com>

        ServiceWorkerContainer::scheduleJob() fails to isolate copy the jobData before passing it to the main thread
        https://bugs.webkit.org/show_bug.cgi?id=183046
        <rdar://problem/37793395>

        Reviewed by Youenn Fablet.

        Make sure we isolate copy the jobData before passing it to the main thread in ServiceWorkerContainer::scheduleJob().
        The jobData contains Strings / URLs so it is not safe to have non-isolated copies of it on various threads.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):

2018-02-22  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix warning on clang.
        https://bugs.webkit.org/show_bug.cgi?id=182986

        Reviewed by Konstantin Tokarev.

        No new tests because there's no behaviro changes.

        * platform/network/curl/CurlResourceHandleDelegate.cpp:
        (WebCore::CurlResourceHandleDelegate::curlDidSendData):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveBuffer):
        (WebCore::CurlResourceHandleDelegate::curlDidFailWithError):
        * platform/network/curl/CurlResourceHandleDelegate.h:

2018-02-22  Youenn Fablet  <youenn@apple.com>

        WorkerCacheStorageConnection::doRemove can assert in case two frames try to delete the same cache at the same time
        https://bugs.webkit.org/show_bug.cgi?id=183041

        Reviewed by Chris Dumez.

        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doRemove): Update the assertion to accept the
        case of an already deleted cache, i.e. returned identifer is 0.

2018-02-22  Alejandro G. Castro  <alex@igalia.com>

        Remove some code leftovers in LibWebRTCMediaEndpoint and RealtimeOutgoingVideoSource classes
        https://bugs.webkit.org/show_bug.cgi?id=183031

        Reviewed by Youenn Fablet.

        This include and namespace are not required in the file.

        Just removing unused code, no tests required.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:

2018-02-22  Chris Dumez  <cdumez@apple.com>

        Document.open() cancels existing provisional load but not navigation policy check
        https://bugs.webkit.org/show_bug.cgi?id=183012
        <rdar://problem/37755831>

        Reviewed by Alex Christensen.

        Test: fast/dom/Document/open-with-pending-load-async-policy.html

        * dom/Document.cpp:
        (WebCore::Document::open):
        The existing code was calling FrameLoader::stopAllLoaders() when the loader's state
        is FrameStateProvisional. The issue is that the FrameLoader's state only gets set
        to FrameStateProvisional after the policy decision for the navigation is made.
        This means that we fail to cancel a pending load if is still in the policy decision
        stage, which can happen when the policy decision is made asynchronously. We now
        also cancel such pending navigation policy checks as well.

        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        Make sure the m_delegateIsDecidingNavigationPolicy flag gets reset inside the
        lambda. Otherwise, it gets reset too early when the policy decision is made
        asynchronously.

2018-02-22  Youenn Fablet  <youenn@apple.com>

        Add release asserts for service worker fetch and postMessage events
        https://bugs.webkit.org/show_bug.cgi?id=183025
        rdar://problem/37765052

        Reviewed by Daniel Bates.

        Add release assertion so that a service worker will only dispatch a message event
        for clients and service workers with the same origin.
        No change of behavior.

        * platform/network/ResourceRequestBase.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postMessageToServiceWorker):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2018-02-22  Miguel Gomez  <magomez@igalia.com>

        including both gl3.h and gl2.h when USE_OPENGL_ES is enabled
        https://bugs.webkit.org/show_bug.cgi?id=183008

        Reviewed by Michael Catanzaro.

        Don't include GLES3 headers as we stick to GLES2 API resources.

        No new tests, no behavior change.

        * platform/graphics/GLContext.cpp:

2018-02-22  Ms2ger  <Ms2ger@igalia.com>

        [GTK][WPE] Fix some build errors in service workers code
        https://bugs.webkit.org/show_bug.cgi?id=182966

        Reviewed by Žan Doberšek.

        No new tests: no change in behavior.

        * workers/service/ServiceWorkerProvider.h: add missing forward declaration.

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderObject::insertedInto() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=183022
        <rdar://problem/37764326>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChildToRenderElementInternal):
        (WebCore::RenderTreeBuilder::moveChildrenTo):
        (WebCore::RenderTreeBuilder::multiColumnDescendantInserted): Deleted.
        * rendering/updating/RenderTreeBuilder.h:

2018-02-21  Tim Horton  <timothy_horton@apple.com>

        Include all Cocoa sources in all Cocoa platform builds
        https://bugs.webkit.org/show_bug.cgi?id=183026
        <rdar://problem/37513101>

        Reviewed by Dan Bernstein.

        Similar to r228571, don't have separate Sources files for iOS and Mac.
        All sources now have #ifdefs that ensure that only the right ones
        build on the right platforms. This makes it much easier to reason
        about what builds where by just looking at the sources.

        * SourcesCocoa.txt:
        * SourcesIOS.txt: Removed.
        * SourcesMac.txt: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * editing/WebContentReader.h:
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:

2018-02-21  Youenn Fablet  <youenn@apple.com>

        Make SubstituteResource take a ResourceResponse r-value
        https://bugs.webkit.org/show_bug.cgi?id=183020

        Reviewed by Alex Christensen.

        No change of behavior.
        Make SubstituteResource take a ResourceResponse r-value.
        Update ArchiveResource accordingly.
        Take benefit of that in ApplicationCacheResource to set the response source to ApplicationCache
        before passing it to SubstituteResource constructor.

        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::SubstituteResource):
        (WebCore::SubstituteResource::resourceResponse): Deleted.
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::create):
        (WebCore::ApplicationCacheResource::ApplicationCacheResource):
        * loader/appcache/ApplicationCacheResource.h:
        (WebCore::ApplicationCacheResource::create): Deleted.
        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource):

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] ::willBeRemoved() does not need RenderTreeBuilder anymore.
        https://bugs.webkit.org/show_bug.cgi?id=183019
        <rdar://problem/37761421>

        Reviewed by Antti Koivisto.

        All the willBeDestroyed() mutations have been moved over to RenderTreeBuilder. 

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::willBeDestroyed):
        * rendering/RenderCounter.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::willBeDestroyed):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::willBeDestroyed):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::willBeDestroyed):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::willBeDestroyed):
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::willBeDestroyed):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::willBeDestroyed):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed):
        * rendering/RenderReplaced.h:
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::willBeDestroyed):
        * rendering/RenderSearchField.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::willBeDestroyed):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::willBeDestroyed):
        * rendering/RenderText.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::willBeDestroyed):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::willBeDestroyed):
        * rendering/RenderVideo.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::willBeDestroyed):
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::willBeDestroyed):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::willBeDestroyed):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::willBeDestroyed):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::willBeDestroyed):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::willBeDestroyed):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::willBeDestroyed):
        * rendering/svg/RenderSVGText.h:

2018-02-21  Per Arne Vollan  <pvollan@apple.com>

        The WebContent process should not use NSScreen in the screenAvailableRect/screenRect implementations.
        https://bugs.webkit.org/show_bug.cgi?id=182855

        Reviewed by Brent Fulgham.

        On macOS, the functions screenAvailableRect and screenRect is implemented using NSScreen, which is communicating
        with the WindowServer. To avoid this WindowServer communication from the WebContent process when calling
        screenAvailableRect and screenRect, it is possible to let the UIProcess send a message to the WebContent
        process whenever there is a change in the display properties, and have the WebContent process cache these
        display properties. This message should also be sent to a newly started WebContent process.

        No new tests, covered by existing tests.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformScreen.h:
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::getScreenProperties):
        (WebCore::screenProperties):
        (WebCore::setScreenProperties):
        (WebCore::screenRect):
        (WebCore::screenAvailableRect):
        * platform/ScreenProperties.h: Added.
        (WebCore::ScreenProperties::encode const):
        (WebCore::ScreenProperties::decode):

2018-02-21  Christopher Reid  <chris.reid@sony.com>

        [Curl] Curl Cookie Database File should be configurable using NetworkProcessCreationParameters
        https://bugs.webkit.org/show_bug.cgi?id=182751

        Reviewed by Youenn Fablet.

        No change in behavior.

        Adding support to set a custom CookieJar Database.
        Took CookieJarDB::open() out of its constructor because both the Network and Web process
        were trying to open the journal files but one process was failing due to a lack of permission.
        Now the database file is lazily opened and only the Network process will try to open the database.
        Some cleanup was done to CookieJarDB too.

        * platform/network/NetworkStorageSession.h:
        * platform/network/curl/CookieJarDB.cpp:
        * platform/network/curl/CookieJarDB.h:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:

2018-02-21  Chris Dumez  <cdumez@apple.com>

        Regression(r228708): Crash under WebCore::MediaResource::responseReceived(WebCore::CachedResource&, WebCore::ResourceResponse const&)
        https://bugs.webkit.org/show_bug.cgi?id=183018
        <rdar://problem/37754154>

        Reviewed by Eric Carlson.

        The fix at r228708 was trying to address the fact that avplayer sometimes
        deallocates WebCoreNSURLSessionDataTask objects on a non-main thread, which
        was not safe because its _resource data member needs to be deallocated on
        the main thread.

        The issue is that r228708 caused _resource to outlive its WebCoreNSURLSessionDataTask.
        This is an issue because _resource has a client data member (of type WebCoreNSURLSessionDataTaskClient)
        which has a raw pointer to the WebCoreNSURLSessionDataTask. This means that the main thread could
        call methods like responseReceived() on the resource, which would call responseReceived() on the
        client, which would try to call [WebCoreNSURLSessionDataTask receivedResponse:] with an invalid
        m_task pointer.

        To address the issue, I introduced a clearTask() method on WebCoreNSURLSessionDataTaskClient, which
        gets called from a non-main thread to clear the client's m_task pointer when the task is destroyed
        on a non-main thread. So that this is safe, every time the client tries to use m_task, we now
        acquire a lock for thread-safety and do a null-check on m_task.

        No new tests, no known reproduction case.

        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResource::client):
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (WebCore::WebCoreNSURLSessionDataTaskClient::clearTask):
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataSent):
        (WebCore::WebCoreNSURLSessionDataTaskClient::responseReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::shouldCacheResponse):
        (WebCore::WebCoreNSURLSessionDataTaskClient::dataReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::redirectReceived):
        (WebCore::WebCoreNSURLSessionDataTaskClient::accessControlCheckFailed):
        (WebCore::WebCoreNSURLSessionDataTaskClient::loadFailed):
        (WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished):
        (-[WebCoreNSURLSessionDataTask dealloc]):

2018-02-21  Youenn Fablet  <youenn@apple.com>

        Move AppCache loading to the NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=178540
        <rdar://problem/37119346>

        Reviewed by Alex Christensen.

        Covered by existing tests.

        Use ApplicationResourceLoader for cache entry loading.
        Remove all ResourceHandle use from ApplicationCacheGroup.
        Renamed m_loader in m_manifestLoader and added a new m_entryLoader to load cache entries.

        Updated ApplicationCacheResourceLoader to handle different types of CachedResource.
        This allows in particular to handle redirections based on the resource type and create the ApplicationCacheResource with the right type.
        Use Include as credentials mode as per specification.

        Add a new ApplicationCache ResourceResonse::Source.
        This allows fixing an assertion and should allow better inspector support if needs be.

        * inspector/agents/InspectorNetworkAgent.cpp:
        (WebCore::responseSource):
        * loader/ResourceLoader.cpp:
        (WebCore::logResourceResponseSource):
        * loader/SubstituteResource.h:
        (WebCore::SubstituteResource::resourceResponse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoading):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFinishLoadingEntry):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didFailLoadingEntry):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::ApplicationCacheResource):
        * loader/appcache/ApplicationCacheResourceLoader.cpp:
        (WebCore::ApplicationCacheResourceLoader::create):
        (WebCore::ApplicationCacheResourceLoader::ApplicationCacheResourceLoader):
        (WebCore::ApplicationCacheResourceLoader::responseReceived):
        (WebCore::ApplicationCacheResourceLoader::redirectReceived):
        * loader/appcache/ApplicationCacheResourceLoader.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):
        * testing/Internals.cpp:
        (WebCore::responseSourceToString):

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBoxModelObject::willBeRemoved() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=183014
        <rdar://problem/37757428>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::continuationChainNode const):
        (): Deleted.
        (WebCore::RenderBoxModelObject::removeAndDestroyAllContinuations): Deleted.
        * rendering/RenderBoxModelObject.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::removeAndDestroy):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::continuationBuilder):
        * rendering/updating/RenderTreeBuilderContinuation.cpp: Added.
        (WebCore::RenderTreeBuilder::Continuation::Continuation):
        (WebCore::RenderTreeBuilder::Continuation::cleanupOnDestroy):
        * rendering/updating/RenderTreeBuilderContinuation.h: Added.

2018-02-21  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerJob::m_lastResponse is unneeded
        https://bugs.webkit.org/show_bug.cgi?id=183013

        Reviewed by Chris Dumez.

        Remove this field since not used anywhere.

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::didReceiveResponse):
        * workers/service/ServiceWorkerJob.h:

2018-02-21  Youenn Fablet  <youenn@apple.com>

        Use ResourceLoader to load appcache manifest
        https://bugs.webkit.org/show_bug.cgi?id=182861

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Add ApplicationCacheResourceLoader to load an ApplicationCacheResource from a ResourceLoader.
        Make use of it to load the app cache manifest.
        Future work should load entries using the same loader.

        Remove manifest handle.
        Ensure that DocumentLoader does not register the manifest resource loader as its lifetime
        is handled by its ApplicationCacheGroup.

        Add a ResourceLoader option to bypass the application cache.
        Use it for manifest loading.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::addSubresourceLoader):
        * loader/ResourceLoaderOptions.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoading):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::createRequest):
        (WebCore::ApplicationCacheGroup::didReceiveResponseAsync):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForRedirect):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForError):
        * loader/appcache/ApplicationCacheResourceLoader.cpp: Added.
        * loader/appcache/ApplicationCacheResourceLoader.h: Added.

2018-02-21  Don Olmstead  <don.olmstead@sony.com>

        [CMake][Win] Use cmakeconfig.h rather than config.h and Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=182883

        Reviewed by Per Arne Vollan.

        No new tests. No change in behavior.

        * WebCorePrefix.h:
        * config.h:
        * testing/js/WebCoreTestSupportPrefix.h:

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderView::willBeRemoved() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=183009

        Reviewed by Antti Koivisto.

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::destroyRenderTree):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::~RenderView):
        (WebCore::RenderView::willBeDestroyed): Deleted.
        * rendering/RenderView.h:

2018-02-21  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] USE_UPOWER causes crashes inside a chroot or on systems with broken dbus/upower
        https://bugs.webkit.org/show_bug.cgi?id=181825

        Reviewed by Carlos Garcia Campos.

        We could fix this crash, but that would not be good enough, because upower-glib is a
        synchronous API that wraps D-Bus calls. That's not acceptable for use in the web process.
        Rewrite LowPowerModeNotifierGLib to use upower's D-Bus API directly, instead.

        Note that this also enables LowPowerModeNotifier for WPE, since the USE(UPOWER) build
        flag is no longer needed.

        * platform/LowPowerModeNotifier.cpp:
        * platform/LowPowerModeNotifier.h:
        * platform/glib/LowPowerModeNotifierGLib.cpp:
        (WebCore::LowPowerModeNotifier::LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::updateWarningLevel):
        (WebCore::LowPowerModeNotifier::warningLevelChanged):
        (WebCore::LowPowerModeNotifier::gPropertiesChangedCallback):
        (WebCore::LowPowerModeNotifier::~LowPowerModeNotifier):
        (WebCore::LowPowerModeNotifier::updateState): Deleted.
        (WebCore::LowPowerModeNotifier::warningLevelCallback): Deleted.

2018-02-21  Chris Dumez  <cdumez@apple.com>

        VTTCue constructor should use 'double' type for startTime / endTime
        https://bugs.webkit.org/show_bug.cgi?id=182988

        Reviewed by Eric Carlson.

        VTTCue constructor should use 'double' type for startTime / endTime, not
        'unrestricted double':
        - https://w3c.github.io/webvtt/#the-vttcue-interface

        Otherwise, we end up potentially returning NaN for TextTrackCue.startTime / endTime,
        even though those correctly use type 'double':
        - https://html.spec.whatwg.org/multipage/media.html#texttrackcue

        The new behavior is consistent with Firefox and Chrome.

        No new tests, updated existing test.

        * bindings/js/JSDOMConvertNumbers.h:
        (WebCore::JSConverter<IDLDouble>::convert):
        Add assertion to make sure our implementation never tries to return NaN
        for an IDL attribute of type 'double'. This would be invalid as per Web
        IDL spec and would crash if the NaN being returned was impure as JSValue
        could not store it as a double.

        * html/track/VTTCue.idl:
        Update constructor parameters to use 'double' type instead of 'unrestricted
        double', as per:
        - https://w3c.github.io/webvtt/#the-vttcue-interface

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTextFragment::willBeRemoved() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182946
        <rdar://problem/37690039>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::willBeDestroyed):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::cleanupOnRemoval):
        * rendering/updating/RenderTreeBuilderFirstLetter.h:

2018-02-21  Ms2ger  <Ms2ger@igalia.com>

        [GCrypt] Remove unsound assertion from CryptoKeyRSA::exportData().
        https://bugs.webkit.org/show_bug.cgi?id=183001

        Reviewed by Philippe Normand.

        This function is called from structured cloning, in particular when storing
        a key in IndexedDB. This would trip the assertion if the key in question is
        non-exportable.

        The assertion was copied from the macOS implementation in r172389; it was
        subsequently removed there in r172898 to handle this case.

        Test: crypto/subtle/rsa-indexeddb-non-exportable.html

        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        (WebCore::CryptoKeyRSA::exportData const): remove assertion.

2018-02-21  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Make system-ui obey the user-installed-font policy
        https://bugs.webkit.org/show_bug.cgi?id=182860
        <rdar://problem/36158249>

        Reviewed by Antti Koivisto.

        We have a completely different codepath for system-ui which makes it follow the system's
        font cascade list. This codepath (along with all the other relevant places which create
        system fonts) needs to obey the AllowUserInstalledFonts enum. This patch is fairly
        mechanical; we simply are hooking up the flag across SystemFontDatabase.

        There are a few places which creates system fonts which this patch doesn't touch. This is
        not a problem because all the remaining places either:
        1) Simply pull out some attributes of the font (name, weight, size, etc.) and then throw
        away the font object itself, or
        2) Use the font in an environment where script cannot access the characters rendered (such
        as DragImages or the fullscreen placeholder view or the inside of the attachment element).

        Test: fast/text/user-installed-fonts/system-ui.html

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::fontWithFamily):
        (WebCore::installedFontMandatoryAttributes):
        (WebCore::createSpecificFontForInstalledFonts):
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::operator== const):
        (WebCore::SystemFontDatabase::CoreTextCascadeListParameters::hash const):
        (WebCore::SystemFontDatabase::systemFontCascadeList):
        (WebCore::SystemFontDatabase::removeCascadeList):
        (WebCore::SystemFontDatabase::computeCascadeList):
        (WebCore::systemFontParameters):
        (WebCore::systemFontCascadeList):
        (WebCore::FontCascadeDescription::effectiveFamilyCount const):
        (WebCore::FontCascadeDescription::effectiveFamilyAt const):
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::platformFontWithFamilySpecialCase):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::platformFontWithFamilySpecialCase):

2018-02-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix build after r228867.

        * Modules/webvr/VRStageParameters.cpp:

2018-02-21  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Rewrite purgeInvalid*Tracks methods
        https://bugs.webkit.org/show_bug.cgi?id=183004

        Reviewed by Carlos Garcia Campos.

        Removing items from a hashmap while iterating is bad.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidAudioTracks):
        Safely remove items from the hashmap using removeIf().
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks): Ditto.

2018-02-21  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix build after r228867.

        * Modules/webvr/VRStageParameters.cpp:

2018-02-21  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Crash in Debug build when purging invalid tracks
        https://bugs.webkit.org/show_bug.cgi?id=182997

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidAudioTracks): Clear the hashmap when there is no valid track left.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks): Ditto.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::getLanguageCode): Demote debugging, this appears too much at least with playbin2.
        (WebCore::TrackPrivateBaseGStreamer::getTag): Ditto.

2018-02-21  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] We need to adopt GstGlDisplays after GStreamer 1.13.1
        https://bugs.webkit.org/show_bug.cgi?id=182996

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        Adopt references when running with GStreamer 1.13.1 to avoid
        memory leaks.

2018-02-20  Philippe Normand  <pnormand@igalia.com>

        [GTK] Layout test media/track/track-in-band-duplicate-tracks-when-source-changes.html failing since r228617
        https://bugs.webkit.org/show_bug.cgi?id=160131
        <rdar://problem/35873985>

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): We
        can't assume the pad has a sticky event here like implemented in
        InbandTextTrackPrivateGStreamer because it might be emitted after
        the track was created. So fallback to a dummy stream ID like in
        the Audio and Video tracks.

2018-02-20  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][OpenVR] Retrieve stage parameters
        https://bugs.webkit.org/show_bug.cgi?id=182976

        Reviewed by Žan Doberšek.

        Use OpenVR to retrieve stage parameters, i.e., play area size and
        the transformation from sitting to standing position. It includes
        the same fallback used by Firefox to provide sensible values in case
        we cannot get the required information from the VR SDK (it's quite
        common not to have defined a play area).

        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::stageParameters const):
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VRStageParameters.cpp:
        (WebCore::VRStageParameters::VRStageParameters):
        (WebCore::VRStageParameters::sittingToStandingTransform const):
        (WebCore::VRStageParameters::sizeX const):
        (WebCore::VRStageParameters::sizeZ const):
        * Modules/webvr/VRStageParameters.h:
        (WebCore::VRStageParameters::create):
        * platform/vr/VRPlatformDisplay.h:
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):
        (WebCore::VRPlatformDisplayOpenVR::updateStageParameters):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h:

2018-02-21  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Create a Wayland GL display instead of EGL
        https://bugs.webkit.org/show_bug.cgi?id=182968

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        Add logging and instantiate a GstDisplayWayland display instead of
        an EGL display when running under a Wayland compositor.

2018-02-21  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderFullScreen::willBeRemoved() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182947
        <rdar://problem/37690848>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::willBeDestroyed):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::fullScreenBuilder):
        * rendering/updating/RenderTreeBuilderFullScreen.cpp: Added.
        (WebCore::RenderTreeBuilder::FullScreen::FullScreen):
        (WebCore::RenderTreeBuilder::FullScreen::cleanupOnRemoval):
        * rendering/updating/RenderTreeBuilderFullScreen.h: Added.
        * rendering/updating/RenderTreeBuilderMathML.cpp:

2018-02-20  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderListItem::willBeRemoved() mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182943
        <rdar://problem/37689029>

        Reviewed by Antti Koivisto.

        We don't need to destroy the marker in RenderListItem::willBeRemoved(), because it gets deleted
        in RenderTreeBuilder::removeAndDestroy() together with RenderListItem (as long as the marker is
        the RenderListItem's descendent). 

        Covered by existing tests.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::~RenderListItem):
        (WebCore::RenderListItem::willBeDestroyed): Deleted.
        * rendering/RenderListItem.h:

2018-02-20  Nan Wang  <n_wang@apple.com>

        AX: Keyboard focus not following VoiceOver cursor into web content or within web content.
        https://bugs.webkit.org/show_bug.cgi?id=182752
        <rdar://problem/37518233>

        Reviewed by Ryosuke Niwa.

        Call the assistive technology specific method for becoming first responder.

        Test: accessibility/mac/accessibility-make-first-responder.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper _accessibilitySetValue:forAttribute:]):
        * page/ChromeClient.h:

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Introduce HAVE(IOSURFACE_ACCELERATOR)
        https://bugs.webkit.org/show_bug.cgi?id=182955
        <rdar://problem/37699510>

        Reviewed by Sam Weinig.

        No new tests, no change in behavior.

        Introduce HAVE(IOSURFACE_ACCELERATOR) and guard all uses of
        IOSurfaceAccelerator behind it.

        Rename USE(IOSURFACE) to HAVE(IOSURFACE) for accuracy.

        * page/cocoa/MemoryReleaseCocoa.mm:
        * platform/graphics/ca/TileController.cpp:
        * platform/graphics/cg/IOSurfacePool.cpp:
        * platform/graphics/cg/IOSurfacePool.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        * platform/graphics/cocoa/IOSurfacePoolCocoa.mm:
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        * platform/graphics/cv/VideoTextureCopierCV.h:

2018-02-20  Chris Dumez  <cdumez@apple.com>

        Provisional load may get committed before receiving the decidePolicyForNavigationResponse response
        https://bugs.webkit.org/show_bug.cgi?id=182720
        <rdar://problem/37515204>

        Reviewed by Alex Christensen.

        Wait for the policy response from the client after receiving a resource response,
        before sending the NetworkResourceLoader::ContinueDidReceiveResponse IPC back to
        the NetworkProcess. Otherwise, the network process may start sending us data and
        we may end up committing the provisional load before receiving the policy decision
        fron the client.

        Change is covered by new API test.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveResponse):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::deliverResponseAndData):
        (WebCore::ResourceLoader::loadDataURL):
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveResponseAsync):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didReceiveResponsePolicy):
        (WebCore::SubresourceLoader::willCancel):
        * loader/SubresourceLoader.h:
        * loader/ios/PreviewLoader.mm:
        (-[WebPreviewLoader _sendDidReceiveResponseIfNecessary]):

2018-02-20  Chris Dumez  <cdumez@apple.com>

        Crash under JSC::JSCell::toNumber(JSC::ExecState*)
        https://bugs.webkit.org/show_bug.cgi?id=182984
        <rdar://problem/37694346>

        Reviewed by Mark Lam.

        The issue was caused by DOMMatrix attributes potentially returning "impure"
        NaN values. We would call JSC::jsNumber(double) to construct the JSValue
        but this is only safe for pure NaN values. Make sure we purify the double
        returned by the implementation for IDL attributes of type 'unrestricted double'
        before calling JSC::jsNumber(double).

        No new tests, extended existing test.

        * bindings/js/JSDOMConvertNumbers.h:
        (WebCore::JSConverter<IDLUnrestrictedDouble>::convert):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testImpureNaNUnrestrictedDouble const):
        (WebCore::TypeConversions::testImpureNaN2UnrestrictedDouble const):
        (WebCore::TypeConversions::testQuietNaNUnrestrictedDouble const):
        * testing/TypeConversions.idl:

2018-02-20  Tim Horton  <timothy_horton@apple.com>

        Make more use of USE(OPENGL_ES) where it makes sense
        https://bugs.webkit.org/show_bug.cgi?id=182957
        <rdar://problem/37699443>

        Reviewed by Dan Bernstein.

        No new tests, no behavior change.

        Make use of USE(OPENGL_ES) for CoreVideo functions that differ based
        on GL availability. Also adjust GraphicsContext3D in the same way.

        * platform/cocoa/CoreVideoSoftLink.cpp:
        * platform/cocoa/CoreVideoSoftLink.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cv/TextureCacheCV.mm:
        (WebCore::TextureCacheCV::create):
        (WebCore::TextureCacheCV::textureFromImage):
        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::enumToStringMap):
        (WebCore::VideoTextureCopierCV::initializeContextObjects):
        (WebCore::VideoTextureCopierCV::initializeUVContextObjects):
        (WebCore::VideoTextureCopierCV::copyImageToPlatformTexture):
        (WebCore::VideoTextureCopierCV::copyVideoTextureToPlatformTexture):

2018-02-20  Nan Wang  <n_wang@apple.com>

        AX: AOM: Dispatch accessibleclick event
        https://bugs.webkit.org/show_bug.cgi?id=180898
        <rdar://problem/36086710>

        Reviewed by Ryosuke Niwa.

        Accessibility events.
        Spec: https://wicg.github.io/aom/spec/phase2.html

        This patch allows developers to register event handlers on Elements
        for custom accessibility events.

        Accessibility events go through a capturing and bubbling phase just
        like DOM events, but in the accessibility tree.

        Implemented "accessibleclick" event.

        Test: accessibility/mac/AOM-events.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::press):
        (WebCore::AccessibilityObject::dispatchAccessibilityEvent):
        * accessibility/AccessibilityObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityPerformAction:]):
        * dom/Element.idl:
        * dom/EventDispatcher.cpp:
        (WebCore::dispatchEventWithType):
        (WebCore::EventDispatcher::dispatchEvent):
        * dom/EventDispatcher.h:
        * dom/EventNames.h:
        * dom/EventPath.cpp:
        (WebCore::EventPath::EventPath):
        * dom/EventPath.h:

2018-02-20  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS 11.3 Beta] Can't copy a URL from Safari and paste it into the Gmail app
        https://bugs.webkit.org/show_bug.cgi?id=182952
        <rdar://problem/37636190>

        Reviewed by Tim Horton.

        After r220865 refactored the iOS copy codepaths to use NSItemProviders, we stopped writing the URL as plain text
        to the pasteboard. However, this means clients that only check for "text/plain" (or one of its aliases) on the
        pasteboard won't read any data on paste.

        To fix this, we restore the pre-iOS 11.3 behavior of writing both the URL and plain text to the pasteboard.
        Since we're using item providers, we also ensure that the NSURL is at a higher fidelity than the string to make
        it clear that the data should be consumed as a URL.

        This patch also rebaselines an existing drag and drop test to cover this change, and adds a new API test,
        ActionSheetTests.CopyLinkWritesURLAndPlainText, which simulates copying a link using the share sheet and pasting
        into a DataTransfer-dumping test harness.

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

2018-02-20  Eric Carlson  <eric.carlson@apple.com>

        [iOS] Returning from Auto-PiP causes Safari to be unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=182977
        <rdar://problem/37685981>

        Reviewed by Jer Noble.

        Remove the error handling added in r228115, it breaks auto-pip.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):
        (VideoFullscreenInterfaceAVKit::enterFullscreenStandard):
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (VideoFullscreenInterfaceAVKit::exitFullscreenHandler):
        (VideoFullscreenInterfaceAVKit::enterFullscreenHandler):

2018-02-20  Jer Noble  <jer.noble@apple.com>

        [EME] Adopt new AVContentKeySession success delegate callback
        https://bugs.webkit.org/show_bug.cgi?id=182974
        <rdar://problem/36079035>

        Reviewed by Eric Carlson.

        Store the updateLicenseCallback if the new protocol method is present and supported.

        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (-[WebCoreFPSContentKeySessionDelegate contentKeySession:contentKeyRequestDidSucceed:]):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::updateLicense):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::didFailToProvideRequest):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::requestDidSucceed):

2018-02-19  Dean Jackson  <dino@apple.com>

        Handle all writing-modes in downcast
        https://bugs.webkit.org/show_bug.cgi?id=182949
        <rdar://problem/37710687>

        Reviewed by Myles Maxfield.

        It appears we forgot to handle the deprecated "lr"
        writing-mode value.

        Test: fast/writing-mode/svg-writing-modes.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator WritingMode const):

2018-02-20  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Drop target GraphicsContext usage in Cairo operations
        https://bugs.webkit.org/show_bug.cgi?id=182964

        Reviewed by Carlos Garcia Campos.

        The GraphicsContext parameters in various Cairo operations are not used
        anymore, so they can be removed. Callsites are updated to reflect this.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowLayerBuffer):
        (WebCore::Cairo::fillShadowBuffer):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::fillPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::drawSurface):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::fillRect):
        (WebCore::GraphicsContextImplCairo::fillRoundedRect):
        (WebCore::GraphicsContextImplCairo::fillRectWithRoundedHole):
        (WebCore::GraphicsContextImplCairo::fillPath):
        (WebCore::GraphicsContextImplCairo::strokeRect):
        (WebCore::GraphicsContextImplCairo::strokePath):
        (WebCore::GraphicsContextImplCairo::drawGlyphs):
        (WebCore::GraphicsContextImplCairo::drawNativeImage):
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):

2018-02-20  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][OpenVR] Retrieve eye parameters and field of view
        https://bugs.webkit.org/show_bug.cgi?id=182962

        Reviewed by Žan Doberšek.

        Get the required data from OpenVR to fill in the VREyeParameters and
        the VRFieldOfView objects.

        * Modules/webvr/VRDisplay.cpp: Create some attributes in the
        body of the constructor instead in the member initialization list to
        avoid calling getDisplayInfo() multiple times.
        (WebCore::VRDisplay::VRDisplay):
        (WebCore::VRDisplay::capabilities const):
        (WebCore::VRDisplay::getEyeParameters const):
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VREyeParameters.cpp:
        (WebCore::VREyeParameters::VREyeParameters): Added new attributes to
        the constructor.
        (WebCore::VREyeParameters::offset const): Return a Ref instead of
        a raw pointer.
        (WebCore::VREyeParameters::renderWidth const):
        (WebCore::VREyeParameters::renderHeight const):
        * Modules/webvr/VREyeParameters.h:
        (WebCore::VREyeParameters::create):
        * Modules/webvr/VRFieldOfView.cpp: Removed. All the impletementation
        fits perfectly in the header file.
        * Modules/webvr/VRFieldOfView.h:
        (WebCore::VRFieldOfView::create):
        (WebCore::VRFieldOfView::upDegrees const):
        (WebCore::VRFieldOfView::rightDegrees const):
        (WebCore::VRFieldOfView::downDegrees const):
        (WebCore::VRFieldOfView::leftDegrees const):
        (WebCore::VRFieldOfView::VRFieldOfView):
        * Sources.txt:
        * platform/vr/VRPlatformDisplay.h: Added some more data to the
        VRPlatformDisplayInfo struct.
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp:
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):
        (WebCore::VRPlatformDisplayOpenVR::computeFieldOfView): Computes the
        up/down/left/right FOV angles in degrees from the raw project
        values returned by OpenVR.
        (WebCore::VRPlatformDisplayOpenVR::updateEyeParameters): Fills in
        the eye parameter info.
        (WebCore::VRPlatformDisplayOpenVR::~VRPlatformDisplayOpenVR):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h:

2018-02-20  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][MiniBrowser] Honor GStreamer command line parameters in MiniBrowser
        https://bugs.webkit.org/show_bug.cgi?id=173655

        Reviewed by Xabier Rodriguez-Calvar.

        The FIXME in GStreamerUtilities.cpp asks to pass the command line
        parameters to the GStreamer initialization function.

        Based on initial patch by: Vanessa Chipirrás Navalón  <vchipirras@igalia.com>

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::constructCommon): Removes the call to the method
        that GStreamer initializes. It is no longer necessary.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::initializeGStreamerAndRegisterWebKitElements): Ditto
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitMSEElement): Ditto
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer): Receive the GStreamer options and initialize GStreamer.
        * platform/graphics/gstreamer/GStreamerUtilities.h: Add vector which contains
        GStreamer options as the input parameter of the initializeGStreamer() method.

2018-02-20  Miguel Gomez  <magomez@igalia.com>

        [GTK] whatsapp web blurry in some parts, sharp on others
        https://bugs.webkit.org/show_bug.cgi?id=182673

        Reviewed by Carlos Garcia Campos.

        CoordinatedGraphicsLayer::createBackingStore() uses the scale factor returned by effectiveContentsScale(),
        which is always 1 if selfOrAncestorHaveNonAffineTransforms() returns true. But this fuction always returns
        true if the layer has an AnimatedPropertyTransform animation, which means that layers with those animations
        won't use the appropriate scale factor, causing blurry renderings.

        This patch removes the animations check, so animated layers properly use the required scale factor.

        No new tests, no behavior change.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::selfOrAncestorHaveNonAffineTransforms):

2018-02-20  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Leverage ShadowBlur without using scratch buffer, target GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=182958

        Reviewed by Carlos Garcia Campos.

        To allow ShadowBlur usage in different threads, avoid the ShadowBlur
        class using the scratch buffer internally. The current implementation of
        that scratch buffer is not thread-safe and its usage in such conditions
        can lead to crashes.

        Instead, the new methods use a temporary ImageBuffer object for drawing.
        This does negate the efficiency of possibly reusing the scratch buffer,
        but at this point that is not yet the priority. This only affects ports
        using Cairo for drawing.

        The added methods don't require a target GraphicsContext object to be
        passed in, instead they accept buffer draw callbacks that are invoked
        with the temporary ImageBuffer object containing the rasterized shadow,
        as well as position and size parameters. The CTM and clip bounds values
        also have to be passed in manually. In CairoOperations.cpp, the provided
        callbacks invoke commands that are equivalent in effect to those that
        would otherwise be invoked on the target GraphicsContext object in the
        ShadowBlur class.

        For now, this approach has to avoid the tiling-based drawing of the
        rectangular shadows in drawRectShadow() and inset shadows in
        drawInsetShadow(), and instead stick to the non-tiling fallback. While
        only affecting Cairo-using ports, with some refactoring it should be
        possible to again leverage the tiling-based approach as well.

        The beginShadowLayer() and endShadowLayer() functions, which are only
        used in CairoOperations.cpp, are replaced with the drawShadowLayer()
        method. This one accepts an additional callback that allows the caller
        to explicitly draw the shadow shape using the provided shadowing
        GraphicsContext object. As with the other two new methods, a temporary
        ImageBuffer object is used, and the buffer draw callback is invoked to
        allow caller to properly handle the shadowing output.

        In CairoOperations.cpp, the new ShadowBlur methods are exercised, with
        direct Cairo operation invocation replacing the GraphicsContext calls
        otherwise done through ShadowBlur. ShadowState object now also has to
        track the global alpha and the global composite operator values so that
        it can properly rasterize the resulting shadow into the final image.

        No new tests -- no change in behavior.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::adjustBlurRadius):
        (WebCore::ShadowBlur::calculateLayerBoundingRect):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawShadowLayer):
        (WebCore::ShadowBlur::beginShadowLayer): Deleted.
        (WebCore::ShadowBlur::endShadowLayer): Deleted.
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawShadowLayerBuffer):
        (WebCore::Cairo::fillShadowBuffer):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::ShadowState::ShadowState):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::drawSurface):
        * platform/graphics/cairo/CairoOperations.h:
        Default-initialize FillSource::fillRule to RULE_NONZERO.
        * platform/graphics/cairo/PlatformContextCairo.h:
        Drop the ShadowBlur.h include, it's moved to CairoOperations.cpp.
        * rendering/RenderThemeGtk.cpp:
        Explicitly include the FloatRoundedRect.h header now that it's not
        included through the ShadowBlur.h header via PlatformContextCairo.h.

2018-02-20  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Use RuntimeEnabledFeatures to enable/disable WebVR
        https://bugs.webkit.org/show_bug.cgi?id=182961

        Reviewed by Xabier Rodriguez-Calvar.

        The shared feature was properly added to RuntimeEnabledFeatures some
        time ago but the code was instead using a private method in
        NavigatorWebVR to temporarily disable it. WebVR is enabled in
        WebPreferences.yaml for GTK+ & WPE as default experimental feature.

        * Modules/webvr/NavigatorWebVR.cpp:
        (WebCore::NavigatorWebVR::getVRDisplays):
        (WebCore::NavigatorWebVR::vrEnabled): Deleted.

2018-02-19  Antti Koivisto  <antti@apple.com>

        Use selector filter when invalidating descendants
        https://bugs.webkit.org/show_bug.cgi?id=182839
        <rdar://problem/37581072>

        Reviewed by Zalan Bujtas.

        We can make descendant invalidation faster by enabling filtering.

        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::initializeParentStack):

            Traverse and reverse the ancestor chain, and push it.

        (WebCore::SelectorFilter::pushParent):
        (WebCore::SelectorFilter::pushParentInitializingIfNeeded):

            Add a version of pushParent that can initialize the stack.

        (WebCore::SelectorFilter::popParent):
        (WebCore::SelectorFilter::popParentsUntil):

            Pop until a given parent element.

        (WebCore::SelectorFilter::pushParentStackFrame): Deleted.
        (WebCore::SelectorFilter::popParentStackFrame): Deleted.

            These were the same as push/popParent.

        * css/SelectorFilter.h:
        (WebCore::SelectorFilter::popParent): Deleted.
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateStyleForDescendants):

            Use pushParentInitializingIfNeeded.

        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

            Use selector filter when doing descendant tree invalidation.
            Make sure to pop it until the parent when reusing.

2018-02-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        null m_lastNodeInserted dereference at ReplaceSelectionCommand::InsertedNodes::lastLeafInserted
        https://bugs.webkit.org/show_bug.cgi?id=161947

        Reviewed by Ryosuke Niwa.

        InsertedNodes happened to be empty if the inserted nodes were
        removed. Add more checks if InsertedNodes is empty.

        No new tests (Covered by existing tests).

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Return early if InsertedNodes becomes empty.
        * editing/ReplaceSelectionCommand.h:
        (WebCore::ReplaceSelectionCommand::InsertedNodes::isEmpty): New method.
        (WebCore::ReplaceSelectionCommand::InsertedNodes::lastLeafInserted const):
        Assert m_lastNodeInserted is not null.
        (WebCore::ReplaceSelectionCommand::InsertedNodes::pastLastLeaf const): Ditto.

2018-02-19  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Add SVGPropertyTraits::fromString() to all the SVG animated types
        https://bugs.webkit.org/show_bug.cgi?id=182901

        Reviewed by Dean Jackson.

        This is a work toward https://bugs.webkit.org/show_bug.cgi?id=168586. The
        goal is is to templatize the SVGAnimatedType class and to use SVGPropertyTraits
        methods inside the template functions.

        * WebCore.xcodeproj/project.pbxproj: Move the enum and the SVGPropertyTraits
        from SVGMarkerElement.h to SVGMarkerTypes.h.
        * svg/SVGAngle.h:
        (WebCore::SVGAngle::SVGAngle): Delete unused constructor and create() method.
        * svg/SVGAngleValue.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::parsePoint): Deleted. Move this function to SVGParserUtilities.cpp
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString): Use SVGPropertyTraits::fromString().
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString): Ditto.
        (WebCore::SVGAnimatedColorAnimator::addAnimatedTypes): Use const.
        (WebCore::SVGAnimatedColorAnimator::calculateAnimatedValue): Ditto.
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromString): Ditto
        (WebCore::parseNumberFromString):
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString): Ditto.
        * svg/SVGLength.h:
        (WebCore::SVGLength::SVGLength): Delete unused constructor and create() method.
        * svg/SVGLengthListValues.h:
        (WebCore::SVGPropertyTraits<SVGLengthListValues>::fromString): New SVGPropertyTraits method.
        (WebCore::SVGPropertyTraits<SVGLengthListValues>::parse): Ditto.
        * svg/SVGMarkerElement.h:
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::highestEnumValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::toString): Deleted.
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::fromString): Deleted.
        (WebCore::SVGIDLEnumLimits<SVGMarkerOrientType>::highestExposedEnumValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::highestEnumValue): Deleted.
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::fromString): Deleted.
        * svg/SVGMarkerTypes.h: Added.
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::highestEnumValue):
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::toString):
        (WebCore::SVGPropertyTraits<SVGMarkerUnitsType>::fromString):
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::highestEnumValue):
        (WebCore::SVGPropertyTraits<SVGMarkerOrientType>::fromString):
        (WebCore::SVGIDLEnumLimits<SVGMarkerOrientType>::highestExposedEnumValue):
        * svg/SVGMatrix.h: Delete unused constructor and create method.
        * svg/SVGNumber.h:
        (WebCore::SVGNumber::SVGNumber): Ditto.
        * svg/SVGNumberListValues.h:
        (WebCore::SVGPropertyTraits<SVGNumberListValues>::fromString): New SVGPropertyTraits method.
        * svg/SVGParserUtilities.cpp:
        (WebCore::parsePoint): This is moved from SVGAnimateMotionElement.cpp
        * svg/SVGParserUtilities.h:
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::SVGPathByteStream):
        (WebCore::SVGPathByteStream::operator=): Add copy and move assignment operators.
        (WebCore::SVGPathByteStream::copy const): Use the copy assignment.
        (WebCore::SVGPathByteStream::isEmpty const): Use Data.isEmpty().
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::initialValue): New SVGPropertyTraits method.
        (WebCore::SVGPropertyTraits<SVGPathByteStream>::fromString): Ditto.
        * svg/SVGPathUtilities.cpp:
        (WebCore::addToSVGPathByteStream): Answer Simon's questions which were added in r190844.
        * svg/SVGPoint.h:
        (WebCore::SVGPoint::SVGPoint): Delete unused constructor and create method.
        * svg/SVGPointListValues.h:
        (WebCore::SVGPropertyTraits<SVGPointListValues>::fromString): New SVGPropertyTraits method.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseAttribute): Use the move assignment operator.
        * svg/SVGPreserveAspectRatio.h:
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio): Delete unused constructor and create method.
        * svg/SVGPreserveAspectRatioValue.cpp:
        (WebCore::SVGPreserveAspectRatioValue::SVGPreserveAspectRatioValue): Add new constructor.
        * svg/SVGPreserveAspectRatioValue.h:
        (WebCore::SVGPropertyTraits<SVGPreserveAspectRatioValue>::fromString): New SVGPropertyTraits method.
        (WebCore::SVGPropertyTraits<SVGPreserveAspectRatioValue>::toString): Ditto.
        * svg/SVGRect.h:
        (WebCore::SVGRect::SVGRect): Delete unused constructor and create method.
        * svg/SVGRectTraits.h: Removed.
        * svg/SVGTransform.h:
        (WebCore::SVGTransform::SVGTransform): Delete unused constructor and create method.
        * svg/SVGTransformListValues.h:
        (WebCore::SVGPropertyTraits<SVGTransformListValues>::fromString): New SVGPropertyTraits method.
        * svg/properties/SVGPropertyTearOff.h: Delete unused create method.
        * svg/properties/SVGPropertyTraits.h: New SVGPropertyTraits methods.
        (WebCore::SVGPropertyTraits<bool>::fromString): 
        (WebCore::SVGPropertyTraits<Color>::initialValue):
        (WebCore::SVGPropertyTraits<Color>::fromString):
        (WebCore::SVGPropertyTraits<Color>::parse):
        (WebCore::SVGPropertyTraits<Color>::toString):
        (WebCore::SVGPropertyTraits<int>::fromString):
        (WebCore::SVGPropertyTraits<float>::fromString):
        (WebCore::SVGPropertyTraits<float>::parse):
        (WebCore::SVGPropertyTraits<FloatPoint>::initialValue):
        (WebCore::SVGPropertyTraits<FloatPoint>::fromString):
        (WebCore::SVGPropertyTraits<FloatPoint>::parse):
        (WebCore::SVGPropertyTraits<FloatPoint>::toString):
        (WebCore::SVGPropertyTraits<FloatRect>::initialValue):
        (WebCore::SVGPropertyTraits<FloatRect>::fromString):
        (WebCore::SVGPropertyTraits<FloatRect>::parse):
        (WebCore::SVGPropertyTraits<FloatRect>::toString):
        (WebCore::SVGPropertyTraits<String>::fromString):
        (WebCore::SVGPropertyTraits<String>::parse):
        (WebCore::SVGPropertyTraits<String>::toString):

2018-02-19  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Implement a compact set of media controls
        https://bugs.webkit.org/show_bug.cgi?id=182937
        <rdar://problem/37682257>

        Reviewed by Eric Carlson.

        We add a new type of media controls used when we need stripped down and compact controls. The new
        CompactMediaControls only show a play/pause button and an invalid placard and disregard all media
        events that are not relevant to the display of these controls.

        To distinguish cases where we need to show compact media controls, we expose a new property on
        MediaControlsHost called "compactMode".

        Tests: media/modern-media-controls/compact-media-controls/compact-media-controls-constructor.html
               media/modern-media-controls/compact-media-controls/compact-media-controls-layout.html

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::base64StringForIconNameAndType const):
        (WebCore::MediaControlsHost::compactMode const):
        * Modules/mediacontrols/MediaControlsHost.h:
        (WebCore::MediaControlsHost::setSimulateCompactMode):
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/modern-media-controls/controls/compact-media-controls.js: Added.
        (CompactMediaControls.prototype.get scaleFactor):
        (CompactMediaControls.prototype.set scaleFactor):
        (CompactMediaControls.prototype.get shouldCenterControlsVertically):
        (CompactMediaControls.prototype.set shouldCenterControlsVertically):
        (CompactMediaControls.prototype.get placard):
        (CompactMediaControls.prototype.set placard):
        (CompactMediaControls.prototype.layout):
        (CompactMediaControls.prototype.commitProperty):
        * Modules/modern-media-controls/controls/icon-service.js:
        (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconAndLayoutTraits):
        (const.iconService.new.IconService):
        * Modules/modern-media-controls/controls/inline-media-controls.js:
        * Modules/modern-media-controls/controls/layout-item.js:
        * Modules/modern-media-controls/js-files:
        * Modules/modern-media-controls/main.js:
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.get layoutTraits):
        (MediaController.prototype._supportingObjectClasses): Compute the set of MediaControllerSupport classes based
        on the layout traits such that in compact mode we only return PlacardSupport and PlaybackSupport.
        (MediaController.prototype._updateControlsIfNeeded):
        (MediaController.prototype._controlsClassForLayoutTraits):
        (MediaController.prototype._shouldControlsBeAvailable):
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype.get mediaEvents): Only track the "error" event in compact mode since this is the only
        relevant placard.
        * Modules/modern-media-controls/media/playback-support.js:
        (PlaybackSupport.prototype.syncControl): Only show or hide the play/pause button based on the playback state
        when in compact mode.
        (PlaybackSupport):
        * WebCore.xcodeproj/project.pbxproj:

2018-02-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make KeyframeEffect target nullable and read-write
        https://bugs.webkit.org/show_bug.cgi?id=182741

        Reviewed by Dean Jackson.

        We used to completely disregard null targets, for instance not parsing keyframes, but targets
        can be null and are also supposed to be read-write for KeyframeEffect. We now update the IDL
        for KeyframeEffect to mark the target property as read-write and update the implementation
        to correctly handle null targets.

        This revealed a few issues in our implementation by allowing more WPT tests to run. So we also
        ensure that:
        
        - we don't crash when parsing font-related properties by calling update() on the generated
        RenderStyle's FontCascade when parsing keyframes.

        - CSS properties are provided as camel-case and not as hyphenated form

        - values provided in keyframes dictionaries are only read for valid properties

        - styles for effect targets are invalidated as soon as the timing model for that animation
        is changed

        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::invalidateElement): Add a new utility method to invalidate a given element since
        we may want to invalidate not only the current target (m_target) but also a previous target.
        (WebCore::IDLAttributeNameToAnimationPropertyName): Move this function below CSSPropertyIDToIDLAttributeName
        so that it can call that function. We also check that we reject CSS properties that are not provided in
        camel-case form (eg. "font-size" vs. "fontSize").
        (WebCore::processIterableKeyframes): Only read the JS values if we know that the provided JS property name
        maps to a valid CSS property.
        (WebCore::KeyframeEffectReadOnly::processKeyframes): Allow keyframes to be processed even if the effect's
        target is null.
        (WebCore::KeyframeEffectReadOnly::setTarget): Notify the animation that the effect target has changed and
        invalidate the style of the new target and the old targets, if any. We also update the blending keyframes
        since this task may not have been completed in a previous call to processKeyframes() due to the target being
        null at that time.
        (WebCore::KeyframeEffectReadOnly::invalidate): Use the invalidateElement() utility.
        * animation/KeyframeEffectReadOnly.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::effectTargetDidChange): This method is called in KeyframeEffectReadOnly::setTarget()
        to inform the animation of the previous effect target and the new one upon a target change. This allows us to
        forward this information onto the timeline so that we correctly add or remove the targets from the list of
        animated elements.
        * animation/WebAnimation.h:

2018-02-19  Chris Dumez  <cdumez@apple.com>

        Crash under MIMETypeRegistry::isSupportedJavaScriptMIMEType()
        https://bugs.webkit.org/show_bug.cgi?id=182927
        <rdar://problem/37675748>

        Reviewed by Antti Koivisto.

        Make it safe to call MIMETypeRegistry::isSupportedJavaScriptMIMEType() from the non-main thread.
        It is currently being called from a background thread in the following places:
        - ServiceWorkerJob::didReceiveResponse()
        - WorkerGlobalScope::importScripts()

        These call sites on non-main threads were added recently with the support for service workers.

        No new tests, already covered by existing tests that flakily experience service worker
        process crashes.

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

2018-02-19  Dean Jackson  <dino@apple.com>

        SIGFPE @ int WebCore::SVGToOTFFontConverter::scaleUnitsPerEm<int> const + 45
        https://bugs.webkit.org/show_bug.cgi?id=182944
        <rdar://problem/35369984>

        Reviewed by Myles Maxfield.

        Avoid a divide-by-zero.

        Test: svg/text/font-bad-unitsperem.html

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::unitsPerEm const):

2018-02-19  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r219342): Touch event coordinates and elementFromPoint coordinates differ
        https://bugs.webkit.org/show_bug.cgi?id=182910
        <rdar://problem/37533950>

        Reviewed by Simon Fraser.

        We reverted other changes to the definition of client coordinates
        in r219829 due to compatibility concerns. However, we failed to revert
        r219342 on trunk, leaving elementFromPoint() using coordinates relative
        to the layout viewport.

        Add a currently off-by-default setting to switch on layout-viewport-relative
        client coordinates and guard the elementFromPoint changes behind it.
        A future patch should roll r219829 back in also behind this setting, so
        that everything remains consistent regardless of which coordinate space we choose.

        * dom/TreeScope.cpp:
        (WebCore::absolutePointIfNotClipped):
        * page/Settings.yaml:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest):

2018-02-19  Eric Carlson  <eric.carlson@apple.com>

        [Extra zoom mode] Don't allow PiP media playback
        https://bugs.webkit.org/show_bug.cgi?id=182930
        <rdar://problem/37676259>

        Reviewed by Andy Estes.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Don't call setPIPModeEnabled:
        if it isn't implemented.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode): Ditto.

2018-02-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Decouple parsing JS keyframes and computing blending keyframes
        https://bugs.webkit.org/show_bug.cgi?id=182939
        <rdar://problem/37678364>

        Reviewed by Dean Jackson.

        Move all the code used to create the KeyframeList into a dedicated updateBlendingKeyframes() method.

        No new tests since this code change has no user-visible impact.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::processKeyframes):
        (WebCore::KeyframeEffectReadOnly::updateBlendingKeyframes):
        * animation/KeyframeEffectReadOnly.h:

2018-02-19  Jer Noble  <jer.noble@apple.com>

        [EME] Add mechanism for MediaKeySession to react to HDCP changes
        https://bugs.webkit.org/show_bug.cgi?id=182935

        Reviewed by Eric Carlson.

        Add a client callback interface to CDMInterface to allow subclasses to communicate up to
        MediaKeySEssion. Add a virtual method to CDMInterface to allow it to be notified of HDCP
        status changes. Override this method in CDMInstanceFairPlayStreamingAVFObjC. Hook up the
        outputObscuredDueToInsufficientExternalProtectionChanged() methods in both
        MediaPlayerPrivateAVFoundationObjC and MediaPlayerPrivateMediaSourceAVFObjC to this new
        CDMInstance method. Add an Internals method to simulate an HDCP error for testing purposes.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::MediaKeySession):
        (WebCore::MediaKeySession::~MediaKeySession):
        (WebCore::MediaKeySession::updateKeyStatuses):
        * Modules/encryptedmedia/MediaKeySession.h:
        * platform/encryptedmedia/CDMInstance.h:
        (WebCore::CDMInstance::setHDCPStatus):
        (WebCore::CDMInstance::setClient):
        (WebCore::CDMInstance::clearClient):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::beginSimulatedHDCPError):
        (WebCore::MediaPlayer::endSimulatedHDCPError):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::beginSimulatedHDCPError):
        (WebCore::MediaPlayerPrivateInterface::endSimulatedHDCPError):
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::setClient):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::clearClient):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::sessionIdentifierChanged):
        (WebCore::CDMInstanceFairPlayStreamingAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        (WebCore::playerKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
        (WebCore::SourceBufferPrivateAVFObjC::outputObscuredDueToInsufficientExternalProtectionChanged):
        * testing/Internals.cpp:
        (WebCore::Internals::beginSimulatedHDCPError):
        (WebCore::Internals::endSimulatedHDCPError):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-02-19  Chris Dumez  <cdumez@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at WebCore: WebCore::TimerBase::~TimerBase
        https://bugs.webkit.org/show_bug.cgi?id=182931
        <rdar://problem/37602962>

        Reviewed by Antti Koivisto.

        Make sure PlatformMediaResource is ThreadSafeRefCounted since it is being
        used from several threads in WebCoreNSURLSession. Also make sure it is
        always destroyed on the main thread since it ends up destroying a
        CachedRawResource object.

        No new tests, no known reproduction case.

        * platform/graphics/PlatformMediaResourceLoader.h:
        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask dealloc]):

2018-02-19  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Rename RenderTreeBuilder::removeAndDestroyChild() -> removeAndDestroy()
        https://bugs.webkit.org/show_bug.cgi?id=182934
        <rdar://problem/37678241>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::removeAndDestroyAllContinuations):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::willBeDestroyed):
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::willBeDestroyed):
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::willBeDestroyed):
        (WebCore::RenderTextFragment::setText):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::willBeDestroyed):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeAndDestroy):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        (WebCore::RenderTreeBuilder::removeAndDestroyChild): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::takeChild):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::handleSpannerRemoval):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::takeChild):

2018-02-19  Daniel Bates  <dabates@apple.com>

        Do not block authentication challenge to navigated resources
        https://bugs.webkit.org/show_bug.cgi?id=182807
        <rdar://problem/37481619>

        Reviewed by Brent Fulgham.

        Blocking the main resource from asking for credentials depending on how it was
        navigated to could be confusing to a person and breaks web compatibility. Restore
        the behavior before r224134.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::willSendRequestInternal):
        (WebCore::ResourceLoader::didBlockAuthenticationChallenge):
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials const):
        (WebCore::ResourceLoader::isMixedContent const): Deleted.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::wasAuthenticationChallengeBlocked const):
        (WebCore::ResourceLoader::wasInsecureRequestSeen const): Deleted.

2018-02-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Store all parsed keyframe input information in a single structure
        https://bugs.webkit.org/show_bug.cgi?id=182903

        Reviewed by Dean Jackson.

        When parsing keyframe input provided through the JS API, we used to create several data structures.
        During parsing we would create a Vector<ProcessedKeyframe> where we would store the validated values
        for "offset", "easing" and "composite" as well as CSS properties and CSS values as strings. 

        Then we would create a KeyframeList, a class that pre-dates the work on Web Animations and is used
        for hardware animations, with RenderStyle objects that are used for CSS property blending at runtime.
        Once the KeyframeList was created, the Vector<ProcessedKeyframe> was discarded.

        Since KeyframeList did not know about nullable offsets, timing functions and composite operations, and
        because we do not with to modify a legacy class that we will eventually remove once all the Web Animations
        work is complete, we also stored the parsed offsets as m_offsets, the timing functions as m_timingFunctions
        and the composite operations as m_compositeOperations.

        In this patch we rename the ProcessedKeyframe structure used temporarily during parsing to ParsedKeyframe and
        store both the input and processed data related to a given keyframe in that single structure which we keep
        around as m_parsedKeyframes when we finished processing the keyframes input. This update ParsedKeyframe structure
        allows to keep around the original nullable offsets, the original CSS properties and CSS values as strings as
        a HashMap<CSSPropertyID, String>, as well as the CSS properties and CSS values as CSSValue objects using a
        MutableStyleProperties object. 

        This has the benefit of reducing the number of members, but also pave the way for supporting read-write targets
        where we will be able to decouple parsing keyframes and creating a KeyframeList, which requires a valid target
        to create RenderStyle objects used for blending, since the original parsing-time information is now stored.

        Finally, this allowed getKeyframes() to be more compliant by returning the CSS values as originally provided in
        the keyframe input with shorthand properties when provided, rather than the long-hands we used to read back
        through RenderStyle objects.

        The generated KeyframeList is now stored as m_blendingKeyframes and is only used for the purpose of interfacing
        with hardware animations and CSS property blending.

        While ProcessedKeyframe was copyable due to holding only simple types, ParsedKeyframe is not since it uses a Ref
        to hold the MutableStyleProperties. This uncovered some cases where we copied ProcessedKeyframe objects, we now
        ensure that the ParsedKeyframe objects are moved instead, which was the correct thing to do all along.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::computeMissingKeyframeOffsets): While we used to store std::optional<double> for the computed offset,
        we now store a simple double, which makes more sense since the computed offset is eventually a fully resolved
        value after calling computeMissingKeyframeOffsets(). So we now compute the final computed offset without resorting
        to intermediate nullable computed offsets.
        (WebCore::processIterableKeyframes):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffectReadOnly::KeyframeEffectReadOnly):
        (WebCore::KeyframeEffectReadOnly::copyPropertiesFromSource):
        (WebCore::KeyframeEffectReadOnly::getKeyframes):
        (WebCore::KeyframeEffectReadOnly::processKeyframes):
        (WebCore::KeyframeEffectReadOnly::computeStackingContextImpact):
        (WebCore::KeyframeEffectReadOnly::shouldRunAccelerated):
        (WebCore::KeyframeEffectReadOnly::getAnimatedStyle):
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffectReadOnly::startOrStopAccelerated):
        * animation/KeyframeEffectReadOnly.h:
        (WebCore::KeyframeEffectReadOnly::ParsedKeyframe::ParsedKeyframe):

2018-02-19  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Remove redundant RenderObject::removeFromParentAndDestroy
        https://bugs.webkit.org/show_bug.cgi?id=182926
        <rdar://problem/37674997>

        Reviewed by Antti Koivisto.

        Call RenderTreeBuilder::removeAndDestroyChild() directly instead. 

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::removeAndDestroyAllContinuations):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::willBeDestroyed):
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::willBeDestroyed):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroy): Deleted.
        * rendering/RenderObject.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::willBeDestroyed):
        (WebCore::RenderTextFragment::setText):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::takeChild):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::handleSpannerRemoval):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::takeChild):

2018-02-19  Tim Horton  <timothy_horton@apple.com>

        Increase text autosizing constants for extra zoom mode
        https://bugs.webkit.org/show_bug.cgi?id=182919
        <rdar://problem/37671259>

        Reviewed by Wenson Hsieh.

        * page/Settings.yaml:
        * page/SettingsBase.cpp:
        (WebCore::SettingsBase::defaultMinimumZoomFontSize):
        (WebCore::SettingsBase::defaultOneLineTextMultiplierCoefficient):
        (WebCore::SettingsBase::defaultMultiLineTextMultiplierCoefficient):
        (WebCore::SettingsBase::defaultMaxTextAutosizingScaleIncrease):
        * page/SettingsBase.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/TextAutoSizing.cpp:
        (WebCore::TextAutoSizingValue::adjustTextNodeSizes):
        Make autosizing constants settings, and change their default values.

2018-02-17  Antoine Quint  <graouts@apple.com>

        [Web Animations] Accept null composite modes in keyframes
        https://bugs.webkit.org/show_bug.cgi?id=182902

        Reviewed by Dean Jackson.

        The Web Animations spec used to specify that that composite modes should be non-null and instead not be
        provided when specifying keyframes, but now null values are accepted. We update the IDL input types used
        when parsing keyframes to allow for null values.

        We had already updated the getKeyframes() output in webkit.org/b/182600.

        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::processIterableKeyframes):
        (WebCore::processKeyframeLikeObject):
        (WebCore::processPropertyIndexedKeyframes):
        * animation/KeyframeEffectReadOnly.h:
        * animation/KeyframeEffectReadOnly.idl:

2018-02-19  Ms2ger  <Ms2ger@igalia.com>

        Explicitly qualify some method calls on this in lamdas in Service Worker code.
        https://bugs.webkit.org/show_bug.cgi?id=182875

        Reviewed by Chris Dumez.

        This is necessary for the code to build with GCC 5. Other code already
        appears to have been adapted similarly.

        No change in functionality.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::didFinishGetRegistrationsRequest):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::updateExtendedEventsSet):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::claim):
        (WebCore::SWServer::Connection::resolveRegistrationReadyRequests):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateRegistrationState):
        (WebCore::SWServerRegistration::setUpdateViaCache):
        (WebCore::SWServerRegistration::setLastUpdateTime):
        (WebCore::SWServerRegistration::fireUpdateFoundEvent):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::setState):

2018-02-19  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement::removeAndDestroyChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182915
        <rdar://problem/37658123>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeAndDestroyChild): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::isChildAllowed const):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroy):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::willBeDestroyed):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeAndDestroyChild):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

2018-02-12  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR][OpenVR] Implement getVRDisplays()
        https://bugs.webkit.org/show_bug.cgi?id=182692

        Reviewed by Žan Doberšek.

        This provides an implementation of Navigator's getVRDisplays()
        method using OpenVR as backend. It queues several promises in
        a queue and resolves them all just once. The information retrieved
        is very minimal for the time being, but this change lays the ground
        for all the changes that are about to land.

        The VR code uses a VRManager which is the interface with the
        platform code and the responsible for instantiating the right
        platform code. This platform code is currently being implemented
        using OpenVR but could we also ported in the future to OpenXR or any
        other VR SDK.

        * CMakeLists.txt:
        * Modules/webvr/NavigatorWebVR.cpp:
        (WebCore::NavigatorWebVR::getVRDisplays):
        (WebCore::NavigatorWebVR::vrEnabled):
        * Modules/webvr/NavigatorWebVR.h:
        * Modules/webvr/VRDisplay.cpp:
        (WebCore::VRDisplay::create):
        (WebCore::VRDisplay::VRDisplay):
        (WebCore::VRDisplay::isConnected const):
        (WebCore::VRDisplay::displayName const):
        * Modules/webvr/VRDisplay.h:
        * Modules/webvr/VRDisplayCapabilities.cpp:
        (WebCore::VRDisplayCapabilities::VRDisplayCapabilities):
        (WebCore::VRDisplayCapabilities::hasPosition const):
        (WebCore::VRDisplayCapabilities::hasOrientation const):
        (WebCore::VRDisplayCapabilities::hasExternalDisplay const):
        (WebCore::VRDisplayCapabilities::canPresent const):
        (WebCore::VRDisplayCapabilities::maxLayer const):
        * Modules/webvr/VRDisplayCapabilities.h:
        (WebCore::VRDisplayCapabilities::create):
        * Sources.txt:
        * platform/vr/VRManager.cpp: Added. This is the main interface used by bindings code to
        access VR devices data provided by platform code.
        (WebCore::VRManager::singleton):
        (WebCore::VRManager::VRManager):
        (WebCore::VRManager::~VRManager):
        (WebCore::VRManager::refreshVRDevices):
        * platform/vr/VRManager.h: Added.
        * platform/vr/VRPlatformDisplay.h: Added. Abstraction of a VR display system. To be
        implemented by backends like OpenVR, OpenXR...
        * platform/vr/VRPlatformManager.h: Added. Abstraction of the platform specific class which
        retrieves data from VR devices. To be implemented by backends like OpenVR, OpenXR...
        * platform/vr/openvr/VRPlatformDisplayOpenVR.cpp: Added.
        (WebCore::VRPlatformDisplayOpenVR::VRPlatformDisplayOpenVR):
        * platform/vr/openvr/VRPlatformDisplayOpenVR.h: Added.
        * platform/vr/openvr/VRPlatformManagerOpenVR.cpp: Added.
        (WebCore::VRPlatformManagerOpenVR::create):
        (WebCore::VRPlatformManagerOpenVR::VRPlatformManagerOpenVR):
        (WebCore::VRPlatformManagerOpenVR::~VRPlatformManagerOpenVR):
        (WebCore::VRPlatformManagerOpenVR::initOpenVR):
        * platform/vr/openvr/VRPlatformManagerOpenVR.h: Added.
        * WebCore.xcodeproj/project.pbxproj:

2018-02-19  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Apply automatic minimum size clamping to spanning items too
        https://bugs.webkit.org/show_bug.cgi?id=182684

        Reviewed by Javier Fernandez.

        In r225776 we added the conditions from the spec to apply
        the automatic minimum size clamping when required
        but only to non-spanning items.
        See: https://drafts.csswg.org/css-grid/#min-size-auto

        This patch moves the code from GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem()
        to GridTrackSizingAlgorithmStrategy::minSizeForChild()
        that way the clamping is applied for both spanning and non-spanning items.

        This somehow reverts r225776, as it was adding some duplicated code.
        All the checks to know if we should use that part of the spec
        were already present in GridTrackSizingAlgorithmStrategy::minSizeForChild().

        Apart from using the previous code, there's a new loop to verify
        that the max track sizing function is fixed for all the tracks of the item.

        Tests: imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-024.html
               imported/w3c/web-platform-tests/css/css-grid/grid-items/grid-minimum-size-grid-items-025.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::sizeTrackToFitNonSpanningItem):
        (WebCore::GridTrackSizingAlgorithmStrategy::minSizeForChild const):

2018-02-19  Philippe Normand  <pnormand@igalia.com>

        [GTK][GStreamer] Replaying a webm video twice causes the video to stop getting rendered
        https://bugs.webkit.org/show_bug.cgi?id=176789

        Reviewed by Xabier Rodriguez-Calvar.

        Ensure the wrapped GstGLContext is set when the pipeline goes from
        READY to PAUSED state. This is a workaround for
        https://bugzilla.gnome.org/show_bug.cgi?id=757933.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Add debug statement.
        (WebCore::MediaPlayerPrivateGStreamer::readyTimerFired): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
        Ensure the wrapped GstGLContext is set when the pipeline goes from
        READY to PAUSED state.
        (WebCore::MediaPlayerPrivateGStreamer::didEnd): Add debug statement.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Change the requestGLContext to be a method instead of a static
        function. Being a static function was a requirement for the now-removed OpenWebRTC player.
        (WebCore::MediaPlayerPrivateGStreamerBase::handleSyncMessage): Add
        debug statement, fix requestGLContext usage.
        (WebCore::MediaPlayerPrivateGStreamerBase::requestGLContext): Refactor as method.
        (WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer): Fix requestGLContext usage.
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSinkGL): Remove fixed FIXME.
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGLVideoSinkContext):
        Set display and app wrapped contexts on the video sink.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2018-02-19  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Crash in WebCore::MediaPlayerRequestInstallMissingPluginsCallback::complete
        https://bugs.webkit.org/show_bug.cgi?id=166733

        Reviewed by Philippe Normand.

        There are a couple of issues to tackle here.

        First is handling getting more than one missing plugin
        installation request at the same time. For this we add the request
        to a Vector and handle them there.

        Second is that if the player is dead and we still get the result,
        bad things happen. For that we "weaked" the pointer capture by the
        lambda.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Handle Vector of callbacks.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Weak
        private player pointer and put the callback in the Vector.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Callback becomes Vector.
        * platform/graphics/gstreamer/MediaPlayerRequestInstallMissingPluginsCallback.h:
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::create):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::complete):
        (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::MediaPlayerRequestInstallMissingPluginsCallback):
        Callback function is refactored into a "using" type and added self
        as parameter to the function.

2018-02-19  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Playbin3 support
        https://bugs.webkit.org/show_bug.cgi?id=182530

        Reviewed by Xabier Rodriguez-Calvar.

        This patch introduces opt-in support for the playbin3 GStreamer
        element. This new playback element is still considered
        experimental but it can still be very useful for media assets
        containing multiple tracks of the same type. In such scenario
        audio/video decoders would be created only for the selected tracks
        whereas playbin2 creates decoder for each track.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp: Take
        a weak pointer of the media player instead of playbin and call the
        player when enabling tracks. Also use the GstStream API instead of
        inspecting the pad when playbin3 is used.
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
        (WebCore::AudioTrackPrivateGStreamer::disconnect):
        (WebCore::AudioTrackPrivateGStreamer::markAsActive):
        (WebCore::AudioTrackPrivateGStreamer::setEnabled):
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: GstStream and
        GstStreamCollection smart pointer support.
        (WTF::adoptGRef):
        (WTF::refGPtr<GstStream>):
        (WTF::derefGPtr<GstStream>):
        (WTF::refGPtr<GstStreamCollection>):
        (WTF::derefGPtr<GstStreamCollection>):
        * platform/graphics/gstreamer/GRefPtrGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        Use the GstStream API instead of inspecting the pad when playbin3
        is used.
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        (WebCore::InbandTextTrackPrivateGStreamer::create):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        m_{audio,video,text}Tracks are now hashmaps, which is a bit more
        convenient to use than Vectors.
        (WebCore::MediaPlayerPrivateGStreamer::updateTracks): Update our
        tracks implementations depending on the streams stored in the
        collection.
        (WebCore::MediaPlayerPrivateGStreamer::enableTrack): Activate the
        given track. This method is called by the TrackPrivate
        implementations.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        Refactored legacy (playbin2) support for track hashmap storage.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample): Use track hashmap storage.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): React on
        playbin3 GstStream messages, store the collection provided and
        activate the given selected streams accordingly.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidAudioTracks): Invalidate tracks no longer needed.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidVideoTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::purgeInvalidTextTracks): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetupCallback):
        Refactoring, use source-setup signal instead of the source
        property which is not supported in playbin3.
        (WebCore::MediaPlayerPrivateGStreamer::uriDecodeBinElementAddedCallback):
        Promoted logging messages, GST_TRACE should be used for very
        frequent and less interesting messages.
        (WebCore::MediaPlayerPrivateGStreamer::downloadBufferFileCreatedCallback): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::sourceSetup): Called by the source-setup signal handler.
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering): Debugging message added.
        (WebCore::MediaPlayerPrivateGStreamer::setPreload): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Create a
        playbin3 element if USE(GSTREAMER_PLAYBIN3) was enabled and
        connect to playbin2 signals otherwise.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::createWeakPtr): Promoted to public.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        New StreamCollectionChanged notification type, used the sub-class.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Support for GstStream API.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Clear GstStream too.
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged): Get tags from GstStream.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfActiveChanged): No need to check m_pad twice.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Ditto.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Take
        a weak pointer of the media player instead of playbin and call the
        player when enabling tracks. Also use the GstStream API instead of
        inspecting the pad when playbin3 is used.
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        (WebCore::VideoTrackPrivateGStreamer::disconnect):
        (WebCore::VideoTrackPrivateGStreamer::markAsActive):
        (WebCore::VideoTrackPrivateGStreamer::setSelected):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp: Pass player pointer to track constructor.
        (WebCore::AppendPipeline::connectDemuxerSrcPadToAppsink):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp: Source-setup signal handler.
        (WebCore::MediaPlayerPrivateGStreamerMSE::sourceSetup):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.h:

2018-02-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r219298): RELEASE_ASSERT(!m_owningPointerForClose) fails in WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose
        https://bugs.webkit.org/show_bug.cgi?id=174354
        <rdar://problem/33294987>

        Reviewed by Michael Catanzaro.

        UniqueIDBDatabase::invokeOperationAndTransactionTimer was called
        even after m_owningPointerForClose was set in
        UniqueIDBDatabase::didDeleteBackingStore.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore):
        Do not start deleting the UniqueIDBDatabase. Just call invokeOperationAndTransactionTimer.
        (WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer):
        Assert m_owningPointerForClose is null.

2018-02-18  Yoshiaki Jitsukawa  <Yoshiaki.Jitsukawa@sony.com>

        Fix build error after r228417 without ACCESSIBILITY
        https://bugs.webkit.org/show_bug.cgi?id=182914

        Reviewed by Chris Fleizach.

        An inline empty version of AXObjectCache::deferFocusdUIElementChangeIfNeeded()
        needs to be defined if not HAVE(ACCESSIBILITY). 

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::deferFocusedUIElementChangeIfNeeded):

2018-02-18  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] REGRESSION(r228238) Detach renderer before destroying its subtree.
        https://bugs.webkit.org/show_bug.cgi?id=182908
        <rdar://problem/37619394>

        Reviewed by Antti Koivisto.

        Prior to r228238 we first detached the to-be-destroyed renderer and then
        started nuking its descendants. r228238 changed the order and now the descendants are
        destroyed while they are still attached to the tree. Apparently some of the takeChild()
        normalization logic gets triggered now that the renderers still have access to their previous/next
        siblings. This is unexpected and it shouldn't matter whether the subtree is still attached.
        Let's revert it to the original order for now (see webkit.org/b/182909).

        Test: fast/block/crash-when-subtree-is-still-attached.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeAndDestroyChild):

2018-02-18  Charlie Turner  <cturner@igalia.com>

        [GStreamer] Push smaller buffers from HTTP source
        https://bugs.webkit.org/show_bug.cgi?id=182829

        Reviewed by Philippe Normand.

        Split the received buffer into smaller buffers of a size consistent
        with the basesrc (4KiB). It is important not to push large buffers
        into the appsrc (where large is relative to the appsrc's configured
        byte size). If large buffers are pushed, then when they are internally
        dequeued by the appsrc, the buffering percentage can dramatically
        plummet due to a large amount of bytes being removed after a push. This
        can in turn trick the media player into thinking it needs to buffer,
        and then issuing a spurious set of playing->paused then
        paused->playing transitions, which by the time the buffering logic
        completes, data are already available.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::dataReceived):

2018-02-17  Darin Adler  <darin@apple.com>

        Web Inspector: get rid of remaining uses of OptOutput<T>
        https://bugs.webkit.org/show_bug.cgi?id=180607

        Reviewed by Brian Burg.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject): Take a const Vector& instead of a Vector*.
        (WebCore::InspectorStyle::buildObjectForStyle const): Pass lineEndings() instead
        of lineEndings().get().
        (WebCore::InspectorStyle::styleWithProperties const): Ditto.
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList): Ditto.
        (WebCore::InspectorStyleSheet::lineEndings const): Return a Vector instead of
        a std::unique_ptr<Vector>.
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings const): Ditto.
        * inspector/InspectorStyleSheet.h: Updated for the above.

        * inspector/agents/InspectorCSSAgent.h: Removed some bogus const.
        * inspector/agents/InspectorCanvasAgent.cpp: Ditto.
        * inspector/agents/InspectorCanvasAgent.h: Ditto.

        * inspector/agents/InspectorDOMDebuggerAgent.cpp: Improved type of global strings
        so we don't waste space with a pointer to the string.
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint): Removed
        explicit creation of String, which was wasteful and unnecessary.
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint): Removed bogus const.

        * inspector/agents/InspectorDOMDebuggerAgent.h: Removed bogus const and use
        final instead of override.
        * inspector/agents/InspectorPageAgent.cpp: Ditto.
        * inspector/agents/InspectorPageAgent.h: Ditto.

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Cleanup RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182899
        <rdar://problem/37627888>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::moveChildTo):
        (WebCore::RenderTreeBuilder::moveAllChildrenTo):
        (WebCore::RenderTreeBuilder::moveChildrenTo):
        (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloatsTo):
        (WebCore::RenderTreeBuilder::makeChildrenNonInline):
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        (WebCore::RenderTreeBuilder::takeChildFromRenderMenuList): Deleted.
        (WebCore::RenderTreeBuilder::takeChildFromRenderButton): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::current):
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo):
        * rendering/updating/RenderTreeBuilderFormControls.cpp:
        (WebCore::RenderTreeBuilder::FormControls::takeChild):
        * rendering/updating/RenderTreeBuilderFormControls.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):

2018-02-16  Daniel Bates  <dabates@apple.com>

        Remove UTF-32 BOM parsing code
        https://bugs.webkit.org/show_bug.cgi?id=182900
        <rdar://problem/37238717>

        Reviewed by Alexey Proskuryakov.

        The UTF-32 encodings were removed from the text codec registry in r224747. So,
        we no longer need code to parse UTF-32{BE, LE} BOM or encode and decode these
        variants.

        * dom/TextDecoder.cpp:
        (WebCore::codeUnitByteSize):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForBOM):
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::isNonByteBasedEncoding const):
        (WebCore::UTF32BigEndianEncoding): Deleted.
        (WebCore::UTF32LittleEndianEncoding): Deleted.
        * platform/text/TextEncoding.h:

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBoxModelObject::moveChild*() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182896
        <rdar://problem/37623051>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo): Deleted.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo): Deleted.
        (WebCore::RenderBoxModelObject::moveChildrenTo): Deleted.
        (WebCore::RenderBoxModelObject::moveAllChildrenToInternal): Deleted.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::moveChildTo): Deleted.
        (WebCore::RenderBoxModelObject::moveAllChildrenTo): Deleted.
        (WebCore::RenderBoxModelObject::moveChildrenTo): Deleted.
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::moveChildTo):
        (WebCore::RenderTreeBuilder::moveAllChildrenTo):
        (WebCore::RenderTreeBuilder::moveChildrenTo):
        (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloatsTo):
        (WebCore::RenderTreeBuilder::makeChildrenNonInline):
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::moveAllChildrenToInternal):
        (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):
        (WebCore::RenderTreeBuilder::Block::takeChild):
        (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo):
        * rendering/updating/RenderTreeBuilderBlockFlow.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):

2018-02-16  Andy Estes  <aestes@apple.com>

        [Cocoa] Stop using non-prefixed vDSP functions in 32-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=182898
        <rdar://problem/37195079>

        Reviewed by Tim Horton.

        There's no need to use non-prefixed vDSP function aliases on 32-bit builds.
        The vDSP-prefixed versions are available on all Cocoa platforms we currently support.

        * platform/audio/DirectConvolver.cpp:
        (WebCore::DirectConvolver::process):
        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):
        (WebCore::VectorMath::vmul):
        (WebCore::VectorMath::zvmul):

2018-02-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228575.

        Introduced LayoutTest crashes under GuardMalloc.

        Reverted changeset:

        "Use ResourceLoader to load appcache manifest"
        https://bugs.webkit.org/show_bug.cgi?id=182861
        https://trac.webkit.org/changeset/228575

2018-02-16  Dean Jackson  <dino@apple.com>

        Use OPENGL macros to be more clear about which OpenGL/ES WebGL uses on Cocoa
        https://bugs.webkit.org/show_bug.cgi?id=182894

        Reviewed by Tim Horton.

        Adjust the places where we check for PLATFORM(MAC) or
        PLATFORM(IOS) related to WebGL, and instead rely
        on USE(OPENGL) USE(OPENGL_ES).

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * platform/graphics/GLContext.cpp:
        (WebCore::initializeOpenGLShimsIfNeeded):
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/egl/GLContextEGL.cpp:
        (WebCore::GLContextEGL::getEGLConfig):
        (WebCore::GLContextEGL::createContext):
        (WebCore::GLContextEGL::createSharingContext):
        * platform/graphics/egl/GLContextEGLWPE.cpp:
        (WebCore::GLContextEGL::createWPEContext):
        * platform/graphics/egl/GLContextEGLWayland.cpp:
        (WebCore::GLContextEGL::createWaylandContext):
        * platform/graphics/egl/GLContextEGLX11.cpp:
        (WebCore::GLContextEGL::createPixmapContext):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::ensureGstGLContext):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp:
        (WebCore::VideoTextureCopierGStreamer::VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::~VideoTextureCopierGStreamer):
        (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture):
        * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::isGLES2Compliant const):
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::isGLES2Compliant const):
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/texmap/TextureMapperContextAttributes.cpp:
        (WebCore::TextureMapperContextAttributes::initialize):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::~TextureMapperGLData):
        (WebCore::TextureMapperGLData::getVAO):
        (WebCore::TextureMapperGL::beginPainting):
        (WebCore::TextureMapperGL::endPainting):
        * platform/graphics/texmap/TextureMapperGLHeaders.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        (WebCore::TextureMapperShaderProgram::create):

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement::insertChildInternal() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182885
        <rdar://problem/37617371>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal): Deleted.
        * rendering/RenderObject.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChildToRenderElement):

2018-02-16  Youenn Fablet  <youenn@apple.com>

        Allow specifying which plug-ins are supported
        https://bugs.webkit.org/show_bug.cgi?id=182748

        Reviewed by Chris Dumez.

        Tests: http/tests/plugins/nounsupported-plugin.html
               http/tests/plugins/supported-plugin-all-origin-visibility.html
               http/tests/plugins/supported-plugin-on-specific-origin.html
               http/tests/plugins/supported-plugin-origin-specific-visibility.html
               http/tests/plugins/unsupported-plugin-on-specific-origin.html
               plugins/unsupported-plugin.html

        Added support for computing plugin web visibility with the added knowledge of supported plugins.
        In case of a plugin failing to be created due to being unsupported, update the UI
        to use mark the plugin as "Unexpected plug in".

        Added internal API to retrieve the plug-in error description message.

        * English.lproj/Localizable.strings:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::setReplacement):
        * html/HTMLPlugInElement.h:
        * loader/EmptyClients.cpp:
        * platform/LocalizedStrings.cpp:
        (WebCore::unsupportedPluginText):
        * platform/LocalizedStrings.h:
        * plugins/PluginData.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/PluginData.h:
        (WebCore::decodePluginNames):
        (WebCore::encodePluginNames):
        (WebCore::SupportedPluginNames::decode):
        (WebCore::SupportedPluginNames::encode const):
        * plugins/PluginInfoProvider.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::unavailablePluginReplacementText):
        * rendering/RenderEmbeddedObject.h:
        (WebCore::RenderEmbeddedObject::pluginReplacementTextIfUnavailable const):
        * testing/Internals.cpp:
        (WebCore::Internals::unavailablePluginReplacementText):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-02-16  Chris Dumez  <cdumez@apple.com>

        http/tests/security/http-0.9/xhr-blocked.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=182857
        <rdar://problem/37616958>

        Reviewed by Antti Koivisto.

        WebCoreResourceHandleAsOperationQueueDelegate does not own the messageQueue and
        the detachHandle function was failing to nullout m_messageQueue when the resourceHandle
        gets destroyed. This means that callFunctionOnMainThread would sometimes try to append
        to a dead messageQueue.

        No new tests, already covered by:
        http/tests/security/http-0.9/xhr-blocked.html is flaky

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate detachHandle]):

2018-02-16  Antti Koivisto  <antti@apple.com>

        Assert in mixed blend animation
        https://bugs.webkit.org/show_bug.cgi?id=182887
        <rdar://problem/37598140>

        Reviewed by Zalan Bujtas.

        Test: fast/css/calc-mixed-blend-crash.html

        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionBlendLength::CalcExpressionBlendLength):

        Fix mismatch between the type test and the value used.

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock/RenderInline::addChildIgnoringContinuation() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182876
        <rdar://problem/37607604>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildIgnoringContinuation): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChildIgnoringContinuation): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChildIgnoringContinuation): Deleted.
        * rendering/RenderInline.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChildIgnoringContinuation):
        (WebCore::RenderTreeBuilder::insertChildToRenderBlockIgnoringContinuation): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToRenderInlineIgnoringContinuation): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::insertChildToContinuation):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Inline::splitInlines):

2018-02-16  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Unify logic of ResourceHandleCurlDelegate into ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=182578

        Reconstruct the classes to match Curl port network layer more similar
        structure with other ports. Move CurlRequest handling into ResourceHandle
        and makes CurlResourceHandleDelegate simple life cycle. Also its duty is
        for most of incoming data and event handling from CurRequest.

        Reviewed by Alex Christensen.

        No new tests because there's no new behavior.

        * platform/Curl.cmake:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::didReceiveResponse):
        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::~CurlDownload):
        (WebCore::CurlDownload::createCurlRequest):
        (WebCore::CurlDownload::curlDidReceiveResponse):
        (WebCore::CurlDownload::curlDidReceiveBuffer):
        (WebCore::CurlDownload::curlDidComplete):
        (WebCore::CurlDownload::curlDidFailWithError):
        (WebCore::CurlDownload::willSendRequest):
        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::cancel):
        (WebCore::CurlRequest::callClient):
        (WebCore::CurlRequest::willSendData):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didReceiveDataFromMultipart):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        (WebCore::CurlRequest::invalidateClient):
        (WebCore::CurlRequest::setClient): Deleted.
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/CurlResourceHandleDelegate.cpp: Added.
        (WebCore::CurlResourceHandleDelegate::CurlResourceHandleDelegate):
        (WebCore::CurlResourceHandleDelegate::ref):
        (WebCore::CurlResourceHandleDelegate::deref):
        (WebCore::CurlResourceHandleDelegate::cancelledOrClientless):
        (WebCore::CurlResourceHandleDelegate::client const):
        (WebCore::CurlResourceHandleDelegate::d):
        (WebCore::CurlResourceHandleDelegate::curlDidSendData):
        (WebCore::handleCookieHeaders):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse):
        (WebCore::CurlResourceHandleDelegate::curlDidReceiveBuffer):
        (WebCore::CurlResourceHandleDelegate::curlDidComplete):
        (WebCore::CurlResourceHandleDelegate::curlDidFailWithError):
        * platform/network/curl/CurlResourceHandleDelegate.h: Added.
        (WebCore::CurlResourceHandleDelegate::response const):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::ResourceHandle::cancelledOrClientless):
        (WebCore::ResourceHandle::createCurlRequest):
        (WebCore::ResourceHandle::delegate):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::ResourceHandle::getCredential):
        (WebCore::ResourceHandle::restartRequestWithCredential):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::platformContinueSynchronousDidReceiveResponse):
        (WebCore::ResourceHandle::continueAfterDidReceiveResponse):
        (WebCore::ResourceHandle::shouldRedirectAsGET):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::continueAfterWillSendRequest):
        (WebCore::ResourceHandle::handleDataURL):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp: Removed.
        * platform/network/curl/ResourceHandleCurlDelegate.h: Removed.

2018-02-16  Youenn Fablet  <youenn@apple.com>

        Use ResourceLoader to load appcache manifest
        https://bugs.webkit.org/show_bug.cgi?id=182861

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Add ApplicationCacheResourceLoader to load an ApplicationCacheResource from a ResourceLoader.
        Make use of it to load the app cache manifest.
        Future work should load entries using the same loader.

        Remove manifest handle.
        Ensure that DocumentLoader does not register the manifest resource loader as its lifetime
        is handled by its ApplicationCacheGroup.

        Add a ResourceLoader option to bypass the application cache.
        Use it for manifest loading.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::addSubresourceLoader):
        * loader/ResourceLoaderOptions.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoading):
        (WebCore::ApplicationCacheGroup::update):
        (WebCore::ApplicationCacheGroup::createRequest):
        (WebCore::ApplicationCacheGroup::didReceiveResponseAsync):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadResource):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForRedirect):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForResponse):
        (WebCore::ApplicationCacheHost::maybeLoadFallbackForError):
        * loader/appcache/ApplicationCacheResourceLoader.cpp: Added.
        * loader/appcache/ApplicationCacheResourceLoader.h: Added.

2018-02-16  Chris Dumez  <cdumez@apple.com>

        Crash under WebCore::EventTarget::fireEventListeners
        https://bugs.webkit.org/show_bug.cgi?id=182880
        <rdar://problem/20788804>

        Reviewed by Youenn Fablet.

        Make sure the 'ended' event does not get dispatched on a
        AudioScheduledSourceNode after ActiveDOMObjects have been stopped.

        Test: webaudio/audiobuffersource-ended-detached-frame.html

        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::finish):

2018-02-16  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()
        https://bugs.webkit.org/show_bug.cgi?id=182771
        <rdar://problem/36459988>

        Reviewed by Brent Fulgham.

        This patch implements PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()
        per https://www.w3.org/TR/webauthn/#isUserVerifyingPlatformAuthenticatorAvailable with some
        limitations.

        In addition, it changes DeferredPromise to DOMPromiseDeferred<> for all CredentialsManagement
        and WebAuthN API.

        Test: http/wpt/webauthn/public-key-is-user-verifying-platform-authenticator-available.html

        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::store):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess const):
        * Modules/credentialmanagement/CredentialsContainer.h:
        * Modules/credentialmanagement/CredentialsMessenger.cpp:
        (WebCore::CredentialsMessenger::addCreationCompletionHandler):
        Remove a redundant assertion.
        (WebCore::CredentialsMessenger::addRequestCompletionHandler):
        Remove a redundant assertion.
        (WebCore::CredentialsMessenger::addQueryCompletionHandler):
        (WebCore::CredentialsMessenger::takeQueryCompletionHandler):
        * Modules/credentialmanagement/CredentialsMessenger.h:
        * Modules/webauthn/AuthenticatorManager.cpp:
        (WebCore::AuthenticatorManagerInternal::initTimeoutTimer):
        (WebCore::AuthenticatorManager::create const):
        (WebCore::AuthenticatorManager::discoverFromExternalSource const):
        (WebCore::AuthenticatorManager::isUserVerifyingPlatformAuthenticatorAvailable const):
        * Modules/webauthn/AuthenticatorManager.h:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable):
        * Modules/webauthn/PublicKeyCredential.h:
        * testing/MockCredentialsMessenger.cpp:
        (WebCore::MockCredentialsMessenger::isUserVerifyingPlatformAuthenticatorAvailable):
        (WebCore::MockCredentialsMessenger::isUserVerifyingPlatformAuthenticatorAvailableReply):
        * testing/MockCredentialsMessenger.h:
        * testing/MockCredentialsMessenger.idl:

2018-02-16  Tim Horton  <timothy_horton@apple.com>

        Stop using EXCLUDED_SOURCE_FILE_NAMES for touch and gesture files in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=182866

        Reviewed by Daniel Bates.

        * Configurations/WebCore.xcconfig:
        These generated files already have ENABLE() flags around them,
        so there's no reason to exclude them explicitly.

2018-02-16  Chris Dumez  <cdumez@apple.com>

        Unreviewed, fix iOS build after r228562.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182878
        <rdar://problem/37608349>

        Reviewed by Antti Koivisto.

        This patch removes the last addChild() related mutation logic from the renderers.

        No change in functionality.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::didInsertChild):
        (WebCore::RenderElement::addChild): Deleted.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::isChildAllowed const):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::insertChildToRenderElement):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::insertChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-16  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228546.

        This caused a consistent crash on all macOS WK2 platforms.

        Reverted changeset:

        "Web Inspector: get rid of remaining uses of OptOutput<T>"
        https://bugs.webkit.org/show_bug.cgi?id=180607
        https://trac.webkit.org/changeset/228546

2018-02-16  Youenn Fablet  <youenn@apple.com>

        Log the error message when failing to open the database
        https://bugs.webkit.org/show_bug.cgi?id=182795
        <rdar://problem/37592399>

        Unreviewed.
        Fixing iOS simulator debug build.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):

2018-02-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        IndexedDB: Several test crash in when destroying a IDBKeyData
        https://bugs.webkit.org/show_bug.cgi?id=167576

        Reviewed by Michael Catanzaro.

        IDBKeyDataHashTraits::constructDeletedValue is using operator= to
        assign deletedValue. But, the value is destructed just before
        calling constructDeletedValue. You can't use operator= for a
        destructed value.

        No new tests (Covered by existing tests).

        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyDataHashTraits::constructDeletedValue):
        Construct null value before assigning deletedValue.

2018-02-16  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock/RenderBlockFlow::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182862
        <rdar://problem/37595464>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChild): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::insertChildToRenderBlock): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToRenderBlockFlow): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild):
        * rendering/updating/RenderTreeBuilderFormControls.cpp:
        (WebCore::RenderTreeBuilder::FormControls::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        (WebCore::RenderTreeBuilder::MathML::makeFences):
        (WebCore::RenderTreeBuilder::MathML::insertChild):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::insertChild):
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):
        (WebCore::RenderTreeBuilder::Ruby::rubyBaseSafe):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::insertChild):

2018-02-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Add basic support for <input type='date'> using date picker UI
        https://bugs.webkit.org/show_bug.cgi?id=182847
        <rdar://problem/35143111>

        Reviewed by Tim Horton.

        Add new localized strings for "month", "day" and "year" as they appear in the date picker.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::textInputModeWriteButtonTitle):
        (WebCore::textInputModeSpeechButtonTitle):
        (WebCore::datePickerDayLabelTitle):
        (WebCore::datePickerMonthLabelTitle):
        (WebCore::datePickerYearLabelTitle):
        (WebCore::textInputModeWriteButton): Deleted.
        (WebCore::textInputModeSpeechButton): Deleted.
        * platform/LocalizedStrings.h:

2018-02-16  Zan Dobersek  <zdobersek@igalia.com>

        HarfBuzzFace should operate with a FontPlatformData reference
        https://bugs.webkit.org/show_bug.cgi?id=182863

        Reviewed by Carlos Garcia Campos.

        Instead of keeping a never-null pointer to FontPlatformData,
        HarfBuzzFace should operate with a FontPlatformData reference.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::harfBuzzFace const):
        * platform/graphics/harfbuzz/HarfBuzzFace.cpp:
        (WebCore::HarfBuzzFace::HarfBuzzFace):
        * platform/graphics/harfbuzz/HarfBuzzFace.h:
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] parent.Render*::addChild() cleanup
        https://bugs.webkit.org/show_bug.cgi?id=182842
        <rdar://problem/37585524>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderFormControls.cpp:
        (WebCore::RenderTreeBuilder::FormControls::createInnerRendererIfNeeded):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        (WebCore::RenderTreeBuilder::MathML::makeFences):
        (WebCore::RenderTreeBuilder::MathML::insertChild):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::insertChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-15  Megan Gardner  <megan_gardner@apple.com>

        Support scrolling for non-editable web-selection and start autoscroll when near screen edges
        https://bugs.webkit.org/show_bug.cgi?id=182815

        Reviewed by Tim Horton.

        Adjust the position we are autoscrolling to so that when we are close to an edge, we will start autoscrolling
        while we are still inside the view. Autoscrolling still happens when you drag past the edge of a view.

        No new tests (This is difficult to test in this state, but when we switch assistants, test will also be added).

        * page/EventHandler.h:
        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::startSelectionAutoscroll):
        (WebCore::EventHandler::cancelSelectionAutoscroll):
        (WebCore::autoscrollAdjustmentFactorForScreenBoundaries):
        (WebCore::EventHandler::targetPositionInWindowForSelectionAutoscroll const):
        (WebCore::EventHandler::startTextAutoscroll): Deleted.
        (WebCore::EventHandler::cancelTextAutoscroll): Deleted.

2018-02-15  Youenn Fablet  <youenn@apple.com>

        Log the error message when failing to open the database
        https://bugs.webkit.org/show_bug.cgi?id=182795

        Reviewed by Chris Dumez.

        No change of behavior.
        Print the error message as it does not contain any user private information.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::RegistrationDatabase::openSQLiteDatabase):

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderMenuList::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182840
        <rdar://problem/37583638>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::didInsertChild):
        (RenderMenuList::addChild): Deleted.
        * rendering/RenderMenuList.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderFormControls.cpp:
        (WebCore::RenderTreeBuilder::FormControls::findOrCreateParentForChild):
        (WebCore::RenderTreeBuilder::FormControls::insertChild):
        (WebCore::RenderTreeBuilder::FormControls::createInnerRendererIfNeeded): Deleted.
        * rendering/updating/RenderTreeBuilderFormControls.h:

2018-02-15  Darin Adler  <darin@apple.com>

        Web Inspector: get rid of remaining uses of OptOutput<T>
        https://bugs.webkit.org/show_bug.cgi?id=180607

        Reviewed by Brian Burg.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject): Take a const Vector& instead of a Vector*.
        (WebCore::InspectorStyle::buildObjectForStyle const): Pass lineEndings() instead
        of lineEndings().get().
        (WebCore::InspectorStyle::styleWithProperties const): Ditto.
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList): Ditto.
        (WebCore::InspectorStyleSheet::lineEndings const): Return a Vector instead of
        a std::unique_ptr<Vector>.
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings const): Ditto.
        * inspector/InspectorStyleSheet.h: Updated for the above.

        * inspector/agents/InspectorCSSAgent.h: Removed some bogus const.
        * inspector/agents/InspectorCanvasAgent.cpp: Ditto.
        * inspector/agents/InspectorCanvasAgent.h: Ditto.

        * inspector/agents/InspectorDOMDebuggerAgent.cpp: Improved type of global strings
        so we don't waste space with a pointer to the string.
        (WebCore::InspectorDOMDebuggerAgent::setEventListenerBreakpoint): Removed
        explicit creation of String, which was wasteful and unnecessary.
        (WebCore::InspectorDOMDebuggerAgent::setInstrumentationBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::removeEventListenerBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::removeInstrumentationBreakpoint): Ditto.
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint): Removed bogus const.

        * inspector/agents/InspectorDOMDebuggerAgent.h: Removed bogus const and use
        final instead of override.
        * inspector/agents/InspectorPageAgent.cpp: Ditto.
        * inspector/agents/InspectorPageAgent.h: Ditto.

2018-02-15  Chris Dumez  <cdumez@apple.com>

        Flaky Test: imported/w3c/web-platform-tests/fetch/api/redirect/redirect-to-dataurl-worker.html
        https://bugs.webkit.org/show_bug.cgi?id=182270
        <rdar://problem/36904314>

        Reviewed by Antti Koivisto.

        No new tests, already covered by existing tests that crash flakily on the bots.

        * loader/ThreadableLoaderClientWrapper.h:
        (WebCore::ThreadableLoaderClientWrapper::ThreadableLoaderClientWrapper):
        isolate copy the initiator string as this object can be destroyed on a different thread. This was
        causing the test to flakily crash as well when destroying ThreadLocalData.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (scheduledWithCustomRunLoopMode):
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):
        Fix thread safety issue in callFunctionOnMainThread. This function is called from a background thread
        to get to the main thread. However, it relied on m_handle which would get nullified on the main thread
        by detachHandle when the ResourceHandle is destroyed. Fix the issue by not relying on m_handle anymore.

        (-[WebCoreResourceHandleAsOperationQueueDelegate initWithHandle:messageQueue:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):
        - Go back to using autorelease() instead of get() for the returned objects to match the code pre-r224522.
        - Dispatch the protectedSelf variables that were added in r227073 to the main thread to make sure we do
          not get destroyed on the background thread when protectedSelf is the last strong reference to self.
          Destroying the WebCoreResourceHandleAsOperationQueueDelegate on the background safe is unsafe due to
          its m_messageQueue data member which contains lambdas that may capture anything.
        - Add a Lock to protect against detachHandle getting called on the main thread and nulling out
          m_handle / m_requestResult / m_cachedResponseResult while the background thread may be accessing
          them.

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTableRow::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182838
        <rdar://problem/37580762>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::didInsertTableCell):
        (WebCore::RenderTableRow::addChild): Deleted.
        * rendering/RenderTableRow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::insertChildToRenderTableRow): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-15  Antoine Quint  <graouts@apple.com>

        [Web Animations] Ensure that changing the timing model updates styles synchronously
        https://bugs.webkit.org/show_bug.cgi?id=182836

        Reviewed by Dean Jackson.

        We did not invalidate the timing model when properties of an effect's timing object changed
        and even when we did invalidate the timing model, we did not update styles on effect targets
        synchronously, only scheduling such updates for the next animation frame.

        In this patch we expose the effect on the timing object such that changing timing properties
        can notify the effect of a change in the timing model, which can then be forwarded to the
        animation (which already informs its timeline, if any).

        Additionally, when an animation's timing model has changed, we now invalidate the effect, which
        will update styles synchronously.

        This produces a number of progressions in WPT tests.

        * animation/AnimationEffectReadOnly.cpp:
        (WebCore::AnimationEffectReadOnly::AnimationEffectReadOnly): Set the timing object's effect upon
        effect construction.
        (WebCore::AnimationEffectReadOnly::~AnimationEffectReadOnly): Set the timing object's effect to
        null upon effect destruction.
        (WebCore::AnimationEffectReadOnly::timingDidChange): Notify the animation (if any) that its timing
        model changed following a change in the timing properties.
        * animation/AnimationEffectReadOnly.h: Add a new virtual invalidate() method that subclasses can
        override to implement invalidation behavior when the animation finds out its timing model changed.
        * animation/AnimationEffectTimingReadOnly.cpp: Notify the effect when a property changes such
        that it may notify its animation of a timing model change.
        (WebCore::AnimationEffectTimingReadOnly::propertyDidChange):
        (WebCore::AnimationEffectTimingReadOnly::setIterationStart):
        (WebCore::AnimationEffectTimingReadOnly::setIterations):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsDuration):
        (WebCore::AnimationEffectTimingReadOnly::setEasing):
        (WebCore::AnimationEffectTimingReadOnly::setDelay):
        (WebCore::AnimationEffectTimingReadOnly::setEndDelay):
        (WebCore::AnimationEffectTimingReadOnly::setFill):
        (WebCore::AnimationEffectTimingReadOnly::setIterationDuration):
        (WebCore::AnimationEffectTimingReadOnly::setDirection):
        * animation/AnimationEffectTimingReadOnly.h:
        (WebCore::AnimationEffectTimingReadOnly::setEffect):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsDelay):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsEndDelay):
        (WebCore::AnimationEffectTimingReadOnly::setDelay): Deleted.
        (WebCore::AnimationEffectTimingReadOnly::setEndDelay): Deleted.
        (WebCore::AnimationEffectTimingReadOnly::setFill): Deleted.
        (WebCore::AnimationEffectTimingReadOnly::setIterationDuration): Deleted.
        (WebCore::AnimationEffectTimingReadOnly::setDirection): Deleted.
        * animation/AnimationTimeline.cpp: Rename animationTimingModelDidChange() to timingModelDidChange()
        to align it with the new WebAnimation::timingModelDidChange() method.
        (WebCore::AnimationTimeline::addAnimation):
        (WebCore::AnimationTimeline::removeAnimation):
        (WebCore::AnimationTimeline::setCurrentTime):
        * animation/AnimationTimeline.h:
        (WebCore::AnimationTimeline::timingModelDidChange):
        (WebCore::AnimationTimeline::animationTimingModelDidChange): Deleted.
        * animation/DocumentTimeline.cpp:
        (WebCore::DocumentTimeline::timingModelDidChange):
        (WebCore::DocumentTimeline::updateAnimations):
        (WebCore::DocumentTimeline::animationTimingModelDidChange): Deleted.
        * animation/DocumentTimeline.h:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::invalidate): Override the invalidate() method to perform a synchronous
        style update in order to ensure that timing properties are accounted for right as they change.
        * animation/KeyframeEffectReadOnly.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timingModelDidChange): Invalidate the effect and notify the timeline of a timing
        model change when an animation is notified that its timing model has changed.
        (WebCore::WebAnimation::setStartTime):
        * animation/WebAnimation.h:

2018-02-15  Timothy Horton  <timothy_horton@apple.com>

        Fix the build.

        * platform/ios/KeyEventCodesIOS.h:

2018-02-15  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make sure WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can ingest older plist versions and not reset the database
        https://bugs.webkit.org/show_bug.cgi?id=182812
        <rdar://problem/37511406>

        Reviewed by Brent Fulgham.

        No new tests. Tested manually between versions of Safari.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::decode):
            Now only expects these fields for model version 11 or higher:
            - topFrameUniqueRedirectsTo
            - topFrameUniqueRedirectsFrom
            - subresourceUniqueRedirectsFrom
            - timesAccessedAsFirstPartyDueToUserInteraction
            - timesAccessedAsFirstPartyDueToStorageAccessAPI
        * loader/ResourceLoadStatistics.h:

2018-02-15  Tim Horton  <timothy_horton@apple.com>

        Stop using EXCLUDED_SOURCE_FILE_NAMES for actual source files in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=182822

        Reviewed by Dan Bernstein.

        It's much easier to reason about things if xcconfigs don't apply extra
        constraints to which source files actually build on a per-platform basis.
        We should use #ifs instead like we usually do.

        * Configurations/WebCore.xcconfig:
        * Modules/geolocation/ios/GeolocationPositionIOS.mm:
        * accessibility/ios/AccessibilityObjectIOS.mm:
        * accessibility/mac/AXObjectCacheMac.mm:
        * accessibility/mac/AccessibilityObjectMac.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        * dom/DataTransferMac.mm:
        * editing/ios/DictationCommandIOS.cpp:
        * editing/ios/DictationCommandIOS.h:
        * editing/ios/EditorIOS.mm:
        * editing/ios/WebContentReaderIOS.mm:
        * editing/mac/EditorMac.mm:
        * editing/mac/WebContentReaderMac.mm:
        * page/ios/EventHandlerIOS.mm:
        * page/ios/FrameIOS.mm:
        * page/mac/EventHandlerMac.mm:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm:
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm:
        * platform/ThreadCheck.h:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.h:
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm:
        * platform/graphics/ios/FontCacheIOS.mm:
        * platform/graphics/ios/GraphicsContext3DIOS.h:
        * platform/graphics/ios/IconIOS.mm:
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ColorMac.mm:
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        * platform/graphics/mac/DisplayRefreshMonitorMac.h:
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        * platform/ios/CursorIOS.cpp:
        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/EventLoopIOS.mm:
        * platform/ios/KeyEventCodesIOS.h:
        * platform/ios/LowPowerModeNotifierIOS.mm:
        * platform/ios/PasteboardIOS.mm:
        * platform/ios/PlatformEventFactoryIOS.h:
        * platform/ios/PlatformEventFactoryIOS.mm:
        * platform/ios/PlatformPasteboardIOS.mm:
        * platform/ios/PlatformScreenIOS.mm:
        * platform/ios/PlatformSpeechSynthesizerIOS.mm:
        * platform/ios/RemoteCommandListenerIOS.h:
        * platform/ios/RemoteCommandListenerIOS.mm:
        * platform/ios/SSLKeyGeneratorIOS.cpp:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollAnimatorIOS.mm:
        * platform/ios/ScrollViewIOS.mm:
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/ScrollbarThemeIOS.mm:
        * platform/ios/SystemMemoryIOS.cpp:
        * platform/ios/ThemeIOS.h:
        * platform/ios/ThemeIOS.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp:
        * platform/ios/TileControllerMemoryHandlerIOS.h:
        * platform/ios/UserAgentIOS.mm:
        * platform/ios/ValidationBubbleIOS.mm:
        * platform/ios/WidgetIOS.mm:
        * platform/mac/CursorMac.mm:
        * platform/mac/EventLoopMac.mm:
        * platform/mac/LocalCurrentGraphicsContext.h:
        * platform/mac/LocalCurrentGraphicsContext.mm:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/NSScrollerImpDetails.mm:
        * platform/mac/PasteboardMac.mm:
        * platform/mac/PlatformEventFactoryMac.h:
        * platform/mac/PlatformEventFactoryMac.mm:
        * platform/mac/PlatformPasteboardMac.mm:
        * platform/mac/PlatformScreenMac.mm:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        * platform/mac/SSLKeyGeneratorMac.mm:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ThemeMac.h:
        * platform/mac/ThemeMac.mm:
        * platform/mac/ThreadCheck.mm:
        * platform/mac/UserAgentMac.mm:
        * platform/mac/WebCoreView.h:
        * platform/mac/WebCoreView.m:
        * platform/mac/WidgetMac.mm:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:
        * platform/network/ios/NetworkStateNotifierIOS.mm:
        * platform/network/ios/WebCoreURLResponseIOS.h:
        * platform/network/ios/WebCoreURLResponseIOS.mm:
        * platform/network/mac/NetworkStateNotifierMac.cpp:

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTableSection::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182835
        <rdar://problem/37579191>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::willInsertTableRow):
        (WebCore::RenderTableSection::addChild): Deleted.
        * rendering/RenderTableSection.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild): Leftover from r228529.
        (WebCore::RenderTreeBuilder::insertChildToRenderTable): Deleted. Leftover from r228529.
        (WebCore::RenderTreeBuilder::insertChildToRenderTableSection): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTable::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182832
        <rdar://problem/37576362>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::willInsertTableColumn):
        (WebCore::RenderTable::willInsertTableSection):
        (WebCore::RenderTable::addChild): Deleted.
        * rendering/RenderTable.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):

2018-02-14  Darin Adler  <darin@apple.com>

        Use std::make_unique instead of explicit calls to new and instead of writing create functions
        https://bugs.webkit.org/show_bug.cgi?id=182821

        Reviewed by Anders Carlsson.

        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient): Use std::make_unique insteadof create functions.

        * loader/LinkPreloadResourceClients.h: Make constructors public, get rid of create functions,
        make overrides be private and final, get rid of unnecessary public default virtual destructors
        that the compiler will generate correctly without anything explicit.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMFactoryClearKey::createCDM): Use std::make_unique instead of std::unique_ptr/new.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Use
        std::make_unique instead of calling a create function.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Ditto.

        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.h: Made the constructor
        public and got rid of the create function.
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::create): Deleted.

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::computeFlexFactorUnitSize const):
        Use std::make_unique instead of std::unique_ptr/new.

2018-02-15  Andy Estes  <aestes@apple.com>

        Finish unifying Apple Pay and Payment Request sources
        https://bugs.webkit.org/show_bug.cgi?id=182831

        Reviewed by Keith Miller.

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

2018-02-15  Zan Dobersek  <zdobersek@igalia.com>

        HarfBuzzFace: rework cache entry reference holding
        https://bugs.webkit.org/show_bug.cgi?id=182828

        Reviewed by Michael Catanzaro.

        Move the FaceCacheEntry and HarfBuzzFaceCache types into the
        HarfBuzzFace class as CacheEntry and Cache, respectively. The Cache
        singleton is also moved there.

        In the HarfBuzzFace constructor, we now don't increase the CacheEntry
        reference, but instead just keep a reference to that object through
        a RefPtr<CacheEntry> object. We don't need to retrieve the hb_face_t
        object and the glyph cache HashMap in the constructor anymore, we just
        retrieve them when necessary through that CacheEntry reference.

        In the destructor, that RefPtr<CacheEntry> object is nulled out before
        the object in Cache is removed if that's where the final reference is
        kept.

        * platform/graphics/harfbuzz/HarfBuzzFace.cpp:
        (WebCore::HarfBuzzFace::CacheEntry::CacheEntry):
        (WebCore::HarfBuzzFace::CacheEntry::~CacheEntry):
        (WebCore::HarfBuzzFace::cache):
        (WebCore::HarfBuzzFace::HarfBuzzFace):
        (WebCore::HarfBuzzFace::~HarfBuzzFace):
        (WebCore::HarfBuzzFace::setScriptForVerticalGlyphSubstitution):
        (WebCore::FaceCacheEntry::create): Deleted.
        (WebCore::FaceCacheEntry::~FaceCacheEntry): Deleted.
        (WebCore::FaceCacheEntry::face): Deleted.
        (WebCore::FaceCacheEntry::glyphCache): Deleted.
        (WebCore::FaceCacheEntry::FaceCacheEntry): Deleted.
        (WebCore::harfBuzzFaceCache): Deleted.
        * platform/graphics/harfbuzz/HarfBuzzFace.h:
        (WebCore::HarfBuzzFace::CacheEntry::create):
        (WebCore::HarfBuzzFace::CacheEntry::face):
        (WebCore::HarfBuzzFace::CacheEntry::glyphCache):
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph):
        (WebCore::HarfBuzzFace::createFont):

2018-02-15  Zan Dobersek  <zdobersek@igalia.com>

        FontPlatformData::harfBuzzFace() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=182825

        Reviewed by Carlos Garcia Campos.

        Have FontPlatformData::harfBuzzFace() return a reference instead of a
        pointer, given that the returned HarfBuzzFace object cannot be null.

        Call-sites of FontPlatformData::harfBuzzFace() are adjusted.
        OpenTypeMathData constructors are also changed to not rely on
        preprocessor to correctly position the closing brace.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::harfBuzzFace const):
        * platform/graphics/harfbuzz/ComplexTextControllerHarfBuzz.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/opentype/OpenTypeMathData.cpp:
        (WebCore::OpenTypeMathData::OpenTypeMathData):

2018-02-15  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Revisit the whole async model of task dispatching, timeout and aborting
        https://bugs.webkit.org/show_bug.cgi?id=181946
        <rdar://problem/37258262>

        Reviewed by Chris Dumez.

        This patch changes the original async model from a work queue to IPC between WebProcess
        and UIProcess. Since all authenticator operations must be handled in the UIProcess due
        to sandboxing, this message passing IPC async model then surpasses the original multi
        threading model. To cooperate that, a CredentialsMessenger class is then created and
        all task dispatching code is moved thre.

        As an improvement over existing code, static functions from PublicKeyCredential are
        moved to AuthenticatorManager. AuthenticatorManager is made as a singleton such that
        when static functions are called, they could reach the CredentialsMessenger to interact
        with UIProccess. CredentialsMessenger and AuthenticatorManager are separated so later
        on when other Credential types are created, they can reuse the same IPC messenger.

        What's more, a mock CredentialsMessenger is then created to mock behaviors of UIProcess
        for testing purpose.

        Covered by existing tests.

        * DerivedSources.make:
        * Modules/credentialmanagement/BasicCredential.h:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::CredentialsContainer):
        (WebCore::CredentialsContainer::doesHaveSameOriginAsItsAncestors):
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::PendingPromise::PendingPromise): Deleted.
        (WebCore::CredentialsContainer::dispatchTask): Deleted.
        * Modules/credentialmanagement/CredentialsContainer.h:
        (WebCore::CredentialsContainer::PendingPromise::create): Deleted.
        * Modules/credentialmanagement/CredentialsMessenger.cpp: Added.
        (WebCore::CredentialsMessenger::exceptionReply):
        (WebCore::CredentialsMessenger::addCreationCompletionHandler):
        (WebCore::CredentialsMessenger::takeCreationCompletionHandler):
        (WebCore::CredentialsMessenger::addRequestCompletionHandler):
        (WebCore::CredentialsMessenger::takeRequestCompletionHandler):
        (WebCore::CredentialsMessenger::addQueryCompletionHandler):
        (WebCore::CredentialsMessenger::takeQueryCompletionHandler):
        (WebCore::getIdFromAttestationObject):
        * Modules/credentialmanagement/CredentialsMessenger.h: Added.
        (WebCore::CreationReturnBundle::CreationReturnBundle):
        (WebCore::AssertionReturnBundle::AssertionReturnBundle):
        (WebCore::CredentialsMessenger::weakPtrFactory const):
        * Modules/webauthn/Authenticator.cpp: Removed.
        * Modules/webauthn/Authenticator.h: Removed.
        * Modules/webauthn/AuthenticatorManager.cpp: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.cpp.
        (WebCore::AuthenticatorManagerInternal::produceClientDataJson):
        (WebCore::AuthenticatorManagerInternal::produceClientDataJsonHash):
        (WebCore::AuthenticatorManagerInternal::initTimer):
        (WebCore::AuthenticatorManagerInternal::didTimerFire):
        (WebCore::AuthenticatorManager::singleton):
        (WebCore::AuthenticatorManager::setMessenger):
        (WebCore::AuthenticatorManager::create const):
        (WebCore::AuthenticatorManager::discoverFromExternalSource const):
        * Modules/webauthn/AuthenticatorManager.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredentialInternal::produceClientDataJson): Deleted.
        (WebCore::PublicKeyCredentialInternal::produceClientDataJsonHash): Deleted.
        (WebCore::PublicKeyCredentialInternal::getIdFromAttestationObject): Deleted.
        (WebCore::PublicKeyCredential::collectFromCredentialStore): Deleted.
        (WebCore::PublicKeyCredential::discoverFromExternalSource): Deleted.
        (WebCore::PublicKeyCredential::store): Deleted.
        (WebCore::PublicKeyCredential::create): Deleted.
        (WebCore::PublicKeyCredential::rawId const): Deleted.
        (WebCore::PublicKeyCredential::response const): Deleted.
        * Modules/webauthn/PublicKeyCredential.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::mockCredentialsMessenger const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockCredentialsMessenger.cpp: Added.
        (WebCore::MockCredentialsMessenger::MockCredentialsMessenger):
        (WebCore::MockCredentialsMessenger::~MockCredentialsMessenger):
        (WebCore::MockCredentialsMessenger::setAttestationObject):
        (WebCore::MockCredentialsMessenger::setAssertionReturnBundle):
        (WebCore::MockCredentialsMessenger::makeCredential):
        (WebCore::MockCredentialsMessenger::getAssertion):
        (WebCore::MockCredentialsMessenger::makeCredentialReply):
        (WebCore::MockCredentialsMessenger::getAssertionReply):
        * testing/MockCredentialsMessenger.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * testing/MockCredentialsMessenger.idl: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.

2018-02-15  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderInline/RenderGrid::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182819
        <rdar://problem/37558187>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild): Deleted.
        * rendering/RenderGrid.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild): Deleted.
        * rendering/RenderInline.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::takeChild): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::insertChild):

2018-02-15  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] REGRESSION: Inline media controls are not disabled while in fullscreen on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182830
        <rdar://problem/37537909>

        Reviewed by Eric Carlson.

        The test media/modern-media-controls/media-controller/ios/media-controller-stop-updates-in-fullscreen.html
        regressed when fixing webkit.org/b/182668 since we now started only caring about the presence of the "controls"
        attribute to identify that WebKit media controls should be available.

        We now have a dedicated _shouldControlsBeAvailable() method which more clearly establishes the conditions under
        which controls should be available and correctly disables them while in fullscreen on iOS, regardless of the
        "controls" attribute value.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype._shouldControlsBeAvailable):
        (MediaController.prototype._updateControlsAvailability):

2018-02-15  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228495.

        This caused mulitple perf tests to fail consistently.

        Reverted changeset:

        "Resource Load Statistics: Make sure
        WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can
        ingest older plist versions and not reset the database"
        https://bugs.webkit.org/show_bug.cgi?id=182812
        https://trac.webkit.org/changeset/228495

2018-02-15  Zan Dobersek  <zdobersek@igalia.com>

        Clean up HarfBuzzFaceCairo
        https://bugs.webkit.org/show_bug.cgi?id=182824

        Reviewed by Carlos Garcia Campos.

        Clean up Cairo-specific bits of HarfBuzzFace implementation.

        HarfBuzzFontData is simplified, removing the constructor and turning the
        cairo_scaled_font_t member into a RefPtr<>, tying the Cairo object's
        lifetime to the lifetime of the HarfBuzzFontData instance.

        HarfBuzz font callbacks have the HarfBuzzFontData casting cleaned up,
        casting the user data pointer straight into a HarfBuzzFontData reference
        that's then used in the functions. HarfBuzzFontData member access is
        also adjusted.

        HarfBuzzFace::createFace() now references the cairo_scaled_font_t object
        that is then set as the user data pointer, with the destroy callback
        that dereferences that object also specified. With hb_face_t being a
        reference-counted object itself, this ensures the cairo_scaled_font_t
        object doesn't get destroyed while hb_face_t is still alive.

        In HarfBuzzFace::createFont(), the hb_font_t creation is cleaned up,
        with a C++ lambda used as the destroy callback.

        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::harfBuzzGetGlyph):
        (WebCore::harfBuzzGetGlyphHorizontalAdvance):
        (WebCore::harfBuzzGetGlyphExtents):
        (WebCore::harfBuzzCairoGetTable):
        (WebCore::HarfBuzzFace::createFace):
        (WebCore::HarfBuzzFace::createFont):
        (WebCore::HarfBuzzFontData::HarfBuzzFontData): Deleted.
        (WebCore::destroyHarfBuzzFontData): Deleted.

2018-02-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] WebVTT caps changed in GStreamer 1.14
        https://bugs.webkit.org/show_bug.cgi?id=182690

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Use
        text/vtt caps only for GStreamer versions inferior or equal to
        1.12. In 1.13 (current git master) the VTT caps format changed to
        application/x-subtitle-vtt.

2018-02-15  Zan Dobersek  <zdobersek@igalia.com>

        HarfBuzzFace should not be ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=182823

        Reviewed by Carlos Garcia Campos.

        The HarfBuzzFace objects shouldn't be copied along in FontPlatformData
        copy assignment operator, which made it a requirement for that class to
        be ref-counted. Cairo-based HarfBuzzFace implementation uses the
        cairo_scaled_font_t object from FontPlatformData internally, but upon
        FontPlatformData cloning that scaled font object could change, meaning
        HarfBuzzFace object that's shared with another FontPlatformData object
        would end up using a different cairo_scaled_font_t object from the one
        that's been regenerated in the newly-cloned FontPlatformData object.

        Instead of ref-counting the HarfBuzzFace objects, they should be handled
        in FontPlatformData through std::unique_ptr<>. In the FontPlatformData
        copy assignment operator, the copy target's m_harfBuzzFace object is
        nulled out, allowing the next harfBuzzFace() call to construct an
        object that properly leverages the cairo_scaled_font_t object that could
        have changed during cloning.

        * platform/graphics/FontPlatformData.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::harfBuzzFace const):
        * platform/graphics/harfbuzz/HarfBuzzFace.h:
        (WebCore::HarfBuzzFace::create): Deleted.

2018-02-14  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderMathMLFenced::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182817
        <rdar://problem/37556761>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::addChild): Deleted.
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::insertChildToRenderMathMLFenced): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderMathML.cpp:
        (WebCore::RenderTreeBuilder::MathML::insertChild):

2018-02-14  Antti Koivisto  <antti@apple.com>

        Do sibling invalidation on mutation
        https://bugs.webkit.org/show_bug.cgi?id=182809

        Reviewed by Zalan Bujtas.

        We used to invalidate siblings for sibling combinators and nth-pseudo classes during style resolution tree walk.
        This would consider any element with invalid style a reason to invalidate siblings too. However we now do
        accurate invalidation on class and attribute changes and this approach ends up invalidating too much.

        This patch sibling style invalidation to mutation time and removes invalidation code from style resolution tree walk.

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

            Helper to invalidate siblings.

        (WebCore::Element::invalidateStyle):
        (WebCore::Element::invalidateStyleAndLayerComposition):
        (WebCore::Element::invalidateStyleForSubtree):
        (WebCore::Element::invalidateStyleAndRenderersForSubtree):

            Invalidate siblings if needed based on affectsNextSibling/affectedByPreviousSibling bits.

        (WebCore::Element::invalidateStyleInternal):
        (WebCore::Element::invalidateStyleForSubtreeInternal):

            Add "internal" versions that don't invalidate siblings. These are used by StyleInvalidator for accurate invalidation.

        * dom/Element.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateIfNeeded):
        (WebCore::Style::Invalidator::invalidateStyle):

            Use internal invalidation functions.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::resetStyleForNonRenderedDescendants):
        (WebCore::Style::TreeResolver::resolveComposedTree):

            Remove sibling invalidation.

        * style/StyleTreeResolver.h:

2018-02-14  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Make sure WebResourceLoadStatisticsStore::mergeWithDataFromDecoder() can ingest older plist versions and not reset the database
        https://bugs.webkit.org/show_bug.cgi?id=182812
        <rdar://problem/37511406>

        Reviewed by Brent Fulgham.

        No new tests. Tested manually between versions of Safari.

        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::decode):
            Now only expects these fields for model version 11 or higher:
            - topFrameUniqueRedirectsTo
            - topFrameUniqueRedirectsFrom
            - subresourceUniqueRedirectsFrom
            - timesAccessedAsFirstPartyDueToUserInteraction
            - timesAccessedAsFirstPartyDueToStorageAccessAPI
        * loader/ResourceLoadStatistics.h:

2018-02-14  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix several build warnings under WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=182802

        Reviewed by Konstantin Tokarev.

        Warning C4101 'fileModificationDate': unreferenced local variable
                Source\WebCore\platform\network\curl\CurlCacheEntry.cpp:279

        Warning C4239 nonstandard extension used: 'argument': conversion from 'WTF::String'
        to 'WTF::String &'
                Source\WebCore\platform\text\win\LocaleWin.cpp:75
                Source\WebCore\platform\text\win\LocaleWin.cpp:77

        Warning C4838 conversion from 'UINT' to 'CLIPFORMAT' requires a narrowing conversion
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:170
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:325
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:332
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:351
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:358
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:366
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:373
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:380
                Source\WebCore\platform\win\ClipboardUtilitiesWin.cpp:387

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/text/win/LocaleWin.cpp:
        (WebCore::LCIDFromLocaleInternal):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::registerClipboardFormat):
        (WebCore::texthtmlFormat):
        (WebCore::urlWFormat):
        (WebCore::urlFormat):
        (WebCore::filenameWFormat):
        (WebCore::filenameFormat):
        (WebCore::htmlFormat):
        (WebCore::smartPasteFormat):
        (WebCore::fileDescriptorFormat):
        (WebCore::fileContentFormatZero):

2018-02-14  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderSVG*::addChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182811
        <rdar://problem/37549714>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild): Deleted.
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild): Deleted.
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addChild): Deleted.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::addChild): Deleted.
        * rendering/svg/RenderSVGText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChild):
        (WebCore::RenderTreeBuilder::insertChildToSVGContainer): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToSVGInline): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToSVGRoot): Deleted.
        (WebCore::RenderTreeBuilder::insertChildToSVGText): Deleted.
        * rendering/updating/RenderTreeBuilder.h:

2018-02-14  Daniel Bates  <dabates@apple.com>

        Disallow cross-origin subresources from asking for credentials
        https://bugs.webkit.org/show_bug.cgi?id=182579
        <rdar://problem/36162271>

        Reviewed by Andy Estes.

        Prompts for credentials to load cross-origin subresources are typically seen as unexpected
        by a person that navigates to- or interacts with- a web page. The cross-origin and implicit
        loading nature of these subresources makes asking for credentials questionable because they
        are not being served by the same origin of the page a person explicitly loaded and are not
        guaranteed to correspond to an explicit user interaction other than the initial load of the
        page. We know that subresources that ask for credentials can be abused as part of a phishing
        attack. It seems reasonable to disallow cross-origin subresources from asking for credentials
        due to their questionable nature and the risk for abuse. This will also make the behavior
        of WebKit match the behavior of Chrome.

        Tests: http/tests/media/video-auth-with-allowCrossOriginSubresourcesToAskForCredentials.html
               http/tests/security/basic-auth-subresource.html
               http/tests/security/mixedContent/insecure-basic-auth-image-allowCrossOriginSubresourcesToAskForCredentials.https.html
               http/tests/security/mixedContent/insecure-image-redirects-to-basic-auth-secure-image-allowCrossOriginSubresourcesToAskForCredentials.html
               http/tests/security/mixedContent/secure-redirect-to-insecure-redirect-to-basic-auth-secure-image-allowCrossOriginSubresourcesToAskForCredentials.https.html
               http/tests/security/mixedContent/secure-redirect-to-secure-redirect-to-basic-auth-insecure-image-allowCrossOriginSubresourcesToAskForCredentials.https.html
               http/tests/security/mixedContent/secure-redirect-to-secure-redirect-to-basic-auth-secure-image-allowCrossOriginSubresourcesToAskForCredentials.https.html

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::isSubresourceLoader const): Formerly non-const.
        (WebCore::ResourceLoader::shouldAllowResourceToAskForCredentials const): Added.
        (WebCore::ResourceLoader::didBlockAuthenticationChallenge): Emit Web Inspector console message if
        the authentication challenge was blocked because the request is cross origin.
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials const): Disallow a cross-origin
        request from prompting for credentials.
        (WebCore::ResourceLoader::isSubresourceLoader): Deleted; made const.
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader): Update ResourceLoader state so that block cross-origin
        subresources from prompting for credentials, if applicable.
        (WebCore::SubresourceLoader::isSubresourceLoader const): Formerly non-const.
        (WebCore::SubresourceLoader::isSubresourceLoader): Deleted; made const.
        * loader/SubresourceLoader.h:
        * page/Settings.yaml: Add setting allowCrossOriginSubresourcesToAskForCredentials (defaults: false -
        do not allow cross origin subresources to ask for credentials).

2018-02-14  Don Olmstead  <don.olmstead@sony.com>

        WebCore headers should not include config.h or PlatformExportMacros.h
        https://bugs.webkit.org/show_bug.cgi?id=182799

        Reviewed by Darin Adler.

        No new tests. No change in behavior.

        * Modules/speech/SpeechSynthesis.h:
        * bindings/js/JSDOMGlobalObject.h:
        * contentextensions/ContentExtensionError.h:
        * contentextensions/DFA.h:
        * dom/ContextDestructionObserver.h:
        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationData.h:
        * editing/cocoa/HTMLConverter.h:
        * loader/FrameLoaderStateMachine.h:
        * loader/cache/CachedResourceHandle.h:
        * page/FrameDestructionObserver.h:
        * page/RuntimeEnabledFeatures.h:
        * platform/URL.h:
        * platform/audio/AudioHardwareListener.h:
        * platform/audio/AudioSession.h:
        * platform/graphics/Color.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/transforms/AffineTransform.h:
        * platform/graphics/win/LocalWindowsContext.h:
        * platform/network/CacheValidation.h:
        * platform/network/CredentialBase.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/CertificateInfo.h:

2018-02-12  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r223440): Copying & pasting a list from Microsoft Word to TinyMCE fails
        https://bugs.webkit.org/show_bug.cgi?id=182564

        Reviewed by Wenson Hsieh.

        Unfortunately, r228352 was inadaquate to fix copying & pasting of a list item from Microsoft Word into TinyMCE
        in older verions of TinyMCE. This patch amends the approach taken by r228352 to make it work across the board
        as well as unbreak GMail.

        Turns out older versions of TinyMCE can't handle list items when computed styles are added as inline style
        declarations by WebKit. To make this work, avoid adding any computed styles as inline styles within mso-list
        conditionals as well as any p elements whose style attribute contains "mso-list" property. We would instead
        preserve these styles by keeping Microsoft Word's CSS style rules in addition to special @list rules.

        In addition, not keeping the style element of Microsoft Word in a head element as done in r228352 causes some
        versions of TinyMCE to treat it as regular text, and inserting a bunch of @list rules as user visible text.
        To work around this problem, we serialize the style rules as a comment (<!-- ~ -->) within a head element.

        Furthermore, when Microsoft Word is in the compatibility mode, it does not generate xmlns:o as the first xmlns
        declaration. Generalized the code to detect Microsoft Word's HTML declaration by looking for xmlns:o and xmlns:w
        xmls declarations. 

        Finally, it turns out that Gmail has its own handling of list items copy & pasted from Microsoft Word, and also
        needs this quirks but in the pasted HTML, not the one exposed in getData. As such, this patch also enables the
        MSO list quirks in the pasted content as well as the one exposed in getData.

        Tests: PasteHTML.PreservesMSOList
               PasteHTML.PreservesMSOListInCompatibilityMode
               PasteHTML.StripsMSOListWhenMissingMSOHTMLElement
               PasteWebArchive.PreservesMSOList
               PasteWebArchive.PreservesMSOListInCompatibilityMode
               PasteWebArchive.StripsMSOListWhenMissingMSOHTMLElement

        * editing/HTMLInterchange.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents): Don't remove the special style element needed for the MSO list quirks since we
        don't keep the computed style as inline styles in this case.
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readWebArchive): Enable the quirks in the pasted content as well as opposed to
        just in DataTransfer API exposed to the JavaScript.
        (WebCore::WebContentReader::readHTML): Ditto.
        * editing/markup.cpp:
        (WebCore::shouldPreserveMSOLists): Added. Generalized the logic to detect a Microsoft Word document.
        more xmlns declarations.
        (WebCore::StyledMarkupAccumulator::shouldPreserveMSOListStyleForElement): Added.
        (WebCore::StyledMarkupAccumulator::appendElement): Don't generate the second style element here for elements
        with most-list properties. Instead, avoid overriding inline styles with computed styles altogether.
        (WebCore::StyledMarkupAccumulator::appendNodeToPreserveMSOList): Include the style rules as well as list rules
        and wrap the "style" element in a "head" element to make it compatible with older versions of TinyMCE.

2018-02-14  Dean Jackson  <dino@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at com.apple.WebCore: WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot + 618
        https://bugs.webkit.org/show_bug.cgi?id=182798
        <rdar://problem/23337253>

        Reviewed by Eric Carlson.

        Speculative fix for a crash in HTMLPlugInImageElement::didAddUserAgentShadowRoot.
        The guess is that the m_swapRendererTimer is set, and the display state changes to
        something that does not require a shadow root, but before the timer fires.
        Fix this by ensuring that the timer is reset on every display state change.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::setDisplayState): Guard for sets that wouldn't
        actually change value, and make sure we always reset the timer.

2018-02-14  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Don't use arrays as values for localisable strings
        https://bugs.webkit.org/show_bug.cgi?id=182791
        <rdar://problem/36007262>

        Reviewed by Dean Jackson.

        Localization tools expect localizable strings to be specified as key-value pairs where both the key and the pair
        are plain strings. For the skip buttons, we used an array value to specify a replacement string. We now perform
        this task in code with a centralized SkipSeconds constant defining the skip amount.

        * English.lproj/modern-media-controls-localized-strings.js:
        * Modules/modern-media-controls/controls/icon-service.js:
        * Modules/modern-media-controls/main.js:
        (UIString):
        * Modules/modern-media-controls/media/skip-back-support.js:
        (SkipBackSupport.prototype.buttonWasPressed):
        * Modules/modern-media-controls/media/skip-forward-support.js:
        (SkipForwardSupport.prototype.buttonWasPressed):

2018-02-14  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228444.

        Introduced API and Layout test failures.

        Reverted changeset:

        "[WebAuthN] Revisit the whole async model of task dispatching,
        timeout and aborting"
        https://bugs.webkit.org/show_bug.cgi?id=181946
        https://trac.webkit.org/changeset/228444

2018-02-14  Brent Fulgham  <bfulgham@apple.com>

        Confirm proper thread in UserGestureIndicator constructor
        https://bugs.webkit.org/show_bug.cgi?id=175980

        Reviewed by Daniel Bates.

        Document is a main-thread object. If we enter the UserGestureIndicator constructor
        on a non-main thread, we should ASSERT, not return silently.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):

2018-02-14  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Remove redundant RenderTreeBuilder methods
        https://bugs.webkit.org/show_bug.cgi?id=182770
        <rdar://problem/37525627>

        Reviewed by Daniel Bates.

        No change in functionality.

        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::dropAnonymousBoxChild): Deleted.
        (WebCore::RenderTreeBuilder::moveRubyChildren): Deleted.
        (WebCore::RenderTreeBuilder::resolveMovedChildForMultiColumnFlow): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChild):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::takeChild):

2018-02-14  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182762
        <rdar://problem/37523756>

        Reviewed by Daniel Bates.

        This patch removes the remaining takeChild() related mutation logic from the renderers.

        No change in functionality.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::takeChild): Deleted.
        (WebCore::RenderElement::takeChildInternal): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderObject.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):
        (WebCore::RenderTreeBuilder::takeChildFromRenderElement):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):
        (WebCore::RenderTreeBuilder::Block::takeChild):
        (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::splitFlow):
        (WebCore::RenderTreeBuilder::Inline::splitInlines):
        (WebCore::RenderTreeBuilder::Inline::childBecameNonInline):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::takeChild): Leftover from the previous patch.

2018-02-13  Antti Koivisto  <antti@apple.com>

        REGRESSION(r228313): Membuster | macOS | All Devices | 1.5 MB
        https://bugs.webkit.org/show_bug.cgi?id=182744
        <rdar://problem/37463770>

        Reviewed by Zalan Bujtas.

        We need to respect low memory notifications explicitly now that the compiled selectors are not part of RuleData.

        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        * css/StyleRule.h:

        Switch to std::unique_ptr<[]> from Vector to avoid unnecessary bloat.

        * css/StyleSheetContents.cpp:
        (WebCore::traverseRulesInVector):
        (WebCore::StyleSheetContents::traverseRules const):

        Add a rule traversal function, similar to the existing traverseSubresources.

        (WebCore::StyleSheetContents::traverseSubresources const):

        Use traverseRules to implement traverseSubresources.

        (WebCore::traverseSubresourcesInRules): Deleted.
        * css/StyleSheetContents.h:
        * page/MemoryRelease.cpp:
        (WebCore::releaseCriticalMemory):
        * style/StyleScope.cpp:
        (WebCore::Style::Scope::releaseMemory):

        Release memory for compiled selectors on memory notification.

        * style/StyleScope.h:

2018-02-13  Commit Queue  <commit-queue@webkit.org>

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

        Regressed CMake build stability (Requested by dolmstead on
        #webkit).

        Reverted changeset:

        "[CMake] Make WebCore headers copies"
        https://bugs.webkit.org/show_bug.cgi?id=182512
        https://trac.webkit.org/changeset/228431

2018-02-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r228437, r228439, and r228440.
        https://bugs.webkit.org/show_bug.cgi?id=182756

        Introduced LayoutTest failures (Requested by ryanhadd_ on
        #webkit).

        Reverted changesets:

        "[Web Animations] Make KeyframeEffect target nullable and
        read-write"
        https://bugs.webkit.org/show_bug.cgi?id=182741
        https://trac.webkit.org/changeset/228437

        "Unreviewed attempt to fix build after r228437."
        https://trac.webkit.org/changeset/228439

        "[Web Animations] Make KeyframeEffect target nullable and
        read-write"
        https://bugs.webkit.org/show_bug.cgi?id=182741
        https://trac.webkit.org/changeset/228440

2018-02-13  Antoine Quint  <graouts@apple.com>

        Removing the controls attribute from a <video> element does not tear down the controls shadow DOM nor cancel event listeners.
        https://bugs.webkit.org/show_bug.cgi?id=182668
        <rdar://problem/33793004>

        Reviewed by Jer Noble.

        When controls were turned off for inline media players, we would remove all media controls elements from the shadow root,
        but we would nevertheless continue to listen to media events and, as a result, update properties of the media controls
        which would lead to requestAnimationFrame() calls that would update the detached DOM nodes.

        We now only listent to media events if controls are turned on.

        * Modules/modern-media-controls/media/controls-visibility-support.js:
        (ControlsVisibilitySupport.prototype.enable): Remove the mutation observer from ControlsVisibilitySupport since observing
        changes to the controls attribute is now performed directly in MediaController. We need to make sure that we update the
        controls however since fadesWhileIdle is turned off in the disable() call to ensure that the auto-hide behavior is disabled
        as well.
        (ControlsVisibilitySupport.prototype.disable): Disable the auto-hide controller as well.
        (ControlsVisibilitySupport.prototype._updateControls): Remove code that has now been moved into MediaController._updateControlsAvailability().
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController): Listen to the "play" event on the media so that we call _updateControlsAvailability() in this situation to account for
        shouldForceControlsDisplay on MediaControlsHost. We also register for a mutation observer to track when the controls attribute availability
        changes in which case we want to call _updateControlsAvailability() as well.
        (MediaController.prototype.handleEvent): Call _updateControlsAvailability() instead of _updateiOSFullscreenProperties() which has been renamed
        and expanded.
        (MediaController.prototype._updateControlsIfNeeded): Call _updateControlsAvailability() after controls have been updated.
        (MediaController.prototype._updateControlsAvailability): We now disable supporting media controller objects when we know that controls should
        be hidden in all cases except when in fullscreen on macOS.
        (MediaController.prototype._updateiOSFullscreenProperties): Deleted.
        * Modules/modern-media-controls/media/placard-support.js:
        (PlacardSupport.prototype.disable): Only allow the media events required to track when to show placards when in fullscreen since inline media
        players need to show the AirPlay and picture-in-picture placards even when controls are disabled.

2018-02-13  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Revisit the whole async model of task dispatching, timeout and aborting
        https://bugs.webkit.org/show_bug.cgi?id=181946
        <rdar://problem/37258262>

        Reviewed by Chris Dumez.

        This patch changes the original async model from a work queue to IPC between WebProcess
        and UIProcess. Since all authenticator operations must be handled in the UIProcess due
        to sandboxing, this message passing IPC async model then surpasses the original multi
        threading model. To cooperate that, a CredentialsMessenger class is then created and
        all task dispatching code is moved thre.

        As an improvement over existing code, static functions from PublicKeyCredential are
        moved to AuthenticatorManager. AuthenticatorManager is made as a singleton such that
        when static functions are called, they could reach the CredentialsMessenger to interact
        with UIProccess. CredentialsMessenger and AuthenticatorManager are separated so later
        on when other Credential types are created, they can reuse the same IPC messenger.

        What's more, a mock CredentialsMessenger is then created to mock behaviors of UIProcess
        for testing purpose.

        Covered by existing tests.

        * DerivedSources.make:
        * Modules/credentialmanagement/BasicCredential.h:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::CredentialsContainer):
        (WebCore::CredentialsContainer::doesHaveSameOriginAsItsAncestors):
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::PendingPromise::PendingPromise): Deleted.
        (WebCore::CredentialsContainer::dispatchTask): Deleted.
        * Modules/credentialmanagement/CredentialsContainer.h:
        (WebCore::CredentialsContainer::PendingPromise::create): Deleted.
        * Modules/credentialmanagement/CredentialsMessenger.cpp: Added.
        (WebCore::CredentialsMessenger::exceptionReply):
        (WebCore::CredentialsMessenger::addCreationCompletionHandler):
        (WebCore::CredentialsMessenger::takeCreationCompletionHandler):
        (WebCore::CredentialsMessenger::addRequestCompletionHandler):
        (WebCore::CredentialsMessenger::takeRequestCompletionHandler):
        (WebCore::CredentialsMessenger::addQueryCompletionHandler):
        (WebCore::CredentialsMessenger::takeQueryCompletionHandler):
        (WebCore::getIdFromAttestationObject):
        * Modules/credentialmanagement/CredentialsMessenger.h: Added.
        (WebCore::CreationReturnBundle::CreationReturnBundle):
        (WebCore::AssertionReturnBundle::AssertionReturnBundle):
        (WebCore::CredentialsMessenger::weakPtrFactory const):
        * Modules/webauthn/Authenticator.cpp: Removed.
        * Modules/webauthn/Authenticator.h: Removed.
        * Modules/webauthn/AuthenticatorManager.cpp: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.cpp.
        (WebCore::AuthenticatorManagerInternal::produceClientDataJson):
        (WebCore::AuthenticatorManagerInternal::produceClientDataJsonHash):
        (WebCore::AuthenticatorManagerInternal::initTimer):
        (WebCore::AuthenticatorManagerInternal::didTimerFire):
        (WebCore::AuthenticatorManager::singleton):
        (WebCore::AuthenticatorManager::setMessenger):
        (WebCore::AuthenticatorManager::create const):
        (WebCore::AuthenticatorManager::discoverFromExternalSource const):
        * Modules/webauthn/AuthenticatorManager.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredentialInternal::produceClientDataJson): Deleted.
        (WebCore::PublicKeyCredentialInternal::produceClientDataJsonHash): Deleted.
        (WebCore::PublicKeyCredentialInternal::getIdFromAttestationObject): Deleted.
        (WebCore::PublicKeyCredential::collectFromCredentialStore): Deleted.
        (WebCore::PublicKeyCredential::discoverFromExternalSource): Deleted.
        (WebCore::PublicKeyCredential::store): Deleted.
        (WebCore::PublicKeyCredential::create): Deleted.
        (WebCore::PublicKeyCredential::rawId const): Deleted.
        (WebCore::PublicKeyCredential::response const): Deleted.
        * Modules/webauthn/PublicKeyCredential.h:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::mockCredentialsMessenger const):
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/MockCredentialsMessenger.cpp: Added.
        (WebCore::MockCredentialsMessenger::setAttestationObject):
        (WebCore::MockCredentialsMessenger::setAssertionReturnBundle):
        (WebCore::MockCredentialsMessenger::makeCredential):
        (WebCore::MockCredentialsMessenger::getAssertion):
        (WebCore::MockCredentialsMessenger::makeCredentialReply):
        (WebCore::MockCredentialsMessenger::getAssertionReply):
        * testing/MockCredentialsMessenger.h: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.
        * testing/MockCredentialsMessenger.idl: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.h.

2018-02-13  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182746
        <rdar://problem/37512871>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::takeChild): Deleted.
        * rendering/RenderBlock.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::takeChildFromRenderMenuList):
        (WebCore::RenderTreeBuilder::takeChildFromRenderButton):
        (WebCore::RenderTreeBuilder::takeChildFromRenderGrid):
        (WebCore::RenderTreeBuilder::takeChildFromRenderBlock): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::takeChild):

2018-02-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make KeyframeEffect target nullable and read-write
        https://bugs.webkit.org/show_bug.cgi?id=182741

        Additional unreviewed attempt to fix build after r228437.

        * dom/Element.h:

2018-02-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed attempt to fix build after r228437.

        * dom/Element.h:

2018-02-13  Antoine Quint  <graouts@apple.com>

        [Web Animations] Make KeyframeEffect target nullable and read-write
        https://bugs.webkit.org/show_bug.cgi?id=182741

        Reviewed by Dean Jackson.

        We used to completely disregard null targets, for instance not parsing keyframes, but targets
        can be null and are also supposed to be read-write for KeyframeEffect. We now update the IDL
        for KeyframeEffect to mark the target property as read-write and update the implementation
        to correctly handle null targets by creating a StyleResolver based on the ScriptExecutionContext's
        document's document element (the <html> element in practice) and not the target itself, since it
        can be null.

        This revealed a few issues in our implementation by allowing more WPT tests to run. So we also
        ensure that:
        
        - we don't crash when parsing font-related properties by calling update() on the generated
        RenderStyle's FontCascade when parsing keyframes.

        - CSS properties are provided as camel-case and not as hyphenated form

        - values provided in keyframes dictionaries are only read for valid properties

        - styles for effect targets are invalidated as soon as the timing model for that animation
        is changed

        We also rename AnimationTimeline::animationTimingModelDidChange() to AnimationTimeline::timingModelDidChange()
        since the previous name didn't add useful information and we're adding a new WebAnimation::timingModelDidChange()
        method, so having the two methods have a similar name made more sense.

        * animation/Animatable.idl: Call animate() with a ScriptExecutionContext rather than a ScriptState
        so that the ScriptExecutionContext can be passed to the KeyframeEffectReadOnly constructor.
        * animation/AnimationEffectReadOnly.h: Add a new invalidate() method, designed to be subclassed, that
        is called when the timing model for this effect or owning animation has changed.
        * animation/AnimationTimeline.cpp: Rename animationTimingModelDidChange() to timingModelDidChange().
        (WebCore::AnimationTimeline::addAnimation):
        (WebCore::AnimationTimeline::removeAnimation):
        (WebCore::AnimationTimeline::setCurrentTime):
        * animation/AnimationTimeline.h: Rename animationTimingModelDidChange() to timingModelDidChange().
        (WebCore::AnimationTimeline::timingModelDidChange):
        (WebCore::AnimationTimeline::animationTimingModelDidChange): Deleted.
        * animation/DocumentTimeline.cpp: Rename animationTimingModelDidChange() to timingModelDidChange().
        (WebCore::DocumentTimeline::timingModelDidChange):
        (WebCore::DocumentTimeline::updateAnimations):
        (WebCore::DocumentTimeline::animationTimingModelDidChange): Deleted.
        * animation/DocumentTimeline.h: Rename animationTimingModelDidChange() to timingModelDidChange().
        * animation/KeyframeEffect.cpp: Expect a ScriptExecutionContext rather than a ScriptState.
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::setKeyframes):
        * animation/KeyframeEffect.h: Expect a ScriptExecutionContext rather than a ScriptState.
        * animation/KeyframeEffect.idl: Expect a ScriptExecutionContext rather than a ScriptState and make the
        target property read-write.
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::IDLAttributeNameToAnimationPropertyName): Move this function below CSSPropertyIDToIDLAttributeName
        so that it can call that function. We also check that we reject CSS properties that are not provided in
        camel-case form (eg. "font-size" vs. "fontSize").
        (WebCore::processIterableKeyframes): Only read the JS values if we know that the provided JS property name
        maps to a valid CSS property.
        (WebCore::KeyframeEffectReadOnly::create): Expect a ScriptExecutionContext rather than a ScriptState.
        (WebCore::KeyframeEffectReadOnly::processKeyframes): Expect a ScriptExecutionContext rather than a ScriptState
        and use the context's document to get an HTML element to create a StyleResolver. We also call update() on the
        generated RenderStyle's FontCascade since otherwise we would hit an ASSERT in FontCascade when parsing font-related
        CSS properties.
        (WebCore::KeyframeEffectReadOnly::setTarget): Notify the animation that the effect target has changed and invalidate
        the style of the new target and the old targets, if any.
        (WebCore::KeyframeEffectReadOnly::invalidate): Invalidate the target's style. This method is called by setTarget()
        and WebAnimation::timingModelDidChange().
        * animation/KeyframeEffectReadOnly.h: Expect a ScriptExecutionContext rather than a ScriptState.
        * animation/KeyframeEffectReadOnly.idl: Expect a ScriptExecutionContext rather than a ScriptState.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::timingModelDidChange): We add this new method such that any place in WebAnimation where we
        know the animation's timing model has changed we can invalidate the associated effect, if any, as well as notify
        the timeline, if any. We used to only notify the timeline and, as a result, only invalidate the associated effect
        in the next display monitor refresh. 
        (WebCore::WebAnimation::effectTargetDidChange): This method is called in KeyframeEffectReadOnly::setTarget() to inform
        the animation of the previous effect target and the new one upon a target change. This allows us to forward this information
        onto the timeline so that we correctly add or remove the targets from the list of animated elements.
        (WebCore::WebAnimation::setStartTime):
        * animation/WebAnimation.h: Expose the new effectTargetDidChange() and timingModelDidChange() methods.
        * dom/Element.cpp: Expect a ScriptExecutionContext rather than a ScriptState.
        (WebCore::Element::animate):
        * dom/Element.h: Expect a ScriptExecutionContext rather than a ScriptState.

2018-02-13  Antti Koivisto  <antti@apple.com>

        Crash when breakpoint hit in unload handler
        https://bugs.webkit.org/show_bug.cgi?id=169855
        <rdar://problem/28683567>

        Reviewed by Daniel Bates.

        Test: inspector/debugger/reload-paused.html

        CachedRawResource::updateBuffer may generate unload event in client notify callback. If Inspector was
        paused, this even would spawn a nested runloop. CachedRawResource::finishLoading would get called in
        the nested loop, confusing the DocumentLoader state machine and resulting in crashes later.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::updateBuffer):

        - Set a bit when entering the client callback.
        - Ensure we don't re-enter updateBuffer.
        - If finishLoading got delayed during client callback, do it at the end.

        (WebCore::CachedRawResource::finishLoading):

        If we are in updateBuffer client callback, save the buffer and bail out.

        * loader/cache/CachedRawResource.h:

2018-02-13  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlockFlow::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182739
        <rdar://problem/37506542>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::takeChild): Deleted.
        * rendering/RenderBlockFlow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::multiColumnRelativeWillBeRemoved): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::takeChild):
        * rendering/updating/RenderTreeBuilderBlock.h:

2018-02-13  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make WebCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182512

        Reviewed by Keith Miller.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformAppleWin.cmake:
        * PlatformGTK.cmake:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:
        * platform/Cairo.cmake:
        * platform/Curl.cmake:
        * platform/FreeType.cmake:
        * platform/GStreamer.cmake:
        * platform/ImageDecoders.cmake:
        * platform/TextureMapper.cmake:
        * platform/graphics/win/LocalWindowsContext.h:

2018-02-13  Chris Dumez  <cdumez@apple.com>

        REGRESSION (r228299): Broke reader mode in Safari
        https://bugs.webkit.org/show_bug.cgi?id=182697
        <rdar://problem/37399012>

        Reviewed by Ryosuke Niwa.

        Rework the fix for r228299 to be more targeted. I moved the policy check
        cencelation from FrameLoader::stopLoading() to NavigationScheduler::schedule()
        when a pending load is cancelled by another load. I have verified that the
        sites fixed by r228299 still work with this more limited change. However,
        reader mode is now working again.

        The issue seems to be that we tell CFNetwork to continue with the load after
        receiving the response, even if the client has not responded to the
        decidePolicyForNavigationResponse delegate yet. As a result, CFNetwork sends
        us the resource data and we may commit the provisional load before receiving
        the policy response from the client. When the provisional load is committed,
        we call FrameLoader::stopLoading() which after r228299 cancelled pending
        policy checks. Because we did not wait for the policy check response to
        commit the load, we would cancel it which would make the load fail.

        The real fix here would be to make not tell CFNetwork to continue until after
        we've received the policy delegate response. However, this is a larger and
        riskier change at this point. I will follow-up on this issue.

        Covered by new API test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::schedule):

2018-02-13  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderSVG*::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182736
        <rdar://problem/37503107>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::takeChild): Deleted.
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::takeChild): Deleted.
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::takeChild): Deleted.
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::takeChild): Deleted.
        * rendering/svg/RenderSVGText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        * rendering/updating/RenderTreeBuilderSVG.cpp:
        (WebCore::RenderTreeBuilder::SVG::takeChild):
        * rendering/updating/RenderTreeBuilderSVG.h:

2018-02-13  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderGrid::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182734
        <rdar://problem/37500876>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::takeChild): Deleted.
        * rendering/RenderGrid.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChildFromRenderGrid):
        * rendering/updating/RenderTreeBuilder.h:

2018-02-13  Nan Wang  <n_wang@apple.com>

        AX: Remove AccessibleNode class
        https://bugs.webkit.org/show_bug.cgi?id=182724
        <rdar://problem/37486024>

        Reviewed by Chris Fleizach.

        Removed all the AccessibleNode related code since AOM has
        an alternate direction now. 

        No new tests. Made sure existing tests don't break.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::findModalNodes):
        (WebCore::nodeHasRole):
        (WebCore::AXObjectCache::handleLiveRegionCreated):
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::handleModalChange):
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::isMultiSelectable const):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::readOnlyValue const):
        * accessibility/AccessibilityAllInOne.cpp:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::roleValue const):
        (WebCore::AccessibilityImageMapLink::accessibilityDescription const):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::isEnabled const):
        (WebCore::AccessibilityListBoxOption::stringValue const):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isEnabled const):
        (WebCore::AccessibilityNodeObject::isPressed const):
        (WebCore::AccessibilityNodeObject::isChecked const):
        (WebCore::AccessibilityNodeObject::isMultiSelectable const):
        (WebCore::AccessibilityNodeObject::isRequired const):
        (WebCore::AccessibilityNodeObject::headingLevel const):
        (WebCore::AccessibilityNodeObject::valueDescription const):
        (WebCore::AccessibilityNodeObject::valueForRange const):
        (WebCore::AccessibilityNodeObject::maxValueForRange const):
        (WebCore::AccessibilityNodeObject::minValueForRange const):
        (WebCore::AccessibilityNodeObject::ariaAccessibilityDescription const):
        (WebCore::siblingWithAriaRole):
        (WebCore::AccessibilityNodeObject::textForLabelElement const):
        (WebCore::AccessibilityNodeObject::alternativeText const):
        (WebCore::AccessibilityNodeObject::alternativeTextForWebArea const):
        (WebCore::AccessibilityNodeObject::hierarchicalLevel const):
        (WebCore::shouldUseAccessibilityObjectInnerText):
        (WebCore::AccessibilityNodeObject::stringValue const):
        (WebCore::accessibleNameForNode):
        (WebCore::AccessibilityNodeObject::determineAriaRoleAttribute const):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::readOnlyValue const):
        (WebCore::AccessibilityObject::supportsAutoComplete const):
        (WebCore::AccessibilityObject::autoCompleteValue const):
        (WebCore::AccessibilityObject::ariaIsMultiline const):
        (WebCore::AccessibilityObject::invalidStatus const):
        (WebCore::AccessibilityObject::supportsCurrent const):
        (WebCore::AccessibilityObject::currentState const):
        (WebCore::AccessibilityObject::roleDescription const):
        (WebCore::AccessibilityObject::keyShortcutsValue const):
        (WebCore::AccessibilityObject::placeholderValue const):
        (WebCore::AccessibilityObject::supportsARIAAttributes const):
        (WebCore::AccessibilityObject::sortDirection const):
        (WebCore::AccessibilityObject::supportsHasPopup const):
        (WebCore::AccessibilityObject::hasPopupValue const):
        (WebCore::AccessibilityObject::supportsSetSize const):
        (WebCore::AccessibilityObject::supportsPosInSet const):
        (WebCore::AccessibilityObject::setSize const):
        (WebCore::AccessibilityObject::posInSet const):
        (WebCore::AccessibilityObject::supportsPressed const):
        (WebCore::AccessibilityObject::supportsExpanded const):
        (WebCore::AccessibilityObject::isExpanded const):
        (WebCore::AccessibilityObject::checkboxOrRadioValue const):
        (WebCore::AccessibilityObject::pressedIsPresent const):
        (WebCore::AccessibilityObject::isAXHidden const):
        (WebCore::AccessibilityObject::ariaActiveDescendantReferencingElements const):
        (WebCore::AccessibilityObject::ariaDetailsElements const):
        (WebCore::AccessibilityObject::ariaDetailsReferencingElements const):
        (WebCore::AccessibilityObject::ariaErrorMessageElements const):
        (WebCore::AccessibilityObject::ariaErrorMessageReferencingElements const):
        (WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
        (WebCore::AccessibilityObject::hasProperty const): Deleted.
        (WebCore::AccessibilityObject::stringValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::boolValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::intValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::unsignedValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::doubleValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::elementValueForProperty const): Deleted.
        (WebCore::AccessibilityObject::elementsFromProperty const): Deleted.
        (WebCore::AccessibilityObject::elementsReferencedByProperty const): Deleted.
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue const):
        (WebCore::AccessibilityRenderObject::exposesTitleUIElement const):
        (WebCore::AccessibilityRenderObject::defaultObjectInclusion const):
        (WebCore::AccessibilityRenderObject::isSelected const):
        (WebCore::AccessibilityRenderObject::activeDescendant const):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::orientation const):
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute const):
        (WebCore::AccessibilityRenderObject::liveRegionStatus const):
        (WebCore::AccessibilityRenderObject::liveRegionRelevant const):
        (WebCore::AccessibilityRenderObject::liveRegionAtomic const):
        (WebCore::AccessibilityRenderObject::isBusy const):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable const):
        (WebCore::AccessibilityTable::axColumnCount const):
        (WebCore::AccessibilityTable::axRowCount const):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::axColumnIndex const):
        (WebCore::AccessibilityTableCell::axRowIndex const):
        (WebCore::AccessibilityTableCell::axColumnSpan const):
        (WebCore::AccessibilityTableCell::axRowSpan const):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::axColumnIndex const):
        (WebCore::AccessibilityTableRow::axRowIndex const):
        * accessibility/AccessibleNode.cpp: Removed.
        * accessibility/AccessibleNode.h: Removed.
        * accessibility/AccessibleNode.idl: Removed.
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/Element.cpp:
        (WebCore::Element::canContainRangeEndPoint const):
        (WebCore::Element::accessibleNode): Deleted.
        (WebCore::Element::existingAccessibleNode const): Deleted.
        * dom/Element.h:
        * dom/Element.idl:
        * dom/ElementRareData.cpp:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::accessibleNode const): Deleted.
        (WebCore::ElementRareData::setAccessibleNode): Deleted.
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::itemAccessibilityText const):

2018-02-13  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderButton::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182732
        <rdar://problem/37500564>

        Reviewed by Antti Koivisto.

        No change of functionality.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setInnerRenderer):
        (WebCore::RenderButton::takeChild): Deleted.
        * rendering/RenderButton.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChildFromRenderButton):
        * rendering/updating/RenderTreeBuilder.h:

2018-02-13  Alicia Boya García  <aboya@igalia.com>

        [Gstreamer][MSE] Add string representation for GStreamerMediaSample
        https://bugs.webkit.org/show_bug.cgi?id=180262

        Reviewed by Xabier Rodriguez-Calvar.

        * platform/graphics/gstreamer/mse/GStreamerMediaSample.cpp:
        (WebCore::GStreamerMediaSample::offsetTimestampsBy):
        * platform/graphics/gstreamer/mse/GStreamerMediaSample.h:

2018-02-12  Chris Fleizach  <cfleizach@apple.com>

        AX: defer focusedUIElement notifications
        https://bugs.webkit.org/show_bug.cgi?id=182643
        <rdar://problem/37394310>

        Reviewed by Zalan Bujtas.

        Deferring focus changes for accessibility has a number of benefits.
            1) Reduces the chance of calling into layout during layout.
            2) Coalesces multiple focus notifications that would be needlessly sent.
            3) Improves performance by not calling out to the accessibility notification machinery during layout.

        In this patch, I also started making more AXObjectCache calls private. This will reduce the chance that clients
        will call into AXObjectCache during unexpected times.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::deferFocusedUIElementChangeIfNeeded):
        (WebCore::conditionallyAddNodeToFilterList):
        (WebCore::filterVectorPairForRemoval):
        (WebCore::filterMapForRemoval):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):

2018-02-12  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Classify resources as prevalent based on redirects to other prevalent resources
        https://bugs.webkit.org/show_bug.cgi?id=182664
        <rdar://problem/37372572>

        Reviewed by Brent Fulgham.

        Tests: http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-subresource-redirect-collusion.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-redirect-collusion.html
               http/tests/resourceLoadStatistics/classify-as-prevalent-based-on-top-frame-unique-redirects-to.html

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
            We now collect statistics on top frame navigational redirects too, both to and from.
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
            We now collect statistics on redirects from in addition to the existing redirects to.
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const):
        (WebCore::ResourceLoadStatistics::decode):
        (WebCore::ResourceLoadStatistics::toString const):
        (WebCore::ResourceLoadStatistics::merge):
        * loader/ResourceLoadStatistics.h:
            Three new fields:
            - topFrameUniqueRedirectsTo
            - topFrameUniqueRedirectsFrom
            - subresourceUniqueRedirectsFrom

2018-02-12  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderMenuList::takeChild() to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182715
        <rdar://problem/37477050>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderMenuList.cpp:
        (RenderMenuList::takeChild): Deleted.
        * rendering/RenderMenuList.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::takeChildFromRenderMenuList):
        * rendering/updating/RenderTreeBuilder.h:

2018-02-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unify UserAgent into WebCore/platform.
        https://bugs.webkit.org/show_bug.cgi?id=182716

        Reviewed by Michael Catanzaro.

        No change in functionality.

        * SourcesCocoa.txt:
        * SourcesIOS.txt:
        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * page/cocoa/UserAgent.h: Removed.
        * platform/UserAgent.h:
        * platform/cocoa/UserAgentCocoa.mm: Renamed from Source/WebCore/page/cocoa/UserAgent.mm.
        * platform/ios/UserAgentIOS.mm: Renamed from Source/WebCore/page/ios/UserAgentIOS.mm.
        * platform/mac/UserAgentMac.mm: Renamed from Source/WebCore/page/mac/UserAgentMac.mm.

2018-02-12  Antoine Quint  <graouts@apple.com>

        [Web Animations] Support the copy constructors for KeyframeEffectReadOnly and KeyframeEffect
        https://bugs.webkit.org/show_bug.cgi?id=182712

        Reviewed by Dean Jackson.

        We now support the variants for the KeyframeEffectReadOnly and KeyframeEffect constructors where
        another KeyframeEffectReadOnly is provided as a source. All timing, keyframe and target properties
        of that source are copied on the newly-constructed KeyframeEffect.

        To support copying properties, we add new copyPropertiesFromSource() methods to
        AnimationEffectTimingReadOnly and KeyframeEffectReadOnly to encapsulate copying various
        member variables in the relevant classes. Copying properties of the backing KeyframeList
        is performed in KeyframeEffectReadOnly::copyPropertiesFromSource() via public KeyframeList
        methods.

        * animation/AnimationEffectTimingReadOnly.cpp:
        (WebCore::AnimationEffectTimingReadOnly::copyPropertiesFromSource):
        * animation/AnimationEffectTimingReadOnly.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectOptions.idl:
        * animation/KeyframeEffectReadOnly.cpp:
        (WebCore::KeyframeEffectReadOnly::create):
        (WebCore::KeyframeEffectReadOnly::copyPropertiesFromSource):
        * animation/KeyframeEffectReadOnly.h:
        * animation/KeyframeEffectReadOnly.idl:

2018-02-12  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Introduce RenderTreebuilder::takeChild
        https://bugs.webkit.org/show_bug.cgi?id=182707
        <rdar://problem/37473433>

        Reviewed by Antti Koivisto.

        All takeChild calls should go through RenderTreeBuilder::takeChild from now on.
        This patch also moves the Ruby related takeChild calls to RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::takeChild):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeAndDestroyChild):
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::takeChild):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::takeChild): Deleted.
        (WebCore::RenderRubyAsBlock::takeChild): Deleted.
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChild):
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyAsInline): Deleted.
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyAsBlock): Deleted.
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyRun): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):

2018-02-12  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock::dropAnonymousBoxChild to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182704
        <rdar://problem/37469469>

        Reviewed by Antti Koivisto.

        All the callsites are now in RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dropAnonymousBoxChild): Deleted.
        * rendering/RenderBlock.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeAnonymousWrappersForInlineChildrenIfNeeded):
        (WebCore::RenderTreeBuilder::dropAnonymousBoxChild):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::takeChild):
        (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
        * rendering/updating/RenderTreeBuilderBlock.h:

2018-02-12  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228376.

        This caused accessibility/mac/selection-notification-focus-
        change.html to become flaky on macOS.

        Reverted changeset:

        "AX: defer focusedUIElement notifications"
        https://bugs.webkit.org/show_bug.cgi?id=182643
        https://trac.webkit.org/changeset/228376

2018-02-12  Ryan Haddad  <ryanhaddad@apple.com>

        [iOS] media tests failing ASSERT_NOT_REACHED() in WebCore::VideoFullscreenInterfaceAVKit::cleanupFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=182527

        Reviewed by Alexey Proskuryakov.

        Temporarily remove an assertion from VideoFullscreenInterfaceAVKit to stop tests from crashing on iOS
        while the root cause is being investigated.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreenHandler):

2018-02-12  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Remove redundant RenderTreeBuilder instance
        https://bugs.webkit.org/show_bug.cgi?id=182700
        <rdar://problem/37463958>

        Reviewed by Antti Koivisto.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::willBeDestroyed):

2018-02-12  Chris Fleizach  <cfleizach@apple.com>

        AX: defer focusedUIElement notifications
        https://bugs.webkit.org/show_bug.cgi?id=182643
        <rdar://problem/37394310>

        Reviewed by Zalan Bujtas.

        Deferring focus changes for accessibility has a number of benefits.
            1) Reduces the chance of calling into layout during layout.
            2) Coalesces multiple focus notifications that would be needlessly sent.
            3) Improves performance by not calling out to the accessibility notification machinery during layout.

        In this patch, I also started making more AXObjectCache calls private. This will reduce the chance that clients
        will call into AXObjectCache during unexpected times.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::deferFocusedUIElementChangeIfNeeded):
        (WebCore::conditionallyAddNodeToFilterList):
        (WebCore::filterVectorPairForRemoval):
        (WebCore::filterMapForRemoval):
        (WebCore::filterListForRemoval):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        * accessibility/AXObjectCache.h:
        * dom/Document.cpp:
        (WebCore::Document::setFocusedElement):

2018-02-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        [GTK] Scrolling sometimes jumps around
        https://bugs.webkit.org/show_bug.cgi?id=178519

        Reviewed by Michael Catanzaro.

        * platform/gtk/ScrollAnimatorGtk.cpp:
        (WebCore::ScrollAnimatorGtk::computeVelocity): use -1 as the multiplier for the accumulated deltas,
        since all we need is to make them negative. Multiplying by -1000 leads to very high velocities being
        returned, causing the viewport to scroll to the end of the page.

2018-02-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        Remove an unused static variable in DeprecatedGlobalSettings.h
        https://bugs.webkit.org/show_bug.cgi?id=182672

        Reviewed by Joseph Pecoraro.

        After r227282, this flag is no longer used anywhere. No change in behavior.

        * page/DeprecatedGlobalSettings.h:

2018-02-10  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock::takeChild mutation to a RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182662
        <rdar://problem/37408571>

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::takeChild):
        (WebCore::canDropAnonymousBlock): Deleted.
        (WebCore::canMergeContiguousAnonymousBlocks): Deleted.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takenChildFromRenderBlock):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::canDropAnonymousBlock):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderTreeBuilder::Block::takeChild):
        * rendering/updating/RenderTreeBuilderBlock.h:

2018-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r223440): Copying & pasting a list from Microsoft Word to TinyMCE fails
        https://bugs.webkit.org/show_bug.cgi?id=182564

        Reviewed by Wenson Hsieh.

        Turns out that Microsoft Word generates p and span elements with special styles instead of standard
        ul and ol elements when copying a list items, and TinyMCE has a specialized code path to process
        this proprietary format of Microsoft Word. The regression was caused by WebKit's sanitization code
        stripping away these non-standard CSS rules and inline styles.

        To preseve pre-r223440 behavior in TinyMCE, we preserve the following in a HTML markup:

        1. The "html" element at the beginning with xmlns content attributes
        2. @list rules in a style element starting with "/* List Definitions */" comment
        3. inline style content attribute with "mso-list" property
        4. comments conditional sections with "[if !supportLists]" and "[endif]"

        (1) is needed for TinyMCE to trigger the specialized code path for Microsoft Word. (2) contains
        the information about the structure of list items. (3) is needed to associate each p element with
        a rule in (2). (4) is needed to strip away the content generated as list markers (e.g. dots).

        We enable this "MSO list quirks" when the content comes from a non-WebKit client or a WebKit client
        that doesn't enable custom pasteboard data (detected by the content origin being null), and the HTML
        markup starts with a specific sequence of characters generated by Microsoft Word.

        Test: http/tests/security/clipboard/copy-paste-html-across-origin-strips-mso-list.html
              PasteHTML.PreservesMSOList
              PasteHTML.StripsMSOListWhenMissingMSOHTMLElement
              PasteWebArchive.PreservesMSOList
              PasteWebArchive.StripsMSOListWhenMissingMSOHTMLElement

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendTextSubstring): Added.
        * editing/MarkupAccumulator.h:
        * editing/WebContentReader.cpp:
        (WebCore::FrameWebContentReader::msoListQuirksForMarkup const): Added. Enables the MSO list quirks
        if the content origin is null. The content origin specifies the pasteboard content's origin if it's
        copied in WebKit with custom pasteboard data types enabled. In all other applications, it would be
        set to null.
        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::markupForFragmentInDocument): Moved to markup.cpp as sanitizedMarkupForFragmentInDocument.
        (WebCore::sanitizeMarkupWithArchive):
        (WebCore::WebContentReader::readWebArchive): Always disables MSO list quirks since this code path is
        only used by WebKit's native code to paste content.
        (WebCore::WebContentMarkupReader::readWebArchive): Calls msoListQuirksForMarkup since this is the code
        path used by DataTransfer.
        (WebCore::WebContentReader::readHTML): Always disables MSO list quirks since this code path is only
        used by WebKit's native code to paste content.
        (WebCore::WebContentMarkupReader::readHTML): Calls msoListQuirksForMarkup since this is the code path
        used by DataTransfer.
        * editing/markup.cpp:
        (WebCore::sanitizeMarkup): Use sanitizedMarkupForFragmentInDocument to share code.
        (WebCore::MSOListMode): Added. Set to Preserve if the sanitized markup is the one generated by
        Microsoft Word, and MSO list quirks should actually kick in. This is unlike MSOListQuirks, which is
        set to Enable whenever the content COULD be the one generated by Microsoft Word.
        (WebCore::StyledMarkupAccumulator): Added a special MSO list preservation mode enabled by MSOListMode.
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::appendElement): Preseve (3). Unfortunately, TinyMCE only recognizes
        mso-list and related properties only if they appear on their own. But we also need to preserve
        the inline style generated using the computed style since we would lose the inline styles of the text
        otherwise (e.g. red text and bold font). To workaround this, we generate two style content attributes,
        one containing computed styles and another one containing mso-list. Luckily, the HTML parsing algorithm
        dictates that the first attribute always wins when more than one attributes of the same name appears,
        so we place the computed style's style attribute first so that the pasted content in non-TinyMCE
        environment will continue to work.
        (WebCore::StyledMarkupAccumulator::traverseNodesForSerialization):
        (WebCore::StyledMarkupAccumulator::appendNodeToPreserveMSOList): Added. Generates special markup for
        the conditional statements and the special style element with @list rules.
        (WebCore::createMarkupInternal):
        (WebCore::createMarkup):
        (WebCore::sanitizedMarkupForFragmentInDocument): Moved from WebContentReaderCocoa.mm. If MSOListQuirks
        is set to Enable, and the markup starts with a specific sequence of characters, generate the markup
        with the newly added quirks code in StyledMarkupAccumulator, and wrap it in a special "html" element
        TinyMCE recognizes.
        * editing/markup.h:
        (WebCore::MSOListQuirks): Added. Set to CheckIfNeeded if the content COULD require MSO list quirks.

2018-02-09  Dean Jackson  <dino@apple.com>

        ImageBitmapRenderingContext should be Runtime guarded
        https://bugs.webkit.org/show_bug.cgi?id=182665
        <rdar://problem/37411410>

        Reviewed by Sam Weinig.

        Add a flag to ensure the ImageBitmapRenderingContext interface is only
        visible when the runtime feature is enabled.

        * bindings/js/WebCoreBuiltinNames.h:
        * html/canvas/ImageBitmapRenderingContext.idl:

2018-02-09  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make PAL headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182645

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * CMakeLists.txt:

2018-02-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderRubyRun::takeChild mutation to a RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182655
        <rdar://problem/37406801>

        Reviewed by Simon Fraser.

        No change in functionality.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyRun):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderRuby.h:

2018-02-09  Andy Estes  <aestes@apple.com>

        [Payment Request] Apple Pay sheet does not dismiss when calling complete() with result "unknown" or "fail"
        https://bugs.webkit.org/show_bug.cgi?id=182658
        <rdar://problem/37293917>

        Reviewed by Brady Eidson.

        When PaymentResponse::complete() is called with a result of "unknown" or "fail", we should
        treat this as a fatal error and dismiss the Apple Pay sheet. However, we were adding an
        error with code "unknown" to the authorization result, which PassKit interprets as a
        non-fatal error. Instead, we should not set any errors and just use a status code of
        PaymentAuthorizationStatus::Failure, which PassKit interprets as a fatal error, dismissing
        the sheet.

        No test possible.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::complete):

2018-02-09  Wenson Hsieh  <wenson_hsieh@apple.com>

        Pasting from Excel no longer provides text/html data
        https://bugs.webkit.org/show_bug.cgi?id=182636
        <rdar://problem/37087060>

        Reviewed by Ryosuke Niwa.

        After r222656, we treat images on the pasteboard as files. However, we also have an existing policy which hides
        text data ("text/uri-list", "text/html", "text/plain") from the page when files are present on the pasteboard.
        When copying a table, Microsoft Excel writes a rendering of the table to the pasteboard as an image. This means
        that we'll hide other data types (importantly, 'text/html') upon pasting, even though important clients (such as
        Google Docs and Confluence) depend on the 'text/html' data in order to correctly handle the paste (rather than
        paste as an image of a table).

        To fix this, we add an exception to the DataTransfer.getData codepath when the pasteboard contains files.
        Instead of always returning the empty string for text/html, we still allow pasteboard access, but only read
        from a limited set of rich text types, i.e. web archive, RTF(D), and HTML markup. Importantly, this prevents
        us from exposing any file paths that appear as plain text or URLs on the pasteboard. Just as in the regular
        codepath for getData(), if the pasteboard data comes from the same origin, we allow unsanitized access;
        otherwise, we use WebContentMarkupReader to extract markup from the pasteboard.

        Tests:  PasteMixedContent.ImageFileAndPlainText
                PasteMixedContent.ImageFileAndWebArchive
                PasteMixedContent.ImageFileAndHTML
                PasteMixedContent.ImageFileAndRTF
                PasteMixedContent.ImageFileAndURL
                PasteMixedContent.ImageFileWithHTMLAndURL
                DataInteractionTests.DataTransferGetDataWhenDroppingImageAndMarkup

        Also rebaselined some layout tests, which cover changes in behavior when dropping on macOS and pasting on iOS.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getDataForItem const):

        Augment the codepath handling the case where the pasteboard contains files, such that we allow reading
        "text/html", but only from rich text types.

        (WebCore::DataTransfer::readStringFromPasteboard const):

        Factor out logic for reading from the pasteboard into a private helper. This is called in two places from
        getDataForItem: in the normal (existing) path, and in the case where we allow 'text/html' to be read despite
        files appearing in the pasteboard.

        One important difference here is that this helper now takes a WebContentReadingPolicy, whose purpose is to
        prevent reading from non-rich-text types when files appear in the pasteboard.

        Another tweak here is that we now use `lowercaseType` instead of the original (unadjusted) `type` when reading
        from the pasteboard. This doesn't seem to be intended in the first place.

        (WebCore::DataTransfer::types const):

        Tweak the implementation of DataTransfer.types() in the case where files exist on the pasteboard, such that we
        also add "text/html" if it is present in the list of DOM-safe types.

        * dom/DataTransfer.h:
        * platform/Pasteboard.h:

        Introduce WebContentReadingPolicy, which indicates whether or not we should limit web content reading from the
        pasteboard to only rich text types upon paste or drop. Normally, we allow all types to be read as web content
        (::AnyType), but when files appear on the pasteboard, we force OnlyRichTextTypes to ensure that no other types
        can unintentionally be read back as web content.

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

        Teach Pasteboard (on iOS) to respect WebContentReadingPolicy.

        (WebCore::isTypeAllowedByReadingPolicy):
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):
        * platform/mac/PasteboardMac.mm:

        Teach Pasteboard (on macOS) to respect WebContentReadingPolicy.

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

        Adjust non-Cocoa Pasteboard implementations for an interface change.

2018-02-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderRubyAsInline/AsBlock::takeChild mutation to a RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182651
        <rdar://problem/37405042>

        Reviewed by Antti Koivisto.

        No change in functionality.

        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::takeChild):
        (WebCore::RenderRubyAsBlock::takeChild):
        (WebCore::isAnonymousRubyInlineBlock): Deleted.
        (WebCore::isRubyChildForNormalRemoval): Deleted.
        (WebCore::findRubyRunParent): Deleted.
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyAsInline):
        (WebCore::RenderTreeBuilder::takeChildFromRenderRubyAsBlock):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::findRubyRunParent):
        (WebCore::RenderTreeBuilder::Ruby::takeChild):
        * rendering/updating/RenderTreeBuilderRuby.h:

2018-02-09  Per Arne Vollan  <pvollan@apple.com>

        Assert that NSApp is not running in the WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=182553

        Reviewed by Simon Fraser.

        In WebCore, there are a few places where NSApp is referenced. Since the WebContent process
        is no longer using the NSApplication run loop, and NSApp is no longer guaranteed to be
        valid, we should make sure that the NSApp is not referenced by the WebContent process or
        the Network process, by asserting that the NSApplication event loop is running when NSApp
        is referenced. It is still ok for the UIProcess to reference NSApp. Adding these assert
        will help catch NSApp references when the NSApplication run loop is not used.

        Also, do not post a fake mouse event in PasteBoard::setDragImage when the NSApplication
        run loop is not running, since this is only relevant in WK1.

        No new tests, covered by existing tests. 

        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):

2018-02-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Introduce RenderTreeBuilder to willBeDestoryed/removeFromParentAndDestroy
        https://bugs.webkit.org/show_bug.cgi?id=182635
        <rdar://problem/37377489>

        Reviewed by Antti Koivisto.

        This patch helps finding callsites where we don't have a RenderTreeBuilder instance.

        No change in functionality.

        * dom/Document.cpp:
        (WebCore::Document::setFullScreenRenderer):
        * dom/Document.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::willBeDestroyed):
        (WebCore::RenderBoxModelObject::removeAndDestroyAllContinuations):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::willBeDestroyed):
        * rendering/RenderCounter.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::willBeDestroyed):
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::willBeDestroyed):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::willBeDestroyed):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::willBeDestroyed):
        (WebCore::RenderFullScreen::wrapNewRenderer):
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderFullScreen.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::willBeDestroyed):
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::willBeDestroyed):
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::willBeDestroyed):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::willBeDestroyed):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::willBeDestroyed):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::willBeDestroyed):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::willBeDestroyed):
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroy):
        (WebCore::RenderObject::willBeDestroyed):
        (WebCore::RenderObject::destroy):
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::willBeDestroyed):
        * rendering/RenderReplaced.h:
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::takeChild):
        (WebCore::RenderRubyAsBlock::takeChild):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::willBeDestroyed):
        * rendering/RenderSearchField.h:
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::willBeDestroyed):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::willBeDestroyed):
        * rendering/RenderText.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::willBeDestroyed):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::willBeDestroyed):
        (WebCore::RenderTextFragment::setText):
        * rendering/RenderTextFragment.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::willBeDestroyed):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::willBeDestroyed):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed):
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::willBeDestroyed):
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::willBeDestroyed):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::willBeDestroyed):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::willBeDestroyed):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::willBeDestroyed):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::willBeDestroyed):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::willBeDestroyed):
        * rendering/svg/RenderSVGText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):

2018-02-09  Brent Fulgham  <bfulgham@apple.com>

        [macOS, iOS] Expose OS marketing version in UserAgent
        https://bugs.webkit.org/show_bug.cgi?id=182629
        <rdar://problem/37370975>

        Reviewed by Daniel Bates.

        Revert back to dynamically reading the operating system marketing version
        rather than using a hard-coded version.

        * page/cocoa/UserAgent.mm:
        (WebCore::systemMarketingVersionForUserAgentString):

2018-02-08  Antoine Quint  <graouts@apple.com>

        [Web Animations] Refactor AnimationEffect and KeyframeEffect into AnimationEffectReadOnly, KeyframeEffectReadOnly and KeyframeEffect
        https://bugs.webkit.org/show_bug.cgi?id=182608

        Reviewed by Dean Jackson.

        Currently, we have an AnimationEffect class with read-write members and a KeyframeEffect subclass with read-write
        members. The spec has an AnimationEffectReadOnly class, with read-only members, a KeyframeEffectReadOnly subclass,
        with read-only members, and then the KeyframeEffect subclass (of KeyframeEffectReadOnly) with read-write members.

        Likewise, currently we have an AnimationEffectTiming class with read-write members. While the spec has this class
        as well, it also specifies a read-only AnimationEffectTimingReadOnly superclass.

        In this patch we refactor the code to match the spec, which gives us a big boost in our WPT pass rate. The vast
        majority of the code is just copied from one class to another verbatim. The limited actual code changes, all related
        to the new subclassing, are:

        - AnimationEffectTimingReadOnly is not actually read-only as far as WebCore is concerned, it actually exposes setters
        for all of its properties, but the IDL for this class specifies all properties as read-only, so we match the spec. The
        reason for this is that it is necessary to be able to set members of an AnimationEffectTimingReadOnly object based on
        a Variant<double, KeyframeEffectOptions> provided to Element.animate() or the KeyframeEffectReadOnly and KeyframeEffect
        constructors, and the logic to handle properties in such dictionaries is the same as the logic required to set individual
        members in AnimationEffectTiming. So in essence, the sole role of AnimationTimingEffect is to provide an IDL interface
        with read-write members, but the parent class is itself read-write as far as WebCore is concerned.

        - AnimationEffectTimingReadOnly exposes a new setProperties() method which takes in a nullable Variant<double, KeyframeEffectOptions>
        so that code that was previously specific to KeyframeEffect can be factored into this method and both the constructors of
        KeyframeEffectReadOnly and KeyframeEffect can make use of it without code duplication.

        - The AnimationEffectReadOnly constructor now takes an AnimationEffectTimingReadOnly as input since that class and
        KeyframeEffectReadOnly expose an AnimationEffectTimingReadOnly object, while KeyframeEffect exposes an
        AnimationEffectTiming read-write object. This allows the KeyframeEffect constructor to provide the right object type. 

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffectReadOnly.cpp: Renamed from Source/WebCore/animation/AnimationEffect.cpp.
        (WebCore::AnimationEffectReadOnly::AnimationEffectReadOnly):
        (WebCore::AnimationEffectReadOnly::localTime const):
        (WebCore::AnimationEffectReadOnly::phase const):
        (WebCore::AnimationEffectReadOnly::activeTime const):
        (WebCore::AnimationEffectReadOnly::overallProgress const):
        (WebCore::AnimationEffectReadOnly::simpleIterationProgress const):
        (WebCore::AnimationEffectReadOnly::currentIteration const):
        (WebCore::AnimationEffectReadOnly::currentDirection const):
        (WebCore::AnimationEffectReadOnly::directedProgress const):
        (WebCore::AnimationEffectReadOnly::transformedProgress const):
        (WebCore::AnimationEffectReadOnly::iterationProgress const):
        (WebCore::AnimationEffectReadOnly::getComputedTiming):
        * animation/AnimationEffectReadOnly.h: Renamed from Source/WebCore/animation/AnimationEffect.h.
        (WebCore::AnimationEffectReadOnly::isKeyframeEffectReadOnly const):
        (WebCore::AnimationEffectReadOnly::timing const):
        * animation/AnimationEffectReadOnly.idl: Copied from Source/WebCore/animation/AnimationEffect.idl.
        * animation/AnimationEffectTiming.cpp:
        (WebCore::AnimationEffectTiming::AnimationEffectTiming):
        (WebCore::AnimationEffectTiming::setIterationStart): Deleted.
        (WebCore::AnimationEffectTiming::setIterations): Deleted.
        (WebCore::AnimationEffectTiming::bindingsDuration const): Deleted.
        (WebCore::AnimationEffectTiming::setBindingsDuration): Deleted.
        (WebCore::AnimationEffectTiming::endTime const): Deleted.
        (WebCore::AnimationEffectTiming::activeDuration const): Deleted.
        (WebCore::AnimationEffectTiming::setEasing): Deleted.
        * animation/AnimationEffectTiming.h:
        (): Deleted.
        * animation/AnimationEffectTiming.idl:
        * animation/AnimationEffectTimingReadOnly.cpp: Copied from Source/WebCore/animation/AnimationEffectTiming.cpp.
        (WebCore::AnimationEffectTimingReadOnly::create):
        (WebCore::AnimationEffectTimingReadOnly::AnimationEffectTimingReadOnly):
        (WebCore::AnimationEffectTimingReadOnly::~AnimationEffectTimingReadOnly):
        (WebCore::AnimationEffectTimingReadOnly::setProperties):
        (WebCore::AnimationEffectTimingReadOnly::setIterationStart):
        (WebCore::AnimationEffectTimingReadOnly::setIterations):
        (WebCore::AnimationEffectTimingReadOnly::bindingsDuration const):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsDuration):
        (WebCore::AnimationEffectTimingReadOnly::setEasing):
        (WebCore::AnimationEffectTimingReadOnly::endTime const):
        (WebCore::AnimationEffectTimingReadOnly::activeDuration const):
        * animation/AnimationEffectTimingReadOnly.h: Copied from Source/WebCore/animation/AnimationEffectTiming.h.
        (WebCore::AnimationEffectTimingReadOnly::isAnimationEffectTiming const):
        (WebCore::AnimationEffectTimingReadOnly::bindingsDelay const):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsDelay):
        (WebCore::AnimationEffectTimingReadOnly::bindingsEndDelay const):
        (WebCore::AnimationEffectTimingReadOnly::setBindingsEndDelay):
        (WebCore::AnimationEffectTimingReadOnly::delay const):
        (WebCore::AnimationEffectTimingReadOnly::setDelay):
        (WebCore::AnimationEffectTimingReadOnly::endDelay const):
        (WebCore::AnimationEffectTimingReadOnly::setEndDelay):
        (WebCore::AnimationEffectTimingReadOnly::fill const):
        (WebCore::AnimationEffectTimingReadOnly::setFill):
        (WebCore::AnimationEffectTimingReadOnly::iterationStart const):
        (WebCore::AnimationEffectTimingReadOnly::iterations const):
        (WebCore::AnimationEffectTimingReadOnly::iterationDuration const):
        (WebCore::AnimationEffectTimingReadOnly::setIterationDuration):
        (WebCore::AnimationEffectTimingReadOnly::direction const):
        (WebCore::AnimationEffectTimingReadOnly::setDirection):
        (WebCore::AnimationEffectTimingReadOnly::easing const):
        (WebCore::AnimationEffectTimingReadOnly::timingFunction const):
        (WebCore::AnimationEffectTimingReadOnly::classType const):
        * animation/AnimationEffectTimingReadOnly.idl: Renamed from Source/WebCore/animation/AnimationEffect.idl.
        * animation/AnimationTimeline.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create):
        (WebCore::KeyframeEffect::KeyframeEffect):
        (WebCore::IDLAttributeNameToAnimationPropertyName): Deleted.
        (WebCore::CSSPropertyIDToIDLAttributeName): Deleted.
        (WebCore::computeMissingKeyframeOffsets): Deleted.
        (WebCore::processIterableKeyframes): Deleted.
        (WebCore::processKeyframeLikeObject): Deleted.
        (WebCore::processPropertyIndexedKeyframes): Deleted.
        (WebCore::KeyframeEffect::getKeyframes): Deleted.
        (WebCore::KeyframeEffect::processKeyframes): Deleted.
        (WebCore::KeyframeEffect::computeStackingContextImpact): Deleted.
        (WebCore::KeyframeEffect::apply): Deleted.
        (WebCore::KeyframeEffect::shouldRunAccelerated): Deleted.
        (WebCore::KeyframeEffect::getAnimatedStyle): Deleted.
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle): Deleted.
        (WebCore::KeyframeEffect::startOrStopAccelerated): Deleted.
        (WebCore::KeyframeEffect::renderer const): Deleted.
        (WebCore::KeyframeEffect::currentStyle const): Deleted.
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * animation/KeyframeEffectReadOnly.cpp: Copied from Source/WebCore/animation/KeyframeEffect.cpp.
        (WebCore::IDLAttributeNameToAnimationPropertyName):
        (WebCore::CSSPropertyIDToIDLAttributeName):
        (WebCore::computeMissingKeyframeOffsets):
        (WebCore::processIterableKeyframes):
        (WebCore::processKeyframeLikeObject):
        (WebCore::processPropertyIndexedKeyframes):
        (WebCore::KeyframeEffectReadOnly::create):
        (WebCore::KeyframeEffectReadOnly::KeyframeEffectReadOnly):
        (WebCore::KeyframeEffectReadOnly::getKeyframes):
        (WebCore::KeyframeEffectReadOnly::processKeyframes):
        (WebCore::KeyframeEffectReadOnly::computeStackingContextImpact):
        (WebCore::KeyframeEffectReadOnly::apply):
        (WebCore::KeyframeEffectReadOnly::shouldRunAccelerated):
        (WebCore::KeyframeEffectReadOnly::getAnimatedStyle):
        (WebCore::KeyframeEffectReadOnly::setAnimatedPropertiesInStyle):
        (WebCore::KeyframeEffectReadOnly::startOrStopAccelerated):
        (WebCore::KeyframeEffectReadOnly::renderer const):
        (WebCore::KeyframeEffectReadOnly::currentStyle const):
        * animation/KeyframeEffectReadOnly.h: Copied from Source/WebCore/animation/KeyframeEffect.h.
        (WebCore::KeyframeEffectReadOnly::~KeyframeEffectReadOnly):
        (WebCore::KeyframeEffectReadOnly::target const):
        (WebCore::KeyframeEffectReadOnly::iterationComposite const):
        (WebCore::KeyframeEffectReadOnly::composite const):
        (WebCore::KeyframeEffectReadOnly::isRunningAccelerated const):
        * animation/KeyframeEffectReadOnly.idl: Copied from Source/WebCore/animation/KeyframeEffect.idl.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create):
        (WebCore::WebAnimation::setEffect):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * bindings/js/JSAnimationEffectReadOnlyCustom.cpp: Copied from Source/WebCore/bindings/js/JSAnimationEffectCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSAnimationEffectTimingReadOnlyCustom.cpp: Renamed from Source/WebCore/bindings/js/JSAnimationEffectCustom.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSCustomEventCustom.cpp:
        (WebCore::JSCustomEvent::detail const): Fix an error introduced in webkit.org/b/179591.
        * bindings/js/JSWebAnimationCustom.cpp:
        (WebCore::constructJSWebAnimation):
        * bindings/js/WebCoreBuiltinNames.h:

2018-02-09  Andy Estes  <aestes@apple.com>

        [Payment Request] Crash in PaymentRequest::canMakePayment() when Apple Pay payment method data is missing required fields
        https://bugs.webkit.org/show_bug.cgi?id=182631

        Reviewed by Mark Lam.

        PaymentRequest::canMakePayment() needs to parse each payment method's serialized data to
        determine if it is a supported payment method. If parsing fails by raising an exception, we
        intend to skip over that payment method and try the next one. If all payment method data
        fail to parse, we resolve the returned promise with false. At no point do we intend to
        propagate the parsing exception up to the calling script, however.

        Even though we intend to swallow any exceptions from parsing, we failed to clear the
        JavaScript VM's exception state. The next time WebCore tries to execute JavaScript, a
        release assertion is raised due to seeing an unexpected exception in the VM.

        Fix this by using a CatchScope in PaymentRequest::canMakePayment(), and calling
        CatchScope::clearException() in the places we intend to swallow exceptions.

        Added a test case to http/tests/paymentrequest/payment-request-canmakepayment-method.https.html.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::canMakePayment):

2018-02-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move multicolumn descendant/sibling removal logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182628
        <rdar://problem/37369528>

        Reviewed by Antti Koivisto.

        No change in functionality

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::takeChild):
        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::handleSpannerRemoval): Deleted.
        (WebCore::RenderMultiColumnFlow::fragmentedFlowRelativeWillBeRemoved): Deleted.
        * rendering/RenderMultiColumnFlow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::multiColumnRelativeWillBeRemoved):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::handleSpannerRemoval):
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnRelativeWillBeRemoved):
        * rendering/updating/RenderTreeBuilderMultiColumn.h:

2018-02-09  Youenn Fablet  <youenn@apple.com>

        Add support for cache storage of blob response
        https://bugs.webkit.org/show_bug.cgi?id=182637

        Reviewed by Brady Eidson.

        Covered by updated WPT test.
        When putting a blob response in cache, create a readable stream to easily get the body.
        Make clear that caching form data is not supported.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBody.h:
        (WebCore::FetchBody::isBlob const):
        (WebCore::FetchBody::isFormData const):
        * Modules/fetch/FetchResponse.h:

2018-02-09  Youenn Fablet  <youenn@apple.com>

        Make CoreAudioCaptureSource error logging be release logging
        https://bugs.webkit.org/show_bug.cgi?id=182614

        Reviewed by Eric Carlson.

        No change of behavior.

        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioSharedUnit::addEchoCancellationSource):
        (WebCore::CoreAudioSharedUnit::setupAudioUnit):
        (WebCore::CoreAudioSharedUnit::configureMicrophoneProc):
        (WebCore::CoreAudioSharedUnit::configureSpeakerProc):
        (WebCore::CoreAudioSharedUnit::checkTimestamps):
        (WebCore::CoreAudioSharedUnit::provideSpeakerData):
        (WebCore::CoreAudioSharedUnit::processMicrophoneSamples):
        (WebCore::CoreAudioSharedUnit::cleanupAudioUnit):
        (WebCore::CoreAudioSharedUnit::reconfigureAudioUnit):
        (WebCore::CoreAudioSharedUnit::startInternal):
        (WebCore::CoreAudioSharedUnit::verifyIsCapturing):
        (WebCore::CoreAudioSharedUnit::stopInternal):
        (WebCore::CoreAudioSharedUnit::defaultInputDevice):

2018-02-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        There are several places where this is needed. We currently just assume that any host ending in a digit is an IP
        address, except in PublicSuffix where platform specific code is used. This patch adds URL::hostIsIPAddress()
        platform specific implementations, falling back to current assumption if there isn't an implementation for the
        platform.

        * page/OriginAccessEntry.cpp:
        (WebCore::OriginAccessEntry::OriginAccessEntry): Use URL::hostIsIPAddress().
        * platform/URL.cpp:
        (WebCore::URL::hostIsIPAddress): Fallback implementation.
        * platform/URL.h:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain): Use URL::hostIsIPAddress().
        * platform/mac/URLMac.mm:
        (WebCore::URL::hostIsIPAddress): Move implementation from PublicSuffixMac.mm.
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::isIPAddress): Use URL::hostIsIPAddress().
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::hostIsIPAddress): Use g_hostname_is_ip_address().

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebAudio] Winamp2-js woes
        https://bugs.webkit.org/show_bug.cgi?id=182612

        Reviewed by Xabier Rodriguez Calvar and Carlos Alberto Lopez Perez.

        Test: webaudio/silence-after-playback.html

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::copyGStreamerBuffersToAudioChannel): Clear the bus if
        the adapter can't provide enough data. This prevents a nasty noise
        after playing songs in Winamp.
        (WebCore::AudioSourceProviderGStreamer::setClient): No need to set
        the client more than once, this fixes runtime warnings.

2018-02-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move multicolumn spanner mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182627
        <rdar://problem/37367284>

        Reviewed by Antti Koivisto.

        Move spanner triggered mutation logic to RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::isColumnSpanningDescendant const):
        (WebCore::findSetRendering): Deleted.
        (WebCore::isValidColumnSpanner): Deleted.
        (WebCore::spannerPlacehoderCandidate): Deleted.
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant): Deleted.
        (WebCore::RenderMultiColumnFlow::fragmentedFlowDescendantInserted): Deleted.
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::insertedIntoTree):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::multiColumnDescendantInserted):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::findSetRendering):
        (WebCore::spannerPlacehoderCandidate):
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderTreeBuilder::MultiColumn::multiColumnDescendantInserted):
        (WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
        * rendering/updating/RenderTreeBuilderMultiColumn.h:

2018-02-09  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] Implement the new behavior of 'legacy' for justify-items
        https://bugs.webkit.org/show_bug.cgi?id=172712

        Reviewed by Antti Koivisto.

        The syntax of the 'justify-items' property accepts a new 'legacy' value,
        replacing the 'auto' value which is now parsed as invalid.

        https://github.com/w3c/csswg-drafts/issues/1318

        This change affects also to the 'place-items' shorthand, which doesn't
        accept 'auto' and, for the time being, neither 'legacy'.

        Since the new value 'legacy' is also the default value, I don't expect
        this change to break content of sites currently using the 'justify-items'
        property.

        No new tests, rebaselined existing test.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForItemPositionWithOverflowAlignment):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ItemPosition const):
        * css/CSSProperties.json:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isAuto):
        (WebCore::isNormalOrStretch):
        (WebCore::consumeSelfPositionOverflowPosition):
        (WebCore::consumeJustifyItems):
        (WebCore::consumeSimplifiedDefaultPosition):
        (WebCore::consumeSimplifiedSelfPosition):
        (WebCore::CSSPropertyParser::consumePlaceItemsShorthand):
        (WebCore::CSSPropertyParser::consumePlaceSelfShorthand):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::alignmentOffset):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::columnAxisPositionForChild const):
        (WebCore::RenderGrid::rowAxisPositionForChild const):
        * rendering/style/RenderStyle.cpp:
        (WebCore::resolvedSelfAlignment):
        (WebCore::RenderStyle::resolvedJustifyItems const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::initialJustifyItems):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2018-02-09  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME][GStreamer] Add support for encrypted caps in GStreamerUtilities
        https://bugs.webkit.org/show_bug.cgi?id=181990

        Reviewed by Xabier Rodriguez-Calvar.

        Add the support of encrypted caps in GStreamerUtilities.
        Refactor the manner that the caps are handled, such as how to extract the resolution
        from the video caps or how to check if the caps are encrypted.

        The attachTrack function in PlaybackPipeline doesn't need the "structure" parameter,
        it is already included in the "caps" parameter.

        Replace the "mediaType" parameter by the "caps" parameter in reattachTrack function,
        it allows to use the new functions that handle the caps in GStreamerUtilities.

        Tests:
            media/encrypted-media/clearKey/clearKey-cenc-audio-playback-mse.html
            media/encrypted-media/clearKey/clearKey-cenc-video-playback-mse.html

        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::getVideoSizeAndFormatFromCaps): Add the support of video encrypted caps.
        (WebCore::getVideoResolutionFromCaps):
        (WebCore::capsMediaType):
        (WebCore::doCapsHaveType):
        (WebCore::areEncryptedCaps): Add a new functions in order to handle the caps properly.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/mse/AppendPipeline.cpp:
        (WebCore::AppendPipeline::parseDemuxerSrcPadCaps):
        * platform/graphics/gstreamer/mse/GStreamerMediaDescription.cpp:
        (WebCore::GStreamerMediaDescription::codec const):
        (WebCore::GStreamerMediaDescription::isVideo const):
        (WebCore::GStreamerMediaDescription::isAudio const):
        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
        (WebCore::MediaPlayerPrivateGStreamerMSE::trackDetected):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::attachTrack):
        (WebCore::PlaybackPipeline::reattachTrack):
        * platform/graphics/gstreamer/mse/PlaybackPipeline.h:
        * platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcUpdatePresentationSize): Refactor some parts by using the new added functions.

2018-02-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Layout test fast/replaced/border-radius-clip.html crashes with GStreamer-CRITICAL **: gst_segment_to_stream_time: assertion 'segment->format == format' failed in gst_segment_to_stream_time()
        https://bugs.webkit.org/show_bug.cgi?id=176802

        Reviewed by Xabier Rodriguez Calvar.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Prevent the player from loading animated gifs.

2018-02-09  Antti Koivisto  <antti@apple.com>

        Move compiled selectors to StyleRule
        https://bugs.webkit.org/show_bug.cgi?id=182602

        Reviewed by Zalan Bujtas.

        Currently they are owned by RuleData. Several RuleData objects can refer to the same StyleRule, requiring recompilation.
        Compiled selectors are context-independent so they can be shared between all clients.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::listSize const):

        Compute the number of complex selectors on the list.

        * css/CSSSelectorList.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::makeRuleSet):
        (WebCore::DocumentRuleSets::classInvalidationRuleSets const):

        Pass around list index along with the selector index (compiled selectors are found by list index).

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/RuleSet.cpp:
        (WebCore::RuleData::RuleData):
        * css/RuleSet.h:
        (WebCore::RuleData::compilationStatus const): Deleted.
        (WebCore::RuleData::compiledSelectorCodeRef const): Deleted.
        (WebCore::RuleData::setCompiledSelector const): Deleted.
        (WebCore::RuleData::~RuleData): Deleted.
        (WebCore::RuleData::compiledSelectorUsed const): Deleted.
        * css/StyleRule.cpp:
        (WebCore::StyleRule::StyleRule):
        * css/StyleRule.h:

            Add CompiledSelector member.

        * cssjit/CompiledSelector.h: Added.

            Move to a header of its own to keeps dependencies simple.

        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus):
        (WebCore::SelectorCompilationStatus::operator Status const):
        * cssjit/SelectorCompiler.h:
        (): Deleted.
        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus): Deleted.
        (WebCore::SelectorCompilationStatus::operator Status const): Deleted.

2018-02-08  Antoine Quint  <graouts@apple.com>

        [Web Animations] Always expose "composite" in output of getKeyframes()
        https://bugs.webkit.org/show_bug.cgi?id=182600

        Reviewed by Dean Jackson.

        The Web Animations spec has changed and whereas the output of getKeyframes() would not feature the "composite" property
        for "null" values, it now lists "composite" in all cases.

        To support this, we needed to fix an issue in the code generator such that a "null" default value for an optional enum
        type was supported.

        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::getKeyframes):
        * animation/KeyframeEffect.h:
        * animation/KeyframeEffect.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDefaultValue):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionaryToJS):
        * bindings/scripts/test/TestObj.idl:

2018-02-08  Youenn Fablet  <youenn@apple.com>

        CoreAudioCaptureSourceIOSListener should be a WebProcess singleton
        https://bugs.webkit.org/show_bug.cgi?id=182606
        <rdar://problem/37355283>

        Reviewed by Eric Carlson.

        Not testable right now as this relies on iOS specific Core Audio stack.
        Efforts should be made to somehow mock that part and mock interruptions.

        Made CoreAudioCaptureSourceFactoryIOS responsible to receive iOS interruption messages.
        Before the patch, individual capture sources were receiving these messages.
        When there is only one capture source per process this is fine but with more capture sources,
        this is messing up things as they all share the same shared unit and we would try to interrupt it or resume it several times.

        Also, if we are suspended and there is no more capture source, the shared unit will remain suspended indefinitely, as we will
        not process the interruption messages.
        With the patch, we always process the messages.
        We still go through the active source as done now to limit the changes.
        In case of no source, we go to the shared unit.
        In the future, we should directly go to the shared unit and clients of the shared unit should see their state being updated.

        As a way to prevent staying suspended on iOS, we unsuspend ourselves in CoreAudioCaptureSource constructor.
        This is fine as this constructor is only called when getUserMedia grants access to the camera which always goes to the UIProcess.
        And the UIProcess is only processing getUserMedia calls if the WebProcess is foregrounded.

        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:
        * platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
        (-[WebCoreAudioCaptureSourceIOSListener initWithCallback:]):
        (WebCore::CoreAudioCaptureSourceFactoryIOS::CoreAudioCaptureSourceFactoryIOS):
        (WebCore::CoreAudioCaptureSourceFactoryIOS::~CoreAudioCaptureSourceFactoryIOS):
        (WebCore::CoreAudioCaptureSourceFactory::singleton):
        * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
        (WebCore::CoreAudioCaptureSourceFactory::singleton):
        (WebCore::CoreAudioCaptureSource::create):
        (WebCore::CoreAudioCaptureSourceFactory::beginInterruption):
        (WebCore::CoreAudioCaptureSourceFactory::endInterruption):
        (WebCore::CoreAudioCaptureSourceFactory::scheduleReconfiguration):
        (WebCore::CoreAudioCaptureSource::factory):
        (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::~CoreAudioCaptureSource):
        (WebCore::CoreAudioCaptureSource::startProducingData):
        (WebCore::CoreAudioCaptureSource::scheduleReconfiguration):
        (WebCore::CoreAudioCaptureSource::beginInterruption):
        (WebCore::CoreAudioCaptureSource::endInterruption):
        * platform/mediastream/mac/CoreAudioCaptureSource.h:
        (WebCore::CoreAudioCaptureSourceFactory::setCoreAudioActiveSource):
        (WebCore::CoreAudioCaptureSourceFactory::unsetCoreAudioActiveSource):
        (WebCore::CoreAudioCaptureSourceFactory::coreAudioActiveSource):

2018-02-08  Chris Dumez  <cdumez@apple.com>

        There should be a way to disable [OverrideBuiltins] behavior in a given DOMWrapperWorld
        https://bugs.webkit.org/show_bug.cgi?id=182524
        <rdar://problem/9057327>

        Reviewed by Ryosuke Niwa.

        Add new flag on DOMWrapperWorld indicating if the [OverrideBuiltins] behavior should
        be enabled in this world or not. The behavior is enabled by default for Web-compatibility.
        This flag is queried in accessVisibleNamedProperty() when doing the named property
        lookup.

        Covered by new API test.

        * bindings/js/DOMWrapperWorld.h:
        (WebCore::DOMWrapperWorld::disableOverrideBuiltinsBehavior):
        (WebCore::DOMWrapperWorld::shouldDisableOverrideBuiltinsBehavior const):
        * bindings/js/JSDOMAbstractOperations.h:
        (WebCore::accessVisibleNamedProperty):

2018-02-08  Per Arne Vollan  <pvollan@apple.com>

        Move WebVideoFullscreenController from WebCore to WebKitLegacy.
        https://bugs.webkit.org/show_bug.cgi?id=182615

        Reviewed by Eric Carlson.

        It is only used by WK1. Also there are a few references to NSApp in WebVideoFullscreenController.mm.
        Ideally, we should not reference NSApp in WebCore.

        No new tests. No change in behavior.

        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        * platform/mac/WebVideoFullscreenController.h: Removed.
        * platform/mac/WebVideoFullscreenController.mm: Removed.
        * platform/mac/WebVideoFullscreenHUDWindowController.h: Removed.
        * platform/mac/WebVideoFullscreenHUDWindowController.mm: Removed.
        * platform/mac/WebWindowAnimation.h: Removed.
        * platform/mac/WebWindowAnimation.mm: Removed.

2018-02-08  Chris Dumez  <cdumez@apple.com>

        Form submission after navigation fails when decidePolicyForNavigationAction is async
        https://bugs.webkit.org/show_bug.cgi?id=182412
        <rdar://problem/35181099>

        Reviewed by Alex Christensen.

        When the form is submitted and schedules the load in an iframe that is already loading,
        FrameLoader::stopLoading() is called as expected. However, because policy checks can
        now be asynchronous, stopLoading() also needs to stop pending policy checks. Otherwise,
        continueLoadAfterNavigationPolicy() gets called for a cancelled load and we're in trouble
        because the FrameLoader was reused for another load since then.

        Test: http/tests/navigation/sync-form-submit-iframe.html

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

2018-02-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Do not use RenderTreeBuilder::current() in RenderRubyRun::takeChild
        https://bugs.webkit.org/show_bug.cgi?id=182607
        <rdar://problem/37355944>

        Reviewed by Sam Weinig.

        No change in functionality.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):

2018-02-08  Antti Koivisto  <antti@apple.com>

        Use invalidation rulesets for attribute selectors
        https://bugs.webkit.org/show_bug.cgi?id=182569

        Reviewed by Zalan Bujtas.

        Attribute change style invalidation should use invalidation rulesets, similarly how class change invalidation already does.
        We'll invalidate fewer unnecessary elements immediately and enable more significant future gains.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectFeatures const):
        (WebCore::DocumentRuleSets::classInvalidationRuleSets const):
        (WebCore::DocumentRuleSets::attributeInvalidationRuleSets const):

        Make and cache invalidation RuleSets for an attribute.

        (WebCore::DocumentRuleSets::ancestorAttributeRulesForHTML const): Deleted.
        * css/DocumentRuleSets.h:
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):

        Collect attribute selectors along with match elements.

        (WebCore::RuleFeatureSet::collectFeatures):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::registerContentAttribute):

        Separate hash to deal with invalidation of content:attr(foo) special case.

        (WebCore::RuleFeatureSet::clear):
        (WebCore::RuleFeatureSet::shrinkToFit):
        (WebCore::makeAttributeSelectorKey): Deleted.
        * css/RuleFeature.h:
        (WebCore::RuleFeature::RuleFeature):
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueContent):
        (WebCore::StyleBuilderCustom::applyValueAlt):

        Use registerContentAttribute()

        * html/HTMLEmbedElement.cpp:
        (WebCore::hasTypeOrSrc):
        (WebCore::HTMLEmbedElement::parseAttribute):

            Invalidate style if both type and src attributes go missing as this changes result of rendererIsNeeded().
            This was previously relying on any attribute change invalidating style.

        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * style/AttributeChangeInvalidation.cpp:
        (WebCore::Style::AttributeChangeInvalidation::invalidateStyle):

        Collect the invalidation rulesets for this attribute change.
        Also check if any attribute selector actually changes state, unlike with classes attribute changes may
        often not lead to a selector becoming non-matching.

        (WebCore::Style::AttributeChangeInvalidation::invalidateStyleWithRuleSets):
        (WebCore::Style::AttributeChangeInvalidation::invalidateDescendants): Deleted.
        * style/AttributeChangeInvalidation.h:
        (WebCore::Style::AttributeChangeInvalidation::AttributeChangeInvalidation):
        (WebCore::Style::AttributeChangeInvalidation::~AttributeChangeInvalidation):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::computeInvalidation):

        Should not bail on shadow tree invalidation as we may also need to invalidate siblings.

2018-02-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Introduce RenderTreeBuilder to moveChild(ren)To() functions
        https://bugs.webkit.org/show_bug.cgi?id=182596
        <rdar://problem/37340553>

        Reviewed by Sam Weinig.

        This is in preparation for moving mutation code out of moveChildTo/moveChildrenTo. 

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::dropAnonymousBoxChild):
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::styleDidChange):
        (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::moveChildTo):
        (WebCore::RenderBoxModelObject::moveAllChildrenTo):
        (WebCore::RenderBoxModelObject::moveChildrenTo):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::makeChildrenNonInline):
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        (WebCore::RenderTreeBuilder::removeAnonymousWrappersForInlineChildrenIfNeeded):
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndNoLongerAffectsParentBlock):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):

2018-02-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228261.

        This broke an internal build

        Reverted changeset:

        "Add a way to check if a host is an IP address"
        https://bugs.webkit.org/show_bug.cgi?id=182427
        https://trac.webkit.org/changeset/228261

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] WebKit improperly handles missing GStreamer elements
        https://bugs.webkit.org/show_bug.cgi?id=171205

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Add a
        test checking the videoflip element was correctly created. It
        might not be available on some exotic distros such as Gentoo.

2018-02-08  Chris Fleizach  <cfleizach@apple.com>

        AX: Defer attribute computation until needed.
        https://bugs.webkit.org/show_bug.cgi?id=182386
        <rdar://problem/37115277>

        Reviewed by Zalan Bujtas.

        Accessibility is doing too much work when handling attribute changes. Here's how we can improve this:
           1) Defer attribute changes while the tree is dirty (and coalesce them). 
           2) Don't create AXObjects when an attribute changes unnecessarily. If no client has requested an ax object, it's likely no work needs to be done
                 (with the exception of a few attributes like aria-modal)
           3) Stop calculating the entire accessible ARIA label when trying to decide if an element should be ignored. That's generally wasteful and the
                 consequence of including more AX elements in the tree is very minimal.

        * accessibility/AXObjectCache.cpp:
        (WebCore::rendererNeedsDeferredUpdate):
        (WebCore::nodeAndRendererAreValid):
        (WebCore::AXObjectCache::remove):
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        (WebCore::AXObjectCache::handleAriaRoleChanged):
        (WebCore::AXObjectCache::deferAttributeChangeIfNeeded):
        (WebCore::AXObjectCache::shouldProcessAttributeChange):
        (WebCore::AXObjectCache::handleAttributeChange):
        (WebCore::AXObjectCache::prepareForDocumentDestruction):
        (WebCore::AXObjectCache::performDeferredCacheUpdate):
        (WebCore::AXObjectCache::deferRecomputeIsIgnoredIfNeeded):
        (WebCore::AXObjectCache::deferRecomputeIsIgnored):
        (WebCore::AXObjectCache::deferTextChangedIfNeeded):
        (WebCore::AXObjectCache::deferSelectedChildrenChangedIfNeeded):
        (WebCore::AXObjectCache::handleAttributeChanged): Deleted.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::deferAttributeChangeIfNeeded):
        (WebCore::AXObjectCache::handleAttributeChanged): Deleted.
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hasAttributesRequiredForInclusion const):
        * accessibility/AccessibleNode.cpp:
        (WebCore::AccessibleNode::notifyAttributeChanged):
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged): 

2018-02-08  Chris Dumez  <cdumez@apple.com>

        Unreviewed, tiny partial rollout of r228260 as it caused some worker failures

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::toJSDOMGlobalObject): Deleted.

2018-02-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement::removeAnonymousWrappersForInlinesIfNecessary to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182582
        <rdar://problem/37327890>

        Reviewed by Antti Koivisto.

        Tree mutation -> RenderTreeBuilder.

        No change in functionality

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::removeAnonymousWrappersForInlinesIfNecessary): Deleted.
        * rendering/RenderElement.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::removeAnonymousWrappersForInlinesIfNecessary):
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndNoLongerAffectsParentBlock):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilder.h:

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] LayoutTest webaudio/silent-audio-interrupted-in-background.html makes its subsequent test flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=173916

        Reviewed by Xabier Rodriguez Calvar.

        This patch fixes two crashes and a runtime warning:

        - The provider client configuration should be done from the main
        thread but the no-more-pads signal of deinterleave was fired from
        a non-main thread.

        - The deinterleave pad-removed signal can be fired for a not fully
        configured pipeline if the audio context is interrupted. So the
        peer quark of the removed pad needs to be checked, it might be a
        null pointer.

        - The provider connects to the deinterleave signals only when a
        client is provided, so the signal disconnection needs to check
        that to avoid runtime warnings.

        * platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:
        (WebCore::AudioSourceProviderGStreamer::AudioSourceProviderGStreamer):
        Create a main thread notifier.
        (WebCore::AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer):
        Invalidate notifier and check a client was set before
        disconnecting from deinterleave signals.
        (WebCore::AudioSourceProviderGStreamer::handleRemovedDeinterleavePad):
        Check validity of the pad peer.
        (WebCore::AudioSourceProviderGStreamer::deinterleavePadsConfigured):
        Set client from main thread.
        * platform/audio/gstreamer/AudioSourceProviderGStreamer.h:

2018-02-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][WebAudio] No need for version check in each loop iteration
        https://bugs.webkit.org/show_bug.cgi?id=182577

        Reviewed by Xabier Rodriguez Calvar.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init): Detect version once only, when creating the element.
        (webKitWebAudioSrcLoop): Use boolean variable instead of checking the version every time.

2018-02-08  Frederic Wang  <fwang@igalia.com>

        Add scrolling node types to distinguish main frames and subframes.
        https://bugs.webkit.org/show_bug.cgi?id=182533

        Reviewed by Simon Fraser.

        This patch splits FrameScrollingNode type into two types: MainFrameScrollingNode and
        SubframeScrollingNode. This is needed because new places in the code are likely to
        distinguish them e.g. in ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll
        or when iOS frame scrolling is introduced (see bug 173833).

        No new tests, behavior unchanged.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView): This is only called
        for main frames, so pass MainFrameScrollingNode.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::operator<<): Distinguish subframe and main frame when dumping.
        * page/scrolling/ScrollingCoordinator.h: Split FrameScrollingNode into two cases.
        * page/scrolling/ScrollingStateFrameScrollingNode.cpp: Add node type to constructor and
        ASSERT it remains of type FrameScrollingNode.
        (WebCore::ScrollingStateFrameScrollingNode::create):
        (WebCore::ScrollingStateFrameScrollingNode::ScrollingStateFrameScrollingNode):
        * page/scrolling/ScrollingStateFrameScrollingNode.h: Add node type to constructor.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isFrameScrollingNode const): Includes the two cases.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::createNode): Split FrameScrollingNode into two cases and pass
        the node type.
        (WebCore::ScrollingStateTree::attachNode): The first case only happens for main frames while
        the second case only happens with subframes. Use the appriate node type.
        * page/scrolling/ScrollingTreeFrameScrollingNode.cpp: Add node type to constructor and
        ASSERT it remains of type FrameScrollingNode.
        (WebCore::ScrollingTreeFrameScrollingNode::ScrollingTreeFrameScrollingNode):
        * page/scrolling/ScrollingTreeFrameScrollingNode.h: Add node type to constructor.
        * page/scrolling/ScrollingTreeNode.h: Includes the two cases.
        (WebCore::ScrollingTreeNode::isFrameScrollingNode const):
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.h: Add node type to constructor.
        * page/scrolling/ios/ScrollingTreeFrameScrollingNodeIOS.mm: Ditto.
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::create):
        (WebCore::ScrollingTreeFrameScrollingNodeIOS::ScrollingTreeFrameScrollingNodeIOS):
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Split FrameScrollingNode into two cases.
        (WebCore::ScrollingTreeIOS::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h: Add node type to constructor.
        * page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm: Ditto.
        (WebCore::ScrollingTreeFrameScrollingNodeMac::create):
        (WebCore::ScrollingTreeFrameScrollingNodeMac::ScrollingTreeFrameScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeMac.cpp: Split FrameScrollingNode into two cases.
        (ScrollingTreeMac::createScrollingTreeNode):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::reattachSubframeScrollLayers): Distinguish the cases of
        main frames and subframes.
        (WebCore::scrollCoordinationRoleForNodeType): Split FrameScrollingNode into two cases.
        (WebCore::RenderLayerCompositor::updateScrollCoordinationForThisFrame): Distinguish the cases
        of main frames and subframes.
        (WebCore::RenderLayerCompositor::updateScrollCoordinatedLayer): Split FrameScrollingNode into
        two cases.

2018-02-07  Darin Adler  <darin@apple.com>

        Try to fix ErrorEvent tests seen failing on buildbot after fix for bug 179591.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent): Add back line of code accidentally removed.

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        There are several places where this is needed. We currently just assume that any host ending in a digit is an IP
        address, except in PublicSuffix where platform specific code is used. This patch adds URL::hostIsIPAddress()
        platform specific implementations, falling back to current assumption if there isn't an implementation for the
        platform.

        * page/OriginAccessEntry.cpp:
        (WebCore::OriginAccessEntry::OriginAccessEntry): Use URL::hostIsIPAddress().
        * platform/URL.cpp:
        (WebCore::URL::hostIsIPAddress): Fallback implementation.
        * platform/URL.h:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain): Use URL::hostIsIPAddress().
        * platform/mac/URLMac.mm:
        (WebCore::URL::hostIsIPAddress): Move implementation from PublicSuffixMac.mm.
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::isIPAddress): Use URL::hostIsIPAddress().
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::hostIsIPAddress): Use g_hostname_is_ip_address().

2018-01-13  Darin Adler  <darin@apple.com>

        Event improvements
        https://bugs.webkit.org/show_bug.cgi?id=179591

        Reviewed by Chris Dumez.

        - removed all use of Deprecated::ScriptValue

        - fixed uses of JSC::Strong that can lead to reference cycles in CustomEvent,
          MessageEvent, and PopStateEvent, refactoring to share more code

        - removed incorrect use of CachedAttribute on attributes that can change values
          (should have fixed a bug; can we find a way to test this?)

        - did a more thorough job of clearing state from events, including clearing
          certain things before dispatching, and clearing more in initKeyboardEvent
          (may have fixed some obscure low-severity bugs; can we find a way to test this?)

        - removed "dummy" keyboard events

        - reworked code that omits details from error events for security reasons;
          old approach was "sanitizing" the error by removing the details if not
          allowed, new approach is adding the details only if allowed

        * Modules/encryptedmedia/NavigatorEME.h: Added forward declaration needed
        to compile.

        * Modules/indexeddb/IDBCursor.h: Added comment about incorrect use of JSC::Strong.
        * Modules/indexeddb/IDBRequest.h: Ditto.
        * Modules/paymentrequest/PaymentResponse.h: Ditto.

        * WebCore.xcodeproj/project.pbxproj: Added JSValueInWrappedObject.h.

        * bindings/js/CommonVM.cpp:
        (WebCore::commonVMSlow): Use VM::create instead of VM::createLeaked. Also use
        local variable instead of the global.

        * bindings/js/DOMWrapperWorld.h: Put the inline bodies of the currentWorld and
        worldForDOMObject functions separate from the declarations; long term goal is
        that the declarations serve as documentation, and are not interspersed with the
        implementations. Changed currentWorld to take a reference instead of a pointer
        to ExecState. Added isWorldCompatible function.

        * bindings/js/JSCustomElementInterface.cpp:
        (WebCore::JSCustomElementInterface::upgradeElement): Use toJSDOMWindow instead
        of toJSDOMGlobalObject and added check for null.
        (WebCore::JSCustomElementInterface::invokeCallback): Ditto.

        * bindings/js/JSCustomEventCustom.cpp:
        (WebCore::JSCustomEvent::detail const): Use cachedPropertyValue.
        (WebCore::JSCustomEvent::visitAdditionalChildren): Added. Needed now that we are
        using JSValueInWrappedObject instead of JSC::Strong.

        * bindings/js/JSDOMConvertEventListener.h:
        (WebCore::Converter<IDLEventListener<T>>::convert): Pass a reference.
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::toJSDOMGlobalObject): Ditto.

        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject): Moved initialization to nullptr
        to the header.
        (WebCore::toJSDOMGlobalObject): Deleted.
        * bindings/js/JSDOMGlobalObject.h: Updated for the above.

        * bindings/js/JSDOMWindowBase.h: Updated includes. Added "DOMWindow.h" but also
        expanded the deprecated "JSDOMBinding.h" into all the things it includes.

        * bindings/js/JSDOMWindowProxy.cpp:
        (WebCore::JSDOMWindowProxy::finishCreation): Tweak argument type to match usage.
        (WebCore::JSDOMWindowProxy::create): Moved here from header, rolled in the code
        that creates the structure.
        (WebCore::JSDOMWindowProxy::setWindow): Take a reference instead of a pointer
        or a RefPtr&&.
        (WebCore::JSDOMWindowProxy::toWrapped): Use ? : instead of if.
        (WebCore::toJS): Pass a reference.
        * bindings/js/JSDOMWindowProxy.h: Updated for abvoe changes.

        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::cloneAcrossWorlds): Added.
        * bindings/js/JSDOMWrapper.h: Ditto.

        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::JSErrorHandler): Changed to take a reference.
        Marked inline.
        (WebCore::JSErrorHandler::create): Moved here from header. No longer inline, but
        the constructor is now inline, so same number of levels of function calls, and
        less code compiled at the call site and less to compile in the header.
        (WebCore::JSErrorHandler::handleEvent): Use toJSDOMWindow instead
        of toJSDOMGlobalObject.
        * bindings/js/JSErrorHandler.h: Ditto. Also made createJSErrorHandler take
        references instead of pointers.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::create): Moved here from the header.
        (WebCore::createEventListenerForEventHandlerAttribute): Updated for change to
        currentWorld.
        (WebCore::toJSDOMGlobalObject): Moved here from JSDOMGlobalObject.cpp because
        this is the only place this function is used now. Also, this was one of four
        different overrides and so it was good to delete the other three. Also updated
        to take a reference rather than a "must not be null" pointer.
        (WebCore::JSEventListener::handleEvent): Coding style tweaks.
        (WebCore::JSEventListener::virtualisAttribute const): Deleted. Now isAttribute
        is virtual and uses final as needed to remain inline-able and efficient.
        (WebCore::JSEventListener::operator== const): Use is<> and downcast<> instead
        of JSEventListener::cast.
        (WebCore::eventHandlerAttribute):  Updated for change to currentWorld.
        (WebCore::setEventHandlerAttribute): Ditto.
        (WebCore::setWindowEventHandlerAttribute): Ditto.
        (WebCore::setDocumentEventHandlerAttribute): Ditto.

        * bindings/js/JSEventListener.h: Moved create functions into the cpp file.
        Removed the cast function, since callers can use is<> and downcast<> instead.
        Use final rather than override and made isAttribute override the virtual
        function in the base class, eliminating virtualIsAttribute.

        * bindings/js/JSExtendableMessageEventCustom.cpp:
        (WebCore::JSExtendableMessageEvent::data const): Use isWorldCompatible.
        Still need to return here and fix the reference cycle for this class.

        * bindings/js/JSLazyEventListener.cpp:
        (WebCore::eventParameterName): Moved up so it can be used by the constructor.
        (WebCore::convertZeroToOne): Added, so that the constructor can fix up text
        positions passed in to it as part of initializing a data member.
        (WebCore::JSLazyEventListener::JSLazyEventListener): Changed to take
        a CreationArguments object instead of lots of separate arguments.
        (WebCore::JSLazyEventListener::initializeJSFunction const): Removed unneeded
        checks of m_code and m_eventParameterName, both guaranteed not to be null
        by the constructor. Tweaked coding style a bit.
        (WebCore::JSLazyEventListener::create): Pass CreationArguments object.
        * bindings/js/JSLazyEventListener.h: Updated for above changes. Changed the
        m_eventParameterName to be a reference since it's always a global string
        that is never destroyed.

        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data const): Use cachedPropertyValue and also
        updated for the new version of MessageEvent that uses a Variant instead
        of a type plus separate functions for each type.
        (WebCore::JSMessageEvent::visitAdditionalChildren): Added. Needed now that we are
        using JSValueInWrappedObject instead of JSC::Strong.

        * bindings/js/JSPopStateEventCustom.cpp:
        (WebCore::JSPopStateEvent::state const): Use isWorldCompatible and also updated
        to use JSValueInWrappedObject instead of JSC::Strong. Would be nice to share more
        code with CustomEvent and MessageEvent, but at the moment they are subtly different.
        Changed cacheState from a function to a lambda.
        (WebCore::JSPopStateEvent::visitAdditionalChildren): Added. Needed now that we are
        using JSValueInWrappedObject instead of JSC::Strong.

        * bindings/js/JSValueInWrappedObject.h: Added.

        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::restore): Updated for changes to JSDOMWindowProxy.
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::createWindowProxy): Ditto.
        (WebCore::ScriptController::setDOMWindowForWindowProxy): Ditto.

        * bindings/js/WorkerScriptController.cpp: Removed include of ScriptValue.h.
        (WebCore::WorkerScriptController::evaluate): Reworked to use the new
        canIncludeErrorDetails instead of sanitizeScriptError. Added a FIXME about the
        strange handling of the error message out argument.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateRuntimeEnableConditionalString): Pass a reference to worldForDOMObject.
        (GenerateImplementation): Removed an incorrect comment about a removed error
        check that is truly unneeded.
        (GenerateAttributeGetterBodyDefinition): Pass a reference to worldForDOMObject.
        (GenerateAttributeSetterBodyDefinition): Pass references to createJSErrorHandler
        and worldForDOMObject.
        (GenerateCallWith): Pass a reference to worldForDOMObject.

        * bindings/scripts/test/JS/JSTestGlobalObject.cpp: Updated for above changes.
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.

        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::CustomEvent): Marked inline. Removed now unneeded
        ExecState argument.
        (WebCore::CustomEvent::create): Moved here from header. No longer inline, but
        the constructor is now inline, so same number of levels of function calls, and
        less code compiled at the call site and less to compile in the header.
        (WebCore::CustomEvent::initCustomEvent): Updated to use JSValueInWrappedObject.
        (WebCore::CustomEvent::trySerializeDetail): Deleted. Now handled by bindings.
        * dom/CustomEvent.h: Updated for the above.
        * dom/CustomEvent.idl: Added JSCustomMarkFunction and removed
        CallWith=ScriptState.

        * dom/Document.cpp:
        (WebCore::Document::shouldBypassMainWorldContentSecurityPolicy const):
        Updated to pass reference to currentWorld but also rewrote to be more direct.

        * dom/Element.cpp:
        (WebCore::Element::isKeyboardFocusable const): Take a pointer instead of a
        reference to the keyboard event. This function can be called with no event;
        before this patch we were using a "dummy event".
        * dom/Element.h: Ditto.

        * dom/ErrorEvent.cpp:
        (WebCore::ErrorEvent::error): Use isWorldCompatible.

        * dom/Event.cpp:
        (WebCore::Event::create): Moved here from header.
        (WebCore::Event::createForBindings): Ditto.
        (WebCore::Event::initEvent): Updated to use the name m_canceled instead of
        the name m_defaultPrevented.
        (WebCore::Event::resetBeforeDispatch): Added. Clears m_defaultHandled so
        a value left over from a previous dispatch doesn't affect the next dispatch.

        * dom/Event.h: Renamed m_defaultPrevented to m_canceled to match specification
        terminology and be slightly clearer. Added resetBeforeDispatch. Removed the
        setDefaultPrevented function.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent): Added call to resetBeforeDispatch.

        * dom/EventListener.h: Made isAttribute virtual and got rid of virtualIsAttribute,
        which was an alternative to using "final" before we had that in the language.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::dispatchEvent): Added call to resetBeforeDispatch.

        * dom/KeyboardEvent.cpp:
        (WebCore::KeyboardEvent::KeyboardEvent): Removed unneeded code that initializes
        m_handledByInputMethod to false; we do that in the class definition now.
        (WebCore::KeyboardEvent::create): Moved here from header.
        (WebCore::KeyboardEvent::createForBindings): Ditto.
        (WebCore::KeyboardEvent::initKeyboardEvent): Added code to reset m_charCode,
        m_isComposing, m_keyCode, m_repeat, m_underlyingPlatformEvent, m_which, m_code,
        and m_key. These are needed now that we can reuse an existing event; we don't
        want them getting out of sync with the other data members.
        (WebCore::KeyboardEvent::keyCode const): Updated for name change from m_keyEvent
        to m_underlyingPlatformEvent.
        (WebCore::KeyboardEvent::charCode const): Ditto.
        (WebCore::findKeyboardEvent): Deleted. Was unused.
        * dom/KeyboardEvent.h: Updated for the above. Removed KeyboardEvent::createForDummy.

        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent): Removed unnneded ExecState argument.
        Simplified since m_data is now a Variant.
        (WebCore::MessageEvent::create): More of the same.
        (WebCore::MessageEvent::initMessageEvent): Ditto.
        (WebCore::MessageEvent::trySerializeData): Deleted.
        (WebCore::MessageEvent::data const): Deleted.
        * dom/MessageEvent.h: Use a Variant.
        * dom/MessageEvent.idl: Added JSCustomMarkFunction and removed
        CallWith=ScriptState and CachedAttribute.

        * dom/MouseEvent.h: Removed obsolete comment.
        * dom/MouseEvent.idl: Wrap line differently.

        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::PopStateEvent): Removed unneeded ExecState argument.
        Updated to use JSValueInWrappedObject.
        (WebCore::PopStateEvent::create): Ditto.
        (WebCore::PopStateEvent::trySerializeState): Ditto.
        * dom/PopStateEvent.h: Ditto.
        * dom/PopStateEvent.idl: Use JSCustomMarkFunction, and don't use
        ConstructorCallWith=ScriptState.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::sanitizeScriptError): Deleted.
        (WebCore::ScriptExecutionContext::canIncludeErrorDetails): Added.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Clarify by
        using canIncludeErrorDetails instead of sanitizeScriptError.
        * dom/ScriptExecutionContext.h: Ditto.

        * dom/WheelEvent.cpp:
        (WebCore::WheelEvent::WheelEvent): Updated for name change and also to
        eliminate m_initializedWithPlatformWheelEvent.
        (WebCore::WheelEvent::create): Moved here from header.
        (WebCore::WheelEvent::createForBindings): Ditto.
        (WebCore::WheelEvent::initWebKitWheelEvent): Renamed from initWheelEvent.
        * dom/WheelEvent.h: Renamed initWheelEvent to initWebKitWheelEvent since
        there is no standard init function for wheel events and we have this only
        for backward compatibility. Got rid of the separate boolean
        m_initializedWithPlatformWheelEvent and instead made the renamed
        m_wheelEvent, m_underlyingPlatformEvent, optional for when there is no
        underlying platform event.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isKeyboardFocusable const): Take a
        pointer to the event so we can handle the case where there is no event.
        * html/BaseDateAndTimeInputType.h: Ditto.
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::isKeyboardFocusable const): Ditto.
        * html/HTMLAnchorElement.h: Ditto.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::isKeyboardFocusable const): Ditto.
        * html/HTMLAreaElement.h: Ditto.
        * html/HTMLDocument.cpp: Added include of "DOMWindow.h".
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isKeyboardFocusable const): Take
        pointer to the event.
        * html/HTMLFormControlElement.h: Ditto.
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::isKeyboardFocusable const): Ditto.
        * html/HTMLFrameOwnerElement.h: Ditto.
        * html/HTMLIFrameElement.h: Ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable const): Ditto.
        (WebCore::HTMLInputElement::isTextFormControlKeyboardFocusable const): Ditto.
        * html/HTMLInputElement.h: Ditto.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::isKeyboardFocusable const): Ditto.
        * html/HTMLPlugInElement.h: Ditto.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::isKeyboardFocusable const): Ditto.
        * html/HTMLSelectElement.h: Ditto.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::isKeyboardFocusable const): Ditto.
        * html/HTMLTextAreaElement.h: Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::isKeyboardFocusable const): Ditto.
        * html/InputType.h: Ditto.
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::isKeyboardFocusable const): Ditto.
        * html/RadioInputType.h: Ditto.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isKeyboardFocusable const): Ditto.
        * html/TextFieldInputType.h: Ditto.

        * inspector/CommandLineAPIHost.cpp:
        (WebCore::listenerEntriesFromListenerInfo): Pass reference to currentWorld.
        Use is<> and downcast<> instead of JSEventListener::cast.
        * inspector/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::isContentScript const): Pass reference to
        currentWorld.
        * inspector/agents/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        Use is<> and downcast<> instead of JSEventListener::cast.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isKeyboardFocusable const): Take a
        pointer to the event so we can handle the case where there is no event.
        * mathml/MathMLElement.h: Ditto.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent): Added call to resetBeforeDispatch.
        All event dispatching paths now need to do this; there are 3.

        * page/EventHandler.cpp:
        (WebCore::handleWheelEventInAppropriateEnclosingBox): Use the new
        underlyingPlatformEvent function, less confusing than calling a function
        named wheelEvent() on an object of type WheelEvent. Also, it returns
        a const& to std::optional instead of a pointer, so updated for that.
        (WebCore::EventHandler::defaultWheelEventHandler): Ditto.
        (WebCore::EventHandler::internalKeyEvent): Use preventDefault instead
        of setDefaultPrevented(true).
        (WebCore::EventHandler::tabsToLinks const): Take a pointer.
        (WebCore::EventHandler::defaultArrowEventHandler): Pass a pointer.
        (WebCore::EventHandler::defaultTabEventHandler): Ditto.
        * page/EventHandler.h: Updated for the above.

        * page/EventSource.cpp:
        (WebCore::EventSource::dispatchMessageEvent): Pass a reference rather
        than a pointer when creating a message event.

        * page/FocusController.cpp:
        (WebCore::isFocusableElementOrScopeOwner): Use a pointer instead of reference
        for keyboard event.
        (WebCore::isNonFocusableScopeOwner): Ditto.
        (WebCore::isFocusableScopeOwner): Ditto.
        (WebCore::shadowAdjustedTabIndex): Ditto.
        (WebCore::FocusController::findFocusableElementDescendingIntoSubframes):
        Renamed to use simpler terminology than "descending down into frame document".
        Changed to take a pointer instead of reference.
        (WebCore::FocusController::setInitialFocus): Pass nullptr instead of
        using KeyboardEvent::createForDummy.
        (WebCore::FocusController::advanceFocus): Pointer instead of reference.
        (WebCore::FocusController::advanceFocusInDocumentOrder): Ditto.
        (WebCore::FocusController::findFocusableElementAcrossFocusScope): Ditto.
        (WebCore::FocusController::findFocusableElementWithinScope): Ditto.
        (WebCore::FocusController::nextFocusableElementWithinScope): Ditto.
        (WebCore::FocusController::previousFocusableElementWithinScope): Ditto.
        (WebCore::FocusController::findFocusableElementOrScopeOwner): Ditto.
        (WebCore::FocusController::findElementWithExactTabIndex): Ditto.
        (WebCore::nextElementWithGreaterTabIndex): Ditto.
        (WebCore::previousElementWithLowerTabIndex): Ditto.
        (WebCore::FocusController::nextFocusableElement): Ditto.
        (WebCore::FocusController::previousFocusableElement): Ditto.
        (WebCore::FocusController::nextFocusableElementOrScopeOwner): Ditto.
        (WebCore::FocusController::previousFocusableElementOrScopeOwner): Ditto.
        (WebCore::FocusController::findFocusCandidateInContainer): Ditto.
        (WebCore::FocusController::advanceFocusDirectionallyInContainer): Ditto.
        (WebCore::FocusController::advanceFocusDirectionally): Ditto.
        * page/FocusController.h: Updated for the above.

        * page/PageConsoleClient.cpp:
        (WebCore::objectArgumentAt): Added. Helper to make functions below simpler.
        (WebCore::canvasRenderingContext): Factored out logic to get the context
        from either a canvas or a canvas rendering context from the functions below.
        Also updated to not use ScriptValue and to use auto quite a bit more.
        (WebCore::PageConsoleClient::record): Updated to use the functions above.
        (WebCore::PageConsoleClient::recordEnd): Ditto.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::tabsToAllFormControls const): Take a pointer
        instead of a reference.
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::tabsToAllFormControls const): Ditto.
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::tabsToAllFormControls const): Ditto.
        * platform/glib/EventHandlerGLib.cpp:
        (WebCore::EventHandler::tabsToAllFormControls const): Ditto.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isKeyboardFocusable const): Ditto.
        * svg/SVGAElement.h: Ditto.

        * testing/Internals.cpp:
        (WebCore::Internals::isFromCurrentWorld const): Use isWorldCompatible.

2018-02-07  Andy Estes  <aestes@apple.com>

        ASSERTION FAILED: vm->currentThreadIsHoldingAPILock() seen with http/tests/paymentrequest/payment-request-show-method.https.html
        https://bugs.webkit.org/show_bug.cgi?id=182591

        Reviewed by Youenn Fablet.

        Fixes assertion failures in http/tests/paymentrequest/payment-request-show-method.https.html.

        DOMPromise::whenSettled() calls the JSC API without first aquiring the API lock, and
        r228195 added a call to whenSettled() where the lock is not guaranteed to be already
        acquired.

        Fix this by creating a JSLockHolder in DOMPromise::whenSettled().

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DOMPromise::whenSettled):

2018-02-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r228243.

        Introduced an assertion failure with API test
        FullscreenZoomInitialFrame.WebKit

        Reverted changeset:

        "Assert that NSApp is not running in the WebProcess."
        https://bugs.webkit.org/show_bug.cgi?id=182553
        https://trac.webkit.org/changeset/228243

2018-02-07  Christopher Reid  <chris.reid@sony.com>

        [Curl] Cookie Database has some warnings when compiled in clang
        https://bugs.webkit.org/show_bug.cgi?id=182583

        Reviewed by Alex Christensen.

        No new tests, no change in behavior.

        Fixing unused-parameter, missing-field-initializers, reorder, and pragma-once-outside-header warnings.

        * platform/network/NetworkStorageSession.h:
        * platform/network/curl/CookieJarCurlDatabase.cpp:
        * platform/network/curl/CookieJarDB.cpp:
        * platform/network/curl/NetworkStorageSessionCurl.cpp:

2018-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused CSSParserContext in CSSParser::parseInlineStyleDeclaration
        https://bugs.webkit.org/show_bug.cgi?id=182587

        Reviewed by Simon Fraser.

        Removed the code. There is no need to create an unused CSSParserContext in CSSParser.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParser::parseInlineStyleDeclaration):
        * css/parser/CSSParser.h:
        * css/parser/CSSParserImpl.cpp:
        (WebCore::CSSParserImpl::parseInlineStyleDeclaration):
        * css/parser/CSSParserImpl.h:

2018-02-07  Ross Kirsling  <ross.kirsling@sony.com>

        Add missing #if ENABLE(VIDEO_TRACK) after r228201.
        https://bugs.webkit.org/show_bug.cgi?id=182585

        Reviewed by Chris Dumez.

        * loader/LinkPreloadResourceClients.h:

2018-02-07  Per Arne Vollan  <pvollan@apple.com>

        Assert that NSApp is not running in the WebProcess.
        https://bugs.webkit.org/show_bug.cgi?id=182553
        <rdar://problem/37316144>
        
        Reviewed by Simon Fraser.

        In WebCore, there are a few places where NSApp is referenced. Since the WebContent process
        is no longer using the NSApplication run loop, and NSApp is no longer guaranteed to be
        valid, we should make sure that the NSApp is not referenced by the WebContent process or
        the Network process, by asserting that the NSApplication event loop is running when NSApp
        is referenced. It is still ok for the UIProcess to reference NSApp. Adding these assert
        will help catch references to NSApp when the NSApplication run loop is not used.
        Also, do not post a fake mouse event in PasteBoard::setDragImage when the NSApplication
        run loop is not running, since this is only relevant in WK1.

        No new tests, covered by existing tests. 

        * page/mac/EventHandlerMac.mm:
        (WebCore::lastEventIsMouseUp):
        (WebCore::EventHandler::sendFakeEventsAfterWidgetTracking):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage):
        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController updateMenuAndDockForFullscreen]):
        * platform/mac/WebWindowAnimation.mm:
        (WebCore::WebWindowAnimationDurationFromDuration):

2018-02-07  Youenn Fablet  <youenn@apple.com>

        ASSERTION FAILED: m_timeOrigin in Performance::Performance()
        https://bugs.webkit.org/show_bug.cgi?id=182558
        <rdar://problem/37297551>

        Reviewed by Chris Dumez.

        Test: http/wpt/fetch/cors-preflight-star.any.serviceworker.html

        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::startPreflight):

2018-02-07  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r226396): File paths are inserted when dropping image files
        https://bugs.webkit.org/show_bug.cgi?id=182557
        <rdar://problem/37294120>

        Reviewed by Ryosuke Niwa.

        Reverts unintended changes in <http://trac.webkit.org/r226396>. Before r226396, WebContentReader::readFilenames
        (a helper function in macOS-specific code) contained logic to create and insert attachment elements if
        ENABLE(ATTACHMENT_ELEMENT); otherwise, it would fall back to inserting the visible URL as a text node. Since we
        enable the attachment element on all Cocoa platforms via xcconfig files, this was effectively dead code.

        However, when r226396 (which moved this out from macOS to Cocoa platform code) refactored this helper function,
        it also moved this chunk of code out of the !ENABLE(ATTACHMENT) conditional and into a PLATFORM(MAC) guard,
        which means that we now fall back to inserting file paths as text when attachment elements are disabled. To fix
        this, we simply remove the (previously) dead code.

        A more subtle difference is that we no longer always return true from WebContentReader::readFilePaths. This
        means that when we drop files, we no longer skip over the early return in documentFragmentFromDragData when
        we've made a fragment, so we read the file path as a URL. To address this, we just restore the pre-macOS 10.13.4
        behavior of initializing the document fragment.

        Test: modified editing/pasteboard/drag-files-to-editable-element-as-URLs.html.

        * editing/WebContentReader.cpp:
        (WebCore::WebContentReader::ensureFragment): Deleted.

        Remove this helper, as it was only used in WebContentReader::readFilePaths.

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readFilePaths):

2018-02-07  John Wilander  <wilander@apple.com>

        Restrict Referer to just the origin for third parties in private mode and third parties ITP blocks cookies for in regular mode
        https://bugs.webkit.org/show_bug.cgi?id=182559
        <rdar://problem/36990337>

        Reviewed by Andy Estes.

        Tests: http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-redirects.html
               http/tests/resourceLoadStatistics/strip-referrer-to-origin-for-prevalent-subresource-requests.html
               http/tests/security/strip-referrer-to-origin-for-third-party-redirects-in-private-mode.html
               http/tests/security/strip-referrer-to-origin-for-third-party-requests-in-private-mode.html

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::referrerToOriginString):
            Now exposed within WebCore. This is to make sure we create a proper referrer
            string in WebCore::ResourceRequestBase::setExistingHTTPReferrerToOriginString().
        (WebCore::referrerToOriginString): Deleted.
            Used to be internal.
        * page/SecurityPolicy.h:
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setExistingHTTPReferrerToOriginString):
            New, exported function used in WebKit. Note that this function does not
            set the referrer if the request has none since before.
        * platform/network/ResourceRequestBase.h:


2018-02-07  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Remove RenderElement::destroyLeftoverChildren.
        https://bugs.webkit.org/show_bug.cgi?id=182518
        <rdar://problem/37256035>

        Reviewed by Antti Koivisto.

        Remove leftover children before we call takeChild() on the parent (as opposed to when
        we finally call destroy() on the parent).
        This patch also explicitly destroys the top level pagination renderers.

        Covered by existing tests.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::removeAndDestroyChild):
        (WebCore::RenderElement::destroyLeftoverChildren): Deleted.
        * rendering/RenderElement.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::destroy):
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownLeftoverPaginationRenderersIfNeeded):
        * rendering/updating/RenderTreeUpdater.h:

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

        Log error when authentication challenge is blocked due to an insecure request
        https://bugs.webkit.org/show_bug.cgi?id=182358

        Reviewed by Andy Estes.

        Emit an error message to Web Inspector console that explains why an authentication
        challenge was blocked so that a developer can fix up their site.

        Tests: http/tests/security/mixedContent/insecure-basic-auth-image.https.html
               http/tests/security/mixedContent/secure-page-navigates-to-basic-auth-insecure-page.https.html
               http/tests/security/mixedContent/secure-page-navigates-to-basic-auth-secure-page-via-insecure-redirect.https.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::receivedFirstData): Log to the console an error message
        if the document we are loading was forbidden from prompting for credentials.
        Also removed duplicate assertion to ensure document is non-null and update
        call to LinkLoader::loadLinksFromHeader() to use local variable to access
        the document we are loading instead of asking the frame for it, again.
        (WebCore::FrameLoader::reportAuthenticationChallengeBlocked): Added.
        * loader/FrameLoader.h:

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::willSendRequestInternal):
        Track the decision to forbid asking for credentials due to Fetch spec. requirements (m_canAskClientForCredentials)
        independently from the decision to forbid them due to making an insecure request (m_wasInsecureRequestSeen)
        so that we know the reason why we blocked asking for credentials when we receive an authentication challenge.

        (WebCore::ResourceLoader::didBlockAuthenticationChallenge): Added.
        (WebCore::ResourceLoader::isAllowedToAskUserForCredentials const): Modified code now that we track
        whether we have seen an insecure request so far independently from decision to forbid prompting for
        credentials due to a Fetch spec. requirement.

        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        Store a bit whether we have seen an insecure request when loading the resource so far. Disallow
        asking for credentials if we have seen an insecure request so far. Once we receive a response

        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::wasAuthenticationChallengeBlocked const): Added.
        (WebCore::ResourceLoader::wasInsecureRequestSeen const): Added.

2018-02-06  Matt Lewis  <jlewis3@apple.com>

        Removed the assertions from VideoFullscreenInterfaceAVKit.mm temporarily to stop the resulting crashes during debugging.
        https://bugs.webkit.org/show_bug.cgi?id=182527

        Unreviewed build fix.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):

2018-02-07  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock::removeLeftoverAnonymousBlock to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182510
        <rdar://problem/37250037>

        Reviewed by Antti Koivisto.

        Do not reinvent subtree reparenting.

        Covered by existing tests.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::removeLeftoverAnonymousBlock): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::moveAllChildrenToInternal):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::detachRendererInternal):
        (WebCore::RenderElement::attachRendererInternal):
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::takeChildInternal):
        * rendering/RenderElement.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderTextControl.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Block::childBecameNonInline):
        (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):
        * rendering/updating/RenderTreeBuilderBlock.h:

2018-02-06  Don Olmstead  <don.olmstead@sony.com>

        Remove WebCore/ForwardingHeaders directory
        https://bugs.webkit.org/show_bug.cgi?id=182347

        Reviewed by Keith Miller.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * ForwardingHeaders/bindings/ScriptFunctionCall.h: Removed.
        * ForwardingHeaders/bindings/ScriptObject.h: Removed.
        * ForwardingHeaders/bindings/ScriptValue.h: Removed.
        * ForwardingHeaders/builtins/BuiltinNames.h: Removed.
        * ForwardingHeaders/builtins/BuiltinUtils.h: Removed.
        * ForwardingHeaders/builtins/JSCBuiltins.h: Removed.
        * ForwardingHeaders/bytecode/CodeBlock.h: Removed.
        * ForwardingHeaders/bytecode/SpeculatedType.h: Removed.
        * ForwardingHeaders/bytecode/UnlinkedFunctionExecutable.h: Removed.
        * ForwardingHeaders/debugger/Debugger.h: Removed.
        * ForwardingHeaders/domjit/DOMJITAbstractHeap.h: Removed.
        * ForwardingHeaders/domjit/DOMJITEffect.h: Removed.
        * ForwardingHeaders/domjit/DOMJITGetterSetter.h: Removed.
        * ForwardingHeaders/domjit/DOMJITHeapRange.h: Removed.
        * ForwardingHeaders/domjit/DOMJITSignature.h: Removed.
        * ForwardingHeaders/heap/BlockDirectoryInlines.h: Removed.
        * ForwardingHeaders/heap/DeleteAllCodeEffort.h: Removed.
        * ForwardingHeaders/heap/FastMallocAlignedMemoryAllocator.h: Removed.
        * ForwardingHeaders/heap/GCActivityCallback.h: Removed.
        * ForwardingHeaders/heap/GCFinalizationCallback.h: Removed.
        * ForwardingHeaders/heap/HandleTypes.h: Removed.
        * ForwardingHeaders/heap/Heap.h: Removed.
        * ForwardingHeaders/heap/HeapInlines.h: Removed.
        * ForwardingHeaders/heap/HeapObserver.h: Removed.
        * ForwardingHeaders/heap/IncrementalSweeper.h: Removed.
        * ForwardingHeaders/heap/LockDuringMarking.h: Removed.
        * ForwardingHeaders/heap/MachineStackMarker.h: Removed.
        * ForwardingHeaders/heap/MarkedBlockInlines.h: Removed.
        * ForwardingHeaders/heap/MarkingConstraint.h: Removed.
        * ForwardingHeaders/heap/RunningScope.h: Removed.
        * ForwardingHeaders/heap/SimpleMarkingConstraint.h: Removed.
        * ForwardingHeaders/heap/SlotVisitor.h: Removed.
        * ForwardingHeaders/heap/SlotVisitorInlines.h: Removed.
        * ForwardingHeaders/heap/Strong.h: Removed.
        * ForwardingHeaders/heap/StrongInlines.h: Removed.
        * ForwardingHeaders/heap/SubspaceInlines.h: Removed.
        * ForwardingHeaders/heap/ThreadLocalCache.h: Removed.
        * ForwardingHeaders/heap/Weak.h: Removed.
        * ForwardingHeaders/heap/WeakInlines.h: Removed.
        * ForwardingHeaders/inspector/ConsoleMessage.h: Removed.
        * ForwardingHeaders/inspector/ContentSearchUtilities.h: Removed.
        * ForwardingHeaders/inspector/IdentifiersFactory.h: Removed.
        * ForwardingHeaders/inspector/InjectedScript.h: Removed.
        * ForwardingHeaders/inspector/InjectedScriptBase.h: Removed.
        * ForwardingHeaders/inspector/InjectedScriptHost.h: Removed.
        * ForwardingHeaders/inspector/InjectedScriptManager.h: Removed.
        * ForwardingHeaders/inspector/InjectedScriptModule.h: Removed.
        * ForwardingHeaders/inspector/InspectorAgentBase.h: Removed.
        * ForwardingHeaders/inspector/InspectorAgentRegistry.h: Removed.
        * ForwardingHeaders/inspector/InspectorBackendDispatcher.h: Removed.
        * ForwardingHeaders/inspector/InspectorBackendDispatchers.h: Removed.
        * ForwardingHeaders/inspector/InspectorEnvironment.h: Removed.
        * ForwardingHeaders/inspector/InspectorFrontendChannel.h: Removed.
        * ForwardingHeaders/inspector/InspectorFrontendDispatchers.h: Removed.
        * ForwardingHeaders/inspector/InspectorFrontendRouter.h: Removed.
        * ForwardingHeaders/inspector/InspectorProtocolObjects.h: Removed.
        * ForwardingHeaders/inspector/InspectorProtocolTypes.h: Removed.
        * ForwardingHeaders/inspector/PerGlobalObjectWrapperWorld.h: Removed.
        * ForwardingHeaders/inspector/ScriptArguments.h: Removed.
        * ForwardingHeaders/inspector/ScriptBreakpoint.h: Removed.
        * ForwardingHeaders/inspector/ScriptCallFrame.h: Removed.
        * ForwardingHeaders/inspector/ScriptCallStack.h: Removed.
        * ForwardingHeaders/inspector/ScriptCallStackFactory.h: Removed.
        * ForwardingHeaders/inspector/ScriptDebugListener.h: Removed.
        * ForwardingHeaders/inspector/ScriptDebugServer.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorAgent.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorConsoleAgent.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorDebuggerAgent.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorHeapAgent.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorRuntimeAgent.h: Removed.
        * ForwardingHeaders/inspector/agents/InspectorScriptProfilerAgent.h: Removed.
        * ForwardingHeaders/interpreter/CallFrame.h: Removed.
        * ForwardingHeaders/interpreter/FrameTracers.h: Removed.
        * ForwardingHeaders/interpreter/ShadowChicken.h: Removed.
        * ForwardingHeaders/interpreter/StackVisitor.h: Removed.
        * ForwardingHeaders/jit/JITCode.h: Removed.
        * ForwardingHeaders/jit/JITMathICForwards.h: Removed.
        * ForwardingHeaders/jit/Snippet.h: Removed.
        * ForwardingHeaders/jit/SnippetParams.h: Removed.
        * ForwardingHeaders/jit/SpillRegistersMode.h: Removed.
        * ForwardingHeaders/masm/X86Assembler.h: Removed.
        * ForwardingHeaders/parser/ParserError.h: Removed.
        * ForwardingHeaders/parser/SourceCode.h: Removed.
        * ForwardingHeaders/parser/SourceProvider.h: Removed.
        * ForwardingHeaders/parser/SourceProviderCache.h: Removed.
        * ForwardingHeaders/profiler/ProfilerDatabase.h: Removed.
        * ForwardingHeaders/runtime/ArgList.h: Removed.
        * ForwardingHeaders/runtime/ArrayBuffer.h: Removed.
        * ForwardingHeaders/runtime/ArrayBufferView.h: Removed.
        * ForwardingHeaders/runtime/ArrayPrototype.h: Removed.
        * ForwardingHeaders/runtime/AuxiliaryBarrierInlines.h: Removed.
        * ForwardingHeaders/runtime/BooleanObject.h: Removed.
        * ForwardingHeaders/runtime/CallData.h: Removed.
        * ForwardingHeaders/runtime/CatchScope.h: Removed.
        * ForwardingHeaders/runtime/CommonIdentifiers.h: Removed.
        * ForwardingHeaders/runtime/Completion.h: Removed.
        * ForwardingHeaders/runtime/ConfigFile.h: Removed.
        * ForwardingHeaders/runtime/ConsoleClient.h: Removed.
        * ForwardingHeaders/runtime/ConsoleTypes.h: Removed.
        * ForwardingHeaders/runtime/ConstructAbility.h: Removed.
        * ForwardingHeaders/runtime/ConstructData.h: Removed.
        * ForwardingHeaders/runtime/DataView.h: Removed.
        * ForwardingHeaders/runtime/DateInstance.h: Removed.
        * ForwardingHeaders/runtime/Error.h: Removed.
        * ForwardingHeaders/runtime/ErrorHandlingScope.h: Removed.
        * ForwardingHeaders/runtime/ErrorInstance.h: Removed.
        * ForwardingHeaders/runtime/ErrorPrototype.h: Removed.
        * ForwardingHeaders/runtime/Exception.h: Removed.
        * ForwardingHeaders/runtime/ExceptionHelpers.h: Removed.
        * ForwardingHeaders/runtime/Float32Array.h: Removed.
        * ForwardingHeaders/runtime/Float64Array.h: Removed.
        * ForwardingHeaders/runtime/FunctionConstructor.h: Removed.
        * ForwardingHeaders/runtime/FunctionExecutable.h: Removed.
        * ForwardingHeaders/runtime/FunctionPrototype.h: Removed.
        * ForwardingHeaders/runtime/HashMapImpl.h: Removed.
        * ForwardingHeaders/runtime/Identifier.h: Removed.
        * ForwardingHeaders/runtime/IdentifierInlines.h: Removed.
        * ForwardingHeaders/runtime/InitializeThreading.h: Removed.
        * ForwardingHeaders/runtime/Int16Array.h: Removed.
        * ForwardingHeaders/runtime/Int32Array.h: Removed.
        * ForwardingHeaders/runtime/Int8Array.h: Removed.
        * ForwardingHeaders/runtime/InternalFunction.h: Removed.
        * ForwardingHeaders/runtime/Intrinsic.h: Removed.
        * ForwardingHeaders/runtime/IterationKind.h: Removed.
        * ForwardingHeaders/runtime/IteratorOperations.h: Removed.
        * ForwardingHeaders/runtime/IteratorPrototype.h: Removed.
        * ForwardingHeaders/runtime/JSAPIValueWrapper.h: Removed.
        * ForwardingHeaders/runtime/JSArray.h: Removed.
        * ForwardingHeaders/runtime/JSArrayBuffer.h: Removed.
        * ForwardingHeaders/runtime/JSArrayBufferView.h: Removed.
        * ForwardingHeaders/runtime/JSCInlines.h: Removed.
        * ForwardingHeaders/runtime/JSCJSValue.h: Removed.
        * ForwardingHeaders/runtime/JSCJSValueInlines.h: Removed.
        * ForwardingHeaders/runtime/JSCallee.h: Removed.
        * ForwardingHeaders/runtime/JSCell.h: Removed.
        * ForwardingHeaders/runtime/JSCellInlines.h: Removed.
        * ForwardingHeaders/runtime/JSDataView.h: Removed.
        * ForwardingHeaders/runtime/JSDestructibleObject.h: Removed.
        * ForwardingHeaders/runtime/JSDestructibleObjectHeapCellType.h: Removed.
        * ForwardingHeaders/runtime/JSExportMacros.h: Removed.
        * ForwardingHeaders/runtime/JSFunction.h: Removed.
        * ForwardingHeaders/runtime/JSGlobalObject.h: Removed.
        * ForwardingHeaders/runtime/JSGlobalObjectInlines.h: Removed.
        * ForwardingHeaders/runtime/JSInternalPromise.h: Removed.
        * ForwardingHeaders/runtime/JSInternalPromiseDeferred.h: Removed.
        * ForwardingHeaders/runtime/JSLock.h: Removed.
        * ForwardingHeaders/runtime/JSMap.h: Removed.
        * ForwardingHeaders/runtime/JSMapIterator.h: Removed.
        * ForwardingHeaders/runtime/JSModuleLoader.h: Removed.
        * ForwardingHeaders/runtime/JSModuleRecord.h: Removed.
        * ForwardingHeaders/runtime/JSNativeStdFunction.h: Removed.
        * ForwardingHeaders/runtime/JSONObject.h: Removed.
        * ForwardingHeaders/runtime/JSObject.h: Removed.
        * ForwardingHeaders/runtime/JSObjectInlines.h: Removed.
        * ForwardingHeaders/runtime/JSPromise.h: Removed.
        * ForwardingHeaders/runtime/JSPromiseConstructor.h: Removed.
        * ForwardingHeaders/runtime/JSPromiseDeferred.h: Removed.
        * ForwardingHeaders/runtime/JSProxy.h: Removed.
        * ForwardingHeaders/runtime/JSRunLoopTimer.h: Removed.
        * ForwardingHeaders/runtime/JSScriptFetchParameters.h: Removed.
        * ForwardingHeaders/runtime/JSScriptFetcher.h: Removed.
        * ForwardingHeaders/runtime/JSSegmentedVariableObjectHeapCellType.h: Removed.
        * ForwardingHeaders/runtime/JSSet.h: Removed.
        * ForwardingHeaders/runtime/JSSetIterator.h: Removed.
        * ForwardingHeaders/runtime/JSSourceCode.h: Removed.
        * ForwardingHeaders/runtime/JSString.h: Removed.
        * ForwardingHeaders/runtime/JSTypedArrays.h: Removed.
        * ForwardingHeaders/runtime/JSWithScope.h: Removed.
        * ForwardingHeaders/runtime/Lookup.h: Removed.
        * ForwardingHeaders/runtime/MapBase.h: Removed.
        * ForwardingHeaders/runtime/MapData.h: Removed.
        * ForwardingHeaders/runtime/MapDataInlines.h: Removed.
        * ForwardingHeaders/runtime/MatchResult.h: Removed.
        * ForwardingHeaders/runtime/Microtask.h: Removed.
        * ForwardingHeaders/runtime/ObjectConstructor.h: Removed.
        * ForwardingHeaders/runtime/ObjectPrototype.h: Removed.
        * ForwardingHeaders/runtime/Operations.h: Removed.
        * ForwardingHeaders/runtime/PrivateName.h: Removed.
        * ForwardingHeaders/runtime/PromiseDeferredTimer.h: Removed.
        * ForwardingHeaders/runtime/PropertyNameArray.h: Removed.
        * ForwardingHeaders/runtime/Protect.h: Removed.
        * ForwardingHeaders/runtime/RegExp.h: Removed.
        * ForwardingHeaders/runtime/RegExpObject.h: Removed.
        * ForwardingHeaders/runtime/RuntimeFlags.h: Removed.
        * ForwardingHeaders/runtime/SamplingProfiler.h: Removed.
        * ForwardingHeaders/runtime/ScriptFetchParameters.h: Removed.
        * ForwardingHeaders/runtime/ScriptFetcher.h: Removed.
        * ForwardingHeaders/runtime/StringObject.h: Removed.
        * ForwardingHeaders/runtime/StringPrototype.h: Removed.
        * ForwardingHeaders/runtime/Structure.h: Removed.
        * ForwardingHeaders/runtime/StructureChain.h: Removed.
        * ForwardingHeaders/runtime/StructureInlines.h: Removed.
        * ForwardingHeaders/runtime/Symbol.h: Removed.
        * ForwardingHeaders/runtime/SymbolTable.h: Removed.
        * ForwardingHeaders/runtime/ThrowScope.h: Removed.
        * ForwardingHeaders/runtime/TypedArrayController.h: Removed.
        * ForwardingHeaders/runtime/TypedArrayInlines.h: Removed.
        * ForwardingHeaders/runtime/TypedArrays.h: Removed.
        * ForwardingHeaders/runtime/Uint16Array.h: Removed.
        * ForwardingHeaders/runtime/Uint32Array.h: Removed.
        * ForwardingHeaders/runtime/Uint8Array.h: Removed.
        * ForwardingHeaders/runtime/Uint8ClampedArray.h: Removed.
        * ForwardingHeaders/runtime/VM.h: Removed.
        * ForwardingHeaders/runtime/VMEntryScope.h: Removed.
        * ForwardingHeaders/runtime/Watchdog.h: Removed.
        * ForwardingHeaders/runtime/WeakGCMap.h: Removed.
        * ForwardingHeaders/runtime/WeakGCMapInlines.h: Removed.
        * ForwardingHeaders/runtime/WriteBarrier.h: Removed.
        * ForwardingHeaders/wasm/WasmModule.h: Removed.
        * ForwardingHeaders/wasm/js/JSWebAssemblyModule.h: Removed.
        * ForwardingHeaders/yarr/RegularExpression.h: Removed.
        * ForwardingHeaders/yarr/Yarr.h: Removed.
        * ForwardingHeaders/yarr/YarrInterpreter.h: Removed.
        * ForwardingHeaders/yarr/YarrJIT.h: Removed.
        * ForwardingHeaders/yarr/YarrPattern.h: Removed.
        * Modules/applepay/cocoa/PaymentMerchantSessionCocoa.mm:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyMessageEventInit.h:
        * Modules/encryptedmedia/MediaKeyStatusMap.h:
        * Modules/encryptedmedia/legacy/LegacyCDM.h:
        * Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeyNeededEvent.cpp:
        * Modules/encryptedmedia/legacy/WebKitMediaKeySession.h:
        * Modules/encryptedmedia/legacy/WebKitMediaKeys.h:
        * Modules/fetch/FetchBody.cpp:
        * Modules/fetch/FetchRequestInit.h:
        * Modules/fetch/FetchResponse.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBKey.cpp:
        * Modules/indexeddb/IDBKeyRange.cpp:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/client/TransactionOperation.cpp:
        * Modules/indexeddb/server/MemoryObjectStore.cpp:
        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/plugins/QuickTimePluginReplacement.mm:
        * Modules/webaudio/AsyncAudioDecoder.cpp:
        * Modules/webaudio/AudioBuffer.cpp:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/websockets/WebSocket.cpp:
        * Modules/websockets/WebSocketChannel.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        * Modules/webvr/VREyeParameters.h:
        * Modules/webvr/VRFrameData.h:
        * Modules/webvr/VRPose.h:
        * Modules/webvr/VRStageParameters.h:
        * PlatformWin.cmake:
        * bindings/IDLTypes.h:
        * bindings/js/BufferSource.h:
        * bindings/js/CachedScriptFetcher.h:
        * bindings/js/CachedScriptSourceProvider.h:
        * bindings/js/CallTracerTypes.h:
        * bindings/js/CommonVM.cpp:
        * bindings/js/DOMGCOutputConstraint.cpp:
        * bindings/js/DOMGCOutputConstraint.h:
        * bindings/js/GCController.cpp:
        * bindings/js/GCController.h:
        * bindings/js/IDBBindingUtilities.cpp:
        * bindings/js/JSCallbackData.cpp:
        * bindings/js/JSCallbackData.h:
        * bindings/js/JSCustomElementInterface.cpp:
        * bindings/js/JSCustomElementInterface.h:
        * bindings/js/JSCustomEventCustom.cpp:
        * bindings/js/JSCustomXPathNSResolver.cpp:
        * bindings/js/JSCustomXPathNSResolver.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMBuiltinConstructorBase.cpp:
        * bindings/js/JSDOMConstructorBase.cpp:
        * bindings/js/JSDOMConvertBase.h:
        * bindings/js/JSDOMConvertBufferSource.h:
        * bindings/js/JSDOMConvertDate.cpp:
        * bindings/js/JSDOMConvertInterface.h:
        * bindings/js/JSDOMConvertJSON.h:
        * bindings/js/JSDOMConvertNumbers.cpp:
        * bindings/js/JSDOMConvertNumbers.h:
        * bindings/js/JSDOMConvertObject.h:
        * bindings/js/JSDOMConvertRecord.h:
        * bindings/js/JSDOMConvertSequences.h:
        * bindings/js/JSDOMConvertStrings.cpp:
        * bindings/js/JSDOMConvertUnion.h:
        * bindings/js/JSDOMExceptionHandling.cpp:
        * bindings/js/JSDOMExceptionHandling.h:
        * bindings/js/JSDOMGlobalObject.cpp:
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMGuardedObject.h:
        * bindings/js/JSDOMIterator.cpp:
        * bindings/js/JSDOMIterator.h:
        * bindings/js/JSDOMMapLike.cpp:
        * bindings/js/JSDOMMapLike.h:
        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        * bindings/js/JSDOMPromiseDeferred.cpp:
        * bindings/js/JSDOMPromiseDeferred.h:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDOMWindowProxy.cpp:
        * bindings/js/JSDOMWindowProxy.h:
        * bindings/js/JSDOMWrapper.cpp:
        * bindings/js/JSDOMWrapper.h:
        * bindings/js/JSDOMWrapperCache.cpp:
        * bindings/js/JSDOMWrapperCache.h:
        * bindings/js/JSDynamicDowncast.h:
        * bindings/js/JSErrorHandler.cpp:
        * bindings/js/JSEventCustom.cpp:
        * bindings/js/JSEventListener.cpp:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSHTMLElementCustom.cpp:
        * bindings/js/JSHistoryCustom.cpp:
        * bindings/js/JSIDBCursorWithValueCustom.cpp:
        * bindings/js/JSIDBIndexCustom.cpp:
        * bindings/js/JSImageDataCustom.cpp:
        * bindings/js/JSLazyEventListener.cpp:
        * bindings/js/JSLocationCustom.cpp:
        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSMainThreadExecStateInstrumentation.h:
        * bindings/js/JSMessageChannelCustom.cpp:
        * bindings/js/JSMessageEventCustom.cpp:
        * bindings/js/JSNodeIteratorCustom.cpp:
        * bindings/js/JSPopStateEventCustom.cpp:
        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
        * bindings/js/JSTreeWalkerCustom.cpp:
        * bindings/js/JSWebGL2RenderingContextCustom.cpp:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        * bindings/js/ReadableStreamDefaultController.cpp:
        * bindings/js/ReadableStreamDefaultController.h:
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptCachedFrameData.cpp:
        * bindings/js/ScriptCachedFrameData.h:
        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptControllerMac.mm:
        * bindings/js/ScriptModuleLoader.cpp:
        * bindings/js/ScriptModuleLoader.h:
        * bindings/js/ScriptSourceCode.h:
        * bindings/js/ScriptState.cpp:
        * bindings/js/ScriptWrappable.h:
        * bindings/js/ScriptWrappableInlines.h:
        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/StructuredClone.cpp:
        * bindings/js/WebCoreBuiltinNames.h:
        * bindings/js/WebCoreJSClientData.cpp:
        * bindings/js/WebCoreTypedArrayController.cpp:
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/js/WorkerScriptController.cpp:
        * bindings/js/WorkerScriptController.h:
        * bridge/NP_jsobject.cpp:
        * bridge/c/CRuntimeObject.cpp:
        * bridge/c/c_class.cpp:
        * bridge/c/c_instance.cpp:
        * bridge/c/c_runtime.cpp:
        * bridge/c/c_utility.cpp:
        * bridge/c/c_utility.h:
        * bridge/jsc/BridgeJSC.cpp:
        * bridge/jsc/BridgeJSC.h:
        * bridge/npruntime.cpp:
        * bridge/objc/ObjCRuntimeObject.mm:
        * bridge/objc/WebScriptObject.mm:
        * bridge/objc/WebScriptObjectPrivate.h:
        * bridge/objc/objc_instance.mm:
        * bridge/objc/objc_runtime.h:
        * bridge/objc/objc_runtime.mm:
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        * bridge/runtime_array.cpp:
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        * bridge/runtime_object.h:
        * bridge/runtime_root.cpp:
        * bridge/runtime_root.h:
        * crypto/SubtleCrypto.cpp:
        * crypto/SubtleCrypto.h:
        * crypto/gcrypt/CryptoKeyRSAGCrypt.cpp:
        * crypto/keys/CryptoRsaKeyAlgorithm.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        * crypto/parameters/CryptoAlgorithmEcdsaParams.h:
        * crypto/parameters/CryptoAlgorithmHkdfParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmPbkdf2Params.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedImportParams.h:
        * crypto/parameters/CryptoAlgorithmRsaHashedKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * css/CSSFontFaceSource.h:
        * css/DOMMatrixReadOnly.cpp:
        * css/DOMMatrixReadOnly.h:
        * css/FontFace.cpp:
        * dom/CustomElementReactionQueue.cpp:
        * dom/CustomElementRegistry.cpp:
        * dom/CustomEvent.cpp:
        * dom/CustomEvent.h:
        * dom/Document.cpp:
        * dom/Document.h:
        * dom/ErrorEvent.cpp:
        * dom/ErrorEvent.h:
        * dom/LoadableScript.h:
        * dom/MessageEvent.cpp:
        * dom/MessageEvent.h:
        * dom/ModuleFetchParameters.h:
        * dom/PopStateEvent.cpp:
        * dom/PopStateEvent.h:
        * dom/PromiseRejectionEvent.cpp:
        * dom/PromiseRejectionEvent.h:
        * dom/RejectedPromiseTracker.cpp:
        * dom/RejectedPromiseTracker.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/TextEncoder.cpp:
        * dom/TextEncoder.h:
        * domjit/DOMJITHelpers.h:
        * domjit/DOMJITIDLTypeFilter.h:
        * domjit/JSDocumentDOMJIT.cpp:
        * domjit/JSNodeDOMJIT.cpp:
        * fileapi/BlobBuilder.cpp:
        * fileapi/FileReader.cpp:
        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderSync.cpp:
        * html/BaseTextInputType.cpp:
        * html/EmailInputType.cpp:
        * html/HTMLAllCollection.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLImageLoader.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/ImageData.cpp:
        * html/ImageData.h:
        * html/MediaEncryptedEventInit.h:
        * html/WebKitMediaKeyError.h:
        * html/canvas/WebGLAny.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContextBase.cpp:
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGPUBuffer.cpp:
        * html/canvas/WebGPURenderingContext.cpp:
        * html/canvas/WebGPURenderingContext.h:
        * html/track/DataCue.cpp:
        * html/track/DataCue.h:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIModule.cpp:
        * inspector/CommandLineAPIModule.h:
        * inspector/InspectorCanvas.cpp:
        * inspector/InspectorCanvas.h:
        * inspector/InspectorClient.cpp:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorShaderProgram.cpp:
        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorStyleSheet.cpp:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorWebAgentBase.h:
        * inspector/InstrumentingAgents.h:
        * inspector/PageScriptDebugServer.cpp:
        * inspector/PageScriptDebugServer.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/WebInjectedScriptHost.h:
        * inspector/WebInjectedScriptManager.h:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerScriptDebugServer.cpp:
        * inspector/WorkerScriptDebugServer.h:
        * inspector/WorkerToPageFrontendChannel.h:
        * inspector/agents/InspectorApplicationCacheAgent.h:
        * inspector/agents/InspectorCSSAgent.cpp:
        * inspector/agents/InspectorCSSAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorDOMAgent.cpp:
        * inspector/agents/InspectorDOMAgent.h:
        * inspector/agents/InspectorDOMDebuggerAgent.cpp:
        * inspector/agents/InspectorDOMDebuggerAgent.h:
        * inspector/agents/InspectorDOMStorageAgent.cpp:
        * inspector/agents/InspectorDOMStorageAgent.h:
        * inspector/agents/InspectorDatabaseAgent.cpp:
        * inspector/agents/InspectorDatabaseAgent.h:
        * inspector/agents/InspectorIndexedDBAgent.cpp:
        * inspector/agents/InspectorIndexedDBAgent.h:
        * inspector/agents/InspectorLayerTreeAgent.cpp:
        * inspector/agents/InspectorLayerTreeAgent.h:
        * inspector/agents/InspectorMemoryAgent.cpp:
        * inspector/agents/InspectorMemoryAgent.h:
        * inspector/agents/InspectorNetworkAgent.cpp:
        * inspector/agents/InspectorNetworkAgent.h:
        * inspector/agents/InspectorPageAgent.cpp:
        * inspector/agents/InspectorPageAgent.h:
        * inspector/agents/InspectorTimelineAgent.cpp:
        * inspector/agents/InspectorTimelineAgent.h:
        * inspector/agents/InspectorWorkerAgent.h:
        * inspector/agents/WebConsoleAgent.cpp:
        * inspector/agents/WebConsoleAgent.h:
        * inspector/agents/WebDebuggerAgent.h:
        * inspector/agents/WebHeapAgent.h:
        * inspector/agents/page/PageDebuggerAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.cpp:
        * inspector/agents/page/PageRuntimeAgent.h:
        * inspector/agents/worker/ServiceWorkerAgent.h:
        * inspector/agents/worker/WorkerDebuggerAgent.cpp:
        * inspector/agents/worker/WorkerRuntimeAgent.cpp:
        * inspector/agents/worker/WorkerRuntimeAgent.h:
        * loader/EmptyClients.cpp:
        * page/CaptionUserPreferences.cpp:
        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/Crypto.cpp:
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/Frame.cpp:
        * page/OriginThreadLocalCache.h:
        * page/PageConsoleClient.cpp:
        * page/PageConsoleClient.h:
        * page/PageDebuggable.cpp:
        * page/PageGroup.cpp:
        * page/SettingsBase.h:
        * page/UserContentController.cpp:
        * page/cocoa/ResourceUsageThreadCocoa.mm:
        * page/csp/ContentSecurityPolicy.cpp:
        * page/ios/FrameIOS.mm:
        * page/linux/ResourceUsageOverlayLinux.cpp:
        * page/linux/ResourceUsageThreadLinux.cpp:
        * platform/MediaSample.h:
        * platform/SerializedPlatformRepresentation.h:
        * platform/SharedBuffer.h:
        * platform/audio/mac/CARingBuffer.h:
        * platform/cocoa/SharedBufferCocoa.mm:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/LegacyCDMSession.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/CDMFairPlayStreaming.cpp:
        * platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cocoa/GPUDeviceMetal.mm:
        * platform/graphics/filters/FEBlend.cpp:
        * platform/graphics/filters/FEColorMatrix.cpp:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        * platform/graphics/filters/FEComposite.cpp:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/FEMorphology.cpp:
        * platform/graphics/filters/FETurbulence.cpp:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/gpu/GPUBuffer.h:
        * platform/graphics/gpu/GPUDevice.h:
        * platform/graphics/iso/ISOBox.cpp:
        * platform/graphics/iso/ISOOriginalFormatBox.cpp:
        * platform/graphics/iso/ISOProtectionSchemeInfoBox.cpp:
        * platform/graphics/iso/ISOSchemeInformationBox.cpp:
        * platform/graphics/iso/ISOSchemeTypeBox.cpp:
        * platform/graphics/iso/ISOTrackEncryptionBox.cpp:
        * platform/graphics/iso/ISOVTTCue.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/win/ImageBufferDataDirect2D.cpp:
        * platform/graphics/win/ImageBufferDataDirect2D.h:
        * platform/ios/wak/WebCoreThread.mm:
        * platform/mac/SerializedPlatformRepresentationMac.mm:
        * platform/mac/StringUtilities.mm:
        * platform/mock/mediasource/MockBox.cpp:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * svg/graphics/SVGImage.cpp:
        * testing/GCObservation.cpp:
        * testing/GCObservation.h:
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/LegacyMockCDM.cpp:
        * testing/MockCDMFactory.cpp:
        * testing/js/WebCoreTestSupport.cpp:
        * workers/Worker.cpp:
        * workers/Worker.h:
        * workers/WorkerConsoleClient.cpp:
        * workers/WorkerConsoleClient.h:
        * workers/WorkerGlobalScope.cpp:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerGlobalScopeProxy.h:
        * workers/WorkerInspectorProxy.cpp:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerThread.h:
        * workers/service/ExtendableEvent.cpp:
        * workers/service/ServiceWorker.cpp:
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerClient.h:
        * workers/service/context/ServiceWorkerInspectorProxy.cpp:
        * workers/service/context/ServiceWorkerThread.cpp:
        * xml/XMLHttpRequest.cpp:

2018-02-06  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Rendering SVG images with same size as WebGL texture doesn't work correctly
        https://bugs.webkit.org/show_bug.cgi?id=182367

        Reviewed by Dean Jackson.

        If am image buffer is created for a webgl texture and then it is reused 
        for another texture, it has to be cleared before drawing.

        Test: webgl/webgl-texture-image-buffer-reuse.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::LRUImageBufferCache::imageBuffer):

2018-02-06  Youenn Fablet  <youenn@apple.com>

        Use downcast in createLinkPreloadResourceClient
        https://bugs.webkit.org/show_bug.cgi?id=182488

        Reviewed by Antti Koivisto.

        No observable change of behavior.
        Add a new link preloader client for text track.

        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):
        * loader/LinkPreloadResourceClients.h:

2018-02-06  Youenn Fablet  <youenn@apple.com>

        imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-response-body-with-invalid-chunk.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=182541

        Reviewed by Chris Dumez.

        Covered by test being no longer flaky.
        In case of loading error when getting the response body, we were only reporting
        the error if there was a callback set or a ReadableStream already created.
        Otherwise, we were just stopping loading and if creating a ReadableStream, we were just returning an empty body.

        FetchBodyOwner now stores a loading error.
        In case a readable stream is created, it will error it if there is a loading error.
        If there is not and the loading failed later on, the stream will be errored using the current code path.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):
        (WebCore::FetchResponse::BodyLoader::didFail):
        * Modules/fetch/FetchResponse.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):

2018-02-06  Andy Estes  <aestes@apple.com>

        [Payment Request] show() should take an optional PaymentDetailsUpdate promise
        https://bugs.webkit.org/show_bug.cgi?id=182538
        <rdar://problem/36754552>

        Reviewed by Tim Horton.

        Taught show() to take an optional promise for a PaymentDetailsUpdate.

        Added test cases to http/tests/paymentrequest/payment-request-show-method.https.html.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::detailsUpdated):

        Changed to take a PaymentRequest::UpdateReason instead of a eventType string.

        (WebCore::ApplePayPaymentHandler::shippingAddressUpdated):
        (WebCore::ApplePayPaymentHandler::shippingOptionUpdated):
        (WebCore::ApplePayPaymentHandler::paymentMethodUpdated):
        (WebCore::ApplePayPaymentHandler::didAuthorizePayment):
        (WebCore::ApplePayPaymentHandler::didSelectShippingMethod):
        (WebCore::ApplePayPaymentHandler::didSelectShippingContact):
        (WebCore::ApplePayPaymentHandler::didSelectPaymentMethod):

        Asserted that only one of the PaymentSession delegates is executing at a time.

        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/PaymentHandler.h:

        Changed detailsUpdated to take a PaymentRequest::UpdateReason instead of a eventType string.

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show):

        If there is a details promise, call updateWith() with UpdateReason::ShowDetailsResolved.

        (WebCore::PaymentRequest::shippingAddressChanged):
        (WebCore::PaymentRequest::shippingOptionChanged):
        (WebCore::PaymentRequest::paymentMethodChanged):

        Used whenDetailsSettled() to ensure that update events do not start before the show()
        details promise settles.

        (WebCore::PaymentRequest::updateWith):
        (WebCore::PaymentRequest::settleDetailsPromise):

        Changed to use a PaymentRequest::UpdateReason instead of a eventType string.

        (WebCore::PaymentRequest::whenDetailsSettled):

        If there is a details promise, wait for it to settle before executing the callback.

        * Modules/paymentrequest/PaymentRequest.h:

        Defined enum class UpdateReason.

        * Modules/paymentrequest/PaymentRequest.idl:

        Updated show() to take an optional Promise<PaymentDetailsUpdate>.

        * Modules/paymentrequest/PaymentRequestUpdateEvent.cpp:
        (WebCore::PaymentRequestUpdateEvent::updateWith):

        Map the event type to a PaymentRequest::UpdateReason.

2018-02-06  Dean Jackson  <dino@apple.com>

        REGRESSION: WebGL no longer producing a transparent canvas on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182550
        <rdar://problem/37234491>

        Reviewed by Eric Carlson.

        Due to some weirdness GL_RGBA8 is sometimes different between iOS and
        other platforms. Only tell the WebGLLayer that it is opaque when it really
        is not transparent.

        Covered by existing test: fast/canvas/webgl/context-attributes-alpha

        * platform/graphics/cocoa/GraphicsContext3DCocoa.mm:
        (WebCore::GraphicsContext3D::setRenderbufferStorageFromDrawable): Look at the context
        attributes to decide if we should use an opaque layer.
        * platform/graphics/cocoa/WebGLLayer.mm: Ditto.
        (-[WebGLLayer initWithGraphicsContext3D:]):

2018-02-06  Andy Estes  <aestes@apple.com>

        [WebIDL] Support optional Promise arguments
        https://bugs.webkit.org/show_bug.cgi?id=182399
        <rdar://problem/36754552>

        Reviewed by Sam Weinig and Chris Dumez.

        Previously, declaring a Promise argument as optional would result in a native type of
        std::optional<RefPtr<DOMPromise>>. This is wasteful, since RefPtr can represent an optional
        argument by storing nullptr. Further, PassArgumentExpression() assumed Promises were never
        optional and tried to pass the argument as a Ref by calling RefPtr::releaseNonNull().

        This patch removes the std::optional wrapper around optional Promises and simply passes the
        promise as a RefPtr to native code.

        * bindings/scripts/CodeGeneratorJS.pm:
        (PassArgumentExpression):
        (GenerateParametersCheck):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromiseBody):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalPromise):
        * bindings/scripts/test/TestObj.idl:

2018-02-06  Youenn Fablet  <youenn@apple.com>

        HasServiceWorkerRegistration bit should be sent when creating a new page
        https://bugs.webkit.org/show_bug.cgi?id=182410

        Reviewed by Chris Dumez.

        Covered by new API test.

        Changed the default value of service workers being registered to false.
        Every page created in the process will be responsible to change the value to true,
        at which time the value will be kept to true for the lifetime of the process.

        * workers/service/ServiceWorkerProvider.h:

2018-02-06  Ross Kirsling  <ross.kirsling@sony.com>

        Add missing #if ENABLE(VIDEO) after r228092.
        https://bugs.webkit.org/show_bug.cgi?id=182539

        Reviewed by Michael Catanzaro.

        * html/ImageBitmap.cpp:

2018-02-06  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Test at media/modern-media-controls/tracks-panel/tracks-panel-controls-bar-remains-visible-after-clicking-over-it.html fails
        https://bugs.webkit.org/show_bug.cgi?id=182425

        Reviewed by Dean Jackson.

        This test failed because the controls bar would not hit test at the moment we synthesized a mousemove over the controls bar as the first step towards
        synthesizing a click on the controls bar to dismiss the tracks panel. Indeed, it would have "pointer-events" set to "none" until the tracks panel was
        dismissed, which would only happen after the click event had been propagated. All we need to do is to ensure that none of the controls within the controls
        bar get activated as a result of clicking over them when the tracks panel is visible, so we instead set "pointer-events" to "none" on all children of a
        controls bar rather than the controls bar itself, which can thus still hit test.

        * Modules/modern-media-controls/controls/media-controls.css:
        (.media-controls.shows-tracks-panel > .controls-bar > *,):
        (.media-controls.shows-tracks-panel > .controls-bar,): Deleted.

2018-02-06  Chris Dumez  <cdumez@apple.com>

        Service workers registrations are saved to disk before the install / activation succeeds
        https://bugs.webkit.org/show_bug.cgi?id=182535
        <rdar://problem/36591485>

        Reviewed by Youenn Fablet.

        Service workers registrations are saved to disk before the install / activation succeeds.
        This means if the browser exits before the install / activation succeeds, we may restore
        from disk a registration with an “active” worker which may have never been installed /
        activated.

        To address the issue, we now delay saving the registration to disk until after the service
        worker has been activated.

        No new tests, restoration from disk is covered by API tests that still pass.

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

2018-02-06  Ms2ger  <Ms2ger@igalia.com>

        Initialize ImageBitmap::m_bitmapData in the constructor.
        https://bugs.webkit.org/show_bug.cgi?id=182487

        Reviewed by Sam Weinig.

        This removes the span of time where an ImageBitmap object would exist
        with a null m_bitmapData during its construction.

        No new tests: no behavior changes.

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::create): update signature
        (WebCore::ImageBitmap::createPromise): update callers
        (WebCore::ImageBitmap::ImageBitmap): update signature
        * html/ImageBitmap.h: update signatures

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

        Release assertion in inlineVideoFrame
        https://bugs.webkit.org/show_bug.cgi?id=182513
        <rdar://problem/37159363>

        Reviewed by Zalan Bujtas.

        The bug was caused by the fact it's not always safe to invoke updateLayout even when isSafeToUpdateStyleOrLayout
        on a document of a flattened frame on iOS. isSafeToUpdateStyleOrLayout returns true when the frame view is in
        the frame-flattening mode to avoid hitting a release asssertion in updateLayout of the frame. However, it's still
        not safe to invoke updateLayout on a parent frame in this case.

        As a result, inlineVideoFrame (in Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm) invokes updateLayout
        even when the top-level document is not safe to update when the video element is in a frame-flattened document.

        Fixed this bug by explicitly checking that we still have a live render tree and document hasn't been stopped.
        Also replaced other uses of isSafeToUpdateStyleOrLayout by more explicit checks.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore): Made the early exit condition added in r227006 more explicit.
        Namely, InspectorDOMAgent::pseudoElementCreated is invoked during style recalc.
        * dom/Document.cpp:
        (WebCore::isSafeToUpdateStyleOrLayout): Made this local to the file.
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayout):
        * dom/Document.h:
        * html/MediaElementSession.cpp:
        (WebCore::isMainContentForPurposesOfAutoplay): Made the early exit condition added in r227529 more explicit. Don't
        update the layout when the render tree had been destroyed or the active DOM objects had been stopped.

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

        Crash in imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-origin.sub.html
        https://bugs.webkit.org/show_bug.cgi?id=182422
        <rdar://problem/37182665>

        Reviewed by Alex Christensen.

        Covered by test no longer crashing in Debug mode.
        Make sure completionHandler is called on the main thread.

        * platform/network/cocoa/WebCoreNSURLSession.mm:
        (-[WebCoreNSURLSessionDataTask resource:receivedRedirect:request:completionHandler:]):

2018-02-05  Filip Pizlo  <fpizlo@apple.com>

        Global objects should be able to use TLCs to allocate from different blocks from each other
        https://bugs.webkit.org/show_bug.cgi?id=182227

        Reviewed by Daniel Bates and Chris Dumez.

        No new tests because no change in behavior.
        
        Adopt JSC TLC API to put distance between objects from different security origins. WebCore has
        a subclass of ThreadLocalCache that supports hash-consing based on the relevant origin data
        using the existing SecurityOriginHash. It's Document's job to initiate this, but all of the
        logic is in WebCore::OriginThreadLocalCache.
        
        Workers don't opt into this. They just get the VM's default TLC all the time.

        * ForwardingHeaders/heap/ThreadLocalCache.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::JSDOMGlobalObject):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
        (WebCore::Document::threadLocalCache):
        * dom/Document.h:
        * page/OriginThreadLocalCache.cpp: Added.
        (WebCore::threadLocalCacheMap):
        (WebCore::OriginThreadLocalCache::create):
        (WebCore::OriginThreadLocalCache::~OriginThreadLocalCache):
        (WebCore::OriginThreadLocalCache::OriginThreadLocalCache):
        * page/OriginThreadLocalCache.h: Added.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::passesFileCheck const):
        (WebCore::SecurityOrigin::setEnforcesFilePathSeparation):
        (WebCore::SecurityOrigin::toString const):
        (WebCore::SecurityOrigin::enforceFilePathSeparation): Deleted.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::enforcesFilePathSeparation const):

2018-02-05  Per Arne Vollan  <pvollan@apple.com>

        [Win] Release assert failed under NetworkStateNotifier::singleton.
        https://bugs.webkit.org/show_bug.cgi?id=182516

        Reviewed by Brent Fulgham.

        The callback NetworkStateNotifier::addressChangeCallback will always be called on a
        worker thread on Windows. Since the method NetworkStateNotifier::singleton() is
        called by NetworkStateNotifier::addressChangeCallback, but has to be called on the
        on the main thread, the call has to be moved there.

        No new tests. I have not been able to reproduce the crash.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::addressChangeCallback):

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

        Abstract heap generator should include JavaScriptCore headers directly
        https://bugs.webkit.org/show_bug.cgi?id=182501

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * domjit/generate-abstract-heap.rb:

2018-02-05  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Extra zoom mode] Implement number pad UI when editing `tel` and `number` inputs
        https://bugs.webkit.org/show_bug.cgi?id=182472
        <rdar://problem/35143057>

        Reviewed by Tim Horton.

        Adds a localized string for the "Done" button text in extra zoomed form controls.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::formControlDoneButtonTitle):
        * platform/LocalizedStrings.h:

2018-02-05  John Wilander  <wilander@apple.com>

        Build fix for r228115, simple naming issue succeeded —> success.
        https://bugs.webkit.org/show_bug.cgi?id=182507
        <rdar://problem/37248566>

        Reviewed by Eric Carlson.

        No new tests. Build fix.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::enterFullscreenHandler):
            succeeded —> success

2018-02-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228086.

        This introduced a failure with API test
        URLTest.HostIsIPAddress.

        Reverted changeset:

        "Add a way to check if a host is an IP address"
        https://bugs.webkit.org/show_bug.cgi?id=182427
        https://trac.webkit.org/changeset/228086

2018-02-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r228103.

        This caused multiple tests to crash.

        Reverted changeset:

        "Use downcast in createLinkPreloadResourceClient"
        https://bugs.webkit.org/show_bug.cgi?id=182488
        https://trac.webkit.org/changeset/228103

2018-02-05  Eric Carlson  <eric.carlson@apple.com>

        [iOS] VideoFullscreenInterfaceAVKit should not ignore errors
        https://bugs.webkit.org/show_bug.cgi?id=182497
        <rdar://problem/36986898>

        Reviewed by Jer Noble.
        
        Always call layoutIfNeeded before calling -[AVPlayerViewController enterFullScreenAnimated:completionHandler]
        or -[AVPlayerViewController exitFullScreenAnimated:completionHandler] because they both fail
        if the view needs layout. Also don't ignore errors returned by those calls.

        No new tests, the failure is non deterministic and I was not able to reproduce in a test.

        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
        (VideoFullscreenInterfaceAVKit::applicationDidBecomeActive):
        (VideoFullscreenInterfaceAVKit::enterFullscreenStandard):
        (VideoFullscreenInterfaceAVKit::exitFullscreen):
        (VideoFullscreenInterfaceAVKit::cleanupFullscreen):
        (VideoFullscreenInterfaceAVKit::didStartPictureInPicture):
        (VideoFullscreenInterfaceAVKit::prepareForPictureInPictureStopWithCompletionHandler):
        (VideoFullscreenInterfaceAVKit::doEnterFullscreen):
        (VideoFullscreenInterfaceAVKit::exitFullscreenHandler):
        (VideoFullscreenInterfaceAVKit::enterFullscreenHandler):

2018-02-05  Daniel Bates  <dabates@apple.com>

        REGRESSION (r222795): Nike app "Refused to set unsafe header" when adding and viewing cart
        https://bugs.webkit.org/show_bug.cgi?id=182491
        <rdar://problem/36533447>

        Reviewed by Brent Fulgham.

        Exempt Nike from the XHR header restrictions in r222795.

        Following r222795 only Dashboard widgets are allowed to set arbitrary XHR headers.
        However Nike also depends on such functionality.

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

2018-02-02  Brent Fulgham  <bfulgham@apple.com>

        Improve NetworkResourceLoader logging so it can be used for 'setCookiesFromDOM'
        https://bugs.webkit.org/show_bug.cgi?id=182455
        <rdar://problem/36626601>

        Reviewed by Chris Dumez.

        After this refactoring, a convenience method I added in r227860 is no longer needed.
        This patch removes this dead code.

        * platform/network/NetworkStorageSession.h: Export 'cookieStoragePartition' so it can
        be used in WebKit.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp: 
        (WebCore::NetworkStorageSession::hasStorageAccessForFrame): Deleted unused method.

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

        Make ASSERT_WITH_SECURITY_IMPLICATION in CachedResourceClientWalker::next a release assert
        https://bugs.webkit.org/show_bug.cgi?id=182492

        Reviewed by Youenn Fablet.

        * loader/cache/CachedResourceClientWalker.h:
        (WebCore::CachedResourceClientWalker::next):

2018-02-05  John Wilander  <wilander@apple.com>

        Storage Access API: Add testRunner.getAllStorageAccessEntries() to make testing easier and more explicit
        https://bugs.webkit.org/show_bug.cgi?id=181601
        <rdar://problem/36475837>

        Reviewed by Alex Christensen.

        No new tests. Existing test updated.

        http/tests/storageAccess/request-and-grant-access-then-detach-should-not-have-access.html
        was found to be flaky. With the testRunner.hasStorageAccessEntry() getter
        it's possible to check access even if a frame doesn't respond timely to
        postMessage after detach and attach.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::getAllStorageAccessEntries const):

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

        Use downcast in createLinkPreloadResourceClient
        https://bugs.webkit.org/show_bug.cgi?id=182488

        Reviewed by Antti Koivisto.

        No observable change of behavior.

        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):

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

        Layout Test imported/w3c/web-platform-tests/service-workers/service-worker/register-same-scope-different-script-url.https.html is flaky
        https://bugs.webkit.org/show_bug.cgi?id=181166
        <rdar://problem/37169508>

        Reviewed by Youenn Fablet.

        I found out that this test was flakily timing out because our jobQueues would sometimes get stuck
        when their current job's connection or service worker (when scheduled by a service worker) would
        go away before the job is complete.

        This patch makes our job queues operation more robust by:
        1. Cancelling all jobs from a given connection when a SWServerConnection goes away
        2. Cancelling all jobs from a given service worker when a service worker gets terminated

        We also make sure service workers created by a job get properly terminated when a job
        is canceled to avoid leaving service workers in limbo.

        No new tests, unskipped existing flaky test.

        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        * workers/service/ServiceWorkerJobData.cpp:
        (WebCore::ServiceWorkerJobData::ServiceWorkerJobData):
        (WebCore::ServiceWorkerJobData::isolatedCopy const):
        * workers/service/ServiceWorkerJobData.h:
        (WebCore::ServiceWorkerJobData::encode const):
        (WebCore::ServiceWorkerJobData::decode):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::startScriptFetch):
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::scriptContextStarted):
        (WebCore::SWServer::terminatePreinstallationWorker):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::workerContextTerminated):
        (WebCore::SWServer::unregisterConnection):
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::removeAllJobsMatching):
        (WebCore::SWServerJobQueue::cancelJobsFromConnection):
        (WebCore::SWServerJobQueue::cancelJobsFromServiceWorker):
        * workers/service/server/SWServerJobQueue.h:
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::setPreInstallationWorker):

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

        Crash on sfgate.com because mismatching link preload types
        https://bugs.webkit.org/show_bug.cgi?id=182483
        <rdar://problem/37065331>

        Reviewed by Daniel Bates.

        Preloading the same URL with different 'as' types causes some confusion.

        Test: http/tests/preload/link-preload-type-mismatch.html

        * loader/LinkLoader.cpp:
        (WebCore::createLinkPreloadResourceClient):

            Ensure we use the actual resource type when creating the client.

        (WebCore::LinkLoader::preloadIfNeeded):

            Don't construct client if the types don't match. This can happen if there is an existing
            preload for the same resource with different type.

2018-02-05  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Rename gutter properties to remove "grid-" prefix
        https://bugs.webkit.org/show_bug.cgi?id=180290

        Reviewed by Javier Fernandez.

        This patch applies the resoultion of the CSS WG to unprefix
        the CSS Grid Layout gutter properties:
        https://github.com/w3c/csswg-drafts/issues/1696

        column-gap already existed before, as it's part of Multicol.
        The patch adds the new properties row-gap and gap, and keep the legacy ones
        as aliases:
        - grid-column-gap => column-gap
        - grid-row-gap => row-gap
        - grid-gap => gap

        As column-gap was already animatable, this change takes advantage
        to make animatable row-gap too.

        Tests: imported/w3c/web-platform-tests/css/css-align/gaps/

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/StyleProperties.cpp:
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::isSimpleLengthPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::CSSPropertyParser::parseShorthand):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::availableSpaceForGutters const):
        (WebCore::RenderGrid::gridGap const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::gridAutoRows const):
        (WebCore::RenderStyle::columnGap const):
        (WebCore::RenderStyle::rowGap const):
        (WebCore::RenderStyle::setGridItemRowEnd):
        (WebCore::RenderStyle::setColumnGap):
        (WebCore::RenderStyle::setRowGap):
        (WebCore::RenderStyle::initialRowGap):
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData):
        * rendering/style/StyleGridData.h:
        (WebCore::StyleGridData::operator== const):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator== const):
        * rendering/style/StyleMultiColData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:

2018-02-05  Ms2ger  <Ms2ger@igalia.com>

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

        Reviewed by Žan Doberšek.

        The implementation is inspired by CanvasRenderingContext2DBase::drawImage().

        Tests:

        - web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html
        - web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html


        * html/ImageBitmap.cpp:
        (WebCore::taintsOrigin): Add function to help with the implementation.
        (WebCore::ImageBitmap::createPromise): Fill in implementation.

2018-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, rolling out r228085.

        Pixel data stride is imposed by OpenGL and shouldn't be
        adjusted for Cairo

        Reverted changeset:

        "[Cairo] Correctly calculate stride in
        GraphicsContext3D::paintToCanvas()"
        https://bugs.webkit.org/show_bug.cgi?id=182466
        https://trac.webkit.org/changeset/228085

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] WebSockets must use system proxy settings
        https://bugs.webkit.org/show_bug.cgi?id=126384

        Reviewed by Michael Catanzaro.

        Use soup_session_connect_async() when available to create the WebSockets connection instead of GSocketClient
        directly.

        * platform/network/soup/SocketStreamHandleImpl.h:
        * platform/network/soup/SocketStreamHandleImplSoup.cpp:
        (WebCore::wssSocketClientEventCallback):
        (WebCore::SocketStreamHandleImpl::create):
        (WebCore::SocketStreamHandleImpl::connected):
        (WebCore::SocketStreamHandleImpl::connectedCallback):
        (WebCore::SocketStreamHandleImpl::platformClose):

2018-02-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Add a way to check if a host is an IP address
        https://bugs.webkit.org/show_bug.cgi?id=182427

        Reviewed by Alex Christensen.

        There are several places where this is needed. We currently just assume that any host ending in a digit is an IP
        address, except in PublicSuffix where platform specific code is used. This patch adds URL::hostIsIPAddress()
        platform specific implementations, falling back to current assumption if there isn't an implementation for the
        platform.

        * page/OriginAccessEntry.cpp:
        (WebCore::OriginAccessEntry::OriginAccessEntry): Use URL::hostIsIPAddress().
        * platform/URL.cpp:
        (WebCore::URL::hostIsIPAddress): Fallback implementation.
        * platform/URL.h:
        * platform/mac/PublicSuffixMac.mm:
        (WebCore::topPrivatelyControlledDomain): Use URL::hostIsIPAddress().
        * platform/mac/URLMac.mm:
        (WebCore::URL::hostIsIPAddress): Move implementation from PublicSuffixMac.mm.
        * platform/network/curl/CookieUtil.cpp:
        (WebCore::CookieUtil::isIPAddress): Use URL::hostIsIPAddress().
        * platform/soup/URLSoup.cpp:
        (WebCore::URL::hostIsIPAddress): Use g_hostname_is_ip_address().

2018-02-04  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Correctly calculate stride in GraphicsContext3D::paintToCanvas()
        https://bugs.webkit.org/show_bug.cgi?id=182466

        Reviewed by Michael Catanzaro.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        Use cairo_format_stride_for_width() to obtain stride that Cairo thinks
        is appropriate for the given width, taking into account internal
        alignment requirements.

2018-02-04  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Split TexMap functionality out of GraphicsContext3DCairo
        https://bugs.webkit.org/show_bug.cgi?id=182465

        Reviewed by Michael Catanzaro.

        Take the Non-Cairo GraphicsContext3D functionality that's stashed in
        GraphicsContext3DCairo and move it into the GraphicsContext3DTextureMapper
        file.

        In GraphicsContext3DCairo.cpp, only the Cairo-specific GraphicsContext3D
        functionality remains, specifically ImageExtractor and paintToCanvas().

        Everything else is moved into GraphicsContext3DTextureMapper.cpp. This
        filename and its location under platform/graphics/texmap/ was chosen
        since all the ports using this file (GTK, WPE, WinCairo) are also using
        the TextureMapper module. Various #if-guards are simplified in the
        moved-over code to reflect this.

        GraphicsContext3DCairo.cpp now better reflects GraphicsContext3DCG.cpp,
        with both implementing functionality specific to a 2D painting library,
        whereas GraphicsContext3DTextureMapper.cpp reflects
        GraphicsContext3DCocoa.cpp in covering functionality needed to integrate
        the GraphicsContext3D output into the platform-specific composition
        system.

        No new tests -- no change in behavior.

        * platform/TextureMapper.cmake:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::activeContexts): Deleted.
        (WebCore::GraphicsContext3D::create): Deleted.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Deleted.
        (WebCore::GraphicsContext3D::~GraphicsContext3D): Deleted.
        (WebCore::GraphicsContext3D::setContextLostCallback): Deleted.
        (WebCore::GraphicsContext3D::setErrorMessageCallback): Deleted.
        (WebCore::GraphicsContext3D::makeContextCurrent): Deleted.
        (WebCore::GraphicsContext3D::checkGPUStatus): Deleted.
        (WebCore::GraphicsContext3D::platformGraphicsContext3D): Deleted.
        (WebCore::GraphicsContext3D::platformTexture const): Deleted.
        (WebCore::GraphicsContext3D::isGLES2Compliant const): Deleted.
        (WebCore::GraphicsContext3D::platformLayer const): Deleted.
        (WebCore::GraphicsContext3D::getExtensions): Deleted.
        * platform/graphics/texmap/GraphicsContext3DTextureMapper.cpp: Copied from Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp.
        (WebCore::activeContexts):
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::checkGPUStatus):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture const):
        (WebCore::GraphicsContext3D::isGLES2Compliant const):
        (WebCore::GraphicsContext3D::platformLayer const):
        (WebCore::GraphicsContext3D::getExtensions):

2018-02-04  Zan Dobersek  <zdobersek@igalia.com>

        Simplify GraphicsContext3D::paintToCanvas()
        https://bugs.webkit.org/show_bug.cgi?id=182459

        Reviewed by Michael Catanzaro.

        Cairo-specific paintToCanvas() method is dropped in favor of the more
        common one that operates on a GraphicsContext object. The platform
        context object is then retrieved inside the Cairo-speficic
        paintToCanvas() implementation, and not at the call site in
        GraphicsContext3D::paintRenderingResultsToCanvas().

        GraphicsContext3D::paintToCanvas() is also modified so that the image
        and canvas sizes are passed through IntSize objects, and not through
        a width-and-height pair of integer values.

        No new tests -- no change in behavior.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):

2018-02-03  Alexey Proskuryakov  <ap@apple.com>

        Tweak availability macros for CAN_DISALLOW_USER_INSTALLED_FONTS

        Rubber-stamped by Maciej Stachowiak.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:

2018-02-02  Daniel Bates  <dabates@apple.com>

        Clean up FrameLoader::receivedFirstData()
        https://bugs.webkit.org/show_bug.cgi?id=182361

        Reviewed by Andy Estes.

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

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

        Test fix after r227995
        https://bugs.webkit.org/show_bug.cgi?id=180951

        Unreviewed.

        Webfonts shouldn't be run through CTFontDescriptorCreateMatchingFontDescriptor().
        Also, unify macOS's and iOS's implementation of FontCache::lastResortFallbackFont().

        Covered by existing tests.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::addAttributesForInstalledFonts):
        (WebCore::addAttributesForWebFonts):
        (WebCore::installedFontMandatoryAttributes):
        (WebCore::FontCache::lastResortFallbackFont):
        (WebCore::addAttributesForUserInstalledFonts): Deleted.
        (WebCore::mandatoryAttributesForUserInstalledFonts): Deleted.
        * platform/graphics/cocoa/FontCacheCoreText.h:
        * platform/graphics/ios/FontCacheIOS.mm:
        (WebCore::FontCache::lastResortFallbackFont): Deleted.
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::lastResortFallbackFont): Deleted.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2018-02-02  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        Fix build error after r 227457 with VIDEO and WEB_AUDIO disabled
        https://bugs.webkit.org/show_bug.cgi?id=182395

        Reviewed by Eric Carlson

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

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

        Remove WebCore/ForwardingHeaders directory
        https://bugs.webkit.org/show_bug.cgi?id=182347

        Reviewed by Alex Christensen.

        Baseline tests updated.

        * bindings/scripts/CodeGeneratorJS.pm:
        (AddToIncludesForIDLType):
        (GenerateEnumerationImplementationContent):
        (GenerateDictionaryImplementationContent):
        (GenerateHeader):
        (GenerateOverloadDispatcher):
        (addUnscopableProperties):
        (GenerateImplementation):
        (GenerateOperationDefinition):
        (GenerateSerializerDefinition):
        (GenerateConstructorHelperMethods):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        * bindings/scripts/test/JS/JSMapLike.cpp:
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionRethrow.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithThisObject.cpp:
        * bindings/scripts/test/JS/JSTestCallbackFunctionWithTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestDOMJIT.h:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        * bindings/scripts/test/JS/JSTestPluginInterface.h:
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        * bindings/scripts/test/JS/JSTestStandaloneEnumeration.cpp:
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * dom/make_event_factory.pl:
        (generateImplementation):

2018-02-02  David Quesada  <david_quesada@apple.com>

        WebAppManifest scope should default to the containing directory of start_url if 'scope' is not specified
        https://bugs.webkit.org/show_bug.cgi?id=182363
        rdar://problem/37093498

        Reviewed by Ryosuke Niwa.

        If an app manifest doesn't specify a scope, we should default to the "parent directory" of
        the start URL, rather than leaving the app unbounded. This is more reasonable than using the
        entire internet as the app scope.

        No new tests, updates to the existing tests verify the new behavior.

        * Modules/applicationmanifest/ApplicationManifestParser.cpp:
        (WebCore::ApplicationManifestParser::parseScope):

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Clearing all service worker registrations should wait for importing service worker registration to finish
        https://bugs.webkit.org/show_bug.cgi?id=182407
        <rdar://problem/37167523>

        Reviewed by Chris Dumez.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clear): ensure completion handler is called on early exit case.

2018-02-02  Youenn Fablet  <youenn@apple.com>

        Clearing all service worker registrations should wait for importing service worker registration to finish
        https://bugs.webkit.org/show_bug.cgi?id=182407

        Reviewed by Chris Dumez.

        Covered by existing tests and the service worker API test being no longer flaky.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::registrationStoreImportComplete):
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::getOriginsWithRegistrations):
        * workers/service/server/SWServer.h:

2018-02-02  Chris Dumez  <cdumez@apple.com>

        Clearing a registration should null out its workers before setting their state to "redundant"
        https://bugs.webkit.org/show_bug.cgi?id=182418
        <rdar://problem/37142874>

        Reviewed by Youenn Fablet.

        Clearing a registration should null out its workers before setting their state to "redundant".
        This seems to match Firefox and Chrome.

        No new tests, rebaselined existing test.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::clear):
        (WebCore::clearRegistrationWorker): Deleted.

2018-02-02  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn media/modern-media-controls/tracks-panel and media/modern-media-controls/tracks-support back on
        https://bugs.webkit.org/show_bug.cgi?id=182426

        Reviewed by Dean Jackson.

        Ensure that the tracks panel isn't dismissed by updating the layout.

        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):

2018-02-02  Commit Queue  <commit-queue@webkit.org>

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

        It broke several unit tests (Requested by KaL on #webkit).

        Reverted changeset:

        "[SOUP] Ensure domain is valid when converting a WebCore
        Cookie to Soup"
        https://bugs.webkit.org/show_bug.cgi?id=182328
        https://trac.webkit.org/changeset/227964

2018-02-01  Chris Dumez  <cdumez@apple.com>

        When SW install fails, null out registration.installing before setting worker state to "redundant"
        https://bugs.webkit.org/show_bug.cgi?id=182416
        <rdar://problem/37141997>

        Reviewed by Youenn Fablet.

        When SW install fails, null out registration.installing before setting worker state to "redundant".
        This does not match the spec but this is what Firefox and Chrome do. This is also what the
        web-platform-tests expect.

        Test: http/tests/workers/service/install-fails.html

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

2018-02-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Test fix after r227848.
        https://bugs.webkit.org/show_bug.cgi?id=180951

        Unreviewed.

        Using kCTFontNameAttribute on an in-memory font causes CTFontDescriptorCreateMatchingFontDescriptor()
        to return nullptr. Luckily, we weren't using that attribute anyway.

        Covered by existing tests.

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

2018-02-01  Youenn Fablet  <youenn@apple.com>

        Delay service worker process creation until actually needed by SWServer
        https://bugs.webkit.org/show_bug.cgi?id=182301

        Reviewed by Chris Dumez.

        Rename SWServer::Connection::scheduleJobInServer to scheduleJob.
        Add sessionID getter from an SWServer.

        * workers/service/server/SWServer.h:
        (WebCore::SWServer::sessionID const):

2018-02-01  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r227594) [WinCairo] NULL pointer crash in GraphicsContext::getWindowsContext
        https://bugs.webkit.org/show_bug.cgi?id=182282

        Reviewed by Žan Doberšek.

        ImageBufferCairo has been changed to use GraphicsContextImplCairo
        in r227594. But, GraphicsContext::getWindowsContext doesn't care
        the case of using GraphicsContextImpl and crashes due to null
        dereference of GraphicsContext::m_data.

        GraphicsContext::getWindowsContext should create a HDC in that case.

        Remove the argument mayCreateBitmap because it is always
        true at the moment.

        No new tests (Covered by the existing tests)

        * platform/graphics/GraphicsContext.h:
        Removed a argument mayCreateBitmap of getWindowsContext and releaseWindowsContext.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext): Ditto.
        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext): Ditto.
        * platform/graphics/win/GraphicsContextDirect2D.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext): Ditto.
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        Create a HDC if m_impl is null. Removed a argument mayCreateBitmap.
        * platform/graphics/win/LocalWindowsContext.h:
        (WebCore::LocalWindowsContext::LocalWindowsContext):
        Removed m_mayCreateBitmap.
        (WebCore::LocalWindowsContext::~LocalWindowsContext): Ditto.

2018-02-01  Christopher Reid  <chris.reid@sony.com>

        [Curl] Use SQLite database in cookie jar implementation for Curl port
        https://bugs.webkit.org/show_bug.cgi?id=174942

        Reviewed by Alex Christensen.

        No new tests, Set-Cookie is already tested in Layout tests.

        Adding an initial SQLite CookieJar implementation to the curl network layer.
        WebCore will now parse and handle both HTTP and DOM cookies instead of using libcurl.
        This currently supports cookie storage and retrieval.
        Cookie deletion is not yet implemented.

        * platform/Curl.cmake:
        * platform/network/NetworkStorageSession.h: Added cookieDB storage in curl.
        * platform/network/curl/CookieJarCurl.cpp: Removed the old curl cookie handling.
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CookieJarCurlDatabase.cpp: Added.
        * platform/network/curl/CookieJarCurlDatabase.h: Added.
        * platform/network/curl/CookieJarDB.cpp: Added.
        * platform/network/curl/CookieJarDB.h: Added.
        * platform/network/curl/CookieUtil.cpp: Added.
        * platform/network/curl/CookieUtil.h: Added.
        * platform/network/curl/CurlContext.cpp: Removed the old curl cookie handling.
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp: Added handlers for HTTP response cookies.
        * platform/network/curl/NetworkStorageSessionCurl.cpp:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:

2018-02-01  Chris Dumez  <cdumez@apple.com>

        Add missing RETURN_IF_EXCEPTION() after object->get() calls in convertDictionary<>()
        https://bugs.webkit.org/show_bug.cgi?id=182392
        <rdar://problem/37119215>

        Reviewed by Geoffrey Garen.

        Add missing RETURN_IF_EXCEPTION() after object->get() calls in convertDictionary<>(),
        given that getting the property from the object can throw an exception.

        No new tests, rebaselined existing test.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateDictionaryImplementationContent):
        * bindings/scripts/test/JS/JSTestCallbackInterface.cpp:
        (WebCore::convertDictionary<TestCallbackInterface::Dictionary>):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::convertDictionary<TestEventConstructor::Init>):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::convertDictionary<TestObj::Dictionary>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>):
        (WebCore::convertDictionary<TestObj::DictionaryThatShouldTolerateNull>):
        (WebCore::convertDictionary<AlternateDictionaryName>):
        (WebCore::convertDictionary<TestObj::ParentDictionary>):
        (WebCore::convertDictionary<TestObj::ChildDictionary>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryA>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryB>):
        (WebCore::convertDictionary<TestObj::ConditionalDictionaryC>):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::convertDictionary<TestPromiseRejectionEvent::Init>):
        * bindings/scripts/test/JS/JSTestStandaloneDictionary.cpp:
        (WebCore::convertDictionary<DictionaryImplName>):

2018-02-01  Ryosuke Niwa  <rniwa@webkit.org>

        Some test cases in accessibility/mac/selection-notification-focus-change.html fail
        https://bugs.webkit.org/show_bug.cgi?id=182212
        <rdar://problem/36937147>

        Reviewed by Antti Koivisto and Wenson Hsieh.

        The failure was caused by the async update of the selection appearance not preserving selection reveal intent.
        Fixed the bug by storing the intent in a member variable and using it later.

        * dom/Element.cpp:
        (WebCore::Element::focus): Removed an unnecessary synchronous layout update.
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNeedsSelectionUpdate): Use the default intent to preserve the old behavior.
        (WebCore::FrameSelection::respondToNodeModification): Ditto.
        (WebCore::FrameSelection::setSelection): Save the selection reveal intent.
        (WebCore::FrameSelection::updateAppearanceAfterLayoutOrStyleChange): Use the saved intent.
        * editing/FrameSelection.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally): Always update the layout before invoking
        nodeRectInAbsoluteCoordinates.

2018-02-01  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderRubyRun::rubyBaseSafe to RenderTreeBuilder::Ruby
        https://bugs.webkit.org/show_bug.cgi?id=182306
        <rdar://problem/37041440>

        Reviewed by Darin Adler.

        Addressing post-review comment.

        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::insertChild):
        (WebCore::RenderTreeBuilder::Ruby::rubyBaseSafe):
        * rendering/updating/RenderTreeBuilderRuby.h:

2018-02-01  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Introduce RenderTreeBuilder to takeChild()
        https://bugs.webkit.org/show_bug.cgi?id=182373
        <rdar://problem/37101484>

        Reviewed by Antti Koivisto.
        
        This is in preparation for moving mutation code out of takeChild. 

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::takeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::takeChild):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::takeChild):
        * rendering/RenderButton.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::takeChild):
        (WebCore::RenderElement::removeAndDestroyChild):
        (WebCore::RenderElement::destroyLeftoverChildren):
        * rendering/RenderElement.h:
        * rendering/RenderFullScreen.cpp:
        (WebCore::RenderFullScreen::wrapExistingRenderer):
        (WebCore::RenderFullScreen::unwrapRenderer):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::takeChild):
        * rendering/RenderGrid.h:
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::takeChild):
        * rendering/RenderMenuList.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroy):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::takeChild):
        (WebCore::RenderRubyAsBlock::takeChild):
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):
        * rendering/RenderRubyRun.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::collapseAndDestroyAnonymousSiblingRows): Deleted.
        * rendering/RenderTableRow.h:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::takeChild):
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::takeChild):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::takeChild):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::takeChild):
        * rendering/svg/RenderSVGText.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::collapseAndDestroyAnonymousSiblingRows):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::updateStyle):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):
        * rendering/updating/RenderTreeBuilderList.cpp:
        (WebCore::RenderTreeBuilder::List::updateItemMarker):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::insertChild):

2018-02-01  Dean Jackson  <dino@apple.com>

        REGRESSION (r219342): Scaled HTML widget is not responding to a clicks outside the body
        https://bugs.webkit.org/show_bug.cgi?id=182394
        <rdar://problem/34840816>

        Reviewed by Simon Fraser.

        If a scale < 1 is applied to the page, then the visual viewport will be bigger
        than the layout viewport. Our hit testing code would then ignore any hits
        that were outside the layout viewport.

        The fix is to only apply a hit testing clip if the page is scaling up, not down.

        Update the existing fast/dom/elementFromPoint-scaled-scrolled.html test.

        * page/FrameView.cpp:
        (WebCore::FrameView::layoutViewportToAbsoluteRect const): Deleted. This helper is
        no longer used, and it would have probably been more confusing to have it accept
        a flag to ignore the scale if it is less than 1.
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTest): No need to take the layout rect, remove the origin,
        and pass it to a helper that added the origin back. The only thing the helper was
        doing for us was applying a scale factor, which we only want to do if it was
        scaling up.

2018-02-01  Yusuke Suzuki  <utatane.tea@gmail.com>

        Structured cloning a Symbol should throw
        https://bugs.webkit.org/show_bug.cgi?id=182380

        Reviewed by Darin Adler.

        Test: js/dom/post-message-symbol.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        Structured cloning should throw "DataCloneError" DOMException if it finds Symbol.
        Remove unused `isNumber()` case. It is done in dumpImmediate.
        (WebCore::CloneSerializer::serializeUndefined): Deleted.
        (WebCore::CloneSerializer::serializeBoolean): Deleted.
        (WebCore::CloneSerializer::serializeNumber): Deleted.
        Remove unused functions.

2018-02-01  Chris Dumez  <cdumez@apple.com>

        We no longer need to queue service worker jobs until the connection to the service worker process has been established
        https://bugs.webkit.org/show_bug.cgi?id=182375

        Reviewed by Youenn Fablet.

        We no longer need to queue service worker jobs until the connection to the service worker process
        has been established. We initially did this to work around the fact that registrations restored
        from disk would not have an active worker until the service worker process had been established. 
        However, this issue has been fixed in r227696.

        This is basically a revert of r227220, which is no longer needed after r227696.

        No new tests, initial fix was covered by an API test that still passes.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::clearAll):
        (WebCore::SWServer::clear):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::serverToContextConnectionCreated):
        * workers/service/server/SWServer.h:

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Shift + mouse scroll should scroll horizontally
        https://bugs.webkit.org/show_bug.cgi?id=181629

        Reviewed by Michael Catanzaro.

        We currently turn vertical scroll into horizontal when scrolling over the horizontal scrollbar. When Shift key is
        pressed, we still want to scroll in the scrollbar direction when scrolling over a scrollbar, so we need to swap
        directions in both scrollbars depending on whther the Shift key is pressed or not.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::shouldSwapScrollDirection const): Renamed.
        (WebCore::EventHandler::handleWheelEvent): Use the new name.
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal const): Deleted.
        * page/EventHandler.h:
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copySwappingDirection const): Swap the direction of the event.
        (WebCore::PlatformWheelEvent::copyTurningVerticalTicksIntoHorizontalTicks const): Deleted.
        * platform/glib/EventHandlerGLib.cpp:
        (WebCore::EventHandler::shouldSwapScrollDirection const): Take into account whether the Shift key is present.
        (WebCore::EventHandler::shouldTurnVerticalTicksIntoHorizontal const): Deleted.

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Problem with Washington Post images
        https://bugs.webkit.org/show_bug.cgi?id=181421

        Reviewed by Carlos Alberto Lopez Perez.

        This is because Washington Post is using the user agent to decide the image formats it serves. In the case of
        chromium the images are served as webp, for firefox jpeg is used and in our case it's assuming we are safari and
        it's providing jp2 images that we don't support. Add a user agent quirk to pretend to be chromium for
        washingtonpost.com.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresChromeBrowser):

2018-02-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Ensure domain is valid when converting a WebCore Cookie to Soup
        https://bugs.webkit.org/show_bug.cgi?id=182328

        Reviewed by Michael Catanzaro.

        soup_cookie_parse() adds the initial '.' to the domain if missing before creating the SoupCookie, but
        soup_cookie_new() allows for domain to be a hostname that needs to match exactly. When converting a WebCore
        Cookie into a SoupCookie we always want the domain to be considered as such and not as a hostname, so we need to
        prepend the '.' if missing.

        Fixes: imported/w3c/webdriver/tests/cookies/add_cookie.py::test_add_domain_cookie

        * platform/network/soup/CookieSoup.cpp:
        (WebCore::Cookie::toSoupCookie const):

2018-02-01  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTableRow::collapseAndDestroyAnonymousSiblingRows to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182374
        <rdar://problem/37102005>

        Reviewed by Antti Koivisto.

        It's only called from RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::collapseAndDestroyAnonymousSiblingRows): Deleted.
        * rendering/RenderTableRow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
        * rendering/updating/RenderTreeBuilderTable.h:

2018-02-01  Chris Dumez  <cdumez@apple.com>

        Queue a microtask when a waitUntil() promise is settled
        https://bugs.webkit.org/show_bug.cgi?id=182372
        <rdar://problem/37101019>

        Reviewed by Mark Lam.

        Queue a microtask when a waitUntil() promise is settled, as per:
        - https://w3c.github.io/ServiceWorker/#dom-extendableevent-waituntil (step 5)

        Otherwise, we decrement m_pendingPromiseCount too quickly and it may cause
        following calls to waitUntil() to throw when they shouldn't.

        No new tests, rebaselined existing test.

        * workers/service/ExtendableEvent.cpp:
        (WebCore::ExtendableEvent::addExtendLifetimePromise):

2018-02-01  Antti Koivisto  <antti@apple.com>

        Invalidate style for sibling combinators accurately on class change
        https://bugs.webkit.org/show_bug.cgi?id=182336

        Reviewed by Zalan Bujtas.

        Use Style::Invalidator to invalidate only those elements that may be affected by a class
        change for sibling combinators and nth pseudo classes.

        * css/RuleFeature.cpp:

        Add new AllSiblings MatchElement to use for nth pseudo classes with subselectors.

        (WebCore::isSiblingOrSubject):

        Add a helper.

        (WebCore::RuleFeatureSet::computeNextMatchElement):
        (WebCore::RuleFeatureSet::computeSubSelectorMatchElement):

        Compute and propage MatchElement::AllSiblings.

        * css/RuleFeature.h:
        * dom/Node.cpp:
        (WebCore::Node::updateAncestorsForStyleRecalc):

        Don't need to test for childrenAffectedByPropertyBasedBackwardPositionalRules anymore (an oddly named bit for nth pseudo classes).

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

        Invalidate only the potentially affected elements.
        The old code would just unconditionally invalidate the current element. This would propagate to descedants of siblings via
        affectedByPreviousSibling bits. That mechanism can be removed when everything has been switched to accurate invalidation.

2018-01-31  Simon Fraser  <simon.fraser@apple.com>

        Use different debug red colors for different contexts
        https://bugs.webkit.org/show_bug.cgi?id=182362

        Reviewed by Tim Horton.

        Pure red is used elsehwere in the system as a debug color indicator, so use different
        shades of red for WebKit in the two places where we paint a reddish wash in debug builds,
        so they are identifiable.

        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):

2018-01-31  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Make JavaScriptCore headers copies
        https://bugs.webkit.org/show_bug.cgi?id=182303

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * CMakeLists.txt:
        * PlatformMac.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * PlatformWinCairo.cmake:

2018-01-31  Per Arne Vollan  <pvollan@apple.com>

        Layout Test fast/events/beforeunload-dom-manipulation-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=181204
        <rdar://problem/36256274>

        Reviewed by Ryosuke Niwa.

        When a frame element is moved in the DOM tree during the execution of a beforeunload handler,
        the frame will be detached when removed from its previous position in the DOM tree. When being
        detached, an attempt will also be made to stop the load by calling FrameLoader::stopAllLoaders().
        However, this method will return early when executed in a beforeunload handler, since navigation
        is not allowed then. The end result is a detached frame which will continue to load, and hitting
        asserts in DocumentLoader::dataReceived(), and DocumentLoader::notifyFinished(). It should be
        possible to stop a frame load, even when executing a beforeunload handler.

        No new tests. Covered by the existing test fast/events/beforeunload-dom-manipulation-crash.html.

        * history/PageCache.cpp:
        (WebCore::PageCache::addIfCacheable): Fix a failing API test by allowing scripts to be executed
        under the PageCache::prune method.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isStopLoadingAllowed const):
        (WebCore::FrameLoader::stopAllLoaders):
        * loader/FrameLoader.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::~SVGImage): Disable scripts disallowed assertions in this scope, since it is
        safe in this context.

2018-01-31  Javier Fernandez  <jfernandez@igalia.com>

        inline-block baseline not computed correctly for vertical-lr
        https://bugs.webkit.org/show_bug.cgi?id=170176

        Reviewed by Manuel Rego Casasnovas.

        When computing the baseline position of inline-block elements we use the
        InlineFlow logicalTop and the FontMetrics ascent. The issue comes from
        the fact that these units are incompatible. The logicalTop of a
        vertical-lr element is offset to the left edge, while the ascent is the
        distance from the right edge.

        We need to either use logical value for the FontMetrics ascent so we can
        compute the correctly the baselines of vertical-lr elements, or just using
        the logicalBottom for these cases.

        The approach based on a logicalAscent API for FontMetrics would require
        a lot of work because inline-block logic assumes everything is vertical-rl
        and at some point, flips the elements along the block-axis in case of
        vertical-lr mode.

        While it'd be desirable to get rid of this flipping logic, this patch tries
        first the simpler approach of using logicalBottom, which aligns with the
        currently implemented logic.

        Tests: fast/inline-block/baseline-vertical-01.html
               fast/inline-block/baseline-vertical-02.html
               fast/inline-block/baseline-vertical-03.html
               fast/inline-block/baseline-vertical-04.html
               fast/inline-block/baseline-vertical-05.html
               fast/inline-block/baseline-vertical-06.html
               fast/inline-block/baseline-vertical-07.html
               fast/inline-block/baseline-vertical-08.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):

2018-01-31  Said Abou-Hallawa  <sabouhallawa@apple.com>

        BitmapImage::drawPattern() may not draw a complete frame even after all the data is received
        https://bugs.webkit.org/show_bug.cgi?id=182277

        Reviewed by Simon Fraser.

        BitmapImage::drawPattern() needs to destroy the incomplete decoded frame
        before trying to draw it as a pattern.

        Test: http/tests/images/draw-pattern-slow-load-large-image.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::updateBufferInternal): We need to disable CachedImage
        data buffering for testing. This simulates slow network where intervals
        between data chunks can last for seconds.
        * loader/cache/CachedImage.h:
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern): Destroy the incomplete decoded frame
        before drawing this frame as a pattern. We do not destroy incomplete decoded
        frame once new data is received because it may be drawn by async image
        drawing while waiting for the newer frame to finish decoding.
        * testing/Internals.cpp:
        (WebCore::Internals::setForceUpdateImageDataEnabledForTesting):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Add a release assertion to ensure timers are deleted in the right thread
        https://bugs.webkit.org/show_bug.cgi?id=182351

        Reviewed by David Kilzer.

        Added a relese assertion in ~TimerBase that the current thread is the one in which the timer was created.

        We use canAccessThreadLocalDataForThread for this purpose since the condition is more complicated
        when WebThread is being used.

        * platform/Timer.cpp:
        (WebCore::TimerBase::~TimerBase): Added the assertion.
        * platform/Timer.h:
        (WebCore::TimerBase::m_thread): Always store the current thread in a timer.

2018-01-31  Youenn Fablet  <youenn@apple.com>

        Change SWServer::claim to set the iterator value as soon as possible
        https://bugs.webkit.org/show_bug.cgi?id=182337

        Reviewed by Chris Dumez.

        No change of behavior, this is a "let's go safe way" fix.

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

2018-01-31  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers to RenderTreeBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=182348
        <rdar://problem/37082837>

        Reviewed by Antti Koivisto.

        All the callsites are in the RenderTreeUpdater by now.

        No change in functionality.

        * rendering/RenderObject.cpp:
        (WebCore::isAnonymousAndSafeToDelete): Deleted.
        (WebCore::findDestroyRootIncludingAnonymous): Deleted.
        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers): Deleted.
        * rendering/RenderObject.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::isAnonymousAndSafeToDelete):
        (WebCore::findDestroyRootIncludingAnonymous):
        (WebCore::RenderTreeBuilder::removeFromParentAndDestroyCleaningUpAnonymousWrappers):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownTextRenderer):

2018-01-31  Ryosuke Niwa  <rniwa@webkit.org>

        Release assertion in Performance::resourceTimingBufferFullTimerFired when the resource timing buffer is shrunk
        https://bugs.webkit.org/show_bug.cgi?id=182319
        <rdar://problem/36904312>

        Reviewed by Chris Dumez.

        The crash was caused by a wrong release assertion. Handle author scripts shrinking the resource timing buffer
        while resourcetimingbufferfull event is being dispatched.

        Also fixed a bug that a superflous resourcetimingbufferfull event will be fired when new resource timing entries
        are queued while resourcetimingbufferfull event is being dispatched.

        Test: http/tests/performance/performance-resource-timing-resourcetimingbufferfull-queue-resource-entry.html
              http/tests/performance/performance-resource-timing-resourcetimingbufferfull-shrinking-buffer-crash.html

        * page/Performance.cpp:
        (WebCore::Performance::resourceTimingBufferFullTimerFired): 

2018-01-31  Youenn Fablet  <youenn@apple.com>

        com.apple.WebKit.Storage crashing at com.apple.WebCore: WebCore::SWServerRegistration::removeClientUsingRegistration
        https://bugs.webkit.org/show_bug.cgi?id=182316
        <rdar://problem/37025976>

        Reviewed by Chris Dumez.

        SWServer.m_clientToControllingWorker and SWServerRegistration.m_clientsUsingRegistration might currently get out of sync.
        This is a defensive fix to ensure storage process will not crash in Release.
        We keep the ASSERT as this probably means there is an abnormal situation that other patches might fix.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::removeClientUsingRegistration):

2018-01-31  Antoine Quint  <graouts@apple.com>

        [Modern Media Controls] Turn media/modern-media-controls/start-support tests back on
        https://bugs.webkit.org/show_bug.cgi?id=182297

        Reviewed by Jon Lee and Eric Carlson.

        We identified one cause of flakiness when turning those tests back on and fix it in this patch. There would be
        cases where the play/pause button would never actually become visible because we would first set it as one of
        the buttons in the left container in the bottom controls bar before we would identify that we should show the
        prominent play/pause button, and then once we did, we would add it as a child to the InlineMediaControls. But,
        because the actual layout of the ButtonsContainer would happen in a rAF due to being a layout() method, we would
        remove the play/pause button from the InlineMediaControls and set it as a child of the left container even
        though it wasn't visible.

        Performing the layout of a ButtonsContainer should really happen immediately when we set the buttons, so in this
        patch we remove the "buttons" property and clients of ButtonsContainer can simply add or remove children which
        will be laid out in a row. To support this, we've added two notification methods to LayoutNode, one that indicates
        when children have changed, didChangeChildren(), which we override in ButtonsContainer to perform a synchronous
        layout. The other method is willRemoveChild() which we also override in ButtonsContainer, this time to reset
        the "x" and "visible" properties which we set while performing layout.
        
        This fixes flakiness for media/modern-media-controls/start-support/start-support-click-to-start.html, and maybe
        other modern-media-controls tests that could have been affected by this unexpected behavior.

        * Modules/modern-media-controls/controls/buttons-container.js:
        (ButtonsContainer.prototype.willRemoveChild):
        (ButtonsContainer.prototype.didChangeChildren):
        (ButtonsContainer.prototype.layout):
        (ButtonsContainer.prototype.get buttons): Deleted.
        (ButtonsContainer.prototype.set buttons): Deleted.
        * Modules/modern-media-controls/controls/inline-media-controls.js:
        (InlineMediaControls.prototype.layout):
        (InlineMediaControls.prototype._updateBottomControlsBarLabel):
        (InlineMediaControls.prototype._addTopRightBarWithMuteButtonToChildren):
        (InlineMediaControls):
        * Modules/modern-media-controls/controls/layout-node.js:
        (LayoutNode.prototype.set children):
        (LayoutNode.prototype.addChild):
        (LayoutNode.prototype.removeChild):
        (LayoutNode.prototype.willRemoveChild):
        (LayoutNode.prototype.didChangeChildren):
        * Modules/modern-media-controls/controls/macos-fullscreen-media-controls.js:
        (MacOSFullscreenMediaControls.prototype.layout):
        * Modules/modern-media-controls/media/media-controller.js: Drive-by fix to correctly set the value passed as
        data-auto-hide-delay on a <video> element.

2018-01-31  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderMultiColumnFlow::resolveMovedChild to RenderTreeBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=182315
        <rdar://problem/37048160>

        Reviewed by Antti Koivisto.

        resolveMovedChild() is only called from RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderFragmentedFlow.h:
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::resolveMovedChild const): Deleted.
        * rendering/RenderMultiColumnFlow.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::resolveMovedChildForMultiColumnFlow):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild):
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChild):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::resolveMovedChild):
        * rendering/updating/RenderTreeBuilderMultiColumn.h:

2018-01-31  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Silent WebAudio buffers support
        https://bugs.webkit.org/show_bug.cgi?id=143869

        Reviewed by Carlos Garcia Campos.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Flag silent buffers as GAP buffers. This
        enables downstream elements to optimize the buffer processing.

2018-01-31  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [EME] Fix NavigatorEME::tryNextSupportedConfiguration typo
        https://bugs.webkit.org/show_bug.cgi?id=182324

        Reviewed by Žan Doberšek.

        * Modules/encryptedmedia/NavigatorEME.cpp:
        (WebCore::tryNextSupportedConfiguration): Fix
        candidateCofiguration typo.

2018-01-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo] syntheticBoldOffset makes a font with embedded bitmap fonts shown as double strike in HiDPI
        https://bugs.webkit.org/show_bug.cgi?id=182093

        Reviewed by Alex Christensen.

        WebKit draws texts doubly by shifting 1px for fonts without bold
        fonts but bold font is desired. This synthetic bold method draws
        fonts with embedded bitmap fonts look like double strike in HiDPI.

        No new tests (Covered by the existing tests).

        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::createGDIFont): Overwrite lfWeight if the desired weight
        is bold and matched font weight is't bold and in WinCairo port.
        Fix wrong indentation.

2018-01-30  Youenn Fablet  <youenn@apple.com> and Oleksandr Skachkov  <gskachkov@gmail.com>

        FetchResponse should support ConsumeData callback on chunk data is received
        https://bugs.webkit.org/show_bug.cgi?id=181600
        <rdar://problem/36932547>

        Reviewed by Alex Christensen.

        Test: imported/w3c/web-platform-tests/service-workers/service-worker/fetch-event-respond-with-body-loaded-in-chunk.https.html

        Apply same read-by-chunk strategy for body coming from network as for body coming from ReadableStream.
        Refactor to have one consumeBodyReceivedByChunk method for both cases.
        This allows streaming data from a service worker to WebProcess as would be done by NetworkProcess.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::addAll):
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::BodyLoader::didSucceed):
        (WebCore::FetchResponse::BodyLoader::didReceiveData):
        (WebCore::FetchResponse::BodyLoader::consumeDataByChunk):
        (WebCore::FetchResponse::consumeBody):
        (WebCore::FetchResponse::consumeBodyReceivedByChunk):
        * Modules/fetch/FetchResponse.h:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):

2018-01-30  Don Olmstead  <don.olmstead@sony.com>

        JSExports.h should be included as <JavaScriptCore/JSExportMacros.h>
        https://bugs.webkit.org/show_bug.cgi?id=182312

        Reviewed by Michael Catanzaro.

        No new tests. No change in behavior.

        * config.h:

2018-01-30  Chris Nardi  <cnardi@chromium.org>

        Use double-quotes when serializing font-feature-settings
        https://bugs.webkit.org/show_bug.cgi?id=182201

        According to the CSSOM spec, all strings should be serialized with double-quotes. The feature
        tag value was previously serialized with single-quotes; change this to double-quotes to match
        the spec and non-WebKit browsers.

        Reviewed by Myles C. Maxfield.

        Updated css3/font-feature-settings-parsing.html, fast/css/inherited-properties-rare-text.html,
        and fast/text/font-face-javascript.html.

        * css/CSSFontFeatureValue.cpp:
        (WebCore::CSSFontFeatureValue::customCSSText const):

2018-01-30  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.

        Part 2: Add telemetry for the Storage Access API case

        Adds a new convenience method to identify origin/page/frame combinations that
        have been granted access to the Storage Access API. This is used for debug
        logging in the NetworkProcess. It is not used in production builds.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::hasStorageAccessForFrame const): Added.

2018-01-30  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in updateLayout() via AXObjectCache::childrenChanged
        https://bugs.webkit.org/show_bug.cgi?id=182279
        <rdar://problem/36994456>

        Reviewed by Antti Koivisto.

        Disable the assertion in Document::updateLayout and Document::updateStyle* in this particular circumstance as fixing it
        would require a large architectural refactoring of the accessibility code.

        Test: accessibility/accessibility-object-update-during-style-resolution-crash.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::childrenChanged): Disabled the release assertion here.
        * dom/Document.cpp:
        (WebCore::Document::isSafeToUpdateStyleOrLayout const): Check LayoutAssertionDisableScope::shouldDisable.
        * dom/ScriptDisallowedScope.h:
        (WebCore::ScriptDisallowedScope::LayoutAssertionDisableScope): Added.
        (WebCore::ScriptDisallowedScope::LayoutAssertionDisableScope::LayoutAssertionDisableScope): Added.
        (WebCore::ScriptDisallowedScope::LayoutAssertionDisableScope::~LayoutAssertionDisableScope): Added.
        (WebCore::ScriptDisallowedScope::LayoutAssertionDisableScope::shouldDisable): Added.
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout): Check LayoutAssertionDisableScope::shouldDisable.

2018-01-30  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderRubyRun::rubyBaseSafe to RenderTreeBuilder::Ruby
        https://bugs.webkit.org/show_bug.cgi?id=182306
        <rdar://problem/37041440>

        Reviewed by Antti Koivisto.

        With all the ruby mutation code moving, only RenderTreeBuilder calls RenderRubyRun::rubyBaseSafe.

        No change in functionality.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyText const):
        (WebCore::RenderRubyRun::rubyBase const):
        (WebCore::RenderRubyRun::firstLineBlock const):
        (WebCore::RenderRubyRun::takeChild):
        (WebCore::RenderRubyRun::rubyBaseSafe): Deleted.
        * rendering/RenderRubyRun.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::insertChild):
        (WebCore::RenderTreeBuilder::Ruby::rubyBaseSafe):
        * rendering/updating/RenderTreeBuilderRuby.h:

2018-01-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unified sources for FEMorphology.cpp seems to break the windows build.
        https://bugs.webkit.org/show_bug.cgi?id=178847

        Reviewed by Yusuke Suzuki.

        Fix a compilation error.
        platform/graphics/filters/SpotLightSource.cpp(45): error C2027: use of undefined type 'WebCore::FilterEffect'

        No new tests (No behavior change)

        * Sources.txt: Removed @no-unify for FEMorphology.cpp.
        * platform/graphics/filters/SpotLightSource.cpp: Added #include "FilterEffect.h".

2018-01-30  Myles C. Maxfield  <mmaxfield@apple.com>

        Test fix after r227776
        https://bugs.webkit.org/show_bug.cgi?id=180951

        Unreviewed.

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

2018-01-30  Dean Jackson  <dino@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at WebCore: WebCore::Document::updateStyleIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=182299
        <rdar://problem/36853088>

        Removing a misleading comment based on Zalan Bujtas's feedback.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):

2018-01-30  Dean Jackson  <dino@apple.com>

        CrashTracer: com.apple.WebKit.WebContent at WebCore: WebCore::Document::updateStyleIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=182299
        <rdar://problem/36853088>

        Reviewed by Simon Fraser.

        Mostly speculative fix for the case where a scrollTo moves an
        animated SVG image into view, causing its animation to restart during
        a paint operation. This was causing a release ASSERT, so we now defer
        the resumption of the animation into a timer.

        Test: svg/animated-svgImage-scroll.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded): Enqueue the
        animation if it is an SVGImage.
        * svg/graphics/SVGImage.cpp: Add a timer to enqueue animation starts.
        (WebCore::SVGImage::SVGImage):
        (WebCore::SVGImage::startAnimationTimerFired):
        (WebCore::SVGImage::enqueueStartAnimation):
        (WebCore::SVGImage::stopAnimation):
        * svg/graphics/SVGImage.h:

2018-01-30  Chris Dumez  <cdumez@apple.com>

        Service worker registration soft updates happen too frequently
        https://bugs.webkit.org/show_bug.cgi?id=182296
        <rdar://problem/37031862>

        Reviewed by Youenn Fablet.

        Move code that updates the registration's last update check time from after
        the script bytecheck to before, as per:
        - https://w3c.github.io/ServiceWorker/#update (step 7.19)

        This way, the last update check time gets updated even if the newly fetched
        script is identical to the previous one, which is the common case.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::updateWorker):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptFetchFinished):

2018-01-30  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move childBecameNonInline to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=182265
        <rdar://problem/37004459>

        Reviewed by Antti Koivisto.

        Move the mutation code that wraps/unwraps a child element when its flow state changes
        from(to) in-flow to(from) floating/out-of-flow.

        No change in functionality.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::childBecameNonInline): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::childBecameNonInline): Deleted.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleDidChange):
        (WebCore::RenderElement::handleDynamicFloatPositionChange): Deleted.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::childBecameNonInline): Deleted.
        * rendering/RenderInline.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):
        (WebCore::RenderTreeBuilder::splitFlow): Deleted.
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderBlock.cpp:
        (WebCore::RenderTreeBuilder::Block::childBecameNonInline):
        * rendering/updating/RenderTreeBuilderBlock.h:
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::childBecameNonInline):
        * rendering/updating/RenderTreeBuilderInline.h:

2018-01-30  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.
        
        Partial roll-out of r227755.

        The original patch assumed the WebContent process kept track of user interaction. This is
        only tracked in the UIProcess, so we can get rid of some of the logging code adding in
        r227755.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::setTimeToLivePartitionFree): Deleted.
        (WebCore::ResourceLoadObserver::wasAccessedWithinInteractionWindow const): Deleted.
        * loader/ResourceLoadObserver.h:

2018-01-30  Chris Dumez  <cdumez@apple.com>

        Make sure we never create a WebSWClientConnection with an invalid sessionID
        https://bugs.webkit.org/show_bug.cgi?id=182276
        <rdar://problem/36582633>

        Reviewed by Alex Christensen.

        Make sure we never create a WebSWClientConnection with an invalid sessionID as this
        could corrupt our hash tables.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange):
        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::ready):
        (WebCore::ServiceWorkerContainer::getRegistration):
        (WebCore::ServiceWorkerContainer::didFinishGetRegistrationRequest):
        (WebCore::ServiceWorkerContainer::getRegistrations):
        (WebCore::ServiceWorkerContainer::didFinishGetRegistrationsRequest):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::ensureSWClientConnection):

2018-01-30  Antti Koivisto  <antti@apple.com>

        Avoid traversing too much when doing class change invalidation
        https://bugs.webkit.org/show_bug.cgi?id=181604

        Reviewed by Zalan Bujtas.

        We are now collecting information about which part of the tree a change in class can potentially affect.
        Use the information to traverse only the required elements in Style::Invalidator.

        The same mechanism can be later used for attribute and id change invalidation.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectFeatures const):
        (WebCore::DocumentRuleSets::classInvalidationRuleSets const):
        (WebCore::DocumentRuleSets::subjectClassRules const): Deleted.
        (WebCore::DocumentRuleSets::ancestorClassRules const): Deleted.

            Remove separate subject and ancestor invalidation RuleSets. Instead collect all invalidation rulesets
            to a vector along with their MatchElements.

        * css/DocumentRuleSets.h:
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::computeNextMatchElement):
        (WebCore::RuleFeatureSet::computeSubSelectorMatchElement):
        (WebCore::RuleFeatureSet::collectFeatures):

            Similarly collect all class invalidation RuleFeatures to a general HashMap along with the MatchElement.

        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        (WebCore::RuleFeatureSet::shrinkToFit):
        * css/RuleFeature.h:
        (WebCore::RuleFeature::RuleFeature):
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::ClassChangeInvalidation::computeInvalidation):

            Find out InvalidationRuleSets to use.

        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):

            Pass them to Style::Invalidator.

        * style/ClassChangeInvalidation.h:
        * style/StyleInvalidator.cpp:
        (WebCore::Style::Invalidator::invalidateStyleForTree):
        (WebCore::Style::Invalidator::invalidateStyleForDescendants):
        (WebCore::Style::Invalidator::invalidateStyleWithMatchElement):

            Traverse only the part of the tree needed by the given MatchElement.

        * style/StyleInvalidator.h:
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::classNamesAffectedByRules const):

2018-01-30  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] The 'baseline' value must be invalid for the 'justify-content' property
        https://bugs.webkit.org/show_bug.cgi?id=181794

        Reviewed by Antti Koivisto.

        The CSS WG has resolved that it doesn't make sense to define Baseline
        Content-Alignment in the inline/main axis.

        https://github.com/w3c/csswg-drafts/issues/1184

        The spec has been updated so that <baseline-postion> is not valid for
        the 'justify-content' property's syntax. This CL updates our parsing
        logic to match the new spec, including the parsing logic of the
        place-content shorthand.

        Additionally, this CL updates the computed value of the
        <baseline-position> values to match other browsers.

        We don't implement support for <baseline-position> values in the
        Content Distribution properties (align-content and justify-content),
        so I don't expect this change to break content of sites using the CSS
        Box Alignment feature.

        No new tests, just adapt the Web Platform Tests we already have to the new CSS syntax.

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::getBaselineKeyword):
        (WebCore::consumeBaselineKeyword):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::consumeSelfPositionOverflowPosition):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeSimplifiedContentPosition):
        (WebCore::CSSPropertyParser::consumePlaceContentShorthand):
        (WebCore::consumeSimplifiedItemPosition):

2018-01-30  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [WinCairo] Fix forwarding header conflict of WebKit on WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=177202

        Reviewed by Alex Christensen.

        * PlatformWin.cmake:

2018-01-30  Myles C. Maxfield  <mmaxfield@apple.com>

        A disallowed user-installed font may be used if its PostScript name is specified
        https://bugs.webkit.org/show_bug.cgi?id=180951

        Reviewed by Brent Fulgham.

        This patch adds a new CoreText font attribute, kCTFontFallbackOptionAttribute, to the
        fonts which WebKit creates. It also adds this attribute to web fonts, so that font
        fallback will happen according to our rules about user-installed fonts. It also marks
        these font attributes as "mandatory" so CoreText will be guaranteed to follow the
        policy.

        Test: fast/text/user-installed-fonts/disable.html

        * platform/graphics/FontCache.h:
        (WebCore::FontDescriptionKey::makeFlagsKey):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontDatabase::collectionForFamily):
        (WebCore::FontDatabase::fontForPostScriptName):
        (WebCore::addAttributesForUserInstalledFonts):
        (WebCore::mandatoryAttributesForUserInstalledFonts):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):

2018-01-29  Youenn Fablet  <youenn@apple.com>

        Cache API should make sure to resolve caches.open promises in the same order as called
        https://bugs.webkit.org/show_bug.cgi?id=182193
        <rdar://problem/36930363>

        Reviewed by Chris Dumez.

        Covered by LayoutTests/http/wpt/cache-storage/cache-open-delete-in-parallel.https.html.

        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::doRemove): Removed optimization consisting in removing the cache from DOMCacheStorage object synchronously.
        This optimization prevents going to the network process to try deleting the cache.

2018-01-29  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Add a compile-time feature flag
        https://bugs.webkit.org/show_bug.cgi?id=182211
        <rdar://problem/36936365>

        Reviewed by Brent Fulgham.

        Add a compile-time feature flag for WebAuthN as most of the functionality is platform
        dependent.

        No tests.

        * Configurations/FeatureDefines.xcconfig:
        * Modules/credentialmanagement/BasicCredential.cpp:
        * Modules/credentialmanagement/BasicCredential.h:
        * Modules/credentialmanagement/BasicCredential.idl:
        * Modules/credentialmanagement/CredentialCreationOptions.h:
        * Modules/credentialmanagement/CredentialCreationOptions.idl:
        * Modules/credentialmanagement/CredentialRequestOptions.h:
        * Modules/credentialmanagement/CredentialRequestOptions.idl:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        * Modules/credentialmanagement/CredentialsContainer.h:
        * Modules/credentialmanagement/CredentialsContainer.idl:
        * Modules/credentialmanagement/NavigatorCredentials.cpp:
        * Modules/credentialmanagement/NavigatorCredentials.h:
        * Modules/credentialmanagement/NavigatorCredentials.idl:
        * Modules/webauthn/Authenticator.cpp:
        * Modules/webauthn/Authenticator.h:
        * Modules/webauthn/AuthenticatorAssertionResponse.cpp:
        * Modules/webauthn/AuthenticatorAssertionResponse.h:
        * Modules/webauthn/AuthenticatorAssertionResponse.idl:
        * Modules/webauthn/AuthenticatorAttestationResponse.cpp:
        * Modules/webauthn/AuthenticatorAttestationResponse.h:
        * Modules/webauthn/AuthenticatorAttestationResponse.idl:
        * Modules/webauthn/AuthenticatorResponse.cpp:
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/AuthenticatorResponse.idl:
        * Modules/webauthn/PublicKeyCredential.cpp:
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl:
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        * Modules/webauthn/PublicKeyCredentialDescriptor.idl:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.idl:
        * Modules/webauthn/PublicKeyCredentialType.h:
        * Modules/webauthn/PublicKeyCredentialType.idl:
        * bindings/js/JSAuthenticatorResponseCustom.cpp:
        * bindings/js/JSBasicCredentialCustom.cpp:

2018-01-29  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Introduce debug mode as experimental feature
        https://bugs.webkit.org/show_bug.cgi?id=182199
        <rdar://problem/36930364>

        Reviewed by Alex Christensen.

        No new tests. This adds an experimental feature.

        The only changes to default behavior are:
        - Increased resolution on timestamps which is needed to be able to set shorter
          timeouts in debug mode.
        - Only update partitioning and blocking table when needed. This is an optimization
          which pays off in less XPC with shorter timeouts.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::reduceTimeResolution):
        (WebCore::ResourceLoadObserver::logFrameNavigation):
        (WebCore::ResourceLoadObserver::logSubresourceLoading):
        (WebCore::ResourceLoadObserver::logWebSocketLoading):
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        (WebCore::reduceToHourlyTimeResolution): Deleted.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setResourceLoadStatisticsDebugMode):
        (WebCore::RuntimeEnabledFeatures::resourceLoadStatisticsDebugMode const):
        * page/Settings.yaml:

2018-01-29  Oleksandr Skachkov  <gskachkov@gmail.com>

        FetchResponse should support ConsumeData callback on chunk data is received: handling ReadableStream bodies
        https://bugs.webkit.org/show_bug.cgi?id=182008

        Reviewed by Youenn Fablet.

        Modify FetchResponse to support ConsumeData callback with 
        handling of ReadableStream by chunks

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::put):
        * Modules/fetch/FetchBodyConsumer.cpp:
        (WebCore::FetchBodyConsumer::resolve):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::consumeBodyFromReadableStream):
        * Modules/fetch/FetchResponse.h:
        * Modules/streams/ReadableStreamChunk.h: Added.
        * Modules/streams/ReadableStreamSink.cpp:
        (WebCore::ReadableStreamToSharedBufferSink::enqueue):
        (WebCore::ReadableStreamToSharedBufferSink::close):
        * Modules/streams/ReadableStreamSink.h:
        * WebCore.xcodeproj/project.pbxproj:
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::processResponse):

2018-01-29  Andy Estes  <aestes@apple.com>

        [iOS] Restrict synthetic clicks to the origin that handled the underlying touch event
        https://bugs.webkit.org/show_bug.cgi?id=182252
        <rdar://problem/21555881>

        Reviewed by Tim Horton.

        Test: http/tests/events/touch/ios/cross-frame-single-tap-same-origin.https.html

        * dom/Document.h:
        (WebCore::Document::handlingTouchEvent const):
        * page/EventHandler.h:
        (WebCore::EventHandler::touchEventTargetSubframe const):
        (WebCore::EventHandler::touches const):

        Exposed some information needed by WebPage::updatePotentialTapSecurityOrigin().

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

        Changed NodeQualifier from a function pointer to a WTF::Function.

        (WebCore::Frame::nodeRespondingToClickEvents):

        Turned ancestorRespondingToClickEvents() into a lambda that captures originRestriction. In
        the lambda, if there is an origin restriction, return nullptr if the hit test result's inner
        Node is not in the restricted origin.

        (WebCore::Frame::nodeRespondingToScrollWheelEvents):

        Turned ancestorRespondingToScrollWheelEvents() into a lambda.

        (WebCore::ancestorRespondingToScrollWheelEvents):

        Moved to lambda in nodeRespondingToScrollWheelEvents().

        (WebCore::ancestorRespondingToClickEvents):

        Moved to lambda in nodeRespondingToClickEvents().

2018-01-29  Emilio Cobos Álvarez  <emilio@crisal.io>

        Trivially cleanup std::optional usage in RenderBlockFlow.
        https://bugs.webkit.org/show_bug.cgi?id=182142

        Reviewed by Antti Koivisto.

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::firstLineBaseline const):
        (WebCore::RenderBlockFlow::inlineBlockBaseline const):

2018-01-29  Brent Fulgham  <bfulgham@apple.com>

        Add telemetry to track storage access API adoption
        https://bugs.webkit.org/show_bug.cgi?id=182197
        <rdar://problem/35803309>

        Reviewed by Chris Dumez.
        
        Part 1: Add telemetry for the user interaction case
        
        This patch adds telemetry to track how frequently third-party cookies are
        used in a first party context due to user interaction. This will help
        understand cases where the new Storage Access API can help, and to help
        us understand if we have considered relevant use cases in its design.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::setTimeToLivePartitionFree): Let the observer
        know the first party interaction duration.
        (WebCore::ResourceLoadObserver::wasAccessedWithinInteractionWindow const): Added.
        (WebCore::ResourceLoadObserver::logFrameNavigation): Note when a third party 
        resource is accessed as a first party due to user interaction. 
        (WebCore::ResourceLoadObserver::logSubresourceLoading): Ditto.
        * loader/ResourceLoadObserver.h:
        * loader/ResourceLoadStatistics.cpp:
        (WebCore::ResourceLoadStatistics::encode const): Handle new fields.
        (WebCore::ResourceLoadStatistics::decode): Ditto.
        * loader/ResourceLoadStatistics.h:

2018-01-29  Antti Koivisto  <antti@apple.com>

        CalcExpressionBlendLength::evaluate hits stack limit
        https://bugs.webkit.org/show_bug.cgi?id=182243

        Reviewed by Zalan Bujtas.

        Speculative fix to prevent nesting of CalcExpressionBlendLength.

        No test, don't know how to make one.

        * platform/CalculationValue.cpp:
        (WebCore::CalcExpressionBlendLength::CalcExpressionBlendLength):

        CalcExpressionBlendLength is only used in Length values of animated style. Normally such styles are not used
        as input for further blending but there are some paths where this could in principle happen. Repeated
        application (for each animation frame) could construct CalcExpressionBlendLength expression that blows
        the stack when evaluated.

        Speculatively fix by flattening any nesting.

        * platform/CalculationValue.h:
        (WebCore::CalcExpressionBlendLength::CalcExpressionBlendLength): Deleted.

2018-01-29  Chris Dumez  <cdumez@apple.com>

        Drop unnecessary "ServiceWorker Task Thread" in SWServer
        https://bugs.webkit.org/show_bug.cgi?id=182253

        Reviewed by Youenn Fablet.

        Drop unnecessary "ServiceWorker Task Thread" in SWServer. We're spinning a thread for
        each SWServer that is never used.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::~SWServer):
        (WebCore::SWServer::SWServer):
        (WebCore::SWServer::taskThreadEntryPoint): Deleted.
        (WebCore::SWServer::postTask): Deleted.
        (WebCore::SWServer::postTaskReply): Deleted.
        (WebCore::SWServer::handleTaskRepliesOnMainThread): Deleted.
        * workers/service/server/SWServer.h:

2018-01-29  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r227731.

        This caused and assertion failure in API tests.

        Reverted changeset:

        "Layout Test fast/events/beforeunload-dom-manipulation-
        crash.html is crashing"
        https://bugs.webkit.org/show_bug.cgi?id=181204
        https://trac.webkit.org/changeset/227731

2018-01-29  Brady Eidson  <beidson@apple.com>

        Make it possible for apps that use both WK1 and WK2 to use MessagePorts.
        https://bugs.webkit.org/show_bug.cgi?id=182229

        Reviewed by Chris Dumez.

        Covered by existing LayoutTests and a new API test.

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::checkRemotePortForActivity): Don't use the global singleton
          provider. Instead use the provider that belongs to the owning registry.

        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::MessagePortChannelProviderImpl): Pass a reference
          to *this to the Registry.
        * dom/messageports/MessagePortChannelProviderImpl.h:

        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::MessagePortChannelRegistry): Keep a Provider member so
          MessagePortChannels can get to it instead of relying on the global singleton provider.
        * dom/messageports/MessagePortChannelRegistry.h:
        (WebCore::MessagePortChannelRegistry::provider):

2018-01-29  Per Arne Vollan  <pvollan@apple.com>

        Layout Test fast/events/beforeunload-dom-manipulation-crash.html is crashing
        https://bugs.webkit.org/show_bug.cgi?id=181204
        <rdar://problem/36256274>

        Reviewed by Ryosuke Niwa.

        When a frame element is moved in the DOM tree during the execution of a beforeunload handler,
        the frame will be detached when removed from its previous position in the DOM tree. When being
        detached, an attempt will also be made to stop the load by calling FrameLoader::stopAllLoaders().
        However, this method will return early when executed in a beforeunload handler, since navigation
        is not allowed then. The end result is a detached frame which will continue to load, and hitting
        asserts in DocumentLoader::dataReceived(), and DocumentLoader::notifyFinished(). It should be
        possible to stop a frame load, even when executing a beforeunload handler.

        No new tests. Covered by the existing test fast/events/beforeunload-dom-manipulation-crash.html.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isStopLoadingAllowed const):
        (WebCore::FrameLoader::stopAllLoaders):
        * loader/FrameLoader.h:

2018-01-29  Miguel Gomez  <magomez@igalia.com>

        [CoordnatedGraphics] A child layer of a semitransparent layer isn't clipped properly
        https://bugs.webkit.org/show_bug.cgi?id=181080

        Reviewed by Žan Doberšek.

        Check whether the applied clipping area is empty before drawing the children of a TextureMapperLayer. If
        the area is empty no children will be drawn, so we can avoid drawing them.

        No new tests -- no change in behavior.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelfAndChildren):

2018-01-29  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Add GraphicsContextImplCairo::createFactory() helpers
        https://bugs.webkit.org/show_bug.cgi?id=182238

        Reviewed by Carlos Garcia Campos.

        Instead of duplicating lambdas that return a newly-created
        GraphicsContextImplCairo object, provide static createFactory() helpers
        on that class that produce GraphicsContextImplFactory wrappers which are
        then invoked in the GraphicsContext constructor. The static functions
        accept either the PlatformContextCairo reference or the cairo_t pointer,
        invoking the proper GraphicsContextImplCairo constructor in the returned
        lambda wrapper.

        No new tests -- no change in functionality.

        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::createFactory):
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect const):
        (WebCore::Path::strokeContains const):
        * platform/graphics/nicosia/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::PaintingContextCairo):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2018-01-29  Zan Dobersek  <zdobersek@igalia.com>

        Construct GraphicsContext with NonPaintingReasons::NoReason in FrameView::adjustPageHeightDeprecated()
        https://bugs.webkit.org/show_bug.cgi?id=182235

        Reviewed by Carlos Garcia Campos.

        Pass the NonPaintingReasons::NoReason value to the GraphicsContext
        constructor in FrameView::adjustPageHeightDeprecated(). This has the
        same effect as when passing a null PlatformGraphicsContext to the
        constructor, which effectively disables any painting through that
        GraphicsContext, but doesn't have a platform-specific connotation.

        No new tests -- no change in functionality.

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustPageHeightDeprecated):

2018-01-29  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove the GraphicsContext(cairo_t*) constructor
        https://bugs.webkit.org/show_bug.cgi?id=182234

        Reviewed by Carlos Garcia Campos.

        Instead of using the GraphicsContext(cairo_t*) constructor, leverage the
        GraphicsContextImplCairo class and work with an existing Cairo context
        through that GraphicsContextImpl implementation.

        A new GraphicsContextImplCairo constructor is added, expecting pointer
        to the cairo_t object. With that, a PlatformContextCairo object is
        created, with ownership of that object now being handled by the
        GraphicsContextImplCairo class.

        Call sites of the GraphicsContext(cairo_t*) constructor are adjusted to
        instead provide a factory function that returns a fresh
        GraphicsContextImplCairo object, passing that cairo_t object to its
        constructor.

        No new tests -- no change in behavior.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext): Deleted.
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::GraphicsContextImplCairo::GraphicsContextImplCairo):
        (WebCore::m_private):
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::strokeBoundingRect const):
        (WebCore::Path::strokeContains const):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2018-01-28  Minsheng Liu  <lambda@liu.ms>

        Overflow of formulas is hidden for display mathematics
        https://bugs.webkit.org/show_bug.cgi?id=160547

        Reviewed by Frédéric Wang.

        Previously, <math> with display="block" uses its container's logical width as logical width.
        However, that behavior will truncate overflowed contents. The patch fixes it by setting
        the logical width as its content width rather than its container's logical width
        if the former is wider than the latter.

        Test: mathml/presentation/display-math-horizontal-overflow.html

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

2018-01-26  Antoine Quint  <graouts@apple.com>

        [Web Animations] Distinguish between an omitted and a null timeline argument to the Animation constructor
        https://bugs.webkit.org/show_bug.cgi?id=179065
        <rdar://problem/36869046>

        Reviewed by Dean Jackson.

        The Web Animations specification requires that a missing or undefined "timeline" parameter means that the
        document's timeline should be used, but a null value should be supported. To support this, we need to provide
        a custom Animation constructor where we can check on the ExecState whether the second argument passed is
        undefined, which is true if an explicit "undefined" value is passed or if the argument does not exist.

        * Sources.txt: Add the new JSWebAnimationCustom.cpp file.
        * WebCore.xcodeproj/project.pbxproj: Add the new JSWebAnimationCustom.cpp file.
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::create): Add a create() variant that doesn't provide an AnimationTimeline parameter
        to clearly indicate that the provided Document's timeline should be used.
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * bindings/js/JSWebAnimationCustom.cpp: Added.
        (WebCore::constructJSWebAnimation): Provide a custom Animation constructor where we check whether the second
        argument, the timeline, is undefined.
        * dom/Element.cpp:
        (WebCore::Element::animate): Use the new create() variant since passing "nullptr" now means a null timeline.

2018-01-26  Ricky Mondello  <rmondello@apple.com>

        Use the standard -webkit-autofill color on iOS
        https://bugs.webkit.org/show_bug.cgi?id=182182

        Reviewed by Tim Horton.

        * css/html.css:
        (input:-webkit-autofill, input:-webkit-autofill-strong-password):

2018-01-26  Dean Jackson  <dino@apple.com>

        REGRESSION (r222961): Clear function not clearing whole screen when antialias is set to false
        https://bugs.webkit.org/show_bug.cgi?id=179368
        <rdar://problem/36111549>

        Reviewed by Sam Weinig.

        When we changed from using a CAOpenGLLayer to a regular CALayer, we should
        have also swapped the "opaque" property to "contentsOpaque".

        Covered by the existing test: fast/canvas/webgl/context-attributes-alpha.html
        (when run on some hardware!)

        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer initWithGraphicsContext3D:]):

2018-01-26  Mark Lam  <mark.lam@apple.com>

        Add infrastructure for pointer preparation.
        https://bugs.webkit.org/show_bug.cgi?id=182191
        <rdar://problem/36889194>

        Reviewed by JF Bastien.

        No new tests because this patch does not introduce any behavior change.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSInterfaceName.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSReadOnlyMapLike.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactions.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCallTracer.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestDOMJIT.cpp:
        * bindings/scripts/test/JS/JSTestEnabledBySetting.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp:
        * bindings/scripts/test/JS/JSTestIterable.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedAndIndexedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedDeleterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterCallWith.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedGetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterNoIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterThrowingException.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIdentifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithIndexedGetterAndSetter.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgableProperties.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNamedSetterWithUnforgablePropertiesAndOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverloadedConstructorsWithSequence.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPluginInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestPromiseRejectionEvent.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerialization.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestSerializationIndirectInheritance.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp:
        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifier.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierAnonymousOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierNamedOperation.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationImplementedAs.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierOperationNamedToString.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadOnlyAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestStringifierReadWriteAttribute.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJSNewlyCreated):

2018-01-26  Simon Fraser  <simon.fraser@apple.com>

        REGRESSiON (r226492): Crash under Element::absoluteEventBounds() on a SVGPathElement which has not been laid out yet
        https://bugs.webkit.org/show_bug.cgi?id=182185
        rdar://problem/36836262

        Reviewed by Zalan Bujtas.

        Document::absoluteRegionForEventTargets() can fire when layout is dirty, and SVGPathElement's path() can be null if it
        hasn't been laid out yet. So protect against a null path in getBBox().

        Not easily testable because internals.nonFastScrollableRects() forces layout, and the crash depends on the timing of
        absoluteRegionForEventTargets().

        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getBBox):

2018-01-26  Chris Dumez  <cdumez@apple.com>

        Offlined content does not work for apps on home screen
        https://bugs.webkit.org/show_bug.cgi?id=182070
        <rdar://problem/36843906>

        Reviewed by Youenn Fablet.

        Already registered service workers were unable to intercept the very first
        load because registration matching was happening after the registration
        was loaded from disk, but *before* its active worker was populated.

        We now initialize the registrations' active worker as soon as we load
        them from disk. We do not necessarily have a SW Context process connection
        identifier yet at this point so I made it optional on the SWServerWorker.
        This identifier gets set on the SWServerWorker when the worker is actually
        launched and gets cleared when the SWServerWorker gets terminated.

        Covered by new API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::addRegistrationFromStore):
        (WebCore::SWServer::installContextData):
        (WebCore::SWServer::terminateWorkerInternal):
        (WebCore::SWServer::workerContextTerminated):
        (WebCore::SWServer::fireInstallEvent):
        (WebCore::SWServer::fireActivateEvent):
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::SWServerWorker):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::contextConnectionIdentifier const):
        (WebCore::SWServerWorker::setContextConnectionIdentifier):

2018-01-26  Chris Nardi  <cnardi@chromium.org>

        Addressing post-review comments after r226614
        https://bugs.webkit.org/show_bug.cgi?id=182151

        Reviewed by Myles C. Maxfield.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::sanitizeUserInputValue):
        * html/TextFieldInputType.cpp:
        (WebCore::limitLength):
        * platform/LocalizedStrings.cpp:
        (WebCore::truncatedStringForLookupMenuItem):
        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

2018-01-26  Antoine Quint  <graouts@apple.com>

        [iOS] prefers-reduced-motion media query is not working
        https://bugs.webkit.org/show_bug.cgi?id=182169
        <rdar://problem/36801631>

        Reviewed by Dean Jackson.

        The code that would eventually query UIKit for the system setting was not run since USE(NEW_THEME) is off on iOS.
        Adding a PLATFORM(IOS) flag here allows the code to run.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::prefersReducedMotionEvaluate):

2018-01-26  Youenn Fablet  <youenn@apple.com>

        CSP post checks should be done for service worker responses
        https://bugs.webkit.org/show_bug.cgi?id=182160

        Reviewed by Daniel Bates.

        Covered by updated test.

        Add security checks when receiving a service worker response.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        * loader/cache/CachedResourceLoader.h:

2018-01-26  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-multicol] Support percentages in column-gap
        https://bugs.webkit.org/show_bug.cgi?id=182004

        Reviewed by Javier Fernandez.

        This patch adds percentage support to column-gap property.

        Most of the changes are related to the parsing logic,
        the column-gap property now accepts both length and percentages,
        on top of the "normal" initial value.
        A new utility class GapLength has been added, as it'll be useful
        to implement row-gap in the future.

        Apart from that the muticolumn layout code has been modified
        to resolve the percentage gaps (treating them as zero while computing
        preferred widths) and resolving them during layout.
        This doesn't follow the current text on the spec, but there is an
        ongoing discussion that might cause the text is changed:
        https://github.com/w3c/csswg-drafts/issues/509#issuecomment-355242101
        We could update the implementation once we have a definitive answer
        from the CSS WG.

        Test: web-platform-tests/css/css-multicol/multicol-gap-percentage-001.html

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertGapLength):
        * css/StyleBuilderCustom.h:
        (WebCore::forwardInheritedValue):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeGapLength):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyPaginationToViewport):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::columnGap const):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::columnGap const):
        * rendering/style/GapLength.cpp: Added.
        (WebCore::operator<<):
        * rendering/style/GapLength.h: Added.
        (WebCore::GapLength::GapLength):
        (WebCore::GapLength::isNormal const):
        (WebCore::GapLength::length const):
        (WebCore::GapLength::operator== const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::columnGap const):
        (WebCore::RenderStyle::setColumnGap):
        (WebCore::RenderStyle::initialColumnGap):
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator== const):
        * rendering/style/StyleMultiColData.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):

2018-01-26  Emilio Cobos Álvarez  <emilio@crisal.io>

        Remove unused RenderFragmentedFlow::createFragmentedFlowStyle.
        https://bugs.webkit.org/show_bug.cgi?id=182138

        Reviewed by Manuel Rego Casasnovas.

        Has no callers.

        No new tests, just removes unused code so no behavior change.

        * rendering/RenderFragmentedFlow.cpp:
        * rendering/RenderFragmentedFlow.h:

2018-01-26  Emilio Cobos Álvarez  <emilio@crisal.io>

        Remove useless RenderBlockFlow overrides.
        https://bugs.webkit.org/show_bug.cgi?id=182139

        Reviewed by Manuel Rego Casasnovas.

        I think these are leftovers from the CSS regions removal, looking at
        blame.

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add InspectorShaderProgram to Unified Sources build
        https://bugs.webkit.org/show_bug.cgi?id=182084

        Reviewed by Dan Bernstein.

        * CMakeLists.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        Move to Sources.txt always.

        * inspector/InspectorShaderProgram.cpp:
        Add ENABLE(WEBGL) guard to contents.

2018-01-25  Ryosuke Niwa  <rniwa@webkit.org>

        Make scrolling to the focused element async
        https://bugs.webkit.org/show_bug.cgi?id=181575
        <rdar://problem/36459767>

        Reviewed by Simon Fraser.

        Made the revealing of the focused element asynchronous in Element::focus. Like selection, schedule a timer when
        a new element is focused, and only scroll to the focused element when the timer fires. If any other scrolling
        happens meanwhile, we cancel this timer.

        There are two Web exposed behavioral changes:
        1. The scrolling position doesn't change immediately when calling Element::focus.
        2. Only the last focused element will be revealed.

        Both behavioral changes pose its own compatibility risks but we're making a conscious decision here since
        the scrolling asynchronous has a clear performance benefit.

        There is one edge case to cosnider: when the history controller restores the scrolling position, canceling the
        timer results in a focused element in an overflow: hidden element to be never revealed. Expediate revealing of
        the focused element in this one case instead of canceling.

        Tests: fast/scrolling/scroll-to-focused-element-asynchronously.html
               fast/scrolling/scroll-to-focused-element-canceled-by-fragment-navigation.html

        * dom/Element.cpp:
        (WebCore::Element::focus): Call updateFocusAppearance on focusAppearanceUpdateTarget to handle HTMLAreaElement
        which delegates the focus appearance update to its image element.
        (WebCore::Element::focusAppearanceUpdateTarget): Extracted. Returns "this" element for all but HTMLAreaElement.
        (WebCore::Element::updateFocusAppearance): Schedule the revealing of the focused element in FrameView instead of
        synchronously scrolling to the focused element.
        * dom/Element.h:
        (WebCore::Element::defaultFocusTextStateChangeIntent):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::focusAppearanceUpdateTarget): Extracted from updateFocusAppearance.
        (WebCore::HTMLAreaElement::updateFocusAppearance): Deleted.
        * html/HTMLAreaElement.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState): Reveal the focused element
        prior to restoring the scrolling location of the fragment navigation. This is needed to reveal a focused element
        inside overflow: hidden element which got focused.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Added a boolean flag and a timer for scrolling to the focused element.
        (WebCore::FrameView::reset): Stop the timer and clear the flag.
        (WebCore::FrameView::maintainScrollPositionAtAnchor): Ditto when scrolling to an anchor.
        (WebCore::FrameView::setScrollPosition): Ditto when some other programatic scroll or the user scrolls the view.
        (WebCore::FrameView::scheduleScrollToFocusedElement): Added.
        (WebCore::FrameView::scrollToFocusedElementImmediatelyIfNeeded): Added.
        (WebCore::FrameView::scrollToFocusedElementTimerFired): Added.
        (WebCore::FrameView::scrollToAnchor): Stop the timer and clear the flag when scrolling to an achor.
        (WebCore::FrameView::setWasScrolledByUser): Ditto when the user scrolls.
        * page/FrameView.h:

2018-01-25  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r217236): [iOS] PDFDocumentImage does not update its cached ImageBuffer if it has a sub-rectangle of the image
        https://bugs.webkit.org/show_bug.cgi?id=182083

        Reviewed by Simon Fraser.

        Test: fast/images/pdf-as-image-dest-rect-change.html

        Revert the change r217236 back. Fix the issue of throwing out the cached
        ImageBuffer of the PDF document image when moving its rectangle.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::cacheParametersMatch): Return the if-statement
        which was deleted in r217236 back but intersect it with dstRect. The context
        clipping rectangle can be more than the dstRect.
        (WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
        -- Remove a wrong optimization which used to work for Mac only if the context
           interpolation quality is not set to low or none quality. This optimization
           does not consider the case when srcRect or destRect change after caching
           the ImageBuffer. Or even if m_cachedImageRect does not include the
           whole clipping rectangle.
        -- Move back the call to cacheParametersMatch() before changing the
           m_cachedImageRect.
        -- Always intersect the clipping rectangle with the dstRect to ensure we
           only look at the dirty rectangle inside the image boundary.
        -- If cacheParametersMatch() returns true, set m_cachedDestinationRect to
           dstRect and move m_cachedImageRect by the difference between the new
           and the old dstRects since no re-caching will happen.
        * platform/graphics/cg/PDFDocumentImage.h:
        * testing/Internals.cpp:
        (WebCore::pdfDocumentImageFromImageElement):
        (WebCore::Internals::pdfDocumentCachingCount):
        * testing/Internals.h:
        * testing/Internals.idl:
        Add an internal API which returns the number of drawing the PDF into an
        ImageBuffer.

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unnecessary developerExtrasEnabled checks
        https://bugs.webkit.org/show_bug.cgi?id=182156

        Reviewed by Matt Baker.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        These checks should not be needed. The step above bails if there is
        no inspector frontend, and there can be no inspector frontend unless
        developer extras enabled are enabled.

2018-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add localizable strings for extra-zoomed form controls
        https://bugs.webkit.org/show_bug.cgi?id=182080

        Reviewed by Tim Horton.

        Add new localizable strings. Additionally, run `update-webkit-localizable-strings` to re-sort
        Localizable.strings.

        * English.lproj/Localizable.strings:
        * platform/LocalizedStrings.cpp:
        (WebCore::formControlCancelButtonTitle):
        (WebCore::formControlHideButtonTitle):
        (WebCore::formControlGoButtonTitle):
        (WebCore::formControlSearchButtonTitle):
        (WebCore::textInputModeWriteButton):
        (WebCore::textInputModeSpeechButton):
        * platform/LocalizedStrings.h:

2018-01-25  Chris Dumez  <cdumez@apple.com>

        Access to service workers / Cache API should be disabled in sandboxed frames without allow-same-origin flag
        https://bugs.webkit.org/show_bug.cgi?id=182140
        <rdar://problem/36879952>

        Reviewed by Youenn Fablet.

        Throw a SecurityError when accessing navigator.serviceWorker or window.caches inside a sandboxed iframe
        without the allow-same-origin flag. This behavior is consistent with Chrome. Firefox, however, seems
        to return these objects but have their API reject promises with a SecurityError instead.

        No new tests, rebaselined existing tests.

        * Modules/cache/DOMWindowCaches.cpp:
        (WebCore::DOMWindowCaches::caches): Deleted.
        * Modules/cache/DOMWindowCaches.h:
        * Modules/cache/DOMWindowCaches.idl:
        * page/NavigatorBase.cpp:
        * page/NavigatorBase.h:
        * page/NavigatorServiceWorker.idl:

2018-01-25  Chris Dumez  <cdumez@apple.com>

        Clients.get(id) should only returns clients in the service worker's origin
        https://bugs.webkit.org/show_bug.cgi?id=182149
        <rdar://problem/36882310>

        Reviewed by Youenn Fablet.

        When looking for SW clients with a given identifier, only look in the list of
        clients that have the same origin as the service worker.

        No new tests, rebaselined existing test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::serviceWorkerClientWithOriginByID const):
        (WebCore::SWServer::serviceWorkerClientByID const): Deleted.
        * workers/service/server/SWServer.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::findClientByIdentifier const):
        * workers/service/server/SWServerWorker.h:

2018-01-25  Youenn Fablet  <youenn@apple.com>

        WebPluginInfoProvider should handle null host queries
        https://bugs.webkit.org/show_bug.cgi?id=182112

        Reviewed by Chris Dumez.

        No change of behavior.

        Removed assertion that is not always true, as shown by API tests.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        ShapeOutside should use same origin credentials mode
        https://bugs.webkit.org/show_bug.cgi?id=182141

        Reviewed by Chris Dumez.

        Covered by updated test.
        As per https://drafts.csswg.org/css-shapes/#shape-outside-property, ShapeOutside images
        should be fetched with anonymous cors mode, meaning credentials should be set to same-origin.

        * style/StylePendingResources.cpp:
        (WebCore::Style::loadPendingImage):

2018-01-25  John Wilander  <wilander@apple.com>

        Make sure we have a frame as we iterate in ResourceLoadObserver::nonNullOwnerURL()
        https://bugs.webkit.org/show_bug.cgi?id=182116
        <rdar://problem/36210134>

        Reviewed by Alex Christensen.

        No new tests. No known repro case, just crash logs.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::nonNullOwnerURL const):

2018-01-25  Jer Noble  <jer.noble@apple.com>

        Move ImageDecoderAVFObjC from using AVSampleBufferGenerator to AVAssetReaderOutput for parsing
        https://bugs.webkit.org/show_bug.cgi?id=182091

        Reviewed by Eric Carlson.

        No new tests; should be covered by existing tests.

        AVSampleBufferGenerator is not available on iOS, so in order to enable ImageDecoderAVFObjC there,
        we must adopt a similar API which is available both on iOS and macOS: AVAssetReaderOutput. Unlike
        the generator, AVAssetReaderOutput doesn't necessarily generate samples in decode order, so we'll
        repurpose the SampleMap from EME to hold the decoded samples as well as their generated images.

        * Modules/mediasource/SampleMap.cpp:
        * Modules/mediasource/SampleMap.h:
        (WebCore::SampleMap::size const):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageVideoOrSVGMIMEType):
        * platform/MediaSample.h:
        (WebCore::MediaSample::hasAlpha const):
        * platform/graphics/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoder::supportsMediaType):
        * platform/graphics/avfoundation/MediaSampleAVFObjC.h: Make non-final.
        (WebCore::MediaSampleAVFObjC::sampleBuffer const):
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.h:
        * platform/graphics/avfoundation/objc/ImageDecoderAVFObjC.mm:
        (WebCore::ImageDecoderAVFObjCSample::create):
        (WebCore::ImageDecoderAVFObjCSample::sampleBuffer const):
        (WebCore::ImageDecoderAVFObjCSample::image const):
        (WebCore::ImageDecoderAVFObjCSample::setImage):
        (WebCore::ImageDecoderAVFObjCSample::ImageDecoderAVFObjCSample):
        (WebCore::ImageDecoderAVFObjCSample::cacheMetadata):
        (WebCore::toSample):
        (WebCore::ImageDecoderAVFObjC::readSamples):
        (WebCore::ImageDecoderAVFObjC::storeSampleBuffer):
        (WebCore::ImageDecoderAVFObjC::advanceCursor):
        (WebCore::ImageDecoderAVFObjC::setTrack):
        (WebCore::ImageDecoderAVFObjC::encodedDataStatus const):
        (WebCore::ImageDecoderAVFObjC::repetitionCount const):
        (WebCore::ImageDecoderAVFObjC::frameIsCompleteAtIndex const):
        (WebCore::ImageDecoderAVFObjC::frameDurationAtIndex const):
        (WebCore::ImageDecoderAVFObjC::frameHasAlphaAtIndex const):
        (WebCore::ImageDecoderAVFObjC::createFrameImageAtIndex):
        (WebCore::ImageDecoderAVFObjC::setData):
        (WebCore::ImageDecoderAVFObjC::clearFrameBufferCache):
        (WebCore::ImageDecoderAVFObjC::sampleAtIndex const):
        (WebCore::ImageDecoderAVFObjC::readSampleMetadata): Deleted.

2018-01-25  Youenn Fablet  <youenn@apple.com>

        DocumentThreadableLoader should ensure service worker is not reused if redirection comes from the network
        https://bugs.webkit.org/show_bug.cgi?id=182137

        Reviewed by Chris Dumez.

        Covered by rebased test.
        In case redirection does not come from memory cache or service worker, disable service worker interception when following the redirection.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::redirectReceived):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        DocumentLoader should interrupt ongoing load when getting a redirection from network that matches a service worker
        https://bugs.webkit.org/show_bug.cgi?id=182115

        Reviewed by Alex Christensen.

        Covered by rebased test.

        In case a navigation load is going to the network process,
        we need to interrupt it if having a redirection that leads to a new request going to a service worker.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::redirectReceived):

2018-01-25  Chris Dumez  <cdumez@apple.com>

        Registering same scope as the script directory without the last slash should fail
        https://bugs.webkit.org/show_bug.cgi?id=182122
        <rdar://problem/36877167>

        Reviewed by Youenn Fablet.

        This aligns our behavior with Firefox and Chrome.

        No new tests, rebaselined existing test.

        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::didReceiveResponse):

2018-01-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose the reverse() method
        https://bugs.webkit.org/show_bug.cgi?id=182100
        <rdar://problem/36867117>

        Reviewed by Dean Jackson.

        We expose and implement the reverse() method on Animation as specified.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::setPlaybackRate):
        (WebCore::WebAnimation::reverse):
        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:

2018-01-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Account for provided easings when computing progress and resolving keyframe effect values
        https://bugs.webkit.org/show_bug.cgi?id=182098
        <rdar://problem/36866149>

        Reviewed by Dean Jackson.

        We now account for the timing functions provided through the "easing" propreties on whole animation effects
        and individual keyframes. Exposing those exposed shortcomings of our keyframe resolution in general through
        WPT tests so we now implement the "effect value of a keyframe effect" procedure from the spec to correctly
        resolve keyframes in KeyframeEffect::setAnimatedPropertiesInStyle(). The tests also showed some shortcomings
        in our TimingFunction code where our step() function resolution wasn't fully compliant and our cubic-bezier()
        resolution not accurate enough. We now have microsecond accuracy when resolving cubic-bezier() timing functions
        and identify cubic-bezier(0, 0, 0, 0), cubic-bezier(0, 0, 1, 1) and cubic-bezier(1, 1, 1, 1) as linear timing
        functions, as called out by the WPT tests.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::transformedProgress const): Account for the effect-wide timing function when computing
        the progress.
        (WebCore::AnimationEffect::iterationProgress const): Use the transformed progress now that we support this procedure.
        * animation/AnimationEffect.h:
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::apply): We now use the computed progress from AnimationEffect rather than compute based
        on the provided time, which we've dropped as an argument.
        (WebCore::KeyframeEffect::getAnimatedStyle):
        (WebCore::KeyframeEffect::setAnimatedPropertiesInStyle): Implement the "effect value of a keyframe effect" procedure
        in full as specified (save for composite operations).
        (WebCore::KeyframeEffect::applyAtLocalTime): Deleted.
        * animation/KeyframeEffect.h:
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::resolve):
        * css/CSSTimingFunctionValue.h: Fix a small error made in a previous patch where we used "int" instead of "unsigned".
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::transformTime const):
        * platform/animation/TimingFunction.h:

2018-01-25  Antoine Quint  <graouts@apple.com>

        [Web Animations] Avoid querying the current time multiple time when resolving the play state
        https://bugs.webkit.org/show_bug.cgi?id=182099

        Reviewed by Dean Jackson.

        No test change since this shouldn't cause any change in behavior.

        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::playState const):

2018-01-25  Youenn Fablet  <youenn@apple.com>

        Set integrity fetch options for loading scripts and CSS
        https://bugs.webkit.org/show_bug.cgi?id=182077

        Reviewed by Chris Dumez.

        Covered by updated test.

        Set integrity fetch option in script and CSS loading.

        * bindings/js/CachedModuleScriptLoader.cpp:
        (WebCore::CachedModuleScriptLoader::load):
        * bindings/js/CachedScriptFetcher.cpp:
        (WebCore::CachedScriptFetcher::requestModuleScript const):
        (WebCore::CachedScriptFetcher::requestScriptWithCache const):
        * bindings/js/CachedScriptFetcher.h:
        * dom/LoadableClassicScript.cpp:
        (WebCore::LoadableClassicScript::load):
        * dom/ScriptElementCachedScriptFetcher.cpp:
        (WebCore::ScriptElementCachedScriptFetcher::requestModuleScript const):
        * dom/ScriptElementCachedScriptFetcher.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):

2018-01-25  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Use GraphicsContextImplCairo in Nicosia::PaintingContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=182094

        Reviewed by Carlos Garcia Campos.

        Have Nicosia::PaintingContextCairo create a GraphicsContext object that
        utilizes a factory function which returns a freshly-allocated
        GraphicsContextImplCairo through which all the painting is then done.
        This moves GraphicsLayer painting over to using the GraphicsContextImpl
        infrastructure.

        No new tests -- no changes in behavior.

        * platform/graphics/nicosia/NicosiaPaintingContextCairo.cpp:
        (Nicosia::PaintingContextCairo::PaintingContextCairo):

2018-01-24  Frederic Wang  <fwang@igalia.com>

        ScrollingStateNode::reconcileLayerPositionForViewportRect is only called on direct children of the root
        https://bugs.webkit.org/show_bug.cgi?id=179946

        Reviewed by Simon Fraser.

        ScrollingStateNode::reconcileLayerPositionForViewportRect is currently only called on the
        direct children of root of the scrolling tree. Hence nodes like "position: fixed" will not
        update their layers after scrolling when they are deeper in the tree. This is already
        possible on iOS with overflow nodes and will happen with subframes when async scrolling is
        implemented. This commit fixes that issue by recursively calling the function
        ScrollingStateNode::reconcileLayerPositionForViewportRect on the scrolling tree.

        Test: fast/scrolling/ios/reconcile-layer-position-recursive.html

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::reconcileViewportConstrainedLayerPositions): Just call
        reconcileLayerPositionForViewportRect on the root node.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::reconcileLayerPositionForViewportRect): By default, this
        function now recursively calls reconcileLayerPositionForViewportRect on the children.
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::reconcileLayerPositionForViewportRect): Call the function
        on children.
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::reconcileLayerPositionForViewportRect): Ditto.

2018-01-24  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Use GraphicsContextImplCairo for ImageBuffer context
        https://bugs.webkit.org/show_bug.cgi?id=181977

        Reviewed by Carlos Garcia Campos.

        Enhance the GraphicsContextImpl interface to the point of enabling the
        Cairo-based implementation to be used for GraphicsContext construction
        in ImageBufferCairo.cpp.

        In order to enable GraphicsContextImpl implementations to properly
        manage PlatformGraphicsContext objects, the hasPlatformContext() and
        platformContext() methods are added. Cairo implementation returns true
        in the first method, and returns pointer to the PlatformContextCairo
        object in the second. The DisplayList::Recorder, due to its recording
        nature, doesn't manage such an object, so it returns false and nullptr,
        respectively.

        GraphicsContextImpl also gains the setCTM(), getCTM(), clipBounds() and
        roundToDevicePixels() methods, corresponding to the GraphicsContext
        methods that now invoke these new methods on any existing m_impl object.
        GraphicsContextImplCairo implementations mimic the existing behavior in
        the Cairo-specific GraphicsContext methods, but DisplayList::Recorder
        implementations remain no-op, logging the invocation but doing nothing
        otherwise.

        drawImage() and drawTiledImage() methods on the GraphicsContextImpl
        interface are changed to return the ImageDrawResult value, corresponding
        to what's been done in the method. In DisplayList::Recorder, the methods
        return ImageDrawResult::DidRecord, while in GraphicsContextImplCairo the
        methods return the return result of Image::draw() or Image::drawTiled()
        call.

        To make the protected Image::draw() and Image::drawTiled() methods
        accessible, invocations of those are packed into static drawImageImpl()
        and drawTiledImageImpl() functions on the GraphicsContextImpl class.
        This makes it possible to simply declare GraphicsContextImpl class as a
        friend class of Image, and not every specific GraphicsContextImpl
        derivation. Implementations of these functions mirror behavior of the
        drawImage() and drawTiledImage() methods on the GraphicsContext class,
        when an m_impl object isn't present, constructing a scope-tied
        InterpolationQualityMaintainer object and invoking the relevant Image
        method.

        To make immediate use of the new GraphicsContextImplCairo functionality,
        the GraphicsContext construction in Cairo-specific ImageBuffer
        implementation now uses a factory function that returns a new
        GraphicsContextImplCairo object through which the given
        PlatformContextCairo is used for painting.

        No new tests -- no change in functionality.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::hasPlatformContext const):
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::hasPlatformContext const): Deleted.
        * platform/graphics/GraphicsContextImpl.cpp:
        (WebCore::GraphicsContextImpl::drawImageImpl):
        (WebCore::GraphicsContextImpl::drawTiledImageImpl):
        * platform/graphics/GraphicsContextImpl.h:
        * platform/graphics/Image.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::platformContext const):
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::roundToDevicePixels):
        (WebCore::GraphicsContext::setCTM):
        * platform/graphics/cairo/GraphicsContextImplCairo.cpp:
        (WebCore::m_private):
        (WebCore::GraphicsContextImplCairo::~GraphicsContextImplCairo):
        (WebCore::GraphicsContextImplCairo::hasPlatformContext const):
        (WebCore::GraphicsContextImplCairo::platformContext const):
        (WebCore::GraphicsContextImplCairo::updateState):
        (WebCore::GraphicsContextImplCairo::setLineCap):
        (WebCore::GraphicsContextImplCairo::setLineDash):
        (WebCore::GraphicsContextImplCairo::setLineJoin):
        (WebCore::GraphicsContextImplCairo::setMiterLimit):
        (WebCore::GraphicsContextImplCairo::fillRect):
        (WebCore::GraphicsContextImplCairo::fillRoundedRect):
        (WebCore::GraphicsContextImplCairo::fillRectWithRoundedHole):
        (WebCore::GraphicsContextImplCairo::fillPath):
        (WebCore::GraphicsContextImplCairo::fillEllipse):
        (WebCore::GraphicsContextImplCairo::strokeRect):
        (WebCore::GraphicsContextImplCairo::strokePath):
        (WebCore::GraphicsContextImplCairo::strokeEllipse):
        (WebCore::GraphicsContextImplCairo::clearRect):
        (WebCore::GraphicsContextImplCairo::drawGlyphs):
        (WebCore::GraphicsContextImplCairo::drawImage):
        (WebCore::GraphicsContextImplCairo::drawTiledImage):
        (WebCore::GraphicsContextImplCairo::drawNativeImage):
        (WebCore::GraphicsContextImplCairo::drawPattern):
        (WebCore::GraphicsContextImplCairo::drawRect):
        (WebCore::GraphicsContextImplCairo::drawLine):
        (WebCore::GraphicsContextImplCairo::drawLinesForText):
        (WebCore::GraphicsContextImplCairo::drawLineForDocumentMarker):
        (WebCore::GraphicsContextImplCairo::drawEllipse):
        (WebCore::GraphicsContextImplCairo::drawFocusRing):
        (WebCore::GraphicsContextImplCairo::save):
        (WebCore::GraphicsContextImplCairo::restore):
        (WebCore::GraphicsContextImplCairo::translate):
        (WebCore::GraphicsContextImplCairo::rotate):
        (WebCore::GraphicsContextImplCairo::scale):
        (WebCore::GraphicsContextImplCairo::concatCTM):
        (WebCore::GraphicsContextImplCairo::setCTM):
        (WebCore::GraphicsContextImplCairo::getCTM):
        (WebCore::GraphicsContextImplCairo::beginTransparencyLayer):
        (WebCore::GraphicsContextImplCairo::endTransparencyLayer):
        (WebCore::GraphicsContextImplCairo::clip):
        (WebCore::GraphicsContextImplCairo::clipOut):
        (WebCore::GraphicsContextImplCairo::clipPath):
        (WebCore::GraphicsContextImplCairo::clipBounds):
        (WebCore::GraphicsContextImplCairo::roundToDevicePixels):
        (WebCore::m_platformContext): Deleted.
        * platform/graphics/cairo/GraphicsContextImplCairo.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipBounds const):
        (WebCore::GraphicsContext::setCTM):
        (WebCore::GraphicsContext::getCTM const):
        (WebCore::GraphicsContext::roundToDevicePixels):
        * platform/graphics/displaylists/DisplayListRecorder.cpp:
        (WebCore::DisplayList::Recorder::drawImage):
        (WebCore::DisplayList::Recorder::drawTiledImage):
        (WebCore::DisplayList::Recorder::drawNativeImage):
        (WebCore::DisplayList::Recorder::setCTM):
        (WebCore::DisplayList::Recorder::getCTM):
        (WebCore::DisplayList::Recorder::clipBounds):
        (WebCore::DisplayList::Recorder::roundToDevicePixels):
        * platform/graphics/displaylists/DisplayListRecorder.h:

2018-01-24  Christopher Reid  <chris.reid@sony.com>

        Linker error in ShareableBitmapCairo.cpp  undefined reference to WebCore::Cairo::ShadowState::ShadowState
        https://bugs.webkit.org/show_bug.cgi?id=182060

        Reviewed by Žan Doberšek.

        No new tests, no change in behavior.

        Added exports to WebCore::Cairo::ShadowState::ShadowState.

        * platform/graphics/cairo/CairoOperations.h:

2018-01-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Implement didSendData client callback.
        https://bugs.webkit.org/show_bug.cgi?id=182063

        Reviewed by Alex Christensen.

        No new tests (covered by existing tests).

        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::willSendData):
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::curlDidSendData):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2018-01-24  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement PublicKeyCredential’s [[DiscoverFromExternalSource]] with a dummy authenticator
        https://bugs.webkit.org/show_bug.cgi?id=182032
        <rdar://problem/36459922>

        Reviewed by Brent Fulgham.

        This patch implements PublicKeyCredential's [[DiscoverFromExternalSource]] from
        https://www.w3.org/TR/webauthn/#getAssertion as of 5 December 2017. In order to
        do testing, a dummy authenticator is implemented to exercise a failure and a
        pass path. A number of dependencies need to be resolved later in order to comply
        with the spec, which are marked by FIXME in the patch and tracked by proper
        bugs. Those dependencies will be addressed once the first prototype is finshed.

        Tests: http/tests/webauthn/public-key-credential-get-with-invalid-parameters.https.html
               http/wpt/credential-management/credentialscontainer-store-basics.https.html
               http/wpt/webauthn/public-key-credential-get-failure.https.html
               http/wpt/webauthn/public-key-credential-get-success.https.html

        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        Fixes some minor issues.
        * Modules/webauthn/Authenticator.cpp:
        (WebCore::Authenticator::getAssertion const):
        * Modules/webauthn/Authenticator.h:
        (WebCore::Authenticator::AssertionReturnBundle::AssertionReturnBundle):
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::collectFromCredentialStore):
        Changed a parameter type.
        (WebCore::PublicKeyCredential::discoverFromExternalSource):
        (WebCore::PublicKeyCredential::create):
        Improved some comments.
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h:
        (): Deleted.
        * bindings/js/JSAuthenticatorResponseCustom.cpp:
        (WebCore::toJSNewlyCreated):

2018-01-24  Dean Jackson  <dino@apple.com>

        Move WebGL's colorspace code into IOSurface
        https://bugs.webkit.org/show_bug.cgi?id=182076
        <rdar://problem/36846863>

        Reviewed by Simon Fraser, with assistance from Tim Horton.

        Rather than have WebGLLayer talk directly to an IOSurfaceRef,
        use a helper function on WebCore::IOSurface.

        No behaviour change.

        * platform/graphics/cocoa/IOSurface.h:
        * platform/graphics/cocoa/IOSurface.mm:
        (WebCore::IOSurface::migrateColorSpaceToProperties): Add new helper.
        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]): The
        newly created IOSurfaces call the helper to set up their colorspace.

2018-01-24  Dean Jackson  <dino@apple.com>

        Add a note about not implementing these functions without discussion.
        <rdar://problem/36666458>

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::clientWaitSync):
        (WebCore::WebGL2RenderingContext::getSyncParameter):

2018-01-24  Youenn Fablet  <youenn@apple.com>

        Opaque being-loaded responses should clone their body
        https://bugs.webkit.org/show_bug.cgi?id=182056

        Reviewed by Brady Eidson.

        Test: http/wpt/service-workers/clone-opaque-being-loaded-response.https.html

        When cloning a being-loaded response, make sure we create a ReadableStream.
        Before the patch, the readableStream was not created in that case for opaque responses.

        * Modules/fetch/FetchBodyOwner.cpp:
        (WebCore::FetchBodyOwner::readableStream):
        (WebCore::FetchBodyOwner::createReadableStream):
        * Modules/fetch/FetchBodyOwner.h:
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::clone):

2018-01-24  Chris Dumez  <cdumez@apple.com>

        close() operation should not be exposed inside a ServiceWorkerGlobalScope
        https://bugs.webkit.org/show_bug.cgi?id=182057

        Reviewed by Youenn Fablet.

        Move close() from WorkerGlobalScope to DedicatedWorkerGlobalScope as per:
        - https://html.spec.whatwg.org/multipage/workers.html#dedicatedworkerglobalscope

        This change to the specification was made to avoid exposing this deprecated
        features to service workers (which are new).

        No new tests, rebaselined existing test.

        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/WorkerGlobalScope.idl:

2018-01-24  David Hyatt  <hyatt@apple.com>

        Implement line clamp for mail.
        https://bugs.webkit.org/show_bug.cgi?id=180818

        Reviewed by Dean Jackson.

        This patch implements a form of clamping that can clamp lines at both the top
        and the bottom, and the interior can be replaced with a DOM element (identified
        by id) that replaces the middle section.

        The implementation derives from the multicolumn classes, but ultimately the
        clamp should derive from the fragmentset classes instead (with most of the current
        multicolumn code moving into base classes).

        The virtualization of many of the multicolumn functions is something that would happen
        once we move pages/printing over to this pagination model anyway.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        Add the new clamp classes.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSProperties.json:
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyValueWebkitLinesClamp):
        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        * css/parser/CSSParserMode.h:
        (WebCore::CSSParserContextHash::hash):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeLinesClamp):
        (WebCore::CSSPropertyParser::parseSingleValue):
        Implement the new CSS property, webkit-lines-clamp. This is only exposed if a preference
        is set, so it is not exposed to the Web.

        * page/Settings.yaml:
        Add a new setting to control allowing access to the new CSS property.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willCreateColumns const):
        Make sure columns are created when lines clamp is set.

        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::logicalHeightForLineCount):
        (WebCore::RenderBlockFlow::logicalHeightExcludingLineCount):
        (WebCore::RenderBlockFlow::layoutExcludedChildren):
        (WebCore::RenderBlockFlow::heightForLineCount): Deleted.
        * rendering/RenderBlockFlow.h:
        Re-use the same clamping logic as the old line clamp code, but modernize it to work
        with writing modes and to be able to go backwards from the end of the block.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        The line count method got renamed to have the word "logical" in it, since it now
        works with vertical writing.

        * rendering/RenderFragmentContainer.cpp:
        (WebCore::RenderFragmentContainer::pageLogicalHeightForOffset const):
        * rendering/RenderFragmentContainer.h:
        Since line clamp sets have variable page heights, this new method takes the offset
        as an argument so that it can return the appropriate page for the given offset.
        This method will eventually be used by printing/page sets as well, since pages
        can have variable heights.

        * rendering/RenderFragmentedFlow.cpp:
        (WebCore::RenderFragmentedFlow::validateFragments):
        (WebCore::RenderFragmentedFlow::pageLogicalHeightForOffset const):
        (WebCore::RenderFragmentedFlow::pageRemainingLogicalHeightForOffset const):
        * rendering/RenderFragmentedFlow.h:
        Support for variable page heights in a fragment set.

        * rendering/RenderLinesClampFlow.cpp: Added.
        (WebCore::RenderLinesClampFlow::RenderLinesClampFlow):
        (WebCore::RenderLinesClampFlow::renderName const):
        (WebCore::RenderLinesClampFlow::layout):
        (WebCore::RenderLinesClampFlow::createMultiColumnSet):
        (WebCore::RenderLinesClampFlow::isChildAllowedInFragmentedFlow const):
        (WebCore::RenderLinesClampFlow::layoutFlowExcludedObjects):
        * rendering/RenderLinesClampFlow.h: Added.
        * rendering/RenderLinesClampSet.cpp: Added.
        (WebCore::RenderLinesClampSet::RenderLinesClampSet):
        (WebCore::RenderLinesClampSet::recalculateColumnHeight):
        (WebCore::RenderLinesClampSet::computeLogicalHeight const):
        (WebCore::RenderLinesClampSet::columnCount const):
        (WebCore::RenderLinesClampSet::columnRectAt const):
        (WebCore::RenderLinesClampSet::columnIndexAtOffset const):
        (WebCore::RenderLinesClampSet::pageLogicalTopForOffset const):
        (WebCore::RenderLinesClampSet::pageLogicalHeightForOffset const):
        (WebCore::RenderLinesClampSet::fragmentedFlowPortionRectAt const):
        (WebCore::RenderLinesClampSet::fragmentedFlowPortionOverflowRect):
        (WebCore::RenderLinesClampSet::customBlockProgressionAdjustmentForColumn const):
        (WebCore::RenderLinesClampSet::renderName const):
        * rendering/RenderLinesClampSet.h: Added.
        The new classes. They subclass all the methods necessary to do multi-pass layout,
        and to determine the page heights of each section.

        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::isColumnSpanningDescendant const):
        (WebCore::isValidColumnSpanner):
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        (WebCore::RenderMultiColumnFlow::createMultiColumnSet):
        * rendering/RenderMultiColumnFlow.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::collectLayerFragments):
        (WebCore::RenderMultiColumnSet::columnTranslationForOffset const):
        * rendering/RenderMultiColumnSet.h:
        (WebCore::RenderMultiColumnSet::skipLayerFragmentCollectionForColumn const):
        (WebCore::RenderMultiColumnSet::customBlockProgressionAdjustmentForColumn const):
        Virtualized methods so that lines clamp can subclass and change behavior.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderLinesClampFlow const):
        (WebCore::RenderObject::isRenderLinesClampSet const):
        Add new functions for type checking.

        * rendering/RenderRubyText.cpp:
        Include adjustment.

        * rendering/style/LineClampValue.h:
        (WebCore::LinesClampValue::LinesClampValue):
        (WebCore::LinesClampValue::isNone const):
        (WebCore::LinesClampValue::operator== const):
        (WebCore::LinesClampValue::operator!= const):
        (WebCore::LinesClampValue::start const):
        (WebCore::LinesClampValue::end const):
        (WebCore::LinesClampValue::center const):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::linesClamp const):
        (WebCore::RenderStyle::hasLinesClamp const):
        (WebCore::RenderStyle::setLinesClamp):
        (WebCore::RenderStyle::initialLinesClamp):
        (WebCore::RenderStyle::hasInlineColumnAxis const):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator== const):
        * rendering/style/StyleRareNonInheritedData.h:
        The front end style implementation of the new property.

        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        Make sure to build the correct renderer when lines clamp is set.

2018-01-24  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Allocate CurlSSLVerifier only when it is required.
        https://bugs.webkit.org/show_bug.cgi?id=182061

        CurlSSLVerifier was a member function of CurlRequest. This patch do
        lazy initialization of it only when actually it is required.
        Also configuration method is not required by moving those stuff to
        constructor of SSLVerifier which makes much safer because there's
        no change to change its behavior from outside.

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::willSetupSslCtx):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::finalizeTransfer):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlSSLVerifier.cpp:
        (WebCore::CurlSSLVerifier::CurlSSLVerifier):
        (WebCore::CurlSSLVerifier::setSslCtx): Deleted.
        * platform/network/curl/CurlSSLVerifier.h:
        (WebCore::CurlSSLVerifier::setCurlHandle): Deleted.
        (WebCore::CurlSSLVerifier::setHostName): Deleted.

2018-01-24  Antti Koivisto  <antti@apple.com>

        Assertion failure in RenderMultiColumnSet::requiresBalancing() on fast/multicol/spanner-crash-when-adding-summary.html
        https://bugs.webkit.org/show_bug.cgi?id=179308
        <rdar://problem/34592771>

        Reviewed by Zalan Bujtas.

        The issue here is that we fail to tear down render tree for a summary element because adding another summary element
        takes it out of the composed tree. This leaves behind renderers that break some multicolumn assumptions.

        * rendering/updating/RenderTreeUpdater.cpp:
        (WebCore::RenderTreeUpdater::tearDownRenderers):
        (WebCore::RenderTreeUpdater::tearDownLeftoverShadowHostChildren):

        When tearing down renderers go through the real children of the shadow hosts at the end and see if we left any renderers behind.
        If so, tear them down too.

        * rendering/updating/RenderTreeUpdater.h:

2018-01-24  Daniel Bates  <dabates@apple.com>

        [CSP] Check policy for targeted windows when navigating to a JavaScript URL
        https://bugs.webkit.org/show_bug.cgi?id=182018
        <rdar://problem/36795781>

        Reviewed by Brent Fulgham.

        Move the CSP check to be earlier in the function.

        Test: http/tests/security/contentSecurityPolicy/window-open-javascript-url-with-target-blocked.html

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

2018-01-24  Chris Dumez  <cdumez@apple.com>

        Add a IPC::SendSyncOption indicating we should not process incoming IPC while waiting for the sync reply
        https://bugs.webkit.org/show_bug.cgi?id=182021
        <rdar://problem/21629943>

        Reviewed by Ryosuke Niwa.

        Add layout testing infrastructure for the new flag.

        Test: fast/misc/testIncomingSyncIPCMessageWhileWaitingForSyncReply.html

        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove pre-Sierra-OS-specific code in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=182026

        Reviewed by Tim Horton.

        * page/cocoa/UserAgent.mm:
        (WebCore::systemMarketingVersionForUserAgentString):
        * page/scrolling/mac/ScrollingMomentumCalculatorMac.mm:
        (WebCore::ScrollingMomentumCalculatorMac::retargetedScrollOffsetDidChange):
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::bitmapPNGFileType):
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/avfoundation/objc/VideoFullscreenLayerManager.mm:
        (WebCore::VideoFullscreenLayerManager::setVideoFullscreenLayer):
        * platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:
        (layerContentsFormat):
        (PlatformCALayerCocoa::updateContentsFormat):
        (PlatformCALayerCocoa::backingStoreBytesPerPixel const):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::linearRGBColorSpaceRef):
        (WebCore::extendedSRGBColorSpaceRef):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::getCSSAttribute):
        (WebCore::capabilitiesForFontDescriptor):
        (WebCore::findClosestFont):
        (WebCore::platformFontLookupWithFamily):
        (WebCore::lookupFallbackFont):
        (WebCore::fontWeightFromCoreText): Deleted.
        * platform/graphics/cocoa/FontCocoa.mm:
        (WebCore::Font::variantCapsSupportsCharacterForSynthesis const):
        (WebCore::Font::platformWidthForGlyph const):
        (WebCore::advanceForColorBitmapFont): Deleted.
        (WebCore::canUseFastGlyphAdvanceGetter): Deleted.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash const):
        (WebCore::FontPlatformData::platformIsEqual const):
        (WebCore::FontPlatformData::ctFont const):
        * platform/graphics/cocoa/GraphicsContextCocoa.mm:
        (WebCore::linearRGBColorSpaceRef): Deleted.
        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::setTimebase):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat):
        * platform/mac/PlatformScreenMac.mm:
        (WebCore::screenSupportsExtendedColor):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::didCreateScrollerImp):
        (WebCore::ScrollbarThemeMac::isLayoutDirectionRTL):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::userPrefersReducedMotion const):
        * platform/network/cocoa/ResourceRequestCocoa.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findNextWordFromIndex):
        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::shouldPlaceBlockDirectionScrollbarOnLeft const):
        * testing/Internals.mm:
        (WebCore::Internals::userPrefersReducedMotion const):

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove WebProcess authentication code
        https://bugs.webkit.org/show_bug.cgi?id=182020

        Reviewed by Brady Eidson.

        We were keeping it around for pre-NetworkSession media loading, which is gone now.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerShouldWaitForResponseToAuthenticationChallenge): Deleted.
        * html/HTMLMediaElement.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):
        * loader/ResourceLoader.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge): Deleted.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldWaitForResponseToAuthenticationChallenge): Deleted.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge): Deleted.

2018-01-24  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: SVG AAM mapping trumps ARIA role attribute in the case of SVG root
        https://bugs.webkit.org/show_bug.cgi?id=181994

        Reviewed by Chris Fleizach.

        Only return AccessibilityRole::Group if we have no author-provided
        ARIA role attribute value.

        Test: accessibility/svg-element-with-aria-role.html

        * accessibility/AccessibilitySVGRoot.cpp:
        (WebCore::AccessibilitySVGRoot::roleValue const):
        * accessibility/AccessibilitySVGRoot.h:

2018-01-24  Alex Christensen  <achristensen@webkit.org>

        Remove unused QTKit preference
        https://bugs.webkit.org/show_bug.cgi?id=181968

        Reviewed by Alexey Proskuryakov.

        They weren't used and didn't do anything.

        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::setQTKitEnabled): Deleted.
        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::isQTKitEnabled): Deleted.

2018-01-24  Antoine Quint  <graouts@apple.com>

        [Web Animations] Compute the progress and currentIteration properties on getComputedTiming()
        https://bugs.webkit.org/show_bug.cgi?id=182039
        <rdar://problem/36813568>

        Reviewed by Dean Jackson.

        Compute the "progress" and "currentIteration" properties on the dictionary returned by getComputedTiming().
        To support this we implement several procedures from the specification implemented separately with links
        and steps copied from the specification. There is one last procedure we don't implement, which is to obtain
        the transformed time following the application of the provided easing, which will be the next patch.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::phase const):
        (WebCore::AnimationEffect::activeTime const):
        (WebCore::AnimationEffect::overallProgress const):
        (WebCore::AnimationEffect::simpleIterationProgress const):
        (WebCore::AnimationEffect::currentIteration const):
        (WebCore::AnimationEffect::currentDirection const):
        (WebCore::AnimationEffect::directedProgress const):
        (WebCore::AnimationEffect::iterationProgress const):
        (WebCore::AnimationEffect::getComputedTiming):
        * animation/AnimationEffect.h:

2018-01-24  Daniel Bates  <dabates@apple.com>

        REGRESSION (r226138): Selecting a line that ends with zero-width joiner (ZWJ) may cause text transformation
        https://bugs.webkit.org/show_bug.cgi?id=181993
        <rdar://problem/36421080>

        Reviewed by David Hyatt.

        Re-implement paint optimization that was inadvertently removed in r226138. This optimization
        works around an issue where selecting the last printable character in a line that is followed
        followed by a zero-width joiner transforms the selected character.

        We need to fix <https://bugs.webkit.org/show_bug.cgi?id=181964> to improve the interaction
        of selection and zero-width joiner characters. For now, re-implement a paint optimization
        to perform a single paint operation when the style of the non-selected text is identical
        to the style of the selected text.

        Test: fast/text/mac/select-character-before-zero-width-joiner.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areBackgroundMarkerSubrangeStylesEqual):
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areForegroundMarkerSubrangeStylesEqual):
        (WebCore::InlineTextBox::MarkerSubrangeStyle::areDecorationMarkerSubrangeStylesEqual):
        Add helper functions to determine when marker styles are identical. We make use of these
        equality functions to coalesce adjacent subranges that have the same visual style and
        hence reduce the number of drawing commands to paint all the subranges in a line.
 
        (WebCore::InlineTextBox::paint): Coalesce subranges before painting.

        (WebCore::InlineTextBox::subdivideAndResolveStyle): Split out the logic to coalesce
        subranges with the same style into its own function InlineTextBox::coalesceAdjacentSubranges()
        and kept this function focused on subdivision and style resolution. Manually compute
        the frontmost subranges so that we can resolve style for each subrange with respect to
        the correct base style. Formerly we always resolved style with respect the specified
        base style. Now we resolve style with respect the previous frontmost subrange to ensure
        styles cascade as expected. This change causes no visual difference now. Once we implement
        <https://bugs.webkit.org/show_bug.cgi?id=175784> we will be able to test this change
        with respect to selection of ::spelling-error/::grammar-error pseudo elements.

        (WebCore::InlineTextBox::coalesceAdjacentSubranges): Extracted logic from InlineTextBox::subdivideAndResolveStyle().

        (WebCore::InlineTextBox::MarkerSubrangeStyle::operator== const): Deleted.
        (WebCore::InlineTextBox::MarkerSubrangeStyle::operator!= const): Deleted.
        Comparing MarkerSubrangeStyle objects should be performed using the appropriate
        are*MarkerSubrangeStylesEqual() non-member function.

        * rendering/InlineTextBox.h:
        * rendering/MarkerSubrange.cpp:
        (WebCore::subdivide): Remove overlap strategy FrontmostWithLongestEffectiveRange
        as this strategy is now implemented by InlineTextBox::subdivideAndResolveStyle() and
        InlineTextBox::coalesceAdjacentSubranges() that compute the set of frontmost subranges and
        coalesces adjacent subranges with the same style into the longest effective subrange,
        respectively. Unlike WebCore::subdivide(), InlineTextBox knows what the base style should
        be for the subranges and can more aggressively coalesce adjacent subranges of different
        types that have the same visual style.
        * rendering/MarkerSubrange.h:

2018-01-24  Youenn Fablet  <youenn@apple.com>

        Fetch response should copy its url from the request if null
        https://bugs.webkit.org/show_bug.cgi?id=182048

        Reviewed by Chris Dumez.

        No change of behavior.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived): Add assertion to check that the response URL is not null.

2018-01-24  Youenn Fablet  <youenn@apple.com>

        Account for memory cache in DocumentThreadableLoader::didReceiveResponse assertion
        https://bugs.webkit.org/show_bug.cgi?id=182049

        Reviewed by Chris Dumez.

        No change of behavior.
        A response served from Service Worker may be cached in Memory Cache and reused later on.
        Update DTL assertion to handle that case.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):

2018-01-24  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r227457): Release assert in updateLayout while destructing a media element
        https://bugs.webkit.org/show_bug.cgi?id=182038
        <rdar://problem/36812083>

        Reviewed by Jer Noble.

        * html/MediaElementSession.cpp:
        (WebCore::isMainContentForPurposesOfAutoplay): Early return if element.isSuspended().
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::clientCharacteristicsChanged): Call scheduleUpdateNowPlayingInfo
        instead of updateNowPlayingInfo.

2018-01-24  Chris Fleizach  <cfleizach@apple.com>

        AX: Provide a way for VoiceOver to uniquely identify a web session
        https://bugs.webkit.org/show_bug.cgi?id=181894

        Reviewed by Joanmarie Diggs.

        Add a way for VoiceOver to uniquely track a web page session.

        Test: accessibility/mac/session-id.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2018-01-24  Antti Koivisto  <antti@apple.com>

        RenderBlockRareData::m_enclosingFragmentedFlow should be WeakPtr
        https://bugs.webkit.org/show_bug.cgi?id=182045
        <rdar://problem/36334787>

        Reviewed by Zalan Bujtas.

        For safety.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::cachedEnclosingFragmentedFlow const):
        (WebCore::RenderBlock::updateCachedEnclosingFragmentedFlow const):
        (WebCore::RenderBlock::locateEnclosingFragmentedFlow const):

2018-01-23  Dean Jackson  <dino@apple.com>

        REGRESSION (r222961?): sRGB images shown in WebGL are over-saturated on a wide gamut monitor
        https://bugs.webkit.org/show_bug.cgi?id=182033
        <rdar://problem/36377780>

        Reviewed by Antoine Quint.

        My fix for YouTube360 changed the way we composite WebGL on macOS. Unfortunately it dropped
        a flag telling the compositor the colorspace of the content should be sRGB. Reinstate this
        by explicitly setting the colorspace on the IOSurface we use for WebGL back buffers.

        This *should* be covered by the test in:
        fast/canvas/webgl/match-page-color-space.html
        ... however, it shows a problem with our testing infrastructure. As long as it is not
        testing on a Wide Gamut display, and explicitly setting the color profile, an automated
        test won't pick up this regression. I could add an Internals helper to query the colorspace
        of the WebGL content, but that doesn't actually verify the composited result, which is
        all that matters.

        * platform/graphics/cocoa/WebGLLayer.mm:
        (-[WebGLLayer allocateIOSurfaceBackingStoreWithSize:usingAlpha:]):

2018-01-24  Ms2ger  <Ms2ger@igalia.com>

        [GTK] Fix some test failures in ATK selection handling.
        https://bugs.webkit.org/show_bug.cgi?id=168369
        <rdar://problem/30534881>

        Reviewed by Joanmarie Diggs.

        In r208479, selectionBelongsToObject was changed to return false if the
        intersectsNode call returns an exception.

        In particular, this caused accessibility/gtk/text-at-offset-textarea.html
        to fail. In this test, the selection is situated in the shadow DOM of the
        textarea, while the node that is checked for intersection is the textarea
        itself. In line with the standard, intersectsNode returns an exception in
        this case.

        This caused webkitAccessibleText{Word, Line, Sentence}ForBoundary to stop
        returning the expected text in the tested case. Removing this check fixes
        the test, along with some others.

        Tests: accessibility/gtk/text-at-offset-textarea.html
               accessibility/gtk/text-at-offset-textinput.html
               accessibility/selected-text-range-aria-elements.html
               accessibility/textarea-selected-text-range.html

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject): Remove the selectionBelongsToObject() call.

2018-01-18  Sergio Villar Senin  <svillar@igalia.com>

        [WebVR] Add OpenVR to the tree and to the build
        https://bugs.webkit.org/show_bug.cgi?id=177298

        Reviewed by Žan Doberšek.

        Added build dependencies with the OpenVR library.

        * CMakeLists.txt:

2018-01-23  Wenson Hsieh  <wenson_hsieh@apple.com>

        Harden against layout passes triggered when iterating through HTMLFormElement::associatedElements
        https://bugs.webkit.org/show_bug.cgi?id=182037
        <rdar://problem/36747812>

        Reviewed by Ryosuke Niwa.

        Observe that HTMLFormElement::associatedElements returns a const reference to a Vector of raw
        FormAssociatedElement pointers. In various call sites that iterate through these associated elements using this
        function, some require synchronous layout updates per iteration, which can lead to a bad time when combined with
        the first observation.

        To address this, we introduce HTMLFormElement::copyAssociatedElementsVector. This returns a new vector
        containing strong Refs to each associated element. From each call site that may trigger synchronous layout and
        execute arbitrary script while iterating over associated form elements, we instead use iterate over protected
        FormAssociatedElements.

        From each call site that currently doesn't (and shouldn't) require a layout update, we use the old version that
        returns a list of raw FormAssociatedElement pointers, but add ScriptDisallowedScopes to ensure that we never
        execute script there in the future.

        Test: fast/forms/form-data-associated-element-iteration.html

        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):

        Change to use copyAssociatedElementsVector().

        * html/FormController.cpp:
        (WebCore::recordFormStructure):
        (WebCore::FormController::restoreControlStateIn):

        Change to use copyAssociatedElementsVector().

        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::copyAssociatedElementsVector const):
        (WebCore:: const):
        (WebCore::HTMLFieldSetElement::length const):

        Refactor to use unsafeAssociatedElements().

        * html/HTMLFieldSetElement.h:
        * html/HTMLFormControlsCollection.cpp:
        (WebCore:: const):
        (WebCore::HTMLFormControlsCollection::copyFormControlElementsVector const):
        (WebCore::HTMLFormControlsCollection::customElementAfter const):
        (WebCore::HTMLFormControlsCollection::updateNamedElementCache const):

        Refactor these to use unsafeAssociatedElements().

        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::unsafeAssociatedElements const):
        (WebCore::HTMLFormElement::copyAssociatedElementsVector const):
        * html/HTMLFormElement.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

        Refactor to use copyAssociatedElementsVector().

2018-01-23  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Fix wrong redirection with relative url when it happens from
        different host than original host.
        https://bugs.webkit.org/show_bug.cgi?id=181873

        Reviewed by Alex Christensen.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::willSendRequest):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::willSendRequest):

2018-01-23  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        Updated API test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromAncestor): Call mediaSession->clientCharacteristicsChanged
        so NowPlaying status will be updated.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const): Return early when the media 
        element has been suspended.
        (WebCore::MediaElementSession::canShowControlsManager const): Return false when being queried
        for NowPlaying status in an inactive document or when element has been suspended.
        (WebCore::isMainContentForPurposesOfAutoplay): Return early if it isn't safe to update
        style because HitTest can force a layout.
        (WebCore::MediaElementSession::updateIsMainContent const): Ditto.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): Implement in for all
        ports.
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::registeredAsNowPlayingApplication const):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo): Call MRMediaRemoteSetCanBeNowPlayingApplication
        whenever status changes.
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): Deleted, implemented
        in the base class.

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Use CompletionHandlers for ResourceHandleClient::didReceiveResponseAsync
        https://bugs.webkit.org/show_bug.cgi?id=181961

        Reviewed by Michael Catanzaro.

        No change in behavior.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponseAsync):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponseAsync):
        * loader/appcache/ApplicationCacheGroup.h:
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyResponseOnSuccess):
        (WebCore::BlobResourceHandle::notifyResponseOnError):
        (WebCore::BlobResourceHandle::continueDidReceiveResponse): Deleted.
        * platform/network/BlobResourceHandle.h:
        * platform/network/PingHandle.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::didReceiveResponse):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveResponseAsync):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse): Deleted.
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::handleDataURL):
        (WebCore::ResourceHandleCurlDelegate::continueDidReceiveResponse): Deleted.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::continueDidReceiveResponse): Deleted.
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.h:
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate continueDidReceiveResponse]): Deleted.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::nextMultipartResponsePartCallback):
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::continueDidReceiveResponse): Deleted.

2018-01-23  Chris Dumez  <cdumez@apple.com>

        Unreviewed, rollout r227216 as it seems to be causing deadlocks
        https://bugs.webkit.org/show_bug.cgi?id=182013

        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::testIncomingSyncIPCMessageWhileWaitingForSyncReply): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:

2018-01-23  Ali Juma  <ajuma@chromium.org>

        REGRESSION (r226622): ASSERTION FAILED: !m_frame in WebCore::DOMWindowProperty::willDestroyGlobalObjectInCachedFrame()
        https://bugs.webkit.org/show_bug.cgi?id=181756

        Reviewed by Simon Fraser.

        Don't create a VisualViewport for a suspended DOMWindow. When a DOMWindow is suspended
        for document suspension, all DOMWindowProperties are disconnected from their frame.
        Creating a new VisualViewport while in this state means unexpectedly having a DOMWindowProperty
        that's connected to a frame, and this leads to an assertion failure.

        Test: http/tests/navigation/https-in-page-cache.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::visualViewport const):
        Don't create a VisualViewport while suspended.
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        Handle null DOMWindow::visualViewport.

2018-01-23  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] CurlRequest must protect its client from disposal while it's on duty.
        https://bugs.webkit.org/show_bug.cgi?id=181875

        Reviewed by Alex Christensen.

        No new tests. It's covered by existing tests.

        * platform/network/curl/CurlDownload.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::callClient):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didReceiveDataFromMultipart):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/CurlRequestClient.h:
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2018-01-23  Commit Queue  <commit-queue@webkit.org>

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

        broke build (Requested by alexchristensen on #webkit).

        Reverted changeset:

        "Remove unused QTKit preference"
        https://bugs.webkit.org/show_bug.cgi?id=181968
        https://trac.webkit.org/changeset/227437

2018-01-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose getKeyframes() and parsing of remaining keyframe properties
        https://bugs.webkit.org/show_bug.cgi?id=181978

        Not reviewed.

        Fix failures for http/wpt/web-animations/interfaces/AnimationEffectTiming/easing.html introduced in the previous patch.
        Those keyword values are not expected.

        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::cssText const):

2018-01-23  Simon Fraser  <simon.fraser@apple.com>

        feMorphology stops applying if either x or y radius is 0 but should not.
        https://bugs.webkit.org/show_bug.cgi?id=181903

        Reviewed by Dean Jackson.
        
        feMorphology should allow the radius on one axis to be zero but still apply the effect
        (it's akin to a blur on just one axis). Also, any negative radius, or zero on both axes
        should act like a pass-through, rather than outputting transparent blank (this is a spec
        change from SVG 1.1 to SVG 2).

        Tests: svg/filters/feMorphology-zero-radius-one-axis-expected.svg
               svg/filters/feMorphology-zero-radius-one-axis.svg

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyDegenerate):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::createImageBufferResult):

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Remove unused MediaPlayerSupportsTypeClient
        https://bugs.webkit.org/show_bug.cgi?id=182003

        Reviewed by Sam Weinig.

        This was used for a QTKit-specific hack I removed in r227372.

        * Modules/encryptedmedia/CDM.cpp:
        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementationSupportsTypeClient::DOMImplementationSupportsTypeClient): Deleted.
        (): Deleted.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType const):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::mediaPlayerNeedsSiteSpecificHacks const): Deleted.
        (WebCore::HTMLMediaElement::mediaPlayerDocumentHost const): Deleted.
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerSupportsTypeClient::mediaPlayerNeedsSiteSpecificHacks const): Deleted.
        (WebCore::MediaPlayerSupportsTypeClient::mediaPlayerDocumentHost const): Deleted.

2018-01-23  Alex Christensen  <achristensen@webkit.org>

        Remove unused QTKit preference
        https://bugs.webkit.org/show_bug.cgi?id=181968

        Reviewed by Alexey Proskuryakov.

        They weren't used and didn't do anything.

        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::setQTKitEnabled): Deleted.
        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::isQTKitEnabled): Deleted.

2018-01-23  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] 'left' and 'right' should parse as invalid in block/cross-axis alignment
        https://bugs.webkit.org/show_bug.cgi?id=181792

        Reviewed by Antti Koivisto.

        The CSS WG resolved to remove the 'left' and 'right' values from the
        block/cross axis alignment properties.

        https://github.com/w3c/csswg-drafts/issues/1403

        This patch changes the CSS parsing logic of all the CSS Box Alignment
        properties, both block-axis (align-{self, items, content} and
        inline-axis (justify-{self, items, content}).

        Additionally, the alignment shorthands (place-{self, items, content})
        have been also changed to respect the new syntax.

        Despite the number of layout tests changed, I don't think this
        change will break any content in current sites. The CSS values
        'left' and 'right' were introduced by the new CSS Box Alignment
        spec and only implemented by the CSS Grid Layout feature, shipped
        last year. Additionally, the removed values have no effect on the
        layout result when they are applied to the block/cross-axis CSS
        Alignment properties.

        Tests: imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-align-content-001.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-align-content-002.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-align-content-003.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-align-content-004.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-align-content-005.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-justify-content-001.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-justify-content-002.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-justify-content-003.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-justify-content-004.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/parse-justify-content-005.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-001.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-002.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-003.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-004.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-005.html
               imported/w3c/web-platform-tests/css/css-align/content-distribution/place-content-shorthand-006.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/justify-items-legacy-001.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-align-items-001.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-align-items-002.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-align-items-003.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-align-items-004.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-align-items-005.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-001.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-002.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-003.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-004.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-005.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/parse-justify-items-006.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-001.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-002.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-003.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-004.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-005.html
               imported/w3c/web-platform-tests/css/css-align/default-alignment/place-items-shorthand-006.html
               imported/w3c/web-platform-tests/css/css-align/distribution-values/space-evenly-001.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-align-self-001.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-align-self-002.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-align-self-003.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-align-self-004.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-align-self-005.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-justify-self-001.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-justify-self-002.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-justify-self-003.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-justify-self-004.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/parse-justify-self-005.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-001.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-002.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-003.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-004.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-005.html
               imported/w3c/web-platform-tests/css/css-align/self-alignment/place-self-shorthand-006.html

        * css/parser/CSSPropertyParser.cpp:
        (WebCore::isLeftOrRightKeyword):
        (WebCore::isContentPositionKeyword):
        (WebCore::isContentPositionOrLeftOrRightKeyword):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::isSelfPositionKeyword):
        (WebCore::isSelfPositionOrLeftOrRightKeyword):
        (WebCore::consumeSelfPositionOverflowPosition):
        (WebCore::consumeAlignItems):
        (WebCore::consumeJustifyItems):
        (WebCore::CSSPropertyParser::parseSingleValue):
        (WebCore::consumeSimplifiedContentPosition):
        (WebCore::CSSPropertyParser::consumePlaceContentShorthand):
        (WebCore::consumeSimplifiedItemPosition):
        (WebCore::CSSPropertyParser::consumePlaceItemsShorthand):
        (WebCore::CSSPropertyParser::consumePlaceSelfShorthand):

2018-01-23  Simon Fraser  <simon.fraser@apple.com>

        Element with position:fixed stops scrolling at the bottom of the page, but is painted in the right place on Chacos.com.
        https://bugs.webkit.org/show_bug.cgi?id=181741
        rdar://problem/36593581

        Reviewed by Tim Horton.

        The #ifdef for iOS was wrong; on iOS, visibleSize() is in content coordinates and matches
        unscaledDocumentRect, so there's no need to scale it. Doing so computed the wrong unscaledMaximumScrollPosition
        which broke hit-testing when the document minimum scale was > 1.

        Test: fast/visual-viewport/ios/min-scale-greater-than-one.html

        * page/FrameView.cpp:
        (WebCore::FrameView::unscaledMaximumScrollPosition const):

2018-01-23  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose getKeyframes() and parsing of remaining keyframe properties
        https://bugs.webkit.org/show_bug.cgi?id=181978
        <rdar://problem/36772586>

        Reviewed by Dean Jackson.

        We finish our implementation of multiple keyframes by exposing the getKeyframes() method on KeyframeEffect and
        parsing the remaining properties that can be exposed on keyframes: "easing" and "composite". And since we parse
        those properties on keyframes, we also parse "easing" on AnimationEffectTiming and "composite" and "iterationComposite"
        on KeyframeEffect. 

        To support this, we implement a new TimingFunction::createFromCSSText() method which takes in a string that is
        a value provided directly via the JS API. As its converse, we expose a TimingFunction::cssText() method which
        provides a string that can be sent back to JS to represent a timing function, using keywords when the timing
        function matches one and ommitting default values.

        We now also keep track of the original "offset" value provided through the JS API since that value is required
        when calling getKeyframes() and distinct from the "computedOffset". These original offsets, composite operations
        and timing functions are kept as separate Vectors from the KeyframeList since this type does not support exposing
        those. We may consider improving that in a future patch.

        Finally, we make some adjustments in the keyframe parsing to comply with the specification and correctly parse
        all provided timing functions, regardless of the number of keyframes and timing functions provided.

        Note that this patch is only about parsing, storing and returning provided easing and composite operations but
        that such values will only be used for the resolution of animation effects in future patches.

        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::getComputedTiming): Set the "easing" property on the getComputedTiming() return value
        now that we expose "easing" on AnimationEffectTiming.
        * animation/AnimationEffectTiming.cpp:
        (WebCore::AnimationEffectTiming::AnimationEffectTiming): Create a linear TimingFunction by default.
        (WebCore::AnimationEffectTiming::setEasing): Parse the "easing" value and propagate an exception for invalid values.
        * animation/AnimationEffectTiming.h: Expose the new "easing" property and backing TimingFunction.
        * animation/AnimationEffectTiming.idl: Expose the new "easing" property.
        * animation/KeyframeEffect.cpp:
        (WebCore::CSSPropertyIDToIDLAttributeName): Provide a way to convert the name of a CSS property to a string that can
        be used to generate a JS property name for use by getKeyframes().
        (WebCore::computeMissingKeyframeOffsets): Implement the full steps of the spec.
        (WebCore::processIterableKeyframes): Fix a problematic declaration for the easing variable.
        (WebCore::processPropertyIndexedKeyframes): Now that ProcessedKeyframe has both an offset and a computedOffset, use
        computed offsets. We also fix a couple of loops to fix compliance issues revealed by WPT tests.
        (WebCore::KeyframeEffect::create): Parse the provided "easing" property on the KeyframeEffectOptions object.
        (WebCore::KeyframeEffect::getKeyframes): Implement the getKeyframes() method as mandated by the spec.
        (WebCore::KeyframeEffect::processKeyframes): Keep a list of unused easings so these might be parsed as well, and
        potentially throw exceptions, as mandated by the spec. For valid easings, store their matching TimingFunction in
        m_timingFunctions, original offset values in m_offsets and CompositeOperation values in m_compositeOperations.
        * animation/KeyframeEffect.h: Switch the order in which we specify some of the Variant types so that default values
        are correctly used.
        * animation/KeyframeEffect.idl: Switch the order in which we specify some of the Variant types so that default values
        are correctly used.
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::createFromCSSText):
        (WebCore::TimingFunction::cssText const):
        * platform/animation/TimingFunction.h:

2018-01-23  Brady Eidson  <beidson@apple.com>

        Allow passing MessagePorts across processes (e.g. ServiceWorkers).
        https://bugs.webkit.org/show_bug.cgi?id=181178

        Reviewed by Andy Estes.

        Test: http/tests/workers/service/basic-messageport.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::entanglePortWithProcess):
        * dom/messageports/MessagePortChannel.h:

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::postMessageToServiceWorkerClient):
        * workers/service/SWClientConnection.h:

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorker):
        * workers/service/context/SWContextManager.h:

2018-01-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r227279 and r227373.
        https://bugs.webkit.org/show_bug.cgi?id=181988

        The LayoutTest crash fix introduced an API test failure.
        (Requested by ryanhaddad on #webkit).

        Reverted changesets:

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227279

        "Resign NowPlaying status when no media element is eligible"
        https://bugs.webkit.org/show_bug.cgi?id=181914
        https://trac.webkit.org/changeset/227373

2018-01-23  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, fix some format specifiers added in r227190
        https://bugs.webkit.org/show_bug.cgi?id=181454

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::takeAllMessagesForPort):

2018-01-23  Ting-Wei Lan  <lantw44@gmail.com>

        [GTK] Add user agent quirk for Microsoft Outlook Web App
        https://bugs.webkit.org/show_bug.cgi?id=181982

        Reviewed by Michael Catanzaro.

        Microsoft Outlook Web App forces users to switch to the lite version on
        the login page with our standard user agent on all non-macOS systems.
        Since it is an application that can be installed by different companies,
        schools and organizations, it is not possible to fix the issue unless
        we keep a big list of host names that are known to run it. We check the
        host name instead of the base domain name here because it is not
        expected to run all sites under a base domain on this webmail and
        calendar application.

        https://mail.ntu.edu.tw is a site that is known to run Microsoft Outlook
        Web App for several years, and it is not likely to change. When there
        are other sites found to run it and having the same user agent problem,
        we can expand the list to include them.

        * platform/UserAgentQuirks.cpp:
        (WebCore::urlRequiresMacintoshPlatform):

2018-01-23  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME] Add support of multi keys from different sessions in CDMinstanceClearKey
        https://bugs.webkit.org/show_bug.cgi?id=180083

        Reviewed by Xabier Rodriguez-Calvar.

        Add support of multi keys from different MediaKeySession in CDMInstanceClearKey.

        Currently the CDMInstanceClearKey manages two "m_keys", one is a WTF::Vector
        where it stores the list of last added keys, an other which is defined in the
        ClearKeyState::singleton it is a WTF::HashMap, in this last one, it stores the
        keys lists of each created session.

        The method "keys()" of CDMInstanceClearKey returns the first "m_keys" which
        contains just the list of last keys.

        The goal of this commit is to return all keys lists of all sessions, thus
        we remove the "m_keys" which is WTF::Vector and we modify the method
        "keys()" to return all keys lists, which is stored in "m_keys" WTF::HashMap,
        in one Vector instead of return just the list of last keys.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::CDMInstanceClearKey::keys const):
        (WebCore::CDMInstanceClearKey::updateLicense):
        * platform/encryptedmedia/clearkey/CDMClearKey.h:

2018-01-22  Simon Fraser  <simon.fraser@apple.com>

        Optimize building the non-fast scrollable region with multiple iframes
        https://bugs.webkit.org/show_bug.cgi?id=181971

        Reviewed by Zalan Bujtas.

        AsyncScrollingCoordinator::frameViewLayoutUpdated() is called every time a subframe lays out.
        We don't need to eagerly update the non-fast scrollable region at this time; we can just mark
        it dirty, and rely on the existing scrolling tree commit code to recompute it.

        On my machine this makes fast/frames/lots-of-objects.html no longer a timeout.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):

2018-01-22  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement PublicKeyCredential's [[Create]] with a dummy authenticator
        https://bugs.webkit.org/show_bug.cgi?id=181928
        <rdar://problem/36459893>

        Reviewed by Brent Fulgham.

        This patch implements PublicKeyCredential's [[Create]] from https://www.w3.org/TR/webauthn/#createCredential
        as of 5 December 2017. In order to do testing, a dummy authenticator is implemented to exercise a failure
        and a pass path. A number of dependencies need to be resolved later in order to comply with the spec.
        Also, the current architecture of handling async WebAuthN operations including dispatching, timeout, and aborting
        might need a redesign once the underlying authenticator is clear. Since this is our first attempt to implement
        a prototype, all those limitations, in my opinion, can be marked as non-blocking to accelerate the whole
        process. Those limitations will then be addressed once the first prototype is finshed.

        Tests: http/tests/webauthn/public-key-credential-create-with-invalid-parameters.https.html
               http/tests/webauthn/public-key-credential-same-origin-with-ancestors-2.https.html
               http/tests/webauthn/public-key-credential-same-origin-with-ancestors.https.html
               http/wpt/webauthn/idl.https.html
               http/wpt/webauthn/public-key-credential-create-failure.https.html
               http/wpt/webauthn/public-key-credential-create-success.https.html

        * Modules/credentialmanagement/BasicCredential.h:
        * Modules/credentialmanagement/BasicCredential.idl:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::PendingPromise::PendingPromise):
        (WebCore::CredentialsContainer::dispatchTask):
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess const):
        (WebCore::CredentialsContainer::preventSilentAccess): Deleted.
        * Modules/credentialmanagement/CredentialsContainer.h:
        (WebCore::CredentialsContainer::PendingPromise::create):
        * Modules/webauthn/Authenticator.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.cpp.
        (WebCore::Authenticator::singleton):
        (WebCore::Authenticator::makeCredential const):
        * Modules/webauthn/Authenticator.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredentialCreationOptions.h.
        * Modules/webauthn/AuthenticatorAssertionResponse.cpp:
        (WebCore::AuthenticatorAssertionResponse::authenticatorData const):
        (WebCore::AuthenticatorAssertionResponse::signature const):
        (WebCore::AuthenticatorAssertionResponse::userHandle const):
        (WebCore::AuthenticatorAssertionResponse::~AuthenticatorAssertionResponse): Deleted.
        (WebCore::AuthenticatorAssertionResponse::authenticatorData): Deleted.
        (WebCore::AuthenticatorAssertionResponse::signature): Deleted.
        (WebCore::AuthenticatorAssertionResponse::userHandle): Deleted.
        * Modules/webauthn/AuthenticatorAssertionResponse.h:
        (WebCore::AuthenticatorAssertionResponse::create):
        * Modules/webauthn/AuthenticatorAttestationResponse.cpp:
        (WebCore::AuthenticatorAttestationResponse::attestationObject const):
        (WebCore::AuthenticatorAttestationResponse::~AuthenticatorAttestationResponse): Deleted.
        (WebCore::AuthenticatorAttestationResponse::attestationObject): Deleted.
        * Modules/webauthn/AuthenticatorAttestationResponse.h:
        (WebCore::AuthenticatorAttestationResponse::create):
        * Modules/webauthn/AuthenticatorResponse.cpp:
        (WebCore::AuthenticatorResponse::clientDataJSON const):
        (WebCore::AuthenticatorResponse::~AuthenticatorResponse): Deleted.
        (WebCore::AuthenticatorResponse::clientDataJSON): Deleted.
        * Modules/webauthn/AuthenticatorResponse.h:
        * Modules/webauthn/AuthenticatorResponse.idl:
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredentialInternal::produceClientDataJson):
        (WebCore::PublicKeyCredentialInternal::produceClientDataJsonHash):
        (WebCore::PublicKeyCredentialInternal::getIdFromAttestationObject):
        (WebCore::PublicKeyCredential::PublicKeyCredential):
        (WebCore::PublicKeyCredential::discoverFromExternalSource):
        (WebCore::PublicKeyCredential::create):
        (WebCore::PublicKeyCredential::rawId const):
        (WebCore::PublicKeyCredential::response const):
        (WebCore::PublicKeyCredential::getClientExtensionResults const):
        (WebCore::PublicKeyCredential::rawId): Deleted.
        (WebCore::PublicKeyCredential::response): Deleted.
        (WebCore::PublicKeyCredential::getClientExtensionResults): Deleted.
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h:
        (): Deleted.
        * Modules/webauthn/PublicKeyCredentialDescriptor.h:
        * Modules/webauthn/PublicKeyCredentialDescriptor.idl:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAuthenticatorResponseCustom.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorAttestationResponse.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSBasicCredentialCustom.cpp: Copied from Source/WebCore/Modules/webauthn/AuthenticatorResponse.cpp.
        (WebCore::toJSNewlyCreated):
        (WebCore::toJS):
        * bindings/js/JSBindingsAllInOne.cpp:

2018-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Support font collections
        https://bugs.webkit.org/show_bug.cgi?id=181826
        <rdar://problem/36455137>

        Reviewed by Dean Jackson.

        Use the CoreText call CTFontManagerCreateFontDescriptorsFromData() to get all the descriptors inside
        the collection file. We select which one by using the fragment identifier at the end of the url linking
        to the remote font. For example, to select the 4th font inside a TTC file, the @font-face block would
        look like:

        @font-face {
            font-family: "MyFont";
            src: url("path/to/font.ttc#4");
        }

        Note that these numbers are 1-indexed.

        The CSS Fonts spec states:
        > Fragment identifiers are used to indicate which font to load. If a container format lacks a defined
        > fragment identifier scheme, implementations should use a simple 1-based indexing scheme (e.g.
        > "font-collection#1" for the first font, "font-collection#2" for the second font).

        Not only are TTC font collections supported, but WOFF2 font collections are also supported, which is
        increasingly important web standard.

        No new tests because I don't have a font collection file with the appropriate license for the
        WebKit repository. I tested manually.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::load):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::calculateIndex const):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::createCustomFontData):
        * loader/cache/CachedFont.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):

2018-01-22  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r227011): fast/frames/hidpi-position-iframe-on-device-pixel.html times out
        https://bugs.webkit.org/show_bug.cgi?id=181959

        Reviewed by Zalan Bujtas.

        This test creates 300 iframes, which became slow after r227011 because they all became part
        of the non-fast scrollable region, slowing down ScrollingCoordinator::absoluteEventTrackingRegionsForFrame().

        Fix by not adding non-scrollable iframes, and making FrameView::isScrollable() more efficient for frames
        that have not done layout yet.

        * page/FrameView.cpp:
        (WebCore::FrameView::isScrollable):
        (WebCore::FrameView::addChild):

2018-01-22  Dan Bernstein  <mitz@apple.com>

        Fixed building for macOS 10.12 with the macOS 10.13 SDK after r227156.

        * Configurations/WebCore.xcconfig:

2018-01-22  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r226981): ASSERTION FAILED: startY >= 0 && endY <= height && startY < endY in WebCore::FEMorphology::platformApplyGeneric
        https://bugs.webkit.org/show_bug.cgi?id=181836

        Reviewed by Tim Horton.
        
        All the filters that use ParallelJobs<> has the same type of bug where very wide but not tall
        filter regions could result in computing an optimalThreadNumber that was greater than the
        number of rows to process, which resulted in jobs with zero rows to process.

        Since we split the work by rows, cap the maximum number of threads to height/8 so that each job
        has at least 8 rows of pixels to process. Add some assertions to detect jobs with zero rows.

        FEMorphology was also using implicit float -> int conversion to detect integer overflow of radius,
        so change that to use explicit clamping.
        
        Tests: svg/filters/feLighting-parallel-jobs.svg
               svg/filters/feTurbulence-parallel-jobs-wide.svg

        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::platformApplyGenericPaint):
        (WebCore::FELighting::platformApplyGeneric):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApply):
        (WebCore::FEMorphology::platformApplyDegenerate):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::fillRegion const):
        (WebCore::FETurbulence::platformApplySoftware):

2018-01-22  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        No new tests, these changes prevent existing tests from crashing.

        * html/HTMLMediaElement.h:
        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::playbackPermitted const): Return early when the media 
        element has been suspended.
        (WebCore::MediaElementSession::canShowControlsManager const): Return false when the
        media element has been suspended.
        (WebCore::isMainContentForPurposesOfAutoplay): Return early if it isn't safe to update
        style because HitTest can force a layout.
        (WebCore::MediaElementSession::updateIsMainContent const): Ditto.

2018-01-22  Alex Christensen  <achristensen@webkit.org>

        Begin removing QTKit code
        https://bugs.webkit.org/show_bug.cgi?id=181951

        Reviewed by Jer Noble.

        QTKit was being used on El Capitan and before.

        * Configurations/WebCore.xcconfig:
        * SourcesMac.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::buildMediaEnginesVector):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Removed.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Removed.
        * platform/graphics/mac/MediaTimeQTKit.h: Removed.
        * platform/graphics/mac/MediaTimeQTKit.mm: Removed.
        * platform/mac/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setVideoElement:]):
        (-[WebVideoFullscreenController updatePowerAssertions]):

2018-01-22  Per Arne Vollan  <pvollan@apple.com>

        [Win] Null pointer crash under WebCore::RenderStyle::colorIncludingFallback.
        https://bugs.webkit.org/show_bug.cgi?id=181801
        <rdar://problem/35614900>

        Reviewed by Brent Fulgham.

        Do not paint synchronously when popup items have been added or changed while the popup is visible.
        If new popup items have been added after the popup was shown, a synchronous paint operation will
        possibly access their style before it is ready, leading to a null pointer crash. The invalidated
        area will be painted asynchronously.

        No new tests. To reproduce this crash, it is necessary to open a popup with JavaScript, add new
        popup items, and then end the test. Opening the popup can be done by sending a mousedown event
        with the eventsender. However, on Windows the mousedown event is sent synchronously, and will
        block as long as the popup is open and running the popup event loop. This means no JS can be
        executed until the popup is closed, causing the test to always time out before new popup items
        can be added. I have verified the fix with a manual test case.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::updateFromElement):

2018-01-22  Chris Dumez  <cdumez@apple.com>

        RELEASE_ASSERT(registration) hit in SWServer::installContextData(const ServiceWorkerContextData&)
        https://bugs.webkit.org/show_bug.cgi?id=181941
        <rdar://problem/36744892>

        Reviewed by Youenn Fablet.

        Make sure we clear SWServer::m_pendingContextDatas & SWServer::m_pendingJobs as needed
        when clearing Website data. Otherwise, we will hit assertion when those gets processed
        after the connection to the SW process has been established (not to mentioned we failed
        to clear some in-memory data even though the user asked us to).

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

2018-01-22  Ryosuke Niwa  <rniwa@webkit.org>

        Blob conversion and sanitization doesn't work with Microsoft Word for Mac 2011
        https://bugs.webkit.org/show_bug.cgi?id=181616
        <rdar://problem/36484908>

        Reviewed by Wenson Hsieh.

        The bug was caused by WebContentReader::readHTML and WebContentMarkupReader::readHTML not sanitizing plain HTML string
        as done for web archives even when custom pasteboard data is enabled. Fixed the bug by doing the sanitization.

        Unfortunately, we can't make file URLs available in this case because WebContent process doesn't have sandbox extensions
        to access local files referenced by the HTML source in the clipboard, and we can't make WebContent process request for
        a sandbox extension¸on an arbitrary local file, as it would defeat the whole point of sandboxing.

        Instead, we strip away all HTML attributes referencing a URL whose scheme is not HTTP, HTTPS, or data when sanitizing
        text/html from the clipboard to avoid exposing local file paths, which can reveal privacy & security sensitive data
        such as the user's full name, and the location of private containers of other applications in the system.

        Tests: PasteHTML.DoesNotSanitizeHTMLWhenCustomPasteboardDataIsDisabled
               PasteHTML.DoesNotStripFileURLsWhenCustomPasteboardDataIsDisabled
               PasteHTML.ExposesHTMLTypeInDataTransfer
               PasteHTML.KeepsHTTPURLs
               PasteHTML.SanitizesHTML
               PasteHTML.StripsFileURLs

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readHTML): Fixed the bug by sanitizing the markup, and stripping away file URLs.
        (WebCore::WebContentMarkupReader::readHTML): Ditto.
        * editing/markup.cpp:
        (WebCore::removeSubresourceURLAttributes): Added.
        (WebCore::sanitizeMarkup): Added.
        * editing/markup.h:

2018-01-22  Chris Dumez  <cdumez@apple.com>

        Add release logging to help debug issues related to service workers
        https://bugs.webkit.org/show_bug.cgi?id=181935
        <rdar://problem/36735900>

        Reviewed by Brady Eidson.

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::ServiceWorker):
        (WebCore::ServiceWorker::scheduleTaskToUpdateState):
        (WebCore::ServiceWorker::postMessage):
        (WebCore::ServiceWorker::isAlwaysOnLoggingAllowed const):
        * workers/service/ServiceWorker.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::removeRegistration):
        (WebCore::ServiceWorkerContainer::updateRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobResolvedWithUnregistrationResult):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        (WebCore::ServiceWorkerContainer::isAlwaysOnLoggingAllowed const):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerRegistration.cpp:
        (WebCore::ServiceWorkerRegistration::ServiceWorkerRegistration):
        (WebCore::ServiceWorkerRegistration::updateStateFromServer):
        (WebCore::ServiceWorkerRegistration::scheduleTaskToFireUpdateFoundEvent):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::scriptContextFailedToStart):
        (WebCore::SWServer::didFinishInstall):
        (WebCore::SWServer::didFinishActivation):
        (WebCore::SWServer::terminateWorkerInternal):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::didResolveRegistrationPromise):
        (WebCore::SWServerJobQueue::runRegisterJob):

2018-01-22  Youenn Fablet  <youenn@apple.com>

        Safari Tech Preview can't use GitHub login at forums.swift.org
        https://bugs.webkit.org/show_bug.cgi?id=181908
        <rdar://problem/36715111>

        Reviewed by Chris Dumez.

        Test: http/wpt/service-workers/navigation-redirect.https.html

        For subresource loads, redirections will not change who is in charge of continuing the load (service worker or network process).
        For navigation loads, we need to match the registration for every redirection since this is using the Manual redirect mode.
        This allows starting the load with a service worker and finishing the load with another service worker, which will become the controller.

        Implement this by wrapping the registration matching of an URL within DocumentLoader::matchRegistration.
        Use that method in DocumentLoader::redirectReceived.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::matchRegistration):
        (WebCore::doRegistrationsMatch):
        (WebCore::DocumentLoader::redirectReceived):
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentLoader.h:

2018-01-22  Antti Koivisto  <antti@apple.com>

        REGRESSION (Safari 11): Buttons inside a fieldset legend cannot be clicked on in Safari 11
        https://bugs.webkit.org/show_bug.cgi?id=179666
        <rdar://problem/35534292>

        Reviewed by Zalan Bujtas.

        The legend element of a fieldset is in the border area, outside the clip rect.
        With overflow:hidden mouse events won't reach it.

        Test case by Dhaya Benmessaoud.

        Test: fast/forms/legend-overflow-hidden-hit-test.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestExcludedChildrenInBorder):

        Add a special case to hit testing to handle legend, similarly to what is done for painting.

        * rendering/RenderBlock.h:

2018-01-22  Joanmarie Diggs  <jdiggs@igalia.com>

        AX: Implement support for Graphics ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=181796

        Reviewed by Chris Fleizach.

        Add mappings for the three new roles (graphics-document, graphics-object,
        and graphics-symbol) as per the Graphics Accessibility API Mappings spec.

        No new tests; instead, new test cases added to roles-computedRoleString.html
        and roles-exposed.html.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::initializeRoleMap):
        (WebCore::AccessibilityObject::computedRoleString const):
        * accessibility/AccessibilityObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):

2018-01-22  Antti Koivisto  <antti@apple.com>

        REGRESSION(r224535): Can't write reviews in the App Store
        https://bugs.webkit.org/show_bug.cgi?id=181936
        <rdar://problem/36670246>

        Reviewed by Zalan Bujtas.

        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::updateStyleForLayout):

        r224535 was about media queries but it also removed a seemingly spurious call to SyleScope::didChangeStyleSheetEnvironment
        from the path that does not involve media queries.
        Turns out UITextContentView somehow depended on it, so revert this specific change.

2018-01-22  Brady Eidson  <beidson@apple.com>

        In WebKit2, make the MessagePortChannelRegistry live in the UI process.
        https://bugs.webkit.org/show_bug.cgi?id=181922

        Reviewed by Andy Estes.

        No new tests (Refactor, no behavior change)

        Add encoder/decoders and EXPORT a whole bunch of stuff.
        
        * WebCore.xcodeproj/project.pbxproj:

        * dom/MessagePort.h:

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::processForPort):
        * dom/messageports/MessagePortChannel.h:

        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelRegistry.h:

        * dom/messageports/MessageWithMessagePorts.h:
        (WebCore::MessageWithMessagePorts::encode const):
        (WebCore::MessageWithMessagePorts::decode):

2018-01-22  Youenn Fablet  <youenn@apple.com>

        Fetch Headers from an Opaque response should be filtered out
        https://bugs.webkit.org/show_bug.cgi?id=181926

        Reviewed by Chris Dumez.

        Covered by updated test.

        Refactor to use the same FetchResponse::create for Cache API and cloning.
        In this method, ensure that response and headers are filtered correctly according response tainting.
        Make also sure that synthetic responses do not get filtered (not needed since created by JavaScript).

        Introduce helper routine to set the header map of a resource response.
        Use this routine when cloning a synthetic response as in that case, m_internalResponse has no header at all.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::updateRecords):
        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create):
        (WebCore::FetchResponse::clone):
        * Modules/fetch/FetchResponse.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::setHTTPHeaderFields):
        * platform/network/ResourceResponseBase.h:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createOpaqueWithBlobBodyResponse):

2018-01-22  Javier Fernandez  <jfernandez@igalia.com>

        [css-align] 'overflow' keyword must precede the self-position and content-position value
        https://bugs.webkit.org/show_bug.cgi?id=181793

        Reviewed by Antti Koivisto.

        There were several discussions to avoid ambiguities with the complex
        values, specially when it comes to define the place-xxx shorthands.

        One of the sources of problems is the 'overflow-position' keyword. The
        CSS WG has decided to change the syntax of all the CSS Box Alignment
        properties so that the 'overflow-position' keyword always precede the
        'self-position' or the 'content-position' keywords.

        https://github.com/w3c/csswg-drafts/issues/1446#event-1125715434

        In order to apply this change to the Content Distribution properties'
        (align-content and justify-content) syntax I had to completely
        re-implement their parsing function. Thanks to this I addressed also
        the issue with the content-distribution fallback, which cannot be
        specified explicitly now.

        https://github.com/w3c/csswg-drafts/issues/1002#ref-commit-c38cac4

        No new tests, just rebaselined the expected results of the test cases affected.

        Despite the so many layout tests affected by this change, it's
        unlikely that it might break any content in current web
        sites. This patch changes the new CSS syntax, obviously backward
        compatible, defined by the new CSS Box Alignment. The
        'overflow-position' keyword is only used by the layout models
        implementing the new spec, so far only CSS Grid Layout.
        Considering that CSS Grid has been shipped last year, it's unlikely
        that many sites are using the new CSS values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForItemPositionWithOverflowAlignment):
        (WebCore::valueForContentPositionAndDistributionWithOverflowAlignment):
        * css/CSSContentDistributionValue.cpp:
        (WebCore::CSSContentDistributionValue::customCSSText const):
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSelfOrDefaultAlignmentData):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeOverflowPositionKeyword):
        (WebCore::consumeContentPositionKeyword):
        (WebCore::consumeContentDistributionOverflowPosition):
        (WebCore::consumeSelfPositionOverflowPosition):

2018-01-22  Chris Nardi  <csnardi1@gmail.com>

        Parse calc() in CSS media queries
        https://bugs.webkit.org/show_bug.cgi?id=181716

        calc() was previously unsupported inside of media queries. This change
        adds in support for parsing calc inside of media queries.

        Reviewed by Antti Koivisto.

        Tests: Imported web-platform-tests/css/mediaqueries

        * css/MediaQueryExpression.cpp:
        (WebCore::featureWithValidIdent): Updated function to take a CSSPrimitiveValue.
        (WebCore::featureWithValidDensity): Updated function to take a CSSPrimitiveValue instead of a CSSParserToken.
        (WebCore::featureWithValidPositiveLength): Ditto.
        (WebCore::featureExpectingPositiveInteger): Ditto.
        (WebCore::featureWithPositiveInteger): Ditto.
        (WebCore::featureWithPositiveNumber): Ditto.
        (WebCore::featureWithZeroOrOne): Ditto.
        (WebCore::MediaQueryExpression::MediaQueryExpression): Use CSSPropertyParserHelpers for consuming.
        * css/MediaQueryExpression.h:
        * css/parser/CSSPropertyParserHelpers.cpp:
        (WebCore::CSSPropertyParserHelpers::consumeResolution): Added function for use in media query expression parsing.
        * css/parser/CSSPropertyParserHelpers.h:
        * css/parser/MediaQueryParser.cpp:
        (WebCore::MediaQueryParser::readRestrictor): Updated functions to take a CSSParserTokenRange in order to use CSSPropertyParserHelpers.
        (WebCore::MediaQueryParser::readMediaNot): Ditto.
        (WebCore::MediaQueryParser::readMediaType): Ditto.
        (WebCore::MediaQueryParser::readAnd): Ditto.
        (WebCore::MediaQueryParser::readFeatureStart): Ditto.
        (WebCore::MediaQueryParser::readFeature): Ditto.
        (WebCore::MediaQueryParser::readFeatureColon): Ditto.
        (WebCore::MediaQueryParser::readFeatureValue): Ditto.
        (WebCore::MediaQueryParser::readFeatureEnd): Ditto.
        (WebCore::MediaQueryParser::skipUntilComma): Ditto.
        (WebCore::MediaQueryParser::skipUntilBlockEnd): Ditto.
        (WebCore::MediaQueryParser::processToken): Ditto.
        (WebCore::MediaQueryParser::parseInternal): Ditto.
        (WebCore::MediaQueryData::clear): Removed reference to m_valueList
        (WebCore::MediaQueryData::addExpression): Use CSSParserTokenRange.
        (WebCore::MediaQueryData::lastExpressionValid): New helper function.
        (WebCore::MediaQueryData::removeLastExpression): New helper function.
        * css/parser/MediaQueryParser.h:

2018-01-22  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Refactor PlatformContextCairo::drawSurfaceToContext() into a Cairo operation
        https://bugs.webkit.org/show_bug.cgi?id=181930

        Reviewed by Carlos Garcia Campos.

        Move the PlatformContextCairo::drawSurfaceToContext() code into the
        Cairo namespace as an operation, renaming it to drawSurface(). Mirroring
        other operations, the PlatformContextCairo object is now passed through
        a reference as the first argument to the function, and cairo_t context
        object is retrieved from that.

        Call sites of the PlatformContextCairo::drawSurfaceToContext() method
        are adjusted to now call Cairo::drawSurface() and properly pass the
        PlatformContextCairo object to the function.

        No new tests -- no change in functionality.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::prepareForStroking): Make this static.
        (WebCore::Cairo::drawPatternToCairoContext):
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::drawSurface):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::drawPatternToCairoContext): Deleted.
        (WebCore::PlatformContextCairo::drawSurfaceToContext): Deleted.
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):

2018-01-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [css-grid] Spanning Grid item has too much space at the bottom / is too high
        https://bugs.webkit.org/show_bug.cgi?id=181677

        Reviewed by Javier Fernandez.

        In IndefiniteSizeStrategy::findUsedFlexFraction() we were not
        subtracting the size of the gutters when we call findFrUnitSize().
        If an item spans several tracks, we cannot pass the maxContentForChild()
        directly, we need to subtract the gutters as they are treated
        as fixed size tracks in the algorithm.

        The spec text is pretty clear regarding this
        (https://drafts.csswg.org/css-grid/#algo-find-fr-size):
        "Let leftover space be the space to fill minus the base sizes
         of the non-flexible grid tracks."

        Gutters are treated as fixed-size tracks for the purpose
        of the track sizing algorithm, so we need to subtract them from the
        leftover space while finding the size of an "fr".

        Tests: imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-001.html
               imported/w3c/web-platform-tests/css/css-grid/layout-algorithm/grid-find-fr-size-gutters-002.html

        * rendering/GridTrackSizingAlgorithm.cpp:
        (WebCore::GridTrackSizingAlgorithm::findFrUnitSize const):
        (WebCore::IndefiniteSizeStrategy::findUsedFlexFraction const):

2018-01-21  Ryosuke Niwa  <rniwa@webkit.org>

        Turning off custom pasteboard data doesn't actually turn it off in WK2
        https://bugs.webkit.org/show_bug.cgi?id=181920
        <rdar://problem/36686429>

        Reviewed by Wenson Hsieh.

        Replaced the global settings for custom pasteboard data by regular runtime enabled flags.

        * dom/DataTransfer.cpp:
        (WebCore::DataTransfer::getDataForItem const):
        (WebCore::DataTransfer::shouldSuppressGetAndSetDataToAvoidExposingFilePaths const):
        (WebCore::DataTransfer::setDataFromItemList):
        (WebCore::DataTransfer::types const):
        (WebCore::DataTransfer::commitToPasteboard):
        * dom/DataTransferItemList.cpp:
        (WebCore::shouldExposeTypeInItemList):
        * editing/Editor.cpp:
        (WebCore::createDataTransferForClipboardEvent):
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentAndAddResources):
        (WebCore::WebContentReader::readWebArchive):
        * page/DeprecatedGlobalSettings.cpp:
        (WebCore::DeprecatedGlobalSettings::defaultCustomPasteboardDataEnabled): Deleted.
        * page/DeprecatedGlobalSettings.h:
        (WebCore::DeprecatedGlobalSettings::setCustomPasteboardDataEnabled): Deleted.
        (WebCore::DeprecatedGlobalSettings::customPasteboardDataEnabled): Deleted.
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setCustomPasteboardDataEnabled):
        (WebCore::RuntimeEnabledFeatures::customPasteboardDataEnabled const):
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setCustomPasteboardDataEnabled):

2018-01-21  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add a new feature flag for EXTRA_ZOOM_MODE and reintroduce AdditionalFeatureDefines.h
        https://bugs.webkit.org/show_bug.cgi?id=181918

        Reviewed by Tim Horton.

        Add EXTRA_ZOOM_MODE to FeatureDefines.xconfig (off by default). No change in behavior.

        * Configurations/FeatureDefines.xcconfig:

2018-01-19  Ryosuke Niwa  <rniwa@webkit.org>

        Release assertion in canExecuteScript when executing scripts during page cache restore
        https://bugs.webkit.org/show_bug.cgi?id=181902

        Reviewed by Antti Koivisto.

        The crash was caused by an erroneous instantiation of ScriptDisallowedScope::InMainThread in CachedPage::restore.
        It can execute arbitrary scripts since CachedFrame::open can update style, layout, and evaluate media queries.

        This is fine because there is no way to put this page back into a page cache until the load is commited via
        FrameLoader::commitProvisionalLoad is invoked later which only happens after CachedPage::restore had exited.

        Also added a release assert to make sure this condition holds.

        Tests: fast/history/page-cache-execute-script-during-restore.html
               fast/history/page-cache-navigate-during-restore.html

        * history/CachedPage.cpp:
        (WebCore::CachedPageRestorationScope::CachedPageRestorationScope): Added.
        (WebCore::CachedPageRestorationScope::~CachedPageRestorationScope): Added.
        (WebCore::CachedPage::restore): Don't instantiate ScriptDisallowedScope::InMainThread. Set isRestoringCachedPage
        on the cached pate to release-assert that there won't be any attempt to put this very page back into the cache.
        * history/PageCache.cpp:
        (WebCore::canCachePage): Added a release assert to make sure the page which is in the process of being restored
        from the page cache is not put into the page cache.
        * page/Page.h:
        (WebCore::Page::setIsRestoringCachedPage): Added.
        (WebCore::Page::isRestoringCachedPage const): Added.

2018-01-21  Eric Carlson  <eric.carlson@apple.com>

        Resign NowPlaying status when no media element is eligible
        https://bugs.webkit.org/show_bug.cgi?id=181914
        <rdar://problem/35294116>

        Reviewed by Jer Noble.

        Updated API test.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFromAncestor): Call mediaSession->clientCharacteristicsChanged
        so NowPlaying status will be updated.

        * html/MediaElementSession.cpp:
        (WebCore::MediaElementSession::canShowControlsManager const): Return false when being queried
        for NowPlaying status in an inactive document.

        * platform/audio/PlatformMediaSessionManager.cpp:
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): Implement in for all
        ports.
        * platform/audio/PlatformMediaSessionManager.h:
        (WebCore::PlatformMediaSessionManager::registeredAsNowPlayingApplication const):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/mac/MediaSessionManagerMac.h:
        * platform/audio/mac/MediaSessionManagerMac.mm:
        (WebCore::MediaSessionManagerMac::updateNowPlayingInfo): Call MRMediaRemoteSetCanBeNowPlayingApplication
        whenever status changes.
        (WebCore::PlatformMediaSessionManager::updateNowPlayingInfoIfNecessary): Deleted, implemented
        in the base class.

2018-01-21  Jer Noble  <jer.noble@apple.com>

        REGRESSION (macOS 10.13.2): imported/w3c/web-platform-tests/media-source/mediasource-* LayoutTests failing
        https://bugs.webkit.org/show_bug.cgi?id=181891

        Reviewed by Eric Carlson.

        In macOS 10.13.2, CoreMedia changed the definition of CMSampleBufferGetDuration() to return
        the presentation duration rather than the decode duration. For media streams where those two
        durations are identical (or at least, closely similar), this isn't a problem. But the media
        file used in the WPT tests have an unusual frame cadence: decode durations go {3000, 1, 5999,
        1, 5999,...} and presentation durations go {3000, 2999, 3000, 2999}. This caused one check in
        the "Coded Frame Processing" algorithm to begin failing, where it checks that the delta
        between the last sample's decode time and the new decode time is no more than 2x as far as
        the last sample's duration. That's not a problem as long as the "duration" is the "decode
        duration" and the samples are all adjacent. Once the "duration" is "presentation duration",
        all the assumptions in the algorithm are invalidated. In the WPT test case, the delta between
        decode times is 5999, and 2 * the presentation duration is 5998, causing all samples up to
        the next sync sample to be dropped.

        To work around this change in behavior, we'll adopt the same technique used by Mozilla's MSE
        implementation, which was done for similar reasons. Rather than track the "last frame duration",
        we'll record the "greatest frame duration", and use actual decode timestamps to derive this
        duration. The "greatest frame duration" field will be reset at the same times as "last frame
        duration", and will be used only in the part of the algorithm that checks for large decode
        timestamp gaps.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::resetParserState):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):

2018-01-21  Andy Estes  <aestes@apple.com>

        [ios] LayoutTest imported/w3c/web-platform-tests/payment-request/rejects_if_not_active.https.html is crashing in JSC::JSONParse
        https://bugs.webkit.org/show_bug.cgi?id=177832
        <rdar://problem/34805315>

        Reviewed by Tim Horton.

        Test: http/tests/paymentrequest/rejects_if_not_active.https.html

        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::show): Rejected promise if the document is not active.

2018-01-20  Brady Eidson  <beidson@apple.com>

        Make garbage collection of MessagePort objects be asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=181910

        Reviewed by Andy Estes.

        No new tests (Covered by existing tests, including GC-specific ones).

        The basic premise here is as follows:
        - You can *always* GC a MessagePort that is closed
        - You can *always* GC a MessagePort that has no onmessage handler, as incoming messages cannot 
          possibly revive it.
        - You can GC a MessagePort, even if it has a message handler, as long as there are no messages 
          in flight between it and the remote port, and as long as the remote port is "maybe eligible for GC."
          
        A MessagePort is considered "maybe eligible for GC" once hasPendingActivity is asked once.
        
        A MessagePort loses "maybe eligible for GC" status once it is used for sending or receiving a message.
        
        The changes to MessagePort.cpp implement the above with a tiny little bool-driven state machine.
        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::registerLocalActivity):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::hasPendingActivity const):
        (WebCore::MessagePort::isLocallyReachable const):
        (WebCore::MessagePort::addEventListener):
        (WebCore::MessagePort::removeEventListener):
        * dom/MessagePort.h:

        - Remove the lock and any background-thread code paths
        - Add ASSERT(isMainThread())s throughout
        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::includesPort):
        (WebCore::MessagePortChannel::entanglePortWithProcess):
        (WebCore::MessagePortChannel::disentanglePort):
        (WebCore::MessagePortChannel::closePort):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::takeAllMessagesForPort):
        (WebCore::MessagePortChannel::checkRemotePortForActivity):
        (WebCore::MessagePortChannel::hasAnyMessagesPendingOrInFlight const):
        * dom/messageports/MessagePortChannel.h:
        
        Add a callback for a MessagePortChannel to go ask the remote MessagePort object about local activity:
        * dom/messageports/MessagePortChannelProvider.h:
        * dom/messageports/MessagePortChannelProviderImpl.cpp:
        (WebCore::MessagePortChannelProviderImpl::checkRemotePortForActivity):
        (WebCore::MessagePortChannelProviderImpl::checkProcessLocalPortForActivity):
        (WebCore::MessagePortChannelProviderImpl::hasMessagesForPorts_temporarySync): Deleted.
        * dom/messageports/MessagePortChannelProviderImpl.h:
        
        - Remove the lock and any background-thread code paths
        - Add ASSERT(isMainThread())s throughout
        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::messagePortChannelCreated):
        (WebCore::MessagePortChannelRegistry::messagePortChannelDestroyed):
        (WebCore::MessagePortChannelRegistry::didEntangleLocalToRemote):
        (WebCore::MessagePortChannelRegistry::didDisentangleMessagePort):
        (WebCore::MessagePortChannelRegistry::didCloseMessagePort):
        (WebCore::MessagePortChannelRegistry::didPostMessageToRemote):
        (WebCore::MessagePortChannelRegistry::takeAllMessagesForPort):
        (WebCore::MessagePortChannelRegistry::checkRemotePortForActivity):
        (WebCore::MessagePortChannelRegistry::existingChannelContainingPort):
        (WebCore::MessagePortChannelRegistry::hasMessagesForPorts_temporarySync): Deleted.
        * dom/messageports/MessagePortChannelRegistry.h:

2018-01-20  Andy Estes  <aestes@apple.com>

        [Apple Pay] Stop eagerly loading PassKit.framework
        https://bugs.webkit.org/show_bug.cgi?id=181911
        <rdar://problem/36555369>

        Reviewed by Tim Horton.

        r226458 and r226123 added code that caused PassKit.framework to be eagerly loaded when
        initializing a WKWebView. This is costly and should only be done when Apple Pay is first used.

        To avoid eagerly loading PassKit, this patch does two things:

        1. Instead of sending the available payment networks as part of WebPageCreationParameters,
        PaymentCoordinator asks for them using a syncrhonous message the first time they are needed.
        2. Instead of setting the Apple Pay preference to false when PassKit can't be loaded,
        the following API entry points check for a missing PassKit and return false, or throw
        exceptions, or reject promises:
            - ApplePaySession.canMakePayments()
            - ApplePaySession.canMakePaymentsWithActiveCard()
            - ApplePaySession.openPaymentSetup()
            - ApplePaySession.begin()

        No new tests for (1), which causes no change in behavior. (2) was manually verified by
        locally moving aside PassKit.framework, but that's not possible to do in an automated test.

        * Modules/applepay/PaymentCoordinator.cpp:
        (WebCore::PaymentCoordinator::PaymentCoordinator):
        (WebCore::PaymentCoordinator::validatedPaymentNetwork const):
        (WebCore::toHashSet): Deleted.
        * Modules/applepay/PaymentCoordinator.h:
        * Modules/applepay/PaymentCoordinatorClient.h:
        * loader/EmptyClients.cpp:
        * page/MainFrame.cpp:
        (WebCore::MainFrame::MainFrame):

        Removed PaymentCoordinator::m_availablePaymentNetworks and made
        PaymentCoordinator::validatedPaymentNetwork() call
        PaymentCoordinatorClient::validatedPaymentNetwork() instead.

        * page/PageConfiguration.h:

        Removed availablePaymentNetworks from PageConfiguration.

        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::validatedPaymentNetwork):
        * testing/MockPaymentCoordinator.h:

        Implemented PaymentCoordinatorClient::validatedPaymentNetwork().

2018-01-20  Jer Noble  <jer.noble@apple.com>

        Release ASSERT when reloading Vimeo page @ WebCore: WebCore::Document::updateLayout
        https://bugs.webkit.org/show_bug.cgi?id=181840
        <rdar://problem/36186214>

        Reviewed by Simon Fraser.

        Test: media/video-fullscreen-reload-crash.html

        Short circuit play() or pause() operations if the document is suspended or stopped.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pauseInternal):

2018-01-20  Youenn Fablet  <youenn@apple.com>

        fetch redirect is incompatible with "no-cors" mode
        https://bugs.webkit.org/show_bug.cgi?id=181866
        <rdar://problem/35827140>

        Reviewed by Chris Dumez.

        Covered by updated tests.

        Return a network error when no-cors mode and redirect mode is manual or error.
        Update preflight implementation to no longer use manual redirect mode to simulate https://fetch.spec.whatwg.org/#http-network-or-cache-fetch.
        Instead implement redirectReceived callback to treat any redirect response as the preflight response.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::canRequest):
        * loader/CrossOriginPreflightChecker.cpp:
        (WebCore::CrossOriginPreflightChecker::redirectReceived):
        (WebCore::CrossOriginPreflightChecker::startPreflight):
        * loader/CrossOriginPreflightChecker.h:

2018-01-19  Wenson Hsieh  <wenson_hsieh@apple.com>

        [macOS] [WK2] Drag location is computed incorrectly when dragging content from subframes
        https://bugs.webkit.org/show_bug.cgi?id=181896
        <rdar://problem/35479043>

        Reviewed by Tim Horton.

        In r218837, I packaged most of the information needed to start a drag into DragItem, which is propagated to the client layer
        via the startDrag codepath. However, this introduced a bug in computing the event position and drag location in window
        coordinates. Consider the case where we're determining the drag image offset for a dragged element in a subframe:

        Before the patch, the drag location (which starts out in the subframe's content coordinates) would be converted to root view
        coordinates, which would then be converted to mainframe content coordinates, which would then be converted to window coordinates
        using the mainframe's view. After the patch, we carry out the same math until the last step, where we erroneously use the
        _subframe's_ view to convert to window coordinates from content coordinates. This results in the position of the iframe relative
        to the mainframe being accounted for twice.

        To fix this, we simply use the main frame's view to convert from mainframe content coordinates to window coordinates while
        computing the drag location. As for the event position in window coordinates, this is currently unused by any codepath in WebKit,
        so we can just remove it altogether.

        Since this bug only affects drag and drop in the macOS WebKit2 port, there's currently no way to test this. I'll be using
        <https://bugs.webkit.org/show_bug.cgi?id=181898> to track adding test support for drag and drop on macOS WebKit2. Manually tested
        dragging in both WebKit1 and WebKit2 on macOS. dragLocationInWindowCoordinates isn't used at all for iOS drag and drop.

        * page/DragController.cpp:
        (WebCore::DragController::doSystemDrag):
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):

2018-01-19  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r227235.

        The test for this change consistently times out on High
        Sierra.

        Reverted changeset:

        "Support for preconnect Link headers"
        https://bugs.webkit.org/show_bug.cgi?id=181657
        https://trac.webkit.org/changeset/227235

2018-01-19  Youenn Fablet  <youenn@apple.com>

        Cache storage errors like Quota should trigger console messages
        https://bugs.webkit.org/show_bug.cgi?id=181879
        <rdar://problem/36669048>

        Reviewed by Chris Dumez.

        Covered by rebased test.

        * Modules/cache/DOMCache.cpp:
        (WebCore::DOMCache::retrieveRecords):
        (WebCore::DOMCache::batchDeleteOperation):
        (WebCore::DOMCache::batchPutOperation):
        * Modules/cache/DOMCacheEngine.cpp:
        (WebCore::DOMCacheEngine::errorToException):
        (WebCore::DOMCacheEngine::logErrorAndConvertToException):
        * Modules/cache/DOMCacheEngine.h:
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::DOMCacheStorage::doOpen):
        (WebCore::DOMCacheStorage::doRemove):

2018-01-19  Youenn Fablet  <youenn@apple.com>

        Do not go to the storage process when registering a service worker client if there is no service worker registered
        https://bugs.webkit.org/show_bug.cgi?id=181740
        <rdar://problem/36650400>

        Reviewed by Chris Dumez.

        Register a document as service worker client only if there is an existing service worker connection.
        This allows not creating any connection if no service worker is registered.

        Add internals API to test whether a service worker connection was created or not.
        This is used by API tests that cover the changes.

        * dom/Document.cpp:
        (WebCore::Document::privateBrowsingStateDidChange): No need to create a service worker connection if client is not registered yet.
        (WebCore::Document::setServiceWorkerConnection): No need to unregister/register if service worker connection is the same.
        Similarly, if Document is to be destroyed or suspended, we should not register it.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * testing/Internals.cpp:
        (WebCore::Internals::hasServiceWorkerConnection):
        * testing/Internals.h:
        * testing/Internals.idl:
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::registerServiceWorkerClients):
        * workers/service/ServiceWorkerProvider.h:

2018-01-19  Dean Jackson  <dino@apple.com>

        REGRESSION (r221092): Swipe actions are hard to perform in FastMail app
        https://bugs.webkit.org/show_bug.cgi?id=181817
        <rdar://problem/35274055>

        Add a setting for controlling whether touch listeners are passive
        by default on document/window/body.

        Updated existing test.

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::addEventListener):
        * page/Settings.yaml:

2018-01-19  Daniel Bates  <dabates@apple.com>

        Update frame-ancestor directive to match Content Security Policy Level 3
        https://bugs.webkit.org/show_bug.cgi?id=178891
        <rdar://problem/35209458>

        Reviewed by Alex Christensen.

        Derived from Blink e667cc2e501fabab3605b838e4ee0d642a9c4a59:
        <https://chromium.googlesource.com/chromium/src.git/+/e667cc2e501fabab3605b838e4ee0d642a9c4a59>

        Update frame-ancestor directive to match against the origin of the ancestor document per the
        Content Security Policy Level 3 spec.: <https://w3c.github.io/webappsec-csp/> (15 January 2018).
        Specifically this change in behavior was made to CSP 3 in <https://github.com/w3c/webappsec/issues/311>.
        In earlier versions of the spec, the frame-ancestor directive matched against the URL of the
        ancestor document.

        Disregarding allow-same-origin sandboxed iframes, a document with policy "frame-ancestor 'self'"
        will be blocked from loading in a sandboxed iframe as a result of this change.

        Tests: http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-allow-same-origin-sandboxed-cross-url-allow.html
               http/tests/security/contentSecurityPolicy/1.1/frame-ancestors/frame-ancestors-nested-cross-in-sandboxed-cross-url-block.html

        * page/csp/ContentSecurityPolicyDirectiveList.cpp:
        (WebCore::checkFrameAncestors):

2018-01-19  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Add timeout support to XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=181876

        Reviewed by Alex Christensen 

        * platform/network/ResourceRequestBase.cpp:
        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::setTimeout):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::setupTransfer):
        (WebCore::CurlRequest::didCompleteTransfer):
        * platform/network/curl/ResourceError.h:
        * platform/network/curl/ResourceErrorCurl.cpp:
        (WebCore::ResourceError::httpError):

2018-01-19  Yoav Weiss  <yoav@yoav.ws>

        Support for preconnect Link headers
        https://bugs.webkit.org/show_bug.cgi?id=181657

        Reviewed by Darin Adler.

        Move the preconnect functionality into its own function, and
        also call this function when Link headers are processed.

        Test: http/tests/preconnect/link-header-rel-preconnect-http.php

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Call preconnectIfNeeded.
        (WebCore::LinkLoader::preconnectIfNeeded): Preconnect to a host functionality moved here.
        (WebCore::LinkLoader::loadLink): Call preconnectIfNeeded.
        * loader/LinkLoader.h:

2018-01-19  Joseph Pecoraro  <pecoraro@apple.com>

        AppCache: Log a Deprecation warning to the Console when AppCache is used
        https://bugs.webkit.org/show_bug.cgi?id=181778

        Reviewed by Alex Christensen.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::insertedByParser):

2018-01-19  Chris Dumez  <cdumez@apple.com>

        ASSERT(registration || isTerminating()) hit in SWServerWorker::skipWaiting()
        https://bugs.webkit.org/show_bug.cgi?id=181761
        <rdar://problem/36594564>

        Reviewed by Youenn Fablet.

        There is a short period of time, early in the registration process where a
        SWServerWorker object exists for a registration but is not in the registration's
        installing/waiting/active slots yet. As a result, if a registration is cleared
        during this period (for e.g. due to the user clearing all website data), that
        SWServerWorker will not be terminated. We then hit assertion later on when this
        worker is trying to do things (like call skipWaiting).

        To address the issue, we now keep a reference this SWServerWorker on the
        registration, via a new SWServerRegistration::m_preInstallationWorker data member.
        When the registration is cleared, we now take care of terminating this worker.

        No new tests, covered by existing tests that crash flakily in debug builds.

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):
        if the mutex is locked, then the worker thread is still starting. We spin the
        runloop and try to stop again later. This avoids the deadlock shown in
        Bug 181763 as the worker thread may need to interact with the main thread
        during startup.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::installContextData):
        * workers/service/server/SWServerJobQueue.cpp:
        (WebCore::SWServerJobQueue::scriptContextFailedToStart):
        (WebCore::SWServerJobQueue::install):
        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::~SWServerRegistration):
        (WebCore::SWServerRegistration::setPreInstallationWorker):
        (WebCore::SWServerRegistration::clear):
        * workers/service/server/SWServerRegistration.h:
        (WebCore::SWServerRegistration::preInstallationWorker const):

2018-01-19  Chris Dumez  <cdumez@apple.com>

        Service worker registrations restored from disk may not be reused when the JS calls register() again
        https://bugs.webkit.org/show_bug.cgi?id=181810
        <rdar://problem/36591711>

        Reviewed by Youenn Fablet.

        The issue was that when restoring a registration from disk, we would not set its active worker right
        away. We only set it later in installContextData(). installContextData() is only called after we’ve
        launched the service worker process and established a connection to it.

        However, we would start processing jobs (such as registrations) before we’ve established the connection
        to the service worker process. SWServerJobQueue::runRegisterJob(), in order to reuse an existing
        registration checks the registration’s active worker has the right script URL. The issue was that when
        this code would execute, we may not have set the registration’s active service worker yet, in which case,
        we would update the existing registration instead of reusing it as-is.

        To address the issue, we now delay the processing of jobs until the connection to the service worker
        process has been established and we've installed all pending contexts via installContextData().

        Changed is covered by new API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::Connection::scheduleJobInServer):
        (WebCore::SWServer::scheduleJob):
        (WebCore::SWServer::serverToContextConnectionCreated):
        * workers/service/server/SWServer.h:

2018-01-19  James Craig  <jcraig@apple.com>

        AX: when invert colors is on, double-invert image and picture elements in UserAgentStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=181281
        <rdar://problem/36291776>

        Reviewed by Simon Fraser.

        Updated "Smart Invert" to include img and picture element inversion and tests.

        Tests: accessibility/smart-invert-reference.html
               accessibility/smart-invert.html

        * css/html.css:
        (@media (inverted-colors)):
        (img:not(picture>img), picture, video):

2018-01-19  Chris Dumez  <cdumez@apple.com>

        The WebContent process should not process incoming IPC while waiting for a sync IPC reply
        https://bugs.webkit.org/show_bug.cgi?id=181560

        Reviewed by Ryosuke Niwa.

        Add internals API for testing purposes.

        Test: fast/misc/testIncomingSyncIPCMessageWhileWaitingForSyncReply.html

        * page/ChromeClient.h:
        * testing/Internals.cpp:
        (WebCore::Internals::testIncomingSyncIPCMessageWhileWaitingForSyncReply):
        * testing/Internals.h:
        * testing/Internals.idl:

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-19  Daniel Bates  <dabates@apple.com>

        Fix misspelling; substitute willDetachRenderer for willDetatchRenderer.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willDetachRenderers):
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::willDetachRenderer):
        (WebCore::PluginViewBase::willDetatchRenderer): Deleted.

2018-01-19  Jonathan Bedard  <jbedard@apple.com>

        Unreviewed build fix, remove unused lambda captures.

        * dom/messageports/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::takeAllMessagesForPort):
        * dom/messageports/MessagePortChannelRegistry.cpp:
        (WebCore::MessagePortChannelRegistry::messagePortChannelCreated):

2018-01-19  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose timing properties (delay, endDelay, fill, iterationStart, iterations, direction) and getComputedTiming()
        https://bugs.webkit.org/show_bug.cgi?id=181857
        <rdar://problem/36660081>

        Reviewed by Dean Jackson.

        We start the work to implement the rest of the Web Animations timing and animation model by exposing more properties on
        AnimationEffectTiming to control delay (delay, endDelay), looping (iterationStart, iterations), fill and direction.
        Additionally, we expose the getComputedTiming() method on AnimationEffect, although it currently lacks some computed
        properties that will come in later patch as we implement various processes defined by the spec. We also update the
        existing duration() method on AnimationEffectTiming to be called iterationDuration() to match the terms used in the
        specification.

        Finally, we make all new properties, and update existing ones, that expose a time value go through the new utility
        function secondsToWebAnimationsAPITime() to guarantee rounded values with microseconds precision, as advised by
        the Web Animations specification.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * animation/AnimationEffect.cpp:
        (WebCore::AnimationEffect::localTime const):
        (WebCore::AnimationEffect::getComputedTiming):
        * animation/AnimationEffect.h:
        * animation/AnimationEffect.idl:
        * animation/AnimationEffectTiming.cpp:
        (WebCore::AnimationEffectTiming::AnimationEffectTiming):
        (WebCore::AnimationEffectTiming::setIterationStart):
        (WebCore::AnimationEffectTiming::setIterations):
        (WebCore::AnimationEffectTiming::bindingsDuration const):
        (WebCore::AnimationEffectTiming::setBindingsDuration):
        (WebCore::AnimationEffectTiming::endTime const):
        (WebCore::AnimationEffectTiming::activeDuration const):
        * animation/AnimationEffectTiming.h:
        * animation/AnimationEffectTiming.idl:
        * animation/AnimationPlaybackEvent.cpp:
        (WebCore::AnimationPlaybackEvent::bindingsCurrentTime const):
        (WebCore::AnimationPlaybackEvent::bindingsTimelineTime const):
        * animation/AnimationTimeline.cpp:
        (WebCore::AnimationTimeline::bindingsCurrentTime):
        * animation/ComputedTimingProperties.h: Added.
        * animation/ComputedTimingProperties.idl: Added. We set nullable double values to a default value of "null" since
        otherwise setting those properties to a null value would not set the properties in the converted JS dictionary.
        * animation/KeyframeEffect.cpp:
        (WebCore::KeyframeEffect::create): Handle new timing properties passed in the KeyframeEffectOptions dictionary.
        (WebCore::KeyframeEffect::applyAtLocalTime):
        (WebCore::KeyframeEffect::getAnimatedStyle):
        (WebCore::KeyframeEffect::startOrStopAccelerated):
        * animation/WebAnimation.cpp:
        (WebCore::WebAnimation::bindingsStartTime const):
        (WebCore::WebAnimation::bindingsCurrentTime const):
        (WebCore::WebAnimation::effectEndTime const):
        (WebCore::WebAnimation::timeToNextRequiredTick const):
        * animation/WebAnimationUtilities.h: Added.
        (WebCore::secondsToWebAnimationsAPITime):

2018-01-19  Alex Christensen  <achristensen@webkit.org>

        Remove dead networking code
        https://bugs.webkit.org/show_bug.cgi?id=181813

        Reviewed by Tim Horton.

        CFURLConnection is only used on Windows.

        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::encodingRequiresPlatformData const):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::findCFURLRequestCopyContentDispositionEncodingFallbackArrayFunction):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2018-01-19  Alex Christensen  <achristensen@webkit.org>

        Remove unused WebViewPrivate _allowCookies
        https://bugs.webkit.org/show_bug.cgi?id=181812

        Reviewed by Tim Horton.

        This SPI was in the original iOS upstreaming and has not been used in many years.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setDefaultAllowCookies): Deleted.
        (WebCore::ResourceRequestBase::defaultAllowCookies): Deleted.
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):

2018-01-18  Brady Eidson  <beidson@apple.com>

        Make in-process MessagePorts be (mostly) asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=181454

        Reviewed by Alex Christensen.

        No new tests (Covered *brutally* by existing tests)

        Part of making MessagePorts be a thing we can pass across processes is making them work async.
        
        The existing "MessagePortChannel" method of abstraction was not cut out for this.
        This patch gets rid of MessagePortChannel and adds a new MessagePortChannelProvider abstraction.
        It then gets the new machinery working in-process (with some pieces of out-of-process in place)

        One synchronous behavior this patch maintains is the hasPendingActivity() check used to support GC.
        That will (creatively) be made async in the next followup.
        
        More generally from MessagePorts, this patch also adds a "MessageWithMessagePorts" object to be used
        with all forms of postMessage(). Much better.
        
        * CMakeLists.txt:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

        * dom/InProcessMessagePortChannel.cpp: Removed.
        * dom/InProcessMessagePortChannel.h: Removed.
        * dom/MessagePortChannel.cpp: Removed.
        * dom/MessagePortChannel.h: Removed.

        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::create):
        (WebCore::MessageChannel::MessageChannel):
        (WebCore::m_port2): Deleted.
        * dom/MessageChannel.h:
        (WebCore::MessageChannel::create): Deleted.

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::create):
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::entangle):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::disentangle):
        (WebCore::MessagePort::messageAvailable):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::contextDestroyed):
        (WebCore::MessagePort::dispatchMessages):
        (WebCore::MessagePort::hasPendingActivity const):
        (WebCore::MessagePort::locallyEntangledPort const):
        (WebCore::MessagePort::disentanglePorts):
        (WebCore::MessagePort::entanglePorts):
        (WebCore::MessagePort::entangleWithRemote): Deleted.
        * dom/MessagePort.h:

        * dom/MessagePortIdentifier.h:
        (WebCore::MessagePortIdentifier::logString const):

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::processMessageWithMessagePortsSoon):
        (WebCore::ScriptExecutionContext::dispatchMessagePortEvents):
        (WebCore::ScriptExecutionContext::processMessagePortMessagesSoon): Deleted.
        * dom/ScriptExecutionContext.h:

        Add a single object that represents two intertwined ports, tracks their pending
        messages, tracks which process they're in, etc etc:
        * dom/messageports/MessagePortChannel.cpp: Added.
        (WebCore::MessagePortChannel::create):
        (WebCore::MessagePortChannel::MessagePortChannel):
        (WebCore::MessagePortChannel::~MessagePortChannel):
        (WebCore::MessagePortChannel::includesPort):
        (WebCore::MessagePortChannel::entanglePortWithProcess):
        (WebCore::MessagePortChannel::disentanglePort):
        (WebCore::MessagePortChannel::closePort):
        (WebCore::MessagePortChannel::postMessageToRemote):
        (WebCore::MessagePortChannel::takeAllMessagesForPort):
        (WebCore::MessagePortChannel::hasAnyMessagesPendingOrInFlight const):
        * dom/messageports/MessagePortChannel.h: Added.
        (WebCore::MessagePortChannel::port1 const):
        (WebCore::MessagePortChannel::port2 const):
        (WebCore::MessagePortChannel::logString const):

        Abstraction for creating and operating on MessagePorts in a potentially cross-process way:
        * dom/messageports/MessagePortChannelProvider.cpp: Added.
        (WebCore::MessagePortChannelProvider::singleton):
        (WebCore::MessagePortChannelProvider::setSharedProvider):
        * dom/messageports/MessagePortChannelProvider.h: Added.
        (WebCore::MessagePortChannelProvider::~MessagePortChannelProvider):

        Adds a concrete implementation of that provider to be used in-process (e.g. WK1):
        * dom/messageports/MessagePortChannelProviderImpl.cpp: Added.
        (WebCore::MessagePortChannelProviderImpl::~MessagePortChannelProviderImpl):
        (WebCore::MessagePortChannelProviderImpl::performActionOnAppropriateThread):
        (WebCore::MessagePortChannelProviderImpl::createNewMessagePortChannel):
        (WebCore::MessagePortChannelProviderImpl::entangleLocalPortInThisProcessToRemote):
        (WebCore::MessagePortChannelProviderImpl::messagePortDisentangled):
        (WebCore::MessagePortChannelProviderImpl::messagePortClosed):
        (WebCore::MessagePortChannelProviderImpl::postMessageToRemote):
        (WebCore::MessagePortChannelProviderImpl::takeAllMessagesForPort):
        (WebCore::MessagePortChannelProviderImpl::hasMessagesForPorts_temporarySync):
        * dom/messageports/MessagePortChannelProviderImpl.h: Added.

        Adds a main thread object to handle the set of all MessagePortChannels that are open.
        For now it lives in the WebProcess, but for out-of-process it will live in the UIProcess:
        * dom/messageports/MessagePortChannelRegistry.cpp: Added.
        (WebCore::MessagePortChannelRegistry::~MessagePortChannelRegistry):
        (WebCore::MessagePortChannelRegistry::didCreateMessagePortChannel):
        (WebCore::MessagePortChannelRegistry::messagePortChannelCreated):
        (WebCore::MessagePortChannelRegistry::messagePortChannelDestroyed):
        (WebCore::MessagePortChannelRegistry::didEntangleLocalToRemote):
        (WebCore::MessagePortChannelRegistry::didDisentangleMessagePort):
        (WebCore::MessagePortChannelRegistry::didCloseMessagePort):
        (WebCore::MessagePortChannelRegistry::didPostMessageToRemote):
        (WebCore::MessagePortChannelRegistry::takeAllMessagesForPort):
        (WebCore::MessagePortChannelRegistry::hasMessagesForPorts_temporarySync): This is named against style
          and weird on purpose - to call attention to how bad it is and how it's temporary.
        (WebCore::MessagePortChannelRegistry::existingChannelContainingPort):
        * dom/messageports/MessagePortChannelRegistry.h: Added.

        Add an object that represents a "SerializedScriptValue for the message payload and the ports
        that are being transferred along with that payload". This is used in all forms of postMessage():
        * dom/messageports/MessageWithMessagePorts.cpp: Added.
        * dom/messageports/MessageWithMessagePorts.h: Added.

        * page/DOMWindow.cpp:
        (WebCore::PostMessageTimer::PostMessageTimer):
        (WebCore::PostMessageTimer::event):
        (WebCore::DOMWindow::postMessage):

        * platform/Logging.h:

        * workers/DedicatedWorkerGlobalScope.cpp:
        (WebCore::DedicatedWorkerGlobalScope::postMessage):

        * workers/Worker.cpp:
        (WebCore::Worker::postMessage):

        * workers/WorkerGlobalScopeProxy.h:

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerGlobalScope):
        * workers/WorkerMessagingProxy.h:

        * workers/WorkerObjectProxy.h:

        * workers/service/ServiceWorker.cpp:
        (WebCore::ServiceWorker::postMessage):

        * workers/service/ServiceWorkerClient.cpp:
        (WebCore::ServiceWorkerClient::postMessage):

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::postMessageToServiceWorker):

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::fireMessageEvent):
        (WebCore::ServiceWorkerThread::postMessageToServiceWorker):
        * workers/service/context/ServiceWorkerThread.h:

2018-01-18  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed build fix, removed unused lambda capture.

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::ServiceWorkerTerminationRequest::ServiceWorkerTerminationRequest):

2018-01-18  Chris Dumez  <cdumez@apple.com>

        We should be able to terminate service workers that are unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=181563
        <rdar://problem/35280031>

        Reviewed by Alex Christensen.

        Test: http/tests/workers/service/postmessage-after-terminating-hung-worker.html

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):
        Before calling WorkerThread::stop(), set a timer with the given timeout parameter.
        If the worker thread has not stopped when the timer fires, forcefully exit the
        service worker process. The StorageProcess will take care of relaunching the
        service worker process if it exits abruptly.

        (WebCore::SWContextManager::serviceWorkerFailedToTerminate):
        Log error message if we failed to terminate a service worker and call exit().

        (WebCore::SWContextManager::ServiceWorkerTerminationRequest::ServiceWorkerTerminationRequest):

        * workers/service/context/SWContextManager.h:

2018-01-18  Youenn Fablet  <youenn@apple.com>

        Do not go to the storage process when loading a main resource if there is no service worker registered
        https://bugs.webkit.org/show_bug.cgi?id=181395

        Reviewed by Chris Dumez.

        No observable behavior change.
        Instead of creating a connection to know whether there is a potential service worker,
        Ask the service worker provider that will use the connection if needed.
        Otherwise, it will use a default value provided by the UIProcess.

        Tested by cleaning all service workers and checking the computed value of the default value,
        then observing whether pages registering service workers work well.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * workers/service/ServiceWorkerProvider.cpp:
        (WebCore::ServiceWorkerProvider::mayHaveServiceWorkerRegisteredForOrigin):
        * workers/service/ServiceWorkerProvider.h:

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/FeatureDefines.xcconfig: Adopted macOSTargetConditionals helpers.
        * Configurations/Version.xcconfig: Updated.
        * Configurations/macOSTargetConditionals.xcconfig: Added. Defines helper build settings
          useful for defining settings that depend on the target macOS version.

2018-01-18  Chris Dumez  <cdumez@apple.com>

        Service Workers restored from persistent storage have 'redundant' state
        https://bugs.webkit.org/show_bug.cgi?id=181749
        <rdar://problem/36556486>

        Reviewed by Youenn Fablet.

        Tested by new API test.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::installContextData):
        Make sure the SWServerWorker's state is set to "activated" after it is assigned to
        the registrations' active slot. Otherwise, it stays in its default state (redundant).

2018-01-18  Antti Koivisto  <antti@apple.com>

        REGRESSION(r225650): The scores of MotionMark tests Multiply and Leaves dropped by 8%
        https://bugs.webkit.org/show_bug.cgi?id=181460
        <rdar://problem/36379776>

        Reviewed by Ryosuke Niwa.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):

        Don't do the expensive security origin test if the supplied sheet base URL is null. This
        is true for rules coming from the same document.

2018-01-18  Antti Koivisto  <antti@apple.com>

        REGRESSION (r223604): Setting :before/after pseudo element on <noscript> asserts
        https://bugs.webkit.org/show_bug.cgi?id=181795
        <rdar://problem/36334524>

        Reviewed by David Kilzer.

        <noscript> disallows renderer generation outside CSS mechanisms, however we would still construct
        PseudoElements for them during style resolution. These were never removed properly because the
        pseudo element removal was tied to render tree teardown. Without proper removal the associated
        animations were also not canceled.

        Test: fast/css-generated-content/noscript-pseudo-anim-crash.html

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

        Take care to get rid of PseudoElements when the element is removed from the tree.
        This also cancels any associated animations.

2018-01-18  Chris Fleizach  <cfleizach@apple.com>

        AX: Aria-activedescendant not supported
        https://bugs.webkit.org/show_bug.cgi?id=161734
        <rdar://problem/28202679>

        Reviewed by Joanmarie Diggs.

        When a combo-box owns/controls a list/listbox/grid/tree, the owned element needs to check the active-descendant of the combobox when
        checking if it has selected children. 
        The target of the selection change notification should also be the owned element in these cases.

        Test: accessibility/aria-combobox-controlling-list.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::selectedListItem):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::targetElementForActiveDescendant const):
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::canHaveSelectedChildren const):
        (WebCore::AccessibilityRenderObject::selectedChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2018-01-17  Per Arne Vollan  <pvollan@apple.com>

        REGRESSION (r224780): Text stroke not applied to video captions.
        https://bugs.webkit.org/show_bug.cgi?id=181743
        <rdar://problem/35874338>

        Reviewed by Simon Fraser.

        Tests: media/track/track-css-visible-stroke-expected.html
               media/track/track-css-visible-stroke.html

        After r224780, it is no longer possible to mix text stroke styles with webkit
        legacy text stroke styles.

        * css/StyleResolver.cpp:
        (WebCore::isValidCueStyleProperty):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS const):

2018-01-18  Andy Estes  <aestes@apple.com>

        [Payment Request] Support a default shipping address for Apple Pay
        https://bugs.webkit.org/show_bug.cgi?id=181754
        <rdar://problem/36009733>

        Reviewed by Brady Eidson.

        Move shippingContact from ApplePayPaymentRequest to ApplePayRequestBase. This allows
        merchants to specify a default shipping address when using Apple Pay with Payment Request.

        This also fixes a bug found during testing where
        +[NSPersonNameComponentsFormatter localizedStringFromPersonNameComponents:style:options:]
        would throw an exception when passed a nil NSPersonNameComponents.

        Test: http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html

        * Modules/applepay/ApplePayPaymentRequest.h:
        * Modules/applepay/ApplePayPaymentRequest.idl:
        * Modules/applepay/ApplePayRequestBase.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePayRequestBase.h:
        * Modules/applepay/ApplePayRequestBase.idl:
        * Modules/applepay/ApplePaySession.cpp:
        (WebCore::convertAndValidate):
        * Modules/applepay/ApplePaySessionPaymentRequest.h:
        (WebCore::ApplePaySessionPaymentRequest::version const):
        (WebCore::ApplePaySessionPaymentRequest::setVersion):
        * Modules/applepay/cocoa/PaymentContactCocoa.mm:
        (WebCore::convert):
        * Modules/applepay/paymentrequest/ApplePayRequest.idl:
        * testing/MockPaymentCoordinator.cpp:
        (WebCore::MockPaymentCoordinator::showPaymentUI):
        (WebCore::MockPaymentCoordinator::completeMerchantValidation):
        * testing/MockPaymentCoordinator.h:

2018-01-18  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS] Specify -[NSURL _title] for the associated URL when copying an image element
        https://bugs.webkit.org/show_bug.cgi?id=181783
        <rdar://problem/35785445>

        Reviewed by Ryosuke Niwa.

        Always specify the -[NSURL _title] to be either the title specified in a PasteboardImage's inner PasteboardURL,
        or if no title is specified, fall back to the user-visible URL string. This is because at least one internal
        client always tries to use the -_title property to determine the title of a pasted URL, or if none is specified,
        the -suggestedName. Since we need to set suggestedName to the preferred file name of the copied image and we
        don't want the suggested name to become the title of the link, we need to explicitly set the link title.

        In doing so, this patch also fixes a bug wherein we forget to set the _title of the NSURL we're registering to
        an NSItemProvider.

        Tests:  ActionSheetTests.CopyImageElementWithHREFAndTitle (new)
                ActionSheetTests.CopyImageElementWithHREF (modified)

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

2018-01-17  Jer Noble  <jer.noble@apple.com>

        WebVTT served via HLS never results in cues
        https://bugs.webkit.org/show_bug.cgi?id=181773

        Reviewed by Eric Carlson.

        Test: http/tests/media/hls/hls-webvtt-tracks.html

        Three independant errors conspired to keep in-band WebVTT samples from parsing:

        - The definition of ISOWebVTTCue::boxTypeName() was incorrect.
        - ISOWebVTTCue::parse() didn't call it's superclass's parse() method (leading to an incorrect size and offset).
        - Use String::fromUTF8() rather than String.adopt(StringVector&&).

        * platform/graphics/iso/ISOVTTCue.cpp:
        (WebCore::ISOWebVTTCue::parse):
        * platform/graphics/iso/ISOVTTCue.h:
        (WebCore::ISOWebVTTCue::boxTypeName):

2018-01-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Block cookies for prevalent resources without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=177394
        <rdar://problem/34613960>

        Reviewed by Alex Christensen.

        Tests: http/tests/resourceLoadStatistics/add-blocking-to-redirect.html
               http/tests/resourceLoadStatistics/non-prevalent-resources-can-access-cookies-in-a-third-party-context.html
               http/tests/resourceLoadStatistics/remove-blocking-in-redirect.html
               http/tests/resourceLoadStatistics/remove-partitioning-in-redirect.html

        * platform/network/NetworkStorageSession.h:
            Now exports NetworkStorageSession::nsCookieStorage().
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):
            Fixes the FIXME.

2018-01-17  Dean Jackson  <dino@apple.com>

        Remove linked-on test for Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=181770

        Reviewed by Eric Carlson.

        Remove a very old linked-on-or-after test.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2018-01-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r227098.

        This broke the build.

        Reverted changeset:

        "Remove linked-on test for Snow Leopard"
        https://bugs.webkit.org/show_bug.cgi?id=181770
        https://trac.webkit.org/changeset/227098

2018-01-17  Dean Jackson  <dino@apple.com>

        Remove linked-on test for Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=181770

        Reviewed by Eric Carlson.

        Remove a very old linked-on-or-after test.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2018-01-17  Stephan Szabo  <stephan.szabo@sony.com>

        [Curl] Use ResourceRequest::encodeWithPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=181768

        Reviewed by Alex Christensen.

        No new tests, assertion hit in downstream port, should be covered by
        existing tests.

        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::encodeWithPlatformData const):
        (WebCore::ResourceRequest::decodeWithPlatformData):

2018-01-17  Eric Carlson  <eric.carlson@apple.com>

        Use existing RGB colorspace instead of creating a new one
        https://bugs.webkit.org/show_bug.cgi?id=181765
        <rdar://problem/36595753>

        Reviewed by Dean Jackson.

        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Use sRGBColorSpaceRef instead
        of creating a new static colorspace.

2018-01-17  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r227076.

        This breaks internal builds

        Reverted changeset:

        "Resource Load Statistics: Block cookies for prevalent
        resources without user interaction"
        https://bugs.webkit.org/show_bug.cgi?id=177394
        https://trac.webkit.org/changeset/227076

2018-01-17  Ryosuke Niwa  <rniwa@webkit.org>

        input and textarea elements should reveal selection in setSelection when focused
        https://bugs.webkit.org/show_bug.cgi?id=181715
        <rdar://problem/36570546>

        Reviewed by Zalan Bujtas.

        Made input and textarea elements reveal selection in FrameSelection::setSelection instead of by directly
        invoking FrameSelection::revealSelection in their respective updateFocusAppearance to unify code paths.

        Also added options to reveal selection up to the main frame to SetSelectionOption to be used in iOS.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::moveWithoutValidationTo): Takes SelectionRevealMode as an argument and converts
        sets appropriate selection options.
        (WebCore::FrameSelection::setSelection): Reconstruct SelectionRevealMode out of selection option sets.
        (WebCore::FrameSelection::updateAndRevealSelection):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection): Added RevealSelectionUpToMainFrame as a SelectionRevealMode and replaced
        m_shouldRevealSelection by m_selectionRevealMode.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateFocusAppearance): Pass SelectionRevealMode to HTMLTextFormControlElement's
        select and restoreCachedSelection instead of directly invoking FrameSelection::revealSelection.
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance): Ditto.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        (WebCore::HTMLTextFormControlElement::restoreCachedSelection):
        * html/HTMLTextFormControlElement.h:

2018-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        WEBKIT_FRAMEWORK should not modify file-global include directories
        https://bugs.webkit.org/show_bug.cgi?id=181656

        Reviewed by Konstantin Tokarev.

        * CMakeLists.txt:
        * PlatformWPE.cmake:

2018-01-17  Michael Catanzaro  <mcatanzaro@igalia.com>

        [GTK] Try even harder not to static link WTF into libwebkit2gtk
        https://bugs.webkit.org/show_bug.cgi?id=181751

        Reviewed by Alex Christensen.

        We don't want two copies of WTF. It should only be in libjavascriptcoregtk.

        * PlatformGTK.cmake:

2018-01-17  Zalan Bujtas  <zalan@apple.com>

        Multicol: RenderMultiColumnFlow should not inherit the flow state
        https://bugs.webkit.org/show_bug.cgi?id=181762
        <rdar://problem/35448565>

        Reviewed by Simon Fraser.

        Do not compute the inherited flow state flag for RenderMultiColumnFlow.
        It is (by definition) always inside a fragmented flow.

        Test: fast/multicol/crash-when-out-of-flow-positioned-becomes-in-flow.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::computedFragmentedFlowState):

2018-01-17  Alex Christensen  <achristensen@webkit.org>

        Deprecate Application Cache
        https://bugs.webkit.org/show_bug.cgi?id=181764

        Reviewed by Geoffrey Garen.

        * features.json:

2018-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        [iOS simulator] API test WKAttachmentTests.InjectedBundleReplaceURLWhenPastingImage is failing
        https://bugs.webkit.org/show_bug.cgi?id=181758

        Reviewed by Tim Horton.

        This test is failing because Editor::clientReplacementURLForResource expects a MIME type, but on iOS, the type
        paramter passed into WebContentReader::readImage is a UTI; subsequently, the bundle editing delegate receives
        a MIME type that's actually a UTI, which is incorrect. To address this, ensure that a MIME type is passed to
        bundle SPI by converting the type in WebContentReader::readImage to a MIME type.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readImage):

2018-01-17  Antti Koivisto  <antti@apple.com>

        REGRESSION (r226385?): Crash in com.apple.WebCore: WebCore::MediaQueryEvaluator::evaluate const + 32
        https://bugs.webkit.org/show_bug.cgi?id=181742
        <rdar://problem/36334726>

        Reviewed by David Kilzer.

        Test: fast/media/mediaqueryevaluator-crash.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::MediaQueryEvaluator):

        Use WeakPtr<Document> instead of a plain Frame pointer.

        (WebCore::MediaQueryEvaluator::evaluate const):

        Get the frame via document.

        * css/MediaQueryEvaluator.h:
        * dom/Document.cpp:
        (WebCore::Document::prepareForDestruction):

        Take care to clear style resolver.

2018-01-17  Youenn Fablet  <youenn@apple.com>

        Put fetch request keepAlive behind a runtime flag
        https://bugs.webkit.org/show_bug.cgi?id=181592

        Reviewed by Chris Dumez.

        No change of behavior.

        * Modules/fetch/FetchRequest.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::fetchAPIKeepAliveEnabled const):
        (WebCore::RuntimeEnabledFeatures::setFetchAPIKeepAliveEnabled):

2018-01-17  Per Arne Vollan  <pvollan@apple.com>

        [Win] Use switch when converting from ResourceRequestCachePolicy to platform cache policy.
        https://bugs.webkit.org/show_bug.cgi?id=181686

        Reviewed by Alex Christensen.

        No new tests, covered by existing tests.

        A switch will make the function easier on the eyes. Also, use the function in places where the ResourceRequestCachePolicy
        is just casted to a platform cache policy.

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::toPlatformRequestCachePolicy):

2018-01-17  John Wilander  <wilander@apple.com>

        Resource Load Statistics: Block cookies for prevalent resources without user interaction
        https://bugs.webkit.org/show_bug.cgi?id=177394
        <rdar://problem/34613960>

        Reviewed by Alex Christensen.

        Tests: http/tests/resourceLoadStatistics/add-blocking-to-redirect.html
               http/tests/resourceLoadStatistics/non-prevalent-resources-can-access-cookies-in-a-third-party-context.html
               http/tests/resourceLoadStatistics/remove-blocking-in-redirect.html
               http/tests/resourceLoadStatistics/remove-partitioning-in-redirect.html

        * platform/network/NetworkStorageSession.h:
            Now exports NetworkStorageSession::nsCookieStorage().
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::setPrevalentDomainsToPartitionOrBlockCookies):
            Fixes the FIXME.

2018-01-17  Daniel Bates  <dabates@apple.com>

        REGRESSION (r222795): Cardiogram never signs in
        https://bugs.webkit.org/show_bug.cgi?id=181693
        <rdar://problem/36286293>

        Reviewed by Ryosuke Niwa.

        Exempt Cardiogram from the XHR header restrictions in r222795.

        Following r222795 only Dashboard widgets are allowed to set arbitrary XHR headers.
        However Cardiogram also depends on such functionality.

        Test: fast/xmlhttprequest/set-dangerous-headers-from-file-when-setting-enabled.html

        * page/Settings.yaml:
        * platform/RuntimeApplicationChecks.h:
        * platform/cocoa/RuntimeApplicationChecksCocoa.mm:
        (WebCore::IOSApplication::isCardiogram):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeader):

2018-01-17  Daniel Bates  <dabates@apple.com>

        ASSERTION FAILED: !m_completionHandler in PingHandle::~PingHandle()
        https://bugs.webkit.org/show_bug.cgi?id=181746
        <rdar://problem/36586248>

        Reviewed by Chris Dumez.

        Call PingHandle::pingLoadComplete() with an error when NSURLConnection queries
        whether the ping is able to respond to an authentication request. (Pings do not
        respond to authenticate requests.) It will call the completion handler, nullify
        the completion handler, and deallocate the PingHandle. Nullifying the completion
        handler is necessary to avoid the assertion failure in ~PingHandle().

        Test: http/tests/misc/before-unload-load-image.html

        * platform/network/PingHandle.h:

2018-01-17  Daniel Bates  <dabates@apple.com>

        WebCoreResourceHandleAsOperationQueueDelegate/ResourceHandleCFURLConnectionDelegateWithOperationQueue may
        be deleted in main thread callback
        https://bugs.webkit.org/show_bug.cgi?id=181747
        <rdar://problem/36588120>

        Reviewed by Alex Christensen.

        Retain the delegate (e.g. WebCoreResourceHandleAsOperationQueueDelegate) before scheduling
        a main thread callback and blocking on a semaphore for its reply because the main thread
        callback can do anything, including deleting the delegate, before the non-main thread
        has a chance to execute. For instance, a PingHandle will delete itself (and hence delete
        its resource handle delegate) in most of the code paths invoked by the delegate.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willSendRequest:redirectResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:canAuthenticateAgainstProtectionSpace:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willCacheResponse:]):

2018-01-17  Chris Dumez  <cdumez@apple.com>

        'fetch' event may be sent to a service worker before its state is set to 'activated'
        https://bugs.webkit.org/show_bug.cgi?id=181698
        <rdar://problem/36554856>

        Reviewed by Youenn Fablet.

        'fetch' event may be sent to a service worker before its state is set to 'activated'.
        When the registration's active worker needs to intercept a load, and its state is 'activating',
        we queue the request to send the fetch event in SWServerWorker::m_whenActivatedHandlers.
        Once the SWServerWorker::setState() is called with 'activated' state, we then call the
        handlers in m_whenActivatedHandlers to make send the fetch event now that the worker is
        activated. The issue is that even though the worker is activated and its state was set to
        'activated' on Storage process side, we had not yet notified the ServiceWorker process
        of the service worker's new state yet.

        To address the issue, we now make sure that SWServerWorker::m_whenActivatedHandlers are
        called *after* we've sent the IPC to the ServiceWorker process to update the worker's
        state to 'activated'. Also, we now call ServiceWorkerFetch::dispatchFetchEvent()
        asynchronously in a postTask() as the service worker's state is also updated asynchronously
        in a postTask. This is as per specification [1], which says to "queue a task" to fire
        the fetch event.

        [1] https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm (step 18)

        No new tests, covered by imported/w3c/web-platform-tests/service-workers/service-worker/fetch-waits-for-activate.https.html
        which hits the new assertion without the fix.

        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent):
        Add assertions to make sure that we dispatch the fetch event on the right worker and
        that the worker is in 'activated' state.

        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::postFetchTask):
        Queue a task to fire the fetch event as per:
        - https://w3c.github.io/ServiceWorker/#on-fetch-request-algorithm (step 18)
        We need to match the specification exactly here or things will happen in the wrong
        order. In particular, things like "update registration state" and "update worker state"
        might happen *after* firing the fetch event, even though the IPC for "update registration/worker
        state" was sent before the "fire fetch event" one, because the code for updating a registration/
        worker state already queues a task, as per the specification.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::updateWorkerState):
        * workers/service/server/SWServerRegistration.h:
        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::setState):
        Move code to send the IPC to the Service Worker process whenever the service worker's state
        needs to be updated from SWServerRegistration::updateWorkerState() to SWServerWorker::setState().
        This way, we can make sure the IPC is sent *before* we call the m_whenActivatedHandlers handlers,
        as they may also send IPC to the Service Worker process, and we need to make sure this IPC happens
        after so that the service worker is in the right state.

2018-01-17  Stephan Szabo  <stephan.szabo@sony.com>

        Page.cpp only sees forward declaration of ApplicationStateChangeListener when ENABLE(VIDEO) is off
        https://bugs.webkit.org/show_bug.cgi?id=181713

        Reviewed by Darin Adler.

        No new tests (build fix).

        * page/Page.cpp: Add include for ApplicationStateChangeListener

2018-01-17  Wenson Hsieh  <wenson_hsieh@apple.com>

        Add injected bundle SPI to replace subresource URLs when dropping or pasting rich content
        https://bugs.webkit.org/show_bug.cgi?id=181637
        <rdar://problem/36508471>

        Reviewed by Tim Horton.

        Before carrying out blob URL conversion for pasted or dropped rich content, let the editor client replace
        subresource URLs in WebKit2 by calling out to new injected bundle SPI. See comments below for more detail.

        Tests:  WKAttachmentTests.InjectedBundleReplaceURLsWhenPastingAttributedString
                WKAttachmentTests.InjectedBundleReplaceURLWhenPastingImage

        * editing/Editor.cpp:
        (WebCore::Editor::clientReplacementURLForResource):
        * editing/Editor.h:

        Add a new helper to call out to the editor client for a URL string to replace a given ArchiveResource. In
        WebKit2, this calls out to the injected bundle's new `replacementURLForResource` SPI hook.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::shouldReplaceSubresourceURL):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::replaceSubresourceURLsWithURLsFromClient):

        Add a new static helper to replace subresource URLs in the given DocumentFragment with URLs supplied by the
        editor client. Additionally builds a list of ArchiveResources that have not been replaced, for use at call sites
        so that we don't unnecessarily create more Blobs for ArchiveResources that have already been replaced.

        (WebCore::createFragmentAndAddResources):
        (WebCore::sanitizeMarkupWithArchive):

        Tweak web content reading codepaths to first replace subresource URLs with editor-client-supplied URLs.

        (WebCore::WebContentReader::readImage):
        (WebCore::shouldConvertToBlob): Deleted.

        Rename this helper to shouldReplaceSubresourceURL, blob URL replacement is no longer the only scenario in which
        we replace resource URLs, but in both cases, we still want to ignore `http:`-family and `data:` URLs.

        * loader/EmptyClients.cpp:
        * page/EditorClient.h:

2018-01-17  Yacine Bandou  <yacine.bandou_ext@softathome.com>
        [EME][GStreamer] Add the full-sample encryption support in the GStreamer ClearKey decryptor
        https://bugs.webkit.org/show_bug.cgi?id=180080

        Reviewed by Xabier Rodriguez-Calvar.

        Currently the GStreamer clearKey decryptor doesn't support the full-sample encryption,
        where the buffer is entirely encrypted, it supports only the sub-sample encryption.

        Test: media/encrypted-media/clearKey/clearKey-cenc-audio-playback-mse.html

        * platform/graphics/gstreamer/eme/WebKitClearKeyDecryptorGStreamer.cpp:
        (webKitMediaClearKeyDecryptorDecrypt):

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed follow-up to r227051.

        * platform/graphics/cairo/CairoOperations.h: Fix declaration of the
        fillRoundedRect() function by removing the bool parameter that's not
        used at all in the definition. This went unspotted due to the unified
        source build including the implementation file before fillRoundedRect()
        usage in GrapihcsContextCairo.cpp, leaving the declaration undefined
        and instead using the definition directly.

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Don't mirror global alpha and image interpolation quality state values in PlatformContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=181725

        Reviewed by Carlos Garcia Campos.

        Don't duplicate global alpha and image interpolation quality state
        values on the PlatformContextCairo. Instead, retrieve them from
        the managing GraphicsContextState when necessary.

        For Cairo operations, the FillSource and StrokeSource containers now
        store the global alpha value, using it during the operation executions.
        For drawNativeImage(), the global alpha and interpolation quality values
        are passed through arguments.

        In PlatformContextCairo, the two values are no longer stored on the
        internally-managed stack, and the getter-setter pairs for the two values
        are removed. In drawSurfaceToContext(), the two values are now expected
        to be passed through the method arguments.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::prepareForFilling):
        (WebCore::Cairo::prepareForStroking):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::fillCurrentCairoPath):
        (WebCore::Cairo::FillSource::FillSource):
        (WebCore::Cairo::StrokeSource::StrokeSource):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::State::setGlobalAlpha): Deleted.
        (WebCore::Cairo::State::setImageInterpolationQuality): Deleted.
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::setPlatformAlpha):
        (WebCore::GraphicsContext::setPlatformImageInterpolationQuality):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::save):
        (WebCore::PlatformContextCairo::drawSurfaceToContext):
        (WebCore::PlatformContextCairo::State::State): Deleted.
        (WebCore::PlatformContextCairo::setImageInterpolationQuality): Deleted.
        (WebCore::PlatformContextCairo::imageInterpolationQuality const): Deleted.
        (WebCore::PlatformContextCairo::globalAlpha const): Deleted.
        (WebCore::PlatformContextCairo::setGlobalAlpha): Deleted.
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):

2018-01-17  Philippe Normand  <pnormand@igalia.com>

        REGRESSION(r226973/r226974): Four multimedia tests failing
        https://bugs.webkit.org/show_bug.cgi?id=181696

        Reviewed by Carlos Garcia Campos.

        This patch reverts some of the changes of the above revisions so as to fix layout test failures.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Properly
        prepare stalled event when an error was detected.
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats): Revert to previous version.
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress const):
        Emit progress event also when streaming but not when an error was
        detected.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes const): use isLiveStream like everywhere else.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init): Revert to keep-alive FALSE by default.

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Move prepareForFilling(), prepareForStroking() code to CairoOperations
        https://bugs.webkit.org/show_bug.cgi?id=181721

        Reviewed by Carlos Garcia Campos.

        Move the prepareForFilling() and prepareForStroking() code off of the
        PlatformContextCairo class and into static functions inside the
        CairoOperations implementation files. The original methods weren't
        called from any place other than the Cairo operations, and they only
        operated with the cairo_t object that's stored in and retrievable from
        the PlatformContextCairo object.

        No new tests -- no change in behavior.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::reduceSourceByAlpha):
        (WebCore::Cairo::prepareCairoContextSource):
        (WebCore::Cairo::clipForPatternFilling):
        (WebCore::Cairo::prepareForFilling):
        (WebCore::Cairo::prepareForStroking):
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::fillCurrentCairoPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::drawGlyphs):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::reduceSourceByAlpha): Deleted.
        (WebCore::prepareCairoContextSource): Deleted.
        (WebCore::PlatformContextCairo::prepareForFilling): Deleted.
        (WebCore::PlatformContextCairo::prepareForStroking): Deleted.
        (WebCore::PlatformContextCairo::clipForPatternFilling): Deleted.
        * platform/graphics/cairo/PlatformContextCairo.h:

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Use one-time ShadowBlur objects when performing shadowing
        https://bugs.webkit.org/show_bug.cgi?id=181720

        Reviewed by Carlos Garcia Campos.

        Don't maintain a ShadowBlur object in the PlatformContextCairo class.
        Instead, use temporary ShadowBlur objects whenever shadowing is needed,
        providing all the shadow state information to it and drawing shadow into
        the given GraphicsContext object.

        ShadowBlur constructors are cleaned up. The 'shadows ignored' argument
        can now also be provided to the variant that accepts explicit shadow
        attributes, but the argument is false by default.

        In CairoOperations, the ShadowBlurUsage functionality is rolled into the
        new ShadowState class. ShadowState parameter is now used for operations
        that might need to perform shadow painting. Call sites are modified
        accordingly.

        Cairo::State::setShadowValues() and Cairo::State::clearShadow() are
        removed, since the ShadowBlur object that was modified through those is
        being removed from the PlatformContextCairo class. We still have to flip
        the Y-axis of the shadow offset in GraphicsContext::setPlatformShadow()
        when shadows are ignoring transformations.

        No new tests -- no change in behavior.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ShadowBlur::ShadowBlur):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::ShadowState::ShadowState):
        (WebCore::Cairo::ShadowState::isVisible const):
        (WebCore::Cairo::ShadowState::isRequired const):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRoundedRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::fillPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::drawNativeImage):
        (WebCore::Cairo::State::setShadowValues): Deleted.
        (WebCore::Cairo::State::clearShadow): Deleted.
        (WebCore::Cairo::ShadowBlurUsage::ShadowBlurUsage): Deleted.
        (WebCore::Cairo::ShadowBlurUsage::required const): Deleted.
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::drawNativeImage):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::platformFillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):
        * platform/graphics/cairo/PlatformContextCairo.h:
        (WebCore::PlatformContextCairo::shadowBlur): Deleted.
        * platform/graphics/win/MediaPlayerPrivateMediaFoundation.cpp:
        (WebCore::MediaPlayerPrivateMediaFoundation::Direct3DPresenter::paintCurrentFrame):

2018-01-17  Zan Dobersek  <zdobersek@igalia.com>

        CanvasImageData: createImageData() parameter should not be nullable
        https://bugs.webkit.org/show_bug.cgi?id=181670

        Reviewed by Sam Weinig.

        createImageData() method on the CanvasImageData interface should not
        treat the ImageData parameter as nullable, but should instead reject any
        null values with a TypeError, as demanded by the specification.

        No new tests -- current tests covering createImageData(null) are updated
        to properly cover new behavior of throwing a TypeError exception.

        * html/canvas/CanvasImageData.idl:
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createImageData const):
        * html/canvas/CanvasRenderingContext2DBase.h:

2018-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake] Remove WebCoreDerivedSources library target
        https://bugs.webkit.org/show_bug.cgi?id=181664

        Reviewed by Carlos Garcia Campos.

        After unified source build has been introduced, CMake Visual
        Studio build suffers complicated unnecessary recompilation issues
        because Visual Studio invokes scripts twice in both WebCore and
        WebCoreDerivedSources projects (Bug 181117).

        WebCoreDerivedSources library has been introduced in r198766 to
        avoid command line length limit of CMake Ninja build on macOS.
        Fortunately, unified source build has reduced the number of source
        files to compile, WebCore doesn't need to be split anymore.

        No new tests (No behavior change)

        * CMakeLists.txt: Replaced WebCore_DERIVED_SOURCES with WebCore_SOURCES. Removed WebCoreDerivedSources library target.
        Do not compile each JavaScript Builtins.cpp files because the unified source WebCoreJSBuiltins.cpp is already included.
        * PlatformGTK.cmake: Replaced WebCore_DERIVED_SOURCES with WebCore_SOURCES.
        * PlatformWin.cmake: Ditto.

2018-01-16  Simon Fraser  <simon.fraser@apple.com>

        Can't scroll iframe after toggling it to display:none and back
        https://bugs.webkit.org/show_bug.cgi?id=181708
        rdar://problem/13234778

        Reviewed by Tim Horton.

        Nothing updated the FrameView's set of scrollable areas when a subframe came back from display:none.
        Mirror the existing virtual removeChild() by making addChild() virtual, and using it to mark
        the FrameView's scrollable area set as dirty.

        Test: tiled-drawing/scrolling/non-fast-region/non-fast-scrollable-region-hide-show-iframe.html

        * page/FrameView.cpp:
        (WebCore::FrameView::addChild):
        * page/FrameView.h:
        * platform/ScrollView.h:

2018-01-16  Chris Dumez  <cdumez@apple.com>

        SWServerWorker::m_contextConnectionIdentifier may get out of date
        https://bugs.webkit.org/show_bug.cgi?id=181687
        <rdar://problem/36548111>

        Reviewed by Brady Eidson.

        SWServerWorker::m_contextConnectionIdentifier may get out of date. This happens when the
        context process crashes and is relaunched.

        No new tests, added assertion in terminateWorkerInternal() that hits without this fix.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::runServiceWorker):
        (WebCore::SWServer::terminateWorkerInternal):
        (WebCore::SWServer::unregisterServiceWorkerClient):
        * workers/service/server/SWServerWorker.h:
        (WebCore::SWServerWorker::setContextConnectionIdentifier):

2018-01-16  Jer Noble  <jer.noble@apple.com>

        Reset MediaSourcePrivateAVFObjC's m_sourceBufferWithSelectedVideo when the underlying SourceBufferPrivate is removed.
        https://bugs.webkit.org/show_bug.cgi?id=181707
        <rdar://problem/34809474>

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-remove-unload-crash.html

        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer):

2018-01-12  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Implement dummy WebAuthN IDLs
        https://bugs.webkit.org/show_bug.cgi?id=181627
        <rdar://problem/36459864>

        Reviewed by Alex Christensen.

        This patch implements dummy WebAuthN IDLs and connect them with Credential Management as well.
        All implementations in this patch are subject to change when real implementations land. The
        purpose here on the other hand is to have IDLs, bindings and implementations connected. This
        patch should handle all IDLs that we need.

        No tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/credentialmanagement/CredentialCreationOptions.h:
        * Modules/credentialmanagement/CredentialCreationOptions.idl:
        * Modules/credentialmanagement/CredentialRequestOptions.h:
        * Modules/credentialmanagement/CredentialRequestOptions.idl:
        * Modules/webauthn/AuthenticatorAssertionResponse.cpp: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.cpp.
        (WebCore::AuthenticatorAssertionResponse::AuthenticatorAssertionResponse):
        (WebCore::AuthenticatorAssertionResponse::~AuthenticatorAssertionResponse):
        (WebCore::AuthenticatorAssertionResponse::authenticatorData):
        (WebCore::AuthenticatorAssertionResponse::signature):
        (WebCore::AuthenticatorAssertionResponse::userHandle):
        * Modules/webauthn/AuthenticatorAssertionResponse.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h.
        * Modules/webauthn/AuthenticatorAssertionResponse.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Modules/webauthn/AuthenticatorAttestationResponse.cpp: Copied from Source/WebCore/Modules/credentialmanagement/CredentialCreationOptions.h.
        (WebCore::AuthenticatorAttestationResponse::AuthenticatorAttestationResponse):
        (WebCore::AuthenticatorAttestationResponse::~AuthenticatorAttestationResponse):
        (WebCore::AuthenticatorAttestationResponse::attestationObject):
        * Modules/webauthn/AuthenticatorAttestationResponse.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h.
        * Modules/webauthn/AuthenticatorAttestationResponse.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Modules/webauthn/AuthenticatorResponse.cpp: Copied from Source/WebCore/Modules/credentialmanagement/CredentialCreationOptions.h.
        (WebCore::AuthenticatorResponse::AuthenticatorResponse):
        (WebCore::AuthenticatorResponse::~AuthenticatorResponse):
        (WebCore::AuthenticatorResponse::clientDataJSON):
        * Modules/webauthn/AuthenticatorResponse.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h.
        * Modules/webauthn/AuthenticatorResponse.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Modules/webauthn/PublicKeyCredential.cpp:
        (WebCore::PublicKeyCredential::rawId):
        (WebCore::PublicKeyCredential::response):
        (WebCore::PublicKeyCredential::getClientExtensionResults):
        (WebCore::PublicKeyCredential::isUserVerifyingPlatformAuthenticatorAvailable):
        * Modules/webauthn/PublicKeyCredential.h:
        * Modules/webauthn/PublicKeyCredential.idl:
        * Modules/webauthn/PublicKeyCredentialCreationOptions.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h.
        * Modules/webauthn/PublicKeyCredentialCreationOptions.idl: Added.
        * Modules/webauthn/PublicKeyCredentialDescriptor.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialCreationOptions.h.
        * Modules/webauthn/PublicKeyCredentialDescriptor.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Modules/webauthn/PublicKeyCredentialRequestOptions.h: Copied from Source/WebCore/Modules/credentialmanagement/CredentialCreationOptions.h.
        * Modules/webauthn/PublicKeyCredentialRequestOptions.idl: Copied from Source/WebCore/Modules/credentialmanagement/CredentialRequestOptions.h.
        * Modules/webauthn/PublicKeyCredentialType.h: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Modules/webauthn/PublicKeyCredentialType.idl: Copied from Source/WebCore/Modules/webauthn/PublicKeyCredential.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:

2018-01-16  Zalan Bujtas  <zalan@apple.com>

        AX: Do not trigger layout in updateBackingStore() unless it is safe to do so
        https://bugs.webkit.org/show_bug.cgi?id=181703
        <rdar://problem/36365706>

        Reviewed by Ryosuke Niwa.

        Document::isSafeToUpdateStyleOrLayout() can tell whether it is safe to run layout.

        Unable to create test with WebInspector involved. 

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::updateBackingStore):
        * dom/Document.cpp:
        (WebCore::Document::isSafeToUpdateStyleOrLayout const):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayout):
        (WebCore::isSafeToUpdateStyleOrLayout): Deleted.
        * dom/Document.h:

2018-01-16  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r226962.

        The LayoutTest added with this change is a flaky timeout.

        Reverted changeset:

        "Support for preconnect Link headers"
        https://bugs.webkit.org/show_bug.cgi?id=181657
        https://trac.webkit.org/changeset/226962

2018-01-16  Simon Fraser  <simon.fraser@apple.com>

        Text looks bad on some CSS spec pages
        https://bugs.webkit.org/show_bug.cgi?id=181700
        rdar://problem/36552107

        Reviewed by Tim Horton.

        When making new tiles in a TileController, we failed to set their "supports antialiased layer text"
        setting, so tile caches could end up with a mixture of layers that do and do not support
        antialiased layer text.

        No tests because the tiled drawing tests don't dump out tiles inside of tile caches.

        * platform/graphics/ca/TileController.cpp:
        (WebCore::TileController::createTileLayer):

2018-01-16  Said Abou-Hallawa  <sabouhallawa@apple.com>

        REGRESSION(r221292): svg/animations/animateTransform-pattern-transform.html crashes with security assertion
        https://bugs.webkit.org/show_bug.cgi?id=179986

        Reviewed by Simon Fraser.

        This patch reverts all or parts of the following changes-sets
            <http://trac.webkit.org/changeset/221292>
            <http://trac.webkit.org/changeset/197967>
            <http://trac.webkit.org/changeset/196670>

        A JS statement like this:
            var item = text.x.animVal.getItem(0);

        Creates the following C++ objects:
            SVGAnimatedListPropertyTearOff<SVGLengthListValues> for 'text.x'
            SVGListPropertyTearOff<SVGLengthListValues> for 'text.x.animVal'
            SVGPropertyTearOff<SVGLengthValue> for 'text.x.animVal.getItem(0)'

        If 'item' changes, the attribute 'x' of the element '<text>' will change
        as well. But this binding works only in one direction. If the attribute
        'x' of the element '<text>' changes, e.g.:

            text.setAttribute('x', '10,20,30');

        This will detach 'item' from the element <text> and any further changes 
        in 'item' won't affect the attribute 'x' of element <text>.

        The one direction binding can only work if this chain of tear-off objects
        is kept connected. This is implemented by RefCounted back pointers from
        SVGPropertyTearOff and SVGListPropertyTearOff to SVGAnimatedListPropertyTearOff.

        The security crashes and the memory leaks are happening because of the
        raw forward pointers:
            -- SVGAnimatedListPropertyTearOff maintains raw pointers of type
               SVGListPropertyTearOff for m_baseVal and m_animVal
            -- The m_wrappers and m_animatedWrappers of SVGAnimatedListPropertyTearOff
               are vectors of raw pointer Vector<SVGLength*>

        To control the life cycle of the raw pointers, SVGListPropertyTearOff and
        SVGPropertyTearOff call SVGAnimatedListPropertyTearOff::propertyWillBeDeleted()
        to notify it they are going to be deleted. In propertyWillBeDeleted(), we
        clear the pointers so they are not used after being freed. This mechanism
        has been error-prone and we've never got it 100% right.

        The solution we need to adopt with SVG tear-off objects is the following:
            -- All the forward pointers should be weak pointers.
            -- All the back pointers should be ref pointers.

        This solution may not look intuitive but it solves the bugs and keeps the
        one direction binding. The forward weak pointers allows the tear-off
        objects to go aways if no reference from JS exists. The back ref pointers
        maintains the chain of objects and guarantees the correct binding.

        * svg/SVGPathSegList.h:
        * svg/SVGTransformList.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedListPropertyTearOff::animVal):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::isAnimatedListTearOff const):
        (WebCore::SVGAnimatedProperty::propertyWillBeDeleted): Deleted.
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::getItemValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        (WebCore::SVGListProperty::createWeakPtr const):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::removeItemFromList):
        (WebCore::SVGListPropertyTearOff::~SVGListPropertyTearOff): Deleted.
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::createWeakPtr const):
        (WebCore::SVGPropertyTearOff::~SVGPropertyTearOff):

2018-01-16  Eric Carlson  <eric.carlson@apple.com>

        AVSampleBufferDisplayLayer should be flushed when application activates
        https://bugs.webkit.org/show_bug.cgi?id=181623
        <rdar://problem/36487738>

        Reviewed by Darin Adler.

        No new tests, I wasn't able to reproduce it in a test.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::addApplicationStateChangeListener): New.
        (WebCore::Document::removeApplicationStateChangeListener): Ditto.
        (WebCore::Document::forEachApplicationStateChangeListener): Ditto.
        * dom/Document.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::registerWithDocument): Register for application state changes.
        (WebCore::HTMLMediaElement::unregisterWithDocument): Unregister.
        (WebCore::HTMLMediaElement::applicationWillResignActive): Pass through to the player.
        (WebCore::HTMLMediaElement::applicationDidBecomeActive): Ditto.
        * html/HTMLMediaElement.h:

        * page/ApplicationStateChangeListener.h: Added.
        (WebCore::ApplicationStateChangeListener::applicationWillResignActive):
        (WebCore::ApplicationStateChangeListener::applicationDidBecomeActive):
        * page/Page.cpp:
        (WebCore::Page::forEachDocument):
        (WebCore::Page::applicationWillResignActive):
        (WebCore::Page::applicationDidEnterBackground):
        (WebCore::Page::applicationWillEnterForeground):
        (WebCore::Page::applicationDidBecomeActive):
        * page/Page.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::applicationWillResignActive):
        (WebCore::MediaPlayer::applicationDidBecomeActive):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::applicationWillResignActive):
        (WebCore::MediaPlayerPrivateInterface::applicationDidBecomeActive):

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::MediaPlayerPrivateMediaStreamAVFObjC): Switch
        to release logging.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::~MediaPlayerPrivateMediaStreamAVFObjC): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueCorrectedVideoSample): Split out of enqueueVideoSample.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::enqueueVideoSample): Move code that updates
        the display later to enqueueCorrectedVideoSample. Rearrange logic to the image painter sample
        buffer has the correct timestamp.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerErrorDidChange): Switch to release logging.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::layerStatusDidChange): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::applicationDidBecomeActive): f the display
        layer is in the "failed" state, flush the renderer and update the display mode.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers): Switch to release logging.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::load): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::cancelLoad): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::prepareToPlay): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateDisplayMode): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::play): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::pause): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setVolume): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateReadyState) Ditto.:
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::logChannel const): Ditto.
        (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateSampleTimes): Deleted.

2018-01-16  Michael Catanzaro  <mcatanzaro@igalia.com>

        PAL should link to JavaScriptCore rather than WTF
        https://bugs.webkit.org/show_bug.cgi?id=181683

        Reviewed by Konstantin Tokarev.

        Do not link directly to JavaScriptCore. Get it via PAL.

        * CMakeLists.txt:

2018-01-16  Zach Li  <zachli@apple.com>

        Add pop-up policy support in website policies.
        https://bugs.webkit.org/show_bug.cgi?id=181544.
        rdar://problem/30521400.

        Reviewed by Alex Christensen.

        * loader/DocumentLoader.h:
        Introduce pop-up policy getter and setter. Initialize
        the policy as Default.
        (WebCore::DocumentLoader::popUpPolicy const):
        (WebCore::DocumentLoader::setPopUpPolicy):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::allowPopUp):
        Pop-up policy specified on a per-page basis holds
        precedence over the global policy. If no pop-up policy
        is specified during navigation, global policy is used.

2018-01-16  Jer Noble  <jer.noble@apple.com>

        Crash playing audio-only HLS stream via hls.js (MSE)
        https://bugs.webkit.org/show_bug.cgi?id=181691
        <rdar://problem/32967295>

        Reviewed by Eric Carlson.

        Add a weak-link check to the block called by -[AVSampleBufferDisplayLayer requestMediaDataWhenReadyOnQueue:usingBlock:].

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::setVideoLayer):

2018-01-16  Simon Fraser  <simon.fraser@apple.com>

        Rename applyHorizontalScale/applyVerticalScale in SVG filters, and related cleanup
        https://bugs.webkit.org/show_bug.cgi?id=181684

        Reviewed by Alex Christensen.

        Rename the confusing applyHorizontalScale/applyVerticalScale to scaledByFilterResolution(),
        and have it take and return a FloatSize. Change callers to do math in terms of FloatSizes.

        Add inflate(size) to each of the rect classes.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::inflate):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::inflate):
        * platform/graphics/LayoutRect.h:
        (WebCore::LayoutRect::inflate):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::platformApplySoftware):
        * platform/graphics/filters/FEDropShadow.cpp:
        (WebCore::FEDropShadow::determineAbsolutePaintRect):
        (WebCore::FEDropShadow::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateKernelSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::platformApplySoftware):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setSourceImage):
        (WebCore::Filter::scaledByFilterResolution const):
        (WebCore::Filter::applyHorizontalScale const): Deleted.
        (WebCore::Filter::applyVerticalScale const): Deleted.
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::outsetSizeForBlur):
        * rendering/FilterEffectRenderer.h:
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::scaledByFilterResolution const):
        (WebCore::SVGFilter::applyHorizontalScale const): Deleted.
        (WebCore::SVGFilter::applyVerticalScale const): Deleted.
        * svg/graphics/filters/SVGFilter.h:

2018-01-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Mac] Fix the build errors
        https://bugs.webkit.org/show_bug.cgi?id=181665

        Reviewed by Alex Christensen.

        No new tests (No behavior change)

        * CMakeLists.txt: Added Modules/paymentrequest/MerchantValidationEvent.idl to compile.
        * PlatformMac.cmake: Added Modules/paymentrequest/MerchantValidationEvent.cpp to compile.
        Added workers/service/context and Modules/applicationmanifest as forwarding header paths.

2018-01-16  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Provide the `src` of an attachment to the UI delegate when an attachment is inserted
        https://bugs.webkit.org/show_bug.cgi?id=181638
        <rdar://problem/36508702>

        Reviewed by Dan Bernstein.

        Adjust the `didInsertAttachment` codepath to additionally propagate the attachment element's `src`.
        Additionally, fix an issue with insertion and removal client notifications wherein the client can receive
        insertion calls without corresponding removal calls, or vice versa. This is an existing issue, but matters more
        now because we actually need to access the attachment element for its `src` when propagating changes to the
        client. See below for details.

        Test: WKAttachmentTests.AttachmentUpdatesWhenInsertingRichMarkup

        * dom/Document.h:
        (WebCore::Document::attachmentElementsByIdentifier const):
        * editing/Editor.cpp:
        (WebCore::Editor::notifyClientOfAttachmentUpdates):
        * page/EditorClient.h:
        (WebCore::EditorClient::didInsertAttachment):
        * page/Frame.cpp:
        (WebCore::Frame::setDocument):

        When a Frame's document changes, inform the client that the attachments in the previous document are going away.
        For each attachment currently connected to the document, we have either (1) already informed the client that it
        was inserted, or (2) the attachment is pending an insertion call to the client. If (1) is the case, then we'll
        tell the client that the attachment is removed, which will balance out the earlier insertion call. If (2) is the
        case, then we'll remove the previously inserted attachment identifier from the set of attachment identifiers
        pending insertion, and the client won't be informed of insertions or removals.

2018-01-16  Antoine Quint  <graouts@apple.com>

        Use traits for animation timing functions
        https://bugs.webkit.org/show_bug.cgi?id=181651

        Reviewed by Dean Jackson.

        Cleaning up Dean's previous patch as suggested by Darin's post-commit review comments. The
        downcast function can match const automatically and it's a better style to put the * inside
        the downcast call rather than outside.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTimingFunctionValue):
        * platform/animation/TimingFunction.cpp:
        (WebCore::operator<<):
        (WebCore::TimingFunction::transformTime const):
        * platform/animation/TimingFunction.h:
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::toCAMediaTimingFunction):

2018-01-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Live streaming cleanups
        https://bugs.webkit.org/show_bug.cgi?id=181672

        Reviewed by Michael Catanzaro.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Switch to
        streaming code path when no content-length was reported by the
        http source element.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes const): Return early when streaming.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::responseReceived): Emit headers as
        an element message, like souphttpsrc.

2018-01-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] misc fixes and cleanups
        https://bugs.webkit.org/show_bug.cgi?id=181647

        Reviewed by Michael Catanzaro.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::convertEnumerationToString): New utility function to convert preload enum to string.
        * platform/graphics/MediaPlayerEnums.h: Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): Debug tweak
        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay): Ditto
        (WebCore::MediaPlayerPrivateGStreamer::play): Ditto
        (WebCore::MediaPlayerPrivateGStreamer::paused const): Ditto
        (WebCore::MediaPlayerPrivateGStreamer::processBufferingStats): Prevent useless state update.
        (WebCore::MediaPlayerPrivateGStreamer::fillTimerFired): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Debug tweak.
        (WebCore::MediaPlayerPrivateGStreamer::setDownloadBuffering): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Remove useless handlesSyncMessage method.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::setMuted): Prevent useless state update.
        (WebCore::MediaPlayerPrivateGStreamerBase::muted const): Debug tweak.
        (WebCore::MediaPlayerPrivateGStreamerBase::setStreamVolumeElement): Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webkit_web_src_init): Enable keepAlive by default like in souphttpsrc.
        (webKitWebSrcStart): Debug tweak.
        (webKitWebSrcQueryWithParent): Ditto.
        (webKitWebSrcNeedData): Ditto.
        (CachedResourceStreamingClient::responseReceived): Change appsrc
        stream-type when we wan't seek. Also update caps like souphttpsrc
        does.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Add forward declaration of MediaPlayer.
        * platform/graphics/gstreamer/mse/MediaSourceClientGStreamerMSE.cpp:
        (WebCore::MediaSourceClientGStreamerMSE::append): Fix compilation warning.

2018-01-16  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [WPE] Two clearkey tests failing since r226621
        https://bugs.webkit.org/show_bug.cgi?id=181532

        Reviewed by Xabier Rodriguez-Calvar.

        Whith a fake initData, we can have a pssh size nul, thus we should check it.
        We saw this issue in the subtest "initData longer than 64Kb characters" in
        the clearkey-generate-request-disallowed-input layout test.

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyidsLocationFromCencInitData):

2018-01-15  Yoav Weiss  <yoav@yoav.ws>

        Support for preconnect Link headers
        https://bugs.webkit.org/show_bug.cgi?id=181657

        Reviewed by Darin Adler.

        Move the preconnect functionality into its own function, and
        also call this function when Link headers are processed.

        Test: http/tests/preconnect/link-header-rel-preconnect-http.php

        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::loadLinksFromHeader): Call preconnect.
        (WebCore::LinkLoader::preconnect): Preconnect to a host functionality moved here.
        (WebCore::LinkLoader::preload): Renamed `preloadIfNeeded` to `preload`.
        (WebCore::LinkLoader::loadLink): Call preconnect.
        * loader/LinkLoader.h:

2018-01-15  Michael Catanzaro  <mcatanzaro@igalia.com>

        Improve use of ExportMacros
        https://bugs.webkit.org/show_bug.cgi?id=181652

        Reviewed by Konstantin Tokarev.

        Remove a comment.

        * platform/PlatformExportMacros.h:

2018-01-15  Konstantin Tokarev  <annulen@yandex.ru>

        image-rendering should affect scaling of border-image
        https://bugs.webkit.org/show_bug.cgi?id=169440

        Reviewed by Michael Catanzaro.

        Test: fast/borders/border-image-pixelated.html

        * rendering/style/NinePieceImage.cpp:
        (WebCore::NinePieceImage::paint):

2018-01-15  Tomas Popela  <tpopela@redhat.com>

        2.19.3 ACCELERATED_2D_CANVAS support is broken
        https://bugs.webkit.org/show_bug.cgi?id=180799

        Reviewed by Michael Catanzaro.

        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::didDraw):

2018-01-15  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Enable HTTP/2
        https://bugs.webkit.org/show_bug.cgi?id=181551

        Reviewed by Michael Catanzaro.

        Start supporting HTTP/2 protocol. The first step is just enabling the HTTP/2 on Curl backend.
        Next step will be to enable multiplexing feature.

        No new tests because we don't have HTTP/2 test backend yet.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlContext::isHttp2Enabled const):
        (WebCore::CurlHandle::enableHttp):
        (WebCore::CurlHandle::enableHttpGetRequest):
        (WebCore::CurlHandle::enableHttpHeadRequest):
        (WebCore::CurlHandle::enableHttpPostRequest):
        (WebCore::CurlHandle::enableHttpPutRequest):
        (WebCore::CurlHandle::setHttpCustomRequest):
        * platform/network/curl/CurlContext.h:

2018-01-15  Dean Jackson  <dino@apple.com>

        Use a helper function for checked arithmetic in WebGL validation
        https://bugs.webkit.org/show_bug.cgi?id=181620
        <rdar://problem/36485879>

        Reviewed by Eric Carlson.

        Eric recommended using a templated helper function to do
        a common arithmetic check in WebGL validation.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContextBase::validateDrawArrays):
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::WebGLRenderingContextBase::checkedAddAndMultiply): New helper.

2018-01-15  Dean Jackson  <dino@apple.com>

        Use traits for animation timing functions
        https://bugs.webkit.org/show_bug.cgi?id=181651
        <rdar://problem/36525328>

        Reviewed by Antoine Quint.

        Use the type traits for TimingFunction classes, so
        we can is<> and downcast<>.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTimingFunctionValue):
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::transformTime const):
        * platform/animation/TimingFunction.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationHasStepsTimingFunction):
        (WebCore::animationHasFramesTimingFunction):
        * platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:
        (WebCore::toCAMediaTimingFunction):

2018-01-15  Youenn Fablet  <youenn@apple.com>

        RealtimeMediaSource should be ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=181649

        Reviewed by Eric Carlson.

        Difficult to write a test as this is really racy.
        RealtimeIncomingVideoSourceCocoa::OnFrame is taking a reference on a background thread
        to send a task to the main thread.
        This requires it to be thread safe ref counted.

        * platform/mediastream/RealtimeMediaSource.h:

2018-01-15  Philippe Normand  <pnormand@igalia.com>

        Prevent useless MediaPlayer mute state notifications
        https://bugs.webkit.org/show_bug.cgi?id=181646

        Reviewed by Carlos Garcia Campos.

        On GTK port the mute change notification was triggering the test
        runner to think the whole page mute state had changed and that
        media elements were muted. The simplest solution is to propagate
        the notification only if the state actually changed.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::muteChanged): Propagate mute notification
        only if the mute state actually changed.

2018-01-15  Sebastian Dröge  <sebastian@centricular.com>

        [GStreamer] Don't wait for draw condition variable when shutting down.
        https://bugs.webkit.org/show_bug.cgi?id=180978

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::cancelRepaint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        By also waiting for the draw condition variable while shutting down,
        it is possible that the GStreamer video sink is waiting for the main
        thread to actually render the current frame, while at the same time
        the main thread is waiting for the GStreamer video sink to shut down,
        resulting in a deadlock.

2018-01-13  Minsheng Liu  <lambda@liu.ms>

        MathML Lengths should take zoom level into account
        https://bugs.webkit.org/show_bug.cgi?id=180029

        Reviewed by Frédéric Wang.

        The patch applies the effective zoom factor to physical units in toUserUnits().

        Test: mathml/presentation/mspace-units-with-zoom.html

        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::toUserUnits):

2018-01-12  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: registration || isTerminating() in WebCore::SWServerWorker::skipWaiting()
        https://bugs.webkit.org/show_bug.cgi?id=181603
        <rdar://problem/36476050>

        Reviewed by Youenn Fablet.

        No new tests, covered by existing tests that crash flakily.

        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::terminateWorkerInternal):
        If the connection to the context process is gone, make sure we make the worker as terminated
        so that it does not stay in Running state and in SWServer::m_runningOrTerminatingWorkers.

        * workers/service/server/SWServerRegistration.cpp:
        (WebCore::SWServerRegistration::~SWServerRegistration):
        Add assertions to make sure none of the registration's workers are still running when
        the registration is destroyed.

        (WebCore::SWServerRegistration::updateRegistrationState):
        Make sure registration workers that are overwritten are not still running.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::setState):
        If a worker's state is set to redundant, make sure we also terminate it.

2018-01-12  Commit Queue  <commit-queue@webkit.org>

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

        Breaks 32-bit and iOS release for some reason that i don't
        understand yet (Requested by dino on #webkit).

        Reverted changeset:

        "Use a helper function for checked arithmetic in WebGL
        validation"
        https://bugs.webkit.org/show_bug.cgi?id=181620
        https://trac.webkit.org/changeset/226927

2018-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        Data URL fonts split in the middle of an alphabet cause random letters to disappear
        https://bugs.webkit.org/show_bug.cgi?id=175845
        <rdar://problem/33996578>

        Reviewed by Brent Fulgham.

        It is fairly common practice for a font foundry to split a font up into two files such that a semi-random
        half of the alphabet is present in one of the files, and the other half is present in the other file. This
        practice involves representing the files as data URLs, so as to minimize the time it takes to load them.

        Because resource loading is asynchronous (even for data URLs), it is possible today to get a paint after
        the first file is loaded but before the second file is loaded. Indeed, because of the way font fallback
        works, we will never start loading the second file until a layout has occurred with the first font.

        Because a site usually only uses this pattern for a handful of fonts, and I've never seen this pattern
        being used for CJK fonts, it isn't very expensive to opportunistically decode these data URLs eagerly.
        Using this method doesn't actually guarantee that the two fonts will load in between successive paints,
        but it at least makes this much more likely. This patch implements this strategy, along with a size
        threshold to make sure that we won't decode any super large data URLs when it isn't necessary.

        Test: fast/text/font-load-data-partitioned-alphabet.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::opportunisticallyStartFontDataURLLoading):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::opportunisticallyStartFontDataURLLoading):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::opportunisticallyStartFontDataURLLoading):
        * css/CSSFontSelector.h:
        * platform/graphics/FontCascadeFonts.cpp:
        (WebCore::opportunisticallyStartFontDataURLLoading):
        (WebCore::FontCascadeFonts::glyphDataForVariant):
        * platform/graphics/FontSelector.h:

2018-01-12  Alex Christensen  <achristensen@webkit.org>

        History state should be updated during client redirects with asynchronous policy decisions
        https://bugs.webkit.org/show_bug.cgi?id=181358
        <rdar://problem/35547689>

        Reviewed by Andy Estes.

        When decidePolicyForNavigationAction is responded to asynchronously during a client redirect, 
        HistoryController::updateForRedirectWithLockedBackForwardList does not update the history because
        the document loader has not been marked as a client redirect because the FrameLoader only looks
        at its provisional document loader to mark it as a client redirect.  When decidePolicyForNavigationAction
        is responded to asynchronously, though, the FrameLoader's provisional document loader has moved to 
        its policy document loader.  To get both asynchronous and synchronous cases, let's just mark the document
        loader as a client redirect whether it's the provisional or policy document loader.

        Covered by a new API test.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadPostRequest):

2018-01-12  Dean Jackson  <dino@apple.com>

        Use a helper function for checked arithmetic in WebGL validation
        https://bugs.webkit.org/show_bug.cgi?id=181620
        <rdar://problem/36485879>

        Reviewed by Eric Carlson.

        Eric recommended using a templated helper function to do
        a common arithmetic check in WebGL validation.

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::checkedAddAndMultiply): New helper.
        (WebCore::WebGLRenderingContextBase::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContextBase::validateDrawArrays):
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0):
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0):
        * html/canvas/WebGLRenderingContextBase.h:

2018-01-12  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] CTFontCopyDefaultCascadeListForLanguages() can return nullptr
        https://bugs.webkit.org/show_bug.cgi?id=181615
        <rdar://problem/36334637>

        Reviewed by Jon Lee.

        Speculative fix. We are getting crash reports saying that this call can return nullptr, and we
        don't check for it.

        No new tests because I couldn't find the specific input that causes it to return nullptr. (I
        tried running this code with every 0, 1, and 2 length locale string, every weight value, and
        every italic value, and couldn't get it to crash. I also inspected the code to figure out what
        values would cause it to return nullptr, and I couldn't find anything other than if the system
        has a totally busted font setup.)

        * platform/graphics/cocoa/FontDescriptionCocoa.cpp:
        (WebCore::SystemFontDatabase::computeCascadeList):

2018-01-11  Dean Jackson  <dino@apple.com>

        [WebGL] Simulated vertexAttrib0 can sometimes cause OUT_OF_MEMORY errors
        https://bugs.webkit.org/show_bug.cgi?id=181558
        <rdar://problem/36189833>

        Reviewed by Eric Carlson.

        Very large element indices in the ELEMENT_ARRAY_BUFFER meant that
        our simulated vertexAttrib0 buffer might be too large. We need
        to check for out-of-memory, but we can also detect some of the issues
        earlier in our validation code. Additionally, make sure that we don't
        accidentally cast an unsigned to a signed.

        Test: fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative): Update validation
        code to look for overflow, rather than relying on looking for sign changes.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Ditto.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContextBase::drawArrays): Check that we were able to simulate.
        (WebCore::WebGLRenderingContextBase::drawElements):
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0): Update validation code, and
        use GC3Duint, since that's what the indicies are.
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0): Ditto.
        (WebCore::WebGLRenderingContextBase::drawArraysInstanced): Check that we were able to simulate.
        (WebCore::WebGLRenderingContextBase::drawElementsInstanced):
        * html/canvas/WebGLRenderingContextBase.h:

2018-01-12  Wenson Hsieh  <wenson_hsieh@apple.com>

        Large in-place attachment elements cause the document width to expand when inserted
        https://bugs.webkit.org/show_bug.cgi?id=181614

        Reviewed by Dan Bernstein.

        Make in-place images and videos have a max-width of 100%, so that large attachments aren't inserted with full
        display size, causing the document and viewport width to expand.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary):

2018-01-12  Keith Rollin  <krollin@apple.com>

        Logged JSON should escape "'s and \'s in strings.
        https://bugs.webkit.org/show_bug.cgi?id=181608

        Reviewed by Brent Fulgham.

        No new tests -- no new functionality, just changed logging. The
        efficacy of the logging was verified by inspecting its output.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):

2018-01-12  Dean Jackson  <dino@apple.com>

        drawElements should be invalid if vertexAttrib0 doesn't have data
        https://bugs.webkit.org/show_bug.cgi?id=181609
        <rdar://problem/36392883>

        Reviewed by Antoine Quint.

        If a vertex attribute has been enabled, but no data provided, then
        draw validation should fail.

        Test: fast/canvas/webgl/drawElements-empty-vertex-data.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateVertexAttributes): If there were
        never any data in the vertex buffer, then we incorrectly compared with 0.

2018-01-12  Youenn Fablet  <youenn@apple.com>

        FormDataElement::lengthInBytes should use ThreadableBlobRegistry
        https://bugs.webkit.org/show_bug.cgi?id=181554

        Reviewed by Chris Dumez.

        Covered by updated test.

        Fix blobRegistry() use and add support for creating a response that may trigger the issue.


        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::lengthInBytes const): Was using directly blobRegistry() while ThreadableBlobRegistry is more appropriate
        in case this is called from workers.
        * Modules/fetch/FetchBody.h:
        * Modules/fetch/FetchResponse.h:
        * fileapi/Blob.h:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::createOpaqueWithBlobBodyResponse):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:

2018-01-12  Jer Noble  <jer.noble@apple.com>

        Wrap CDMFairPlayStreaming and related classes in ENABLE(ENCRYPTED_MEDIA) checks
        https://bugs.webkit.org/show_bug.cgi?id=181602

        Reviewed by Maciej Stachowiak.

        * platform/graphics/avfoundation/CDMFairPlayStreaming.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.h:
        * platform/graphics/avfoundation/objc/CDMInstanceFairPlayStreamingAVFObjC.mm:

2018-01-12  Youenn Fablet  <youenn@apple.com>

        WebProcess should pass the registration identifier and not the worker identifier for fetch events
        https://bugs.webkit.org/show_bug.cgi?id=181591

        Reviewed by Chris Dumez.

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

        Store service worker registration identifier in ResourceLoaderOptions instead of service worker identifier.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeCrossOriginAccessRequest):
        * loader/ResourceLoaderOptions.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::prepareFetch):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy const):
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerRegistrationIdentifierIfNeeded):
        (WebCore::CachedResourceRequest::setNavigationServiceWorkerRegistrationData):
        (WebCore::CachedResourceRequest::setSelectedServiceWorkerIdentifierIfNeeded): Deleted.
        * loader/cache/CachedResourceRequest.h:
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadSynchronously):
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::activeWorkerFromRegistrationID):
        * workers/service/server/SWServer.h:

2018-01-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Win][CMake] Remove all-in-one file for WebCore DerivedSources
        https://bugs.webkit.org/show_bug.cgi?id=181582

        Reviewed by Alex Christensen.

        Those source files are compiled in unified source build nowadays.

        No new tests (No behavior change)

        * CMakeLists.txt: Removed calling PROCESS_ALLINONE_FILE.
        * DerivedSources.cpp: Removed.
        * WebCoreMacros.cmake: Removed a macro PROCESS_ALLINONE_FILE.

2018-01-12  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WinCairo][CMake] Use ${CURL_LIBRARY} instead of specifying the library name libcurl_imp explicitly
        https://bugs.webkit.org/show_bug.cgi?id=181578

        Reviewed by Alex Christensen.

        vcpkg has libcurl.lib, not libcurl_imp.lib.

        No new tests because no behavior change.

        * PlatformWinCairo.cmake: Link ${CURL_LIBRARY} instead of libcurl_imp.

2018-01-12  Jer Noble  <jer.noble@apple.com>

        WebGL video texture black in Safari 11.0.2 and wrong colored in Safari Preview 11.1
        https://bugs.webkit.org/show_bug.cgi?id=181445
        <rdar://problem/36383183>

        Reviewed by Dean Jackson.

        Tests: added compile-time correctness tests for YCbCrMatrix values.

        Perform the derivation from YCbCr coefficients into matrices in constexpr expressions
        at compile-time. This allows us to also perform compile-time correctness checks to catch
        regressions which may cause incorrect color conversions.

        Since we now have general-purpose derivation of matrix values from coefficients,
        adding missing specificed matrices is trivial, so add support for SMPTE 240M and BT.2020
        matrices.

        * platform/graphics/cv/VideoTextureCopierCV.cpp:
        (WebCore::GLfloatColor::GLfloatColor):
        (WebCore::GLfloatColor::abs):
        (WebCore::GLfloatColor::isApproximatelyEqualTo const):
        (WebCore::YCbCrMatrix::operator Vector<GLfloat> const):
        (WebCore::YCbCrMatrix::YCbCrMatrix):
        (WebCore::YCbCrMatrix::operator* const):
        (WebCore::YCbCrToRGBMatrixForRangeAndTransferFunction):

2018-01-12  Antoine Quint  <graouts@apple.com>

        Add support for the frames() timing function
        https://bugs.webkit.org/show_bug.cgi?id=181585
        <rdar://problem/36463317>

        Reviewed by Dean.

        Implement the frames() timing function as specified in the CSS Timing Functions Level 1
        specification, specifically https://www.w3.org/TR/css-timing-1/#frames-timing-functions.
        A frames timing function is a type of timing function that divides the input time into a
        specified number of intervals of equal length.

        Test: transitions/frames-timing-function.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::createTimingFunctionValue):
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSFramesTimingFunctionValue::customCSSText const):
        (WebCore::CSSFramesTimingFunctionValue::equals const):
        * css/CSSTimingFunctionValue.h:
        * css/CSSToStyleMap.cpp:
        (WebCore::CSSToStyleMap::mapAnimationTimingFunction):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals const):
        (WebCore::CSSValue::cssText const):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::isFramesTimingFunctionValue const):
        * css/CSSValueKeywords.in:
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSteps):
        (WebCore::consumeFrames):
        (WebCore::consumeAnimationTimingFunction):
        * platform/animation/TimingFunction.cpp:
        (WebCore::operator<<):
        (WebCore::TimingFunction::transformTime const):
        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::isFramesTimingFunction const):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationHasFramesTimingFunction):
        (WebCore::GraphicsLayerCA::animationCanBeAccelerated const):

2018-01-12  Commit Queue  <commit-queue@webkit.org>

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

        Lets do a slightly different fix (Requested by anttik on
        #webkit).

        Reverted changeset:

        "REGRESSION(r225650): The scores of MotionMark tests Multiply
        and Leaves dropped by 8%"
        https://bugs.webkit.org/show_bug.cgi?id=181460
        https://trac.webkit.org/changeset/226721

2018-01-11  Keith Miller  <keith_miller@apple.com>

        Rename ENABLE_ASYNC_ITERATION to ENABLE_JS_ASYNC_ITERATION
        https://bugs.webkit.org/show_bug.cgi?id=181573

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2018-01-11  Jiewen Tan  <jiewen_tan@apple.com>

        [WebAuthN] Import a CBOR coder from Chromium
        https://bugs.webkit.org/show_bug.cgi?id=181522
        <rdar://problem/36055729>

        Reviewed by Brent Fulgham.

        This patch imports a CBOR coder including encoder and decoder from Chromium. CBOR encoder
        is needed for WebAuthN to encode attestation object into binaries. When supporting extensions
        in the future, CBOR encoder/decoder will be needed as well. Implementating and maintaining
        a fully-fledged CBOR coder doesn't seem to align with WebKit's best interests. Therefore,
        importing a most suitable third party implementation will be wise.

        In this patch, it fully integrate the whole coder into our codebase. Those changes includes:
            1. Substitute data structures that enjoy a better WTF version.
            2. Replacing marcos.
            3. Implementating workarounds for some functionalities that we lack fundamental types' support.
            4. Changing the coding style to match ours.

        This patch doesn't intend to improve the logic of the original codebase. Hence some of the
        coding logic might not match what WebKit ususally has.

        Here is a full list of Chromium changes that constructed this CBOR coder in chronological order:
        6efcf495521d18d060027762f48bb292d6979136,
        9eb43fd347890b4c6cf54c4bd7ec1bbb88e381e1,
        31c85e74fd567772f18e0a41be468d04af721f21,
        68672fdcad280a8ff69b91927d38d0eabf2c87f2,
        0ca8667c0584fb21c0748ebd7468d32889759a07,
        df763d790d7e45d70116bdefacbfd4f9faa8995e,
        6d30c4a621c65314db63eb56e87c19ab75627b26,
        50fe92953f4739f17a62303fedbf8db9234317c8,
        47be22c3603424d1832d046a348ff3f982500288,
        98a59e46948b2c71608926004fac8192b0ff2208,
        07540c6d850ed6e0fa508d63c20a8ce96d751de6,
        06ae32d640c8e4b86ea8914a80ee419ea16e56d8.

        Covered by API tests.

        * Modules/webauthn/cbor/CBORBinary.h: Added.
        * Modules/webauthn/cbor/CBORReader.cpp: Added.
        (cbor::CBORReader::CBORReader):
        (cbor::CBORReader::~CBORReader):
        (cbor::CBORReader::read):
        (cbor::CBORReader::decodeCBOR):
        (cbor::CBORReader::readVariadicLengthInteger):
        (cbor::CBORReader::decodeValueToNegative):
        (cbor::CBORReader::decodeValueToUnsigned):
        (cbor::CBORReader::readSimpleValue):
        (cbor::CBORReader::readString):
        Workarounds applied.
        (cbor::CBORReader::readBytes):
        (cbor::CBORReader::readCBORArray):
        (cbor::CBORReader::readCBORMap):
        (cbor::CBORReader::canConsume):
        (cbor::CBORReader::checkMinimalEncoding):
        (cbor::CBORReader::checkExtraneousData):
        (cbor::CBORReader::checkDuplicateKey):
        (cbor::CBORReader::hasValidUTF8Format):
        Workarounds applied.
        (cbor::CBORReader::checkOutOfOrderKey):
        (cbor::CBORReader::getErrorCode):
        (cbor::CBORReader::errorCodeToString):
        * Modules/webauthn/cbor/CBORReader.h: Added.
        * Modules/webauthn/cbor/CBORValue.cpp: Added.
        (cbor::CBORValue::CBORValue):
        (cbor::CBORValue::operator=):
        (cbor::CBORValue::~CBORValue):
        (cbor::CBORValue::clone const):
        (cbor::CBORValue::getInteger const):
        (cbor::CBORValue::getUnsigned const):
        (cbor::CBORValue::getNegative const):
        (cbor::CBORValue::getString const):
        (cbor::CBORValue::getByteString const):
        (cbor::CBORValue::getArray const):
        (cbor::CBORValue::getMap const):
        (cbor::CBORValue::getSimpleValue const):
        (cbor::CBORValue::internalMoveConstructFrom):
        (cbor::CBORValue::internalCleanup):
        * Modules/webauthn/cbor/CBORValue.h: Added.
        * Modules/webauthn/cbor/CBORWriter.cpp: Added.
        (cbor::CBORWriter::~CBORWriter):
        (cbor::CBORWriter::write):
        (cbor::CBORWriter::CBORWriter):
        (cbor::CBORWriter::encodeCBOR):
        Workarounds applied.
        (cbor::CBORWriter::startItem):
        (cbor::CBORWriter::setAdditionalInformation):
        (cbor::CBORWriter::setUint):
        (cbor::CBORWriter::getNumUintBytes):
        * Modules/webauthn/cbor/CBORWriter.h: Added.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:

2018-01-11  Chris Dumez  <cdumez@apple.com>

        Setting Window.opener to null should disown its opener
        https://bugs.webkit.org/show_bug.cgi?id=181505
        <rdar://problem/36443151>

        Reviewed by Ryosuke Niwa.

        Setting Window.opener to null should disown its opener as per:
        - https://html.spec.whatwg.org/#dom-opener

        With this change, tabs opened by clicking link inside Gmail no
        longer have the Gmail window as opener.

        Tests: fast/dom/Window/window-opener-set-to-null.html
               fast/dom/Window/window-opener-shadowing.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setOpener):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::disownOpener):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2018-01-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Cocoa] Star character disappears when bolded
        https://bugs.webkit.org/show_bug.cgi?id=181568
        <rdar://problem/18755569>

        Reviewed by Simon Fraser.

        We had some code in ComplexTextController to ask the FontCache for a font, given the name
        of a particular font CoreText used inside a CTRun. This is wrong for two reasons: fonts
        are not identifiable by PostScript name (in the general case), and because the lookup
        procedure requires a FontDescription, the result may yield a font that is not the one
        looked up. The goal of this code was simply to preserve the rendering mode of the font,
        but we removed support for these rendering modes years ago. So the solution is to skip
        that lookup and use the CoreText font directly.

        Test: fast/text/unknown-font.html

        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

2018-01-11  Keith Rollin  <krollin@apple.com>

        Add optional logging of ITP-related user interaction information
        https://bugs.webkit.org/show_bug.cgi?id=181556

        Reviewed by Brent Fulgham.

        In order to support the tracking of the efficacy of Intelligent
        Tracking Protection, add some logging indicating when the user
        interacts with a page in a way that affects cookie partitioning. This
        logging is off by default, and is enabled with `defaults write -g
        WebKitLogCookieInformation -bool true`.

        No new tests -- no changed functionality.

        * loader/ResourceLoadObserver.cpp:
        (WebCore::ResourceLoadObserver::logUserInteractionWithReducedTimeResolution):
        * loader/ResourceLoadObserver.h:
        (WebCore::ResourceLoadObserver::shouldLogUserInteraction const):
        (WebCore::ResourceLoadObserver::setShouldLogUserInteraction):

2018-01-11  James Craig  <jcraig@apple.com>

        AX: when invert colors is on, double-invert video elements in UserAgentStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=168447
        <rdar://problem/30559874>

        Reviewed by Simon Fraser.

        Double-invert video when platform "invert colors" setting is enabled. Behavior matches 
        current "Smart Invert" feature of Safari Reader on macOS/iOS and other iOS native apps.

        Tests: accessibility/smart-invert-reference.html
               accessibility/smart-invert.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (@media (inverted-colors)):
        (:host):
        (picture):
        * css/html.css:
        (@media (inverted-colors)):
        (video):

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Don't load inline data when requesting info for an attachment element backed by a file path
        https://bugs.webkit.org/show_bug.cgi?id=181550

        Reviewed by Tim Horton.

        When requesting data for an attachment element that is backed by a file path, we currently trigger a load in the
        web process to fetch contents of the attachment data as inline data in the AttachmentInfo. This is unnecessary,
        since the file path of the attachment element must have come from the UI process anyways, so it is sufficient to
        simply send the file path to the UI process and have the UI process read the contents of the path as a memory-
        mapped NSData.

        This patch lets HTMLAttachmentElement skip over resource loading codepaths when creating an AttachmentInfo for
        the client, and also teaches _WKAttachment to read a AttachmentInfo's filepath as memory-mapped data if a file
        path is present, and no inline data was specified.

        Covered by existing API tests.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::requestInfo):

2018-01-10  Ryosuke Niwa  <rniwa@webkit.org>

        Make elements of zero width or height focusable
        https://bugs.webkit.org/show_bug.cgi?id=181516

        Reviewed by Chris Dumez.

        Don't check render box's size or bounding rect when deciding whether an element is focusable.
        New behavior matches that of Firefox and Chrome.

        Test: fast/events/focus-zero-size-element.html

        * dom/Element.cpp:
        (WebCore::Element::isFocusable): Only update the style.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isFocusable const): Deleted.
        * html/HTMLFormControlElement.h:
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isFocusable const): Deleted. As far as I can tell, no math ml element is focusable.
        * mathml/MathMLElement.h:
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::isFocusable const): Deleted.
        * svg/SVGAElement.h:

2018-01-11  Filip Pizlo  <fpizlo@apple.com>

        Rename MarkedAllocator to BlockDirectory and AllocatorAttributes to CellAttributes
        https://bugs.webkit.org/show_bug.cgi?id=181543

        Rubber stamped by Michael Saboff.

        No new tests because I'm just renaming things.

        * ForwardingHeaders/heap/BlockDirectoryInlines.h: Copied from Source/WebCore/ForwardingHeaders/heap/MarkedAllocatorInlines.h.
        * ForwardingHeaders/heap/MarkedAllocatorInlines.h: Removed.
        * bindings/js/DOMGCOutputConstraint.cpp:

2018-01-11  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r225003): Loading hangs in environments where dispatch_async does not work
        https://bugs.webkit.org/show_bug.cgi?id=181553
        <rdar://problem/35733938>

        Reviewed by Eric Carlson.

        There is an environment where dispatch_async does not work, but performSelectorOnMainThread works.
        r225003 broke loading in this environment.  This fixes it and updates the test that r225003 fixed.
        It failed sometimes because loading was happening in a different order than html parsing, so I made
        the test not depend on html parsing timing by updating media/video-src-remove.html.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):

2018-01-11  Dean Jackson  <dino@apple.com>

        Rolling out 226814. It crashes on some bots.

2018-01-11  Dean Jackson  <dino@apple.com>

        [WebGL] Simulated vertexAttrib0 can sometimes cause OUT_OF_MEMORY errors
        https://bugs.webkit.org/show_bug.cgi?id=181558
        <rdar://problem/36189833>

        Reviewed by Eric Carlson.

        Very large element indices in the ELEMENT_ARRAY_BUFFER meant that
        our simulated vertexAttrib0 buffer might be too large. We need
        to check for out-of-memory, but we can also detect some of the issues
        earlier in our validation code. Additionally, make sure that we don't
        accidentally cast an unsigned to a signed.

        Test: fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html

        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::validateIndexArrayConservative): Update validation
        code to look for overflow, rather than relying on looking for sign changes.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Ditto.
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContextBase::drawArrays): Check that we were able to simulate.
        (WebCore::WebGLRenderingContextBase::drawElements):
        (WebCore::WebGLRenderingContextBase::validateSimulatedVertexAttrib0): Update validation code, and
        use GC3Duint, since that's what the indicies are.
        (WebCore::WebGLRenderingContextBase::simulateVertexAttrib0): Ditto.
        (WebCore::WebGLRenderingContextBase::drawArraysInstanced): Check that we were able to simulate.
        (WebCore::WebGLRenderingContextBase::drawElementsInstanced):
        * html/canvas/WebGLRenderingContextBase.h:

2018-01-11  Chris Dumez  <cdumez@apple.com>

        ASSERTION FAILED: registration in WebCore::SWServerWorker::skipWaiting()
        https://bugs.webkit.org/show_bug.cgi?id=181222
        <rdar://problem/36332686>

        Reviewed by Youenn Fablet.

        Replace assertion in SWServerWorker::skipWaiting() that assumes the worker
        has a registration. Nowadays, a SWServerWorker can stay alive for a short
        period without having a registration, while it is terminating.

        No new tests, unskipped existing test.

        * workers/service/server/SWServerWorker.cpp:
        (WebCore::SWServerWorker::skipWaiting):

2018-01-11  Antti Koivisto  <antti@apple.com>

        Don't call RenderElement::setStyle when nothing changes
        https://bugs.webkit.org/show_bug.cgi?id=181530

        Reviewed by Zalan Bujtas.

        * style/StyleChange.h:

        Remove 'Force' value. This essentially meant 'compute style for all descendants and call setStyle unconditionally'.
        Using this value lost information about whether anything actually changed in a particular style as it was automatically
        inherited by all descendants. The 'compute all descendants' part of the behavior is what is actually needed.

        Instead add separate DescendantsToResolve enum for communicating what else to compute.

        * style/StyleTreeResolver.cpp:
        (WebCore::Style::TreeResolver::Parent::Parent):
        (WebCore::Style::computeDescendantsToResolve):

            Figure out which descendants will need resolving based on how the current elements style changed.

        (WebCore::Style::TreeResolver::resolveElement):
        (WebCore::Style::TreeResolver::createAnimatedElementUpdate):
        (WebCore::Style::TreeResolver::pushParent):
        (WebCore::Style::shouldResolveElement):

            Use DescendantsToResolve as input.

        (WebCore::Style::TreeResolver::resolveComposedTree):
        * style/StyleTreeResolver.h:
        * style/StyleUpdate.h:
        (WebCore::Style::ElementUpdates::ElementUpdates):

            Add DescendantsToResolve.

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        Send PromisedBlobInfo to the client through DragItem instead of DragClient::prepareToDragPromisedBlob
        https://bugs.webkit.org/show_bug.cgi?id=181497

        Reviewed by Tim Horton.

        Refactor drag initiation with DOMFile-backed attachment elements. See WebKit ChangeLog for more information. No
        change in behavior; promised blob dragging covered by WKAttachment API tests.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:
        (WebCore::DragClient::prepareToDragPromisedBlob): Deleted.
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        (WebCore::DragController::doImageDrag):
        (WebCore::DragController::doSystemDrag):
        (WebCore::DragController::promisedBlobInfo):
        (WebCore::DragController::dragAttachmentElement): Deleted.
        * page/DragController.h:
        * platform/DragItem.h:
        (WebCore::DragItem::encode const):
        (WebCore::DragItem::decode):

2018-01-11  Youenn Fablet  <youenn@apple.com>

        RTCController should disable ICE candidate filtering in case of getUserMedia based on the RTCPerrConnection origin
        https://bugs.webkit.org/show_bug.cgi?id=180851

        Reviewed by Eric Carlson.

        Test: http/wpt/webrtc/third-party-frame-ice-candidate-filtering.html

        RTCController now stores all the client origins (top+frame origins) of frames that got access to camera/microphone access.
        For any such client origin, PeerConnection objects ICE candidate filtering is disabled.
        ICE candidate filtering is reset whenever navigating/reloading the page.

        * Modules/mediastream/RTCController.cpp:
        (WebCore::RTCController::reset):
        (WebCore::matchDocumentOrigin):
        (WebCore::RTCController::shouldDisableICECandidateFiltering):
        (WebCore::RTCController::add):
        (WebCore::RTCController::disableICECandidateFilteringForAllOrigins):
        (WebCore::RTCController::disableICECandidateFiltering):
        (WebCore::RTCController::enableICECandidateFiltering):
        * Modules/mediastream/RTCController.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::create):
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::allow):
        * page/Page.cpp:
        (WebCore::Page::disableICECandidateFiltering):
        * testing/Internals.cpp:
        (WebCore::Internals::setICECandidateFiltering):

2018-01-11  Ali Juma  <ajuma@chromium.org>

        window.visualViewport should behave as [SameObject]
        https://bugs.webkit.org/show_bug.cgi?id=181548

        Reviewed by Chris Dumez.

        Add 'GenerateIsReachable' to VisualViewport so that window.visualViewport's
        JS wrapper object doesn't get garbage collected too soon.

        Test: fast/visual-viewport/visual-viewport-same-object.html

        * page/VisualViewport.idl:

2018-01-11  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Extract multipart handling from ResourceHandle to CurlRequest.
        https://bugs.webkit.org/show_bug.cgi?id=181506

        Reviewed by Alex Christensen.

        Rename old MultipartHandle class to CurlMultipartHandle and modernize it. Also move the responsibility 
        of handling multi part from ResourceHandle to CurlRequest. This is required for upcoming NetworkLoadTask.

        No new tests because no new behavior.

        * platform/Curl.cmake:
        * platform/network/curl/CurlMultipartHandle.cpp: Renamed from Source/WebCore/platform/network/curl/MultipartHandle.cpp.
        (WebCore::CurlMultipartHandle::createIfNeeded):
        (WebCore::CurlMultipartHandle::extractBoundary):
        (WebCore::CurlMultipartHandle::extractBoundaryFromContentType):
        (WebCore::CurlMultipartHandle::CurlMultipartHandle):
        (WebCore::CurlMultipartHandle::didReceiveData):
        (WebCore::CurlMultipartHandle::didComplete):
        (WebCore::CurlMultipartHandle::processContent):
        (WebCore::CurlMultipartHandle::checkForBoundary):
        (WebCore::CurlMultipartHandle::matchedLength):
        (WebCore::CurlMultipartHandle::parseHeadersIfPossible):
        * platform/network/curl/CurlMultipartHandle.h: Renamed from Source/WebCore/platform/network/curl/MultipartHandle.h.
        (WebCore::CurlMultipartHandle::~CurlMultipartHandle):
        * platform/network/curl/CurlMultipartHandleClient.h: Added.
        (WebCore::CurlMultipartHandleClient::~CurlMultipartHandleClient):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::didReceiveHeader):
        (WebCore::CurlRequest::didReceiveData):
        (WebCore::CurlRequest::didReceiveHeaderFromMultipart):
        (WebCore::CurlRequest::didReceiveDataFromMultipart):
        (WebCore::CurlRequest::didCompleteTransfer):
        (WebCore::CurlRequest::finalizeTransfer):
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):
        (WebCore::CurlRequest::invokeDidReceiveResponse):
        (WebCore::CurlRequest::completeDidReceiveResponse):
        * platform/network/curl/CurlRequest.h:
        (WebCore::CurlRequest::create):
        * platform/network/curl/ResourceHandleCurlDelegate.cpp:
        (WebCore::ResourceHandleCurlDelegate::createCurlRequest):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveResponse):
        (WebCore::ResourceHandleCurlDelegate::curlDidReceiveBuffer):
        (WebCore::ResourceHandleCurlDelegate::curlDidComplete):
        * platform/network/curl/ResourceHandleCurlDelegate.h:

2018-01-11  Zalan Bujtas  <zalan@apple.com>

        RenderTreeUpdater::current() returns null_ptr when mutation is done through Document::resolveStyle.
        https://bugs.webkit.org/show_bug.cgi?id=181513
        <rdar://problem/36367085>

        Reviewed by Antti Koivisto.

        This patch ensures that we use a valid RenderTreeBuilder even when
        Document::resolveStyle (incorrectly) triggers tree mutation.
        It can be reverted soon after the incorrect mutations are taken care of.

        Test: fast/forms/button-set-text-crash.html

        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setText):
        * rendering/RenderMenuList.cpp:
        (RenderMenuList::setText):

2018-01-11  Antoine Quint  <graouts@apple.com>

        Only listen to webkitplaybacktargetavailabilitychanged when media controls are visible to the user
        https://bugs.webkit.org/show_bug.cgi?id=181547
        <rdar://problem/35947650>

        Reviewed by Eric Carlson.

        Because listening to "webkitplaybacktargetavailabilitychanged" events incurs some higher power usage on iOS,
        we only listen to such events when controls are visible to the user. In other words, the MediaControls need to
        have both "visible" set to "true" and "faded" set to "false". To support this, we add a delegate method on
        MediaControls such that it can tell the MediaController that the "visible" property changed. With this message,
        MediaController can inform its MediaControllerSupport objects that user visibility of the controls changed, which
        lets AirplaySupport disable itself when controls are no longer visible.

        Test: media/modern-media-controls/airplay-support/airplay-support-disable-event-listeners-with-hidden-controls.html

        * Modules/modern-media-controls/controls/media-controls.js:
        (MediaControls.prototype.set visible):
        * Modules/modern-media-controls/media/airplay-support.js:
        (AirplaySupport.prototype.controlsUserVisibilityDidChange):
        * Modules/modern-media-controls/media/media-controller-support.js:
        (MediaControllerSupport.prototype.controlsUserVisibilityDidChange):
        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.mediaControlsVisibilityDidChange):
        (MediaController.prototype.mediaControlsFadedStateDidChange):
        (MediaController.prototype._controlsUserVisibilityDidChange):

2018-01-11  Antoine Quint  <graouts@apple.com>

        [iOS] There should be no controls markup generated in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=181540
        <rdar://problem/35060379>

        Reviewed by Eric Carlson.

        We completely forgo the display of any content when fullscreen on iOS by setting the
        "visible" flag to "false" on the MediaControls, which will prevent any DOM content from
        being added.

        * Modules/modern-media-controls/media/media-controller.js:
        (MediaController.prototype.handleEvent):
        (MediaController.prototype._updateiOSFullscreenProperties):
        (MediaController):
        (MediaController.prototype._updateSupportingObjectsEnabledState): Deleted.

2018-01-11  Alex Christensen  <achristensen@webkit.org>

        Revert changes accidentally committed with r226789.
        https://bugs.webkit.org/show_bug.cgi?id=181423

        I had some local changes I did not mean to commit.

        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (scheduledWithCustomRunLoopMode):
        (-[WebCoreResourceHandleAsOperationQueueDelegate callFunctionOnMainThread:]):
        (WebCore::if): Deleted.
        (WebCore::>::fromCallable): Deleted.

2018-01-10  Simon Fraser  <simon.fraser@apple.com>

        On macOS, getBoundingClientRect gives incorrect values when pinch-zoomed
        https://bugs.webkit.org/show_bug.cgi?id=181511
        rdar://problem/33741427

        Reviewed by Zalan Bujtas.
        
        When reverting "client coordinates are relative to layout viewport" in r219829
        I broke documentToClientOffset() on macOS by failing to take pinch zoom scale into
        account (frameScaleFactor() is always 1 on iOs, so this bug doesn't manifest there).

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::documentToClientOffset const):

2018-01-11  Youenn Fablet  <youenn@apple.com>

        Replace WebRTCLegacyAPIDisabled by WebRTCLegacyAPIEnabled and switch off WebRTC legacy flag by default
        https://bugs.webkit.org/show_bug.cgi?id=181480

        Reviewed by Eric Carlson.

        No change of behavior.

        * page/RuntimeEnabledFeatures.h: Set default value to false.

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support moving attachment elements in editable areas using drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=181337
        <rdar://problem/36324813>

        Reviewed by Tim Horton.

        Makes slight adjustments to attachment-specific drag and drop logic to ensure that moving attachments via drag
        and drop behaves correctly. See per-change comments for more detail.

        Tests:  WKAttachmentTests.DragInPlaceVideoAttachmentElement
                WKAttachmentTests.MoveAttachmentElementAsIconByDragging
                WKAttachmentTests.MoveInPlaceAttachmentElementByDragging

        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):

        Stop vending the private web archive pasteboard type for attachments, for now. This works around issues where an
        attachment element that is dragged and dropped within the same page may lose its blob backing data if we try to
        remove and insert it as a fragment from the archive. Providing a web archive would allow us to avoid destroying
        and recreating an attachment element when dragging within the same page, but this is a nice-to-have optimization
        we can re-enable after investigation in a subsequent patch.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::populateShadowRootIfNecessary):

        Add `draggable=false` to the image element of an in-place attachment element.

        * page/DragController.cpp:
        (WebCore::enclosingAttachmentElement):
        (WebCore::DragController::draggableElement const):

        Tweak single-selected-attachment handling to account for in-place attachments. Since the hit-tested node is
        inside the shadow subtree of the attachment element, the condition needs to check for the startElement as well
        as the startElement's shadow host.

        (WebCore::DragController::startDrag):

        Make two tweaks here. First, don't require a RenderAttachment to drag an attachment element (this is required
        for dragging in-place attachments). This was added in r217083 to address <rdar://problem/32282831>, but is no
        longer correct, since attachments may now be displayed in-place.

        Secondly, only restore the previous selection if the attachment is in a richly contenteditable area. This was
        added to prevent the selection highlight from appearing in when dragging non-editable attachment elements in the
        Mail viewer. However, to allow drag moves to occur, we need the selection to persist after drag start.

2018-01-04  Filip Pizlo  <fpizlo@apple.com>

        CodeBlocks should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=180884

        Reviewed by Saam Barati.

        No new tests because no new behavior.
        
        Adopting new parallel constraint API, so that more of the logic of doing parallel
        constraint solving is shared between the DOM's output constraints and JSC's output
        constraints.

        * bindings/js/DOMGCOutputConstraint.cpp:
        (WebCore::DOMGCOutputConstraint::executeImpl):
        (WebCore::DOMGCOutputConstraint::doParallelWorkImpl): Deleted.
        (WebCore::DOMGCOutputConstraint::finishParallelWorkImpl): Deleted.
        * bindings/js/DOMGCOutputConstraint.h:

2018-01-11  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Support dragging attachment elements out as files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181199
        <rdar://problem/36299316>

        Reviewed by Tim Horton, Andy Estes and Joseph Pecoraro.

        Adds support for dragging "files" (i.e. creating item providers with preferred attachment presentation styles)
        from attachment elements on iOS for Mail. See below for more detail.

        Tests:  WKAttachmentTestsIOS.DragAttachmentInsertedAsData
                WKAttachmentTestsIOS.DragAttachmentInsertedAsFile

        * page/DragController.cpp:
        (WebCore::DragController::platformContentTypeForBlobType const):
        (WebCore::DragController::dragAttachmentElement):
        * page/DragController.h:
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::platformContentTypeForBlobType const):

        Add a private method to convert the type of a promised blob to a platform type. For Cocoa platforms, this
        converts the blob type (either a UTI or a MIME type) to a UTI for the platform to consume.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:

        Refactor WebItemProviderRegistrationInfo. WebItemProviderRegistrationInfo currently encapsulates a single item
        provider registration call, and contains either a type identifier and data buffer, or an NSItemProviderWriting-
        conformant object. To register an item provider using a WebItemProviderRegistrationInfo, the item provider
        pasteboard currently checks to see whether the info contains an object or a type and data.

        This patch removes WebItemProviderRegistrationInfo and replaces it with WebItemProviderDataRegistrar. Objects
        that implement this protocol know how to take an NSItemProvider and register data to it. So far, there are
        three implementations below.

        (-[WebItemProviderDataRegistrar initWithData:type:]):
        (-[WebItemProviderDataRegistrar typeIdentifier]):
        (-[WebItemProviderDataRegistrar data]):
        (-[WebItemProviderDataRegistrar typeIdentifierForClient]):
        (-[WebItemProviderDataRegistrar dataForClient]):
        (-[WebItemProviderDataRegistrar registerItemProvider:]):
        (-[WebItemProviderDataRegistrar description]):

        A data registrar takes a UTI and data buffer, and registers the UTI to the data. This replaces a
        WebItemProviderRegistrationInfo with both a type and data, but no representing object.

        (-[WebItemProviderWritableObjectRegistrar initWithObject:]):
        (-[WebItemProviderWritableObjectRegistrar representingObjectForClient]):
        (-[WebItemProviderWritableObjectRegistrar registerItemProvider:]):
        (-[WebItemProviderWritableObjectRegistrar description]):

        The writable object registrar writes an NSItemProviderWriting-conformant object to an item provider. This
        replaces a WebItemProviderRegistrationInfo with only a representing object.

        (-[WebItemProviderPromisedFileRegistrar initWithType:callback:]):
        (-[WebItemProviderPromisedFileRegistrar registerItemProvider:]):
        (-[WebItemProviderPromisedFileRegistrar description]):
        (-[WebItemProviderRegistrationInfoList addData:forType:]):
        (-[WebItemProviderRegistrationInfoList addRepresentingObject:]):
        (-[WebItemProviderRegistrationInfoList addPromisedType:fileCallback:]):

        Helper methods to add new registrars to a registration info list.

        (-[WebItemProviderRegistrationInfoList itemAtIndex:]):
        (-[WebItemProviderRegistrationInfoList enumerateItems:]):
        (-[WebItemProviderRegistrationInfoList itemProvider]):
        (-[WebItemProviderRegistrationInfoList description]):
        (-[WebItemProviderRegistrationInfo initWithRepresentingObject:typeIdentifier:data:]): Deleted.
        (-[WebItemProviderRegistrationInfo representingObject]): Deleted.
        (-[WebItemProviderRegistrationInfo typeIdentifier]): Deleted.

2018-01-11  Michael Saboff  <msaboff@apple.com>

        Add a DOM gadget for Spectre testing
        https://bugs.webkit.org/show_bug.cgi?id=181351

        Reviewed by Ryosuke Niwa.

        This change is used to test Spectre mitigations.

        Added a new DOM class to test for Spectre issues in the DOM layer.
        This additional functionality is disabled by default and must be enabled
        through the JSC option "enableSpectreGadgets".

        * CMakeLists.txt:
        * DerivedSources.make:
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * dom/SpectreGadget.cpp: Added.
        (WebCore::SpectreGadget::SpectreGadget):
        (WebCore::SpectreGadget::create):
        (WebCore::SpectreGadget::setReadLength):
        (WebCore::SpectreGadget::charCodeAt):
        (WebCore::SpectreGadget::clflushReadLength):
        * dom/SpectreGadget.h: Added.
        * dom/SpectreGadget.idl: Added.
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::spectreGadgetsEnabled const):
        * page/RuntimeEnabledFeatures.h:

2018-01-11  Philippe Normand  <pnormand@igalia.com>

        [GTK] media/muted-video-is-playing-audio.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=163781

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Sprinkle some debugging.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::setMuted): Ditto.

2018-01-10  Andy Estes  <aestes@apple.com>

        [Payment Request] Rename ApplePayMerchantValidationEvent to MerchantValidationEvent
        https://bugs.webkit.org/show_bug.cgi?id=181437
        <rdar://problem/36376481>

        Reviewed by Tim Horton.
        
        Renamed ApplePayMerchantValidationEvent to MerchantValidationEvent and changed complete() to accept a Promise.

        Test: http/tests/paymentrequest/payment-request-merchant-validation.https.html

        * DerivedSources.make:
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp:
        (WebCore::ApplePayPaymentHandler::merchantValidationCompleted):
        (WebCore::ApplePayPaymentHandler::validateMerchant):
        * Modules/applepay/paymentrequest/ApplePayPaymentHandler.h:
        * Modules/paymentrequest/MerchantValidationEvent.cpp: Renamed from Source/WebCore/Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.cpp.
        (WebCore::MerchantValidationEvent::create):
        (WebCore::MerchantValidationEvent::MerchantValidationEvent):
        (WebCore::MerchantValidationEvent::eventInterface const):
        (WebCore::MerchantValidationEvent::complete):
        * Modules/paymentrequest/MerchantValidationEvent.h: Renamed from Source/WebCore/Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.h.
        * Modules/paymentrequest/MerchantValidationEvent.idl: Renamed from Source/WebCore/Modules/applepay/paymentrequest/ApplePayMerchantValidationEvent.idl.
        * Modules/paymentrequest/PaymentHandler.h:
        * Modules/paymentrequest/PaymentRequest.cpp:
        (WebCore::PaymentRequest::completeMerchantValidation):
        * Modules/paymentrequest/PaymentRequest.h:
        * Modules/paymentrequest/PaymentRequest.idl:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * dom/EventNames.in:

2018-01-10  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Cross-protocol, cross-site scripting (XPXSS) using HTML forms
        Nhttps://bugs.webkit.org/show_bug.cgi?id=153088

        Reviewed by Alex Christensen.

        No new tests because it's covered by existing tests.

        * platform/network/curl/CurlContext.cpp:
        (WebCore::CurlHandle::getHttpVersion):
        * platform/network/curl/CurlContext.h:
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::didReceiveHeader):
        * platform/network/curl/CurlResponse.h:
        (WebCore::CurlResponse::isolatedCopy const):
        * platform/network/curl/ResourceResponseCurl.cpp:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::setStatusLine):

2018-01-10  Wenson Hsieh  <wenson_hsieh@apple.com>

        REGRESSION(r222507): Composition highlight doesn't render when using IME
        https://bugs.webkit.org/show_bug.cgi?id=181485
        <rdar://problem/35896516>

        Reviewed by Ryosuke Niwa.

        Fixes the order of arguments passed to paintTextSubrangeBackground from paintCompositionBackground.

        Test: editing/marked-text-appearance.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground):

2018-01-10  Youenn Fablet  <youenn@apple.com>

        Use no-cache fetch mode when loading main documents with location.reload()
        https://bugs.webkit.org/show_bug.cgi?id=181285

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        Start to translate cache policy used for navigation as FetchOptions::Cache.
        This allows ensuring service workers receive the right cache mode when intercepting navigation loads.
        To not change current navigation behavior, ReturnCacheDataElseLoad and ReturnCacheDataDontLoad still trigger default fetch cache mode.

        For Reload and ReloadExpiredOnly frame load types, using no-cache mode is more efficient than reload mode,
        as a conditional request will be sent if possible. This applies to location.reload which is consistent with other browsers.
        Keep reload mode for ReloadFromOrigin.

        * loader/DocumentLoader.cpp:
        (WebCore::toFetchOptionsCache):
        (WebCore::DocumentLoader::loadMainResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::defaultRequestCachingPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/NavigationScheduler.cpp:

2018-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226667 and r226673.
        https://bugs.webkit.org/show_bug.cgi?id=181488

        This caused a flaky crash. (Requested by mlewis13 on #webkit).

        Reverted changesets:

        "CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226667

        "REGRESSION (r226667): CodeBlocks should be in IsoSubspaces"
        https://bugs.webkit.org/show_bug.cgi?id=180884
        https://trac.webkit.org/changeset/226673

2018-01-10  Antti Koivisto  <antti@apple.com>

        REGRESSION(r225650): The scores of MotionMark tests Multiply and Leaves dropped by 8%
        https://bugs.webkit.org/show_bug.cgi?id=181460
        <rdar://problem/36379776>

        Reviewed by Ryosuke Niwa.

        * css/parser/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):

        Don't do the expensive security origin test if the sheet base URL and document URL are identical.
        This is true for inline style and inline stylesheets.

2018-01-10  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::computeNextMatchElement):

2018-01-10  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderRuby's moveChildren logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181470
        <rdar://problem/36397683>

        Reviewed by Antti Koivisto.

        This is about moving code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveChildren): Deleted.
        (WebCore::RenderRubyBase::mergeChildrenWithBase): Deleted.
        (WebCore::RenderRubyBase::moveInlineChildren): Deleted.
        (WebCore::RenderRubyBase::moveBlockChildren): Deleted.
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::takeChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::moveRubyChildren):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveChildren):
        (WebCore::RenderTreeBuilder::Ruby::moveChildrenInternal):
        (WebCore::RenderTreeBuilder::Ruby::insertChild):
        * rendering/updating/RenderTreeBuilderRuby.h:

2018-01-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] fix critical GObject warning

        Rubber-stamped by Carlos Garcia Campos.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): No need to
        resort to complicated things to get the element name...

2018-01-10  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] REGRESSION(r226629): broke media/video-interruption-with-resume-allowing-play.html
        https://bugs.webkit.org/show_bug.cgi?id=181471
        <rdar://problem/36402323>

        Reviewed by Carlos Garcia Campos.

        This patch mainly reduces the amount of playback state changes
        emitted by the GStreamer player to its client. Emitting those
        notifications too often has bad side effects.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::paused const): Add debug messages.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): This debug message appears too much. Demote.
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded const): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::didLoadingProgress const): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Try to emit
        playback state change notification only when going to PLAYING.
        (WebCore::MediaPlayerPrivateGStreamer::loadingFailed): Add warning message.

2018-01-10  Youenn Fablet  <youenn@apple.com>

        Add Service Worker CSP persistency
        https://bugs.webkit.org/show_bug.cgi?id=181434

        Reviewed by Alex Christensen.

        Covered by manual testing.
        Future work on service worker test infrastructure should allow automating such tests.

        Add support for service worker CSP data persistency.
        Add a version parameter to increment each time the schema is changing.
        This allows the same store to be used by multiple WebKits.

        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::v1RecordsTableSchema):
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):

2018-01-10  Antti Koivisto  <antti@apple.com>

        Invalidate current element style on class change accurately
        https://bugs.webkit.org/show_bug.cgi?id=181210

        Reviewed by Zalan Bujtas.

        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectFeatures const):
        (WebCore::DocumentRuleSets::subjectClassRules const):

            New rule set containing class rules affecting the subject element.

        (WebCore::DocumentRuleSets::ancestorClassRules const):
        * css/DocumentRuleSets.h:
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::recursivelyCollectFeaturesFromSelector):

            Classify selector components into various buckets based on the elements they match relative to
            the subject element. There are more categories than this patch strictly needs, for future use.

        (WebCore::RuleFeatureSet::collectFeatures):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        (WebCore::RuleFeatureSet::shrinkToFit):
        * css/RuleFeature.h:
        * css/StyleResolver.h:
        (WebCore::StyleResolver::hasSelectorForClass const): Deleted.
        * style/ClassChangeInvalidation.cpp:
        (WebCore::Style::elementNeedsInvalidation):
        (WebCore::Style::ClassChangeInvalidation::computeInvalidation):

            Don't invalidate current element unconditionally on class change. Instead find the subject rulesets
            that might affect it use them to perform invalidation.

        (WebCore::Style::ClassChangeInvalidation::invalidateStyleWithRuleSets):
        (WebCore::Style::ClassChangeInvalidation::invalidateStyle): Deleted.
        (WebCore::Style::ClassChangeInvalidation::invalidateDescendantStyle): Deleted.
        * style/ClassChangeInvalidation.h:
        (WebCore::Style::ClassChangeInvalidation::ClassChangeInvalidation):
        (WebCore::Style::ClassChangeInvalidation::~ClassChangeInvalidation):
        * style/StyleSharingResolver.cpp:
        (WebCore::Style::SharingResolver::classNamesAffectedByRules const):

2018-01-09  Antoine Quint  <graouts@apple.com>

        [Web Animations] Expose the id property on Animation
        https://bugs.webkit.org/show_bug.cgi?id=181450
        <rdar://problem/36383600>

        Reviewed by Dean Jackson.

        Expose the "id" property on Animation and handle the "id" property on the optional KeyframeAnimationOptions object
        passed to Element.animate(). All of the WPT tests related to this property are now passing.

        * animation/WebAnimation.h:
        * animation/WebAnimation.idl:
        * dom/Element.cpp:
        (WebCore::Element::animate):

2018-01-09  Chris Dumez  <cdumez@apple.com>

        Make service workers behave correctly with regards to Page Cache
        https://bugs.webkit.org/show_bug.cgi?id=181446
        <rdar://problem/36164291>

        Reviewed by Youenn Fablet.

        Make service workers behave correctly with regards to Page Cache:
        1. If a document has an active service worker, do not let it go into PageCache
        2. When a document goes into page cache, unregister it from the list of service worker clients
        3. When a document is restored from page cache, add it nack to the list of service worker clients

        Tests: http/tests/workers/service/client-added-to-clients-when-restored-from-page-cache.html
               http/tests/workers/service/client-removed-from-clients-while-in-page-cache.html
               http/tests/workers/service/no-page-cache-when-controlled.html
               http/tests/workers/service/other_resources/test.html

        * dom/Document.cpp:
        (WebCore::Document::suspend):
        (WebCore::Document::resume):
        * history/PageCache.cpp:
        (WebCore::canCacheFrame):
        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::serviceWorkerKey):
        * page/DiagnosticLoggingKeys.h:

2018-01-09  Chris Dumez  <cdumez@apple.com>

        We should not return undefined for most properties of a detached Window
        https://bugs.webkit.org/show_bug.cgi?id=181416
        <rdar://problem/36162489>

        Reviewed by Ryosuke Niwa.

        We should not return undefined for most properties on a detached Window. WebKit previously only exposed "closed"
        and "close" properties on detached / frameless windows. However, this does not match the HTML specification [1]
        or the behavior of Firefox and Chrome.

        Note that Chrome does not seem to fully follow the HTML specification either, it seems to treat detached windows
        the same way as cross-origin ones. As a result, it only exposed properties that are visible cross-origin when
        a window is detached / frameless.

        [1] https://html.spec.whatwg.org/#windowproxy-get

        No new tests, updated existingt tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::jsDOMWindowGetOwnPropertySlotRestrictedAccess):
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex):

2018-01-09  Darin Adler  <darin@apple.com>

        Further refinement to list item and counter code after "list-item" counter fix
        https://bugs.webkit.org/show_bug.cgi?id=181426

        Reviewed by Zalan Bujtas.

        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritCounter): Use auto.
        (WebCore::StyleBuilderCustom::applyValueCounter): Use auto, removed unneeded
        null checks for things that can never be null, moved the saturated addition
        here and got rid of the addIncrementValue function from CounterDirectives.
        Use the saturatedAddition function from SaturatedArithmetic.h instead of the
        much less efficient one that did the same thing, CounterDirectives::addClamped.

        * rendering/RenderCounter.cpp:
        (WebCore::listItemCounterDirectives): Use aggregate syntax for the return
        statements.
        (WebCore::planCounter): Changed to use a struct return value instead of two
        out arguments. Use the saturatedAddition function from SaturatedArithmetic.h
        instead of the much less efficient one that did the same thing,
        CounterDirectives::addClamped.
        (WebCore::findPlaceForCounter): Changed to use a struct return value instead
        of two out arguments.
        (WebCore::makeCounterNode): Updated for the above changes. Changed code to
        use add instead of both get and set. Updated to keep the counter maps inside
        the values of the "map of maps" instead of using a unique_ptr and allocating
        each one on the heap.
        (WebCore::destroyCounterNodeWithoutMapRemoval): Changed argument to a reference
        instead of a pointer. Updated for changes to the map. Use RefPtr more
        consistently.
        (WebCore::RenderCounter::destroyCounterNodes): Use iterators less.
        (WebCore::RenderCounter::destroyCounterNode): Ditto.
        (WebCore::RenderCounter::rendererRemovedFromTree): Add a check of
        hasCounterNodeMap here before calling destroyCounterNodes, so that function
        can assume the flag is true (both other callers already check it).
        (WebCore::updateCounters): Use auto and update for changes above.
        (WebCore::RenderCounter::rendererStyleChanged): Use modern for loops instead
        of iterators.
        (showCounterRendererTree): Use auto and udpate for changes above.

        * rendering/RenderListItem.cpp:
        (WebCore::enclosingList): Stop referring to elements as "nodes". Changed
        the local variable names for clarity.
        (WebCore::nextListItemHelper): Renamed from nextListItem since it's not
        intended to be called directly and we want to use a function pointer to
        nextListItem. Fixed the algorithm to correctly handle ad hoc "lists" that
        are not actually HTML list elements, using the definition in the enclosingList
        function as the previousListItem function already did.
        (WebCore::nextListItem): Updated for name changes.
        (WebCore::firstListItem): Renamed from nextListItem for clarity.
        (WebCore::previousListItem): Rewrote loop so it doesn't have to do things
        so strangely when we find another list.
        (WebCore::RenderListItem::updateItemValuesForOrderedList): Use auto and
        update local variable names.
        (WebCore::RenderListItem::itemCountForOrderedList): Ditto.
        (WebCore::RenderListItem::updateValueNow const): Rewrote to use an iterative
        algorithm instead of a recursive one. Fixes the FIXME here.
        (WebCore::RenderListItem::updateValue): Use m_valueWasSetExplicitly
        instead of m_explicitValue.
        (WebCore::RenderListItem::explicitValueChanged): Use auto and simplified
        the loop a bit.
        (WebCore::RenderListItem::setExplicitValue): Set m_valueWasSetExplicitly
        instead of m_explicitValue.
        (WebCore::previousOrNextItem): Deleted.
        (WebCore::RenderListItem::updateListMarkerNumbers): Streamlined the loop
        a bit and used a fucntion pointer to handle the two different directions.
        (WebCore::RenderListItem::isInReversedOrderedList const): Simplified by
        getting rid of an unneeded use of pointers and local variables.

        * rendering/RenderListItem.h: Use a boolean, m_valueWasSetExplicitly,
        instead of a separate optional m_explicitValue.

        * rendering/style/CounterDirectives.h: Since all the code in this file was
        rewritten, removed old copyrights. Deleted the addIncrementValue function,
        since it is clear enough in the one call site in the style builder.
        Deleted the addClamped function because it was just a much slower
        version of the saturatedAddition function. Made == and != into constexpr
        functions since they are simple enough to be.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getCounterDirectives const): Deleted. Caller can
        handle this just fine without a helper function.
        * rendering/style/RenderStyle.h: Ditto.

2018-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        font-display:fallback can cause a visual flash (which is supposed to be impossible)
        https://bugs.webkit.org/show_bug.cgi?id=181374

        Reviewed by Simon Fraser.

        A FontCascade represents an entire font-family fallback list, but sometimes we need to pull out a single
        representative font from the list to calculate things like line height. Previously, if the first item in
        the font-family list was in the middle of being downloaded, this representative font was hardcoded to be
        Times. However, when actually laying out and drawing the glyphs, we have logic to skip the interstitial
        Times if there are any installed fonts present in the font-family list (so you wouldn't ever actually
        see Times). This means that line height (among other things) was being calculated as if Times was used,
        but in reality, some other font from the font-family list was being used.

        Alone, this isn't a huge problem, but font-display:fallback makes a font transition between "timed out"
        and "failed," and when the font hits the failed state, the representative font skips over the cancelled
        item and hits the next item in the fallback list. This means that line heights will change, which causes
        a visual flash, even when font-display:fallback is specified.

        The solution is simply to educate the logic which identifies this representative font so that it
        understands what to do for currently-loading fonts.

        Tests: fast/text/font-display/swap-flash.html

        * platform/graphics/FontCascadeFonts.h:
        (WebCore::FontCascadeFonts::primaryFont):
        * rendering/line/BreakingContext.h:
        (WebCore::textWidth):

2018-01-04  Filip Pizlo  <fpizlo@apple.com>

        CodeBlocks should be in IsoSubspaces
        https://bugs.webkit.org/show_bug.cgi?id=180884

        Reviewed by Saam Barati.

        No new tests because no new behavior.
        
        Adopting new parallel constraint API, so that more of the logic of doing parallel
        constraint solving is shared between the DOM's output constraints and JSC's output
        constraints.

        * bindings/js/DOMGCOutputConstraint.cpp:
        (WebCore::DOMGCOutputConstraint::executeImpl):
        (WebCore::DOMGCOutputConstraint::doParallelWorkImpl): Deleted.
        (WebCore::DOMGCOutputConstraint::finishParallelWorkImpl): Deleted.
        * bindings/js/DOMGCOutputConstraint.h:

2018-01-08  Simon Fraser  <simon.fraser@apple.com>

        Clean up Marquee-related enums
        https://bugs.webkit.org/show_bug.cgi?id=181347

        Reviewed by Anders Carlsson.

        Modernize EMarqueeBehavior and EMarqueeDirection enums. Stop using the weird negative
        values in the MarqueeDirection and do manual reverse direction mapping.

        Make some member functions of RenderMarquee private.

        Stop using bitfields in RenderMarquee because the memory saving is not worth it, and doing so
        allows us to use modern initialization.

        No behavior change.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator MarqueeBehavior const):
        (WebCore::CSSPrimitiveValue::operator MarqueeDirection const):
        (WebCore::CSSPrimitiveValue::operator EMarqueeBehavior const): Deleted.
        (WebCore::CSSPrimitiveValue::operator EMarqueeDirection const): Deleted.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesLogicalWidthToFitContent const):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects const):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::RenderMarquee):
        (WebCore::reverseDirection):
        (WebCore::RenderMarquee::direction const):
        (WebCore::RenderMarquee::isHorizontal const):
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::start):
        (WebCore::RenderMarquee::updateMarqueePosition):
        (WebCore::RenderMarquee::updateMarqueeStyle):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::marqueeBehavior const):
        (WebCore::RenderStyle::marqueeDirection const):
        (WebCore::RenderStyle::setMarqueeDirection):
        (WebCore::RenderStyle::setMarqueeBehavior):
        (WebCore::RenderStyle::initialMarqueeBehavior):
        (WebCore::RenderStyle::initialMarqueeDirection):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleMarqueeData.cpp:
        (WebCore::StyleMarqueeData::StyleMarqueeData):
        * rendering/style/StyleMarqueeData.h:

2018-01-09  Jer Noble  <jer.noble@apple.com>

        Many CVDisplayLink threads created and destroyed while watching a YouTube video
        https://bugs.webkit.org/show_bug.cgi?id=181396

        Reviewed by Simon Fraser.

        When watching some YouTube videos (or any video with default controls), event handlers for
        the "timeupdate" event which use rAF will cause the underlying platform objects to be
        destroyed in between "timeupdate" events being fired, since they occur every 250ms, and rAF
        objects are destroyed every 166ms (or 10/60hz). Update this constant to destroy the
        underlying objects every 333ms (or 20/60hz) so that this common pattern doesn't lead to
        excessive rAF platform object turnover.

        * platform/Logging.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        (WebCore::DisplayRefreshMonitor::shouldBeTerminated const):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::displayDidRefresh):
        * platform/graphics/DisplayRefreshMonitorManager.cpp:
        (WebCore::DisplayRefreshMonitorManager::createMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::displayDidRefresh):

2018-01-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderElement addChild mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181451
        <rdar://problem/36385562>

        Reviewed by Antti Koivisto.

        This is about moving code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        (WebCore::RenderElement::childRequiresTable const): Deleted.
        * rendering/RenderElement.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChildToRenderElement):
        (WebCore::RenderTreeBuilder::childRequiresTable):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderInline.cpp:
        (WebCore::RenderTreeBuilder::Inline::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Inline::newChildIsInline):
        (WebCore::newChildIsInline): Deleted.
        * rendering/updating/RenderTreeBuilderInline.h:

2018-01-09  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r226531.

        This caused test failures on macOS WK2.

        Reverted changeset:

        "Use no-cache fetch mode when loading main documents with
        location.reload()"
        https://bugs.webkit.org/show_bug.cgi?id=181285
        https://trac.webkit.org/changeset/226531

2018-01-09  Michael Saboff  <msaboff@apple.com>

        Unreviewed, rolling out r226600 and r226603
        https://bugs.webkit.org/show_bug.cgi?id=181351

        Add a DOM gadget for Spectre testing

        * dom/Comment.cpp:
        (WebCore::Comment::Comment):
        (WebCore::Comment::setReadLength): Deleted.
        (WebCore::Comment::charCodeAt): Deleted.
        (WebCore::Comment::clflushReadLength): Deleted.
        * dom/Comment.h:
        * dom/Comment.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::spectreGadgetsEnabled const): Deleted.
        * page/RuntimeEnabledFeatures.h:

2018-01-09  Don Olmstead  <don.olmstead@sony.com>

        Add additional WEBCORE_EXPORTs
        https://bugs.webkit.org/show_bug.cgi?id=181414

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * dom/Document.h:
        * dom/ViewportArguments.h:
        * page/DOMWindow.h:
        * page/FrameView.h:
        * page/PageOverlayController.h:
        * platform/ContextMenuItem.h:
        * platform/Pasteboard.h:
        * platform/SharedBuffer.h:
        * platform/UserAgent.h:
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsLayerTransform.h:
        * platform/graphics/PlatformDisplay.h:
        * platform/graphics/cairo/BackingStoreBackendCairoImpl.h:
        * platform/graphics/cairo/PlatformContextCairo.h:
        * platform/graphics/cairo/RefPtrCairo.h:
        * platform/graphics/nicosia/NicosiaBuffer.h:
        * platform/graphics/nicosia/NicosiaPaintingEngine.h:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperAnimation.h:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperFPSCounter.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        (WebCore::TextureMapperLayer::TextureMapperLayer): Deleted.
        (WebCore::TextureMapperLayer::setID): Deleted.
        (WebCore::TextureMapperLayer::id): Deleted.
        (WebCore::TextureMapperLayer:: const): Deleted.
        (WebCore::TextureMapperLayer::setScrollClient): Deleted.
        (WebCore::TextureMapperLayer::setIsScrollable): Deleted.
        (WebCore::TextureMapperLayer::isScrollable const): Deleted.
        (WebCore::TextureMapperLayer::textureMapper const): Deleted.
        (WebCore::TextureMapperLayer::setTextureMapper): Deleted.
        (WebCore::TextureMapperLayer::drawsContent const): Deleted.
        (WebCore::TextureMapperLayer::contentsAreVisible const): Deleted.
        (WebCore::TextureMapperLayer::size const): Deleted.
        (WebCore::TextureMapperLayer::opacity const): Deleted.
        (WebCore::TextureMapperLayer::transform const): Deleted.
        (WebCore::TextureMapperLayer::hasFilters const): Deleted.
        (WebCore::TextureMapperLayer::isShowingRepaintCounter const): Deleted.
        (WebCore::TextureMapperLayer::fixedToViewport const): Deleted.
        (WebCore::TextureMapperLayer::rootLayer const): Deleted.
        (WebCore::TextureMapperLayer::texture): Deleted.
        (WebCore::TextureMapperLayer::adjustedPosition const): Deleted.
        (WebCore::TextureMapperLayer::layerRect const): Deleted.
        (WebCore::TextureMapperLayer::State::State): Deleted.
        * platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (WebCore::CoordinatedGraphicsLayer::isScrollable const): Deleted.
        (WebCore::CoordinatedGraphicsLayer::id const): Deleted.
        (WebCore::CoordinatedGraphicsLayer::coverRect const): Deleted.
        (WebCore::CoordinatedGraphicsLayer::fixedToViewport const): Deleted.
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.h:
        (WebCore::CoordinatedImageBacking::id const): Deleted.
        * platform/graphics/texmap/coordinated/TiledBackingStore.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.h:
        * platform/network/AuthenticationChallengeBase.h:
        * platform/network/CredentialBase.h:
        * platform/network/ProtectionSpaceBase.h:
        * platform/network/curl/SocketStreamHandleImpl.h:
        * replay/UserInputBridge.h:

2018-01-09  Basuke Suzuki  <Basuke.Suzuki@sony.com>

        [Curl] Move FormData related tasks into new CurlFormDataStream class.
        https://bugs.webkit.org/show_bug.cgi?id=181106

        Reviewed by Alex Christensen.

        No new tests because no behavior change.

        * platform/Curl.cmake:
        * platform/network/curl/CurlFormDataStream.cpp: Added.
        (WebCore::CurlFormDataStream::CurlFormDataStream):
        (WebCore::CurlFormDataStream::~CurlFormDataStream):
        (WebCore::CurlFormDataStream::clean):
        (WebCore::CurlFormDataStream::shouldUseChunkTransfer):
        (WebCore::CurlFormDataStream::totalSize):
        (WebCore::CurlFormDataStream::computeContentLength):
        (WebCore::CurlFormDataStream::read):
        (WebCore::CurlFormDataStream::readFromFile):
        (WebCore::CurlFormDataStream::readFromData):
        * platform/network/curl/CurlFormDataStream.h: Renamed from Source/WebCore/platform/network/curl/FormDataStreamCurl.h.
        (WebCore::CurlFormDataStream::elementSize):
        (WebCore::CurlFormDataStream::totalReadSize):
        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::CurlRequest):
        (WebCore::CurlRequest::willSendData):
        (WebCore::CurlRequest::finalizeTransfer):
        (WebCore::CurlRequest::setupPUT):
        (WebCore::CurlRequest::setupPOST):
        (WebCore::CurlRequest::setupSendData):
        (WebCore::CurlRequest::resolveBlobReferences): Deleted.
        (WebCore::CurlRequest::setupFormData): Deleted.
        * platform/network/curl/CurlRequest.h:
        * platform/network/curl/FormDataStreamCurl.cpp: Removed.

2018-01-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move MathML addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181443
        <rdar://problem/36380228>

        Reviewed by Antti Koivisto.

        This is about moving code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::addChild):
        (WebCore::RenderMathMLFenced::createMathMLOperator): Deleted.
        (WebCore::RenderMathMLFenced::makeFences): Deleted.
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChildToRenderMathMLFenced):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::mathMLBuilder):

2018-01-09  Antti Koivisto  <antti@apple.com>

        Blank page except for inner iframes because pending stylesheets cause style.isNotFinal() to be true
        https://bugs.webkit.org/show_bug.cgi?id=180940
        <rdar://problem/36116507>

        Reviewed by Darin Adler.

        Test: http/tests/local/loading-stylesheet-import-remove.html

        If a <link> referencing a stylesheet containing an @import that was still loading was removed
        from the document, the loading state was never cleared. For head stylesheets this blocked
        rendering permanently.

        Test reduction by Justin Ridgewell.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::removedFromAncestor):

        Test if the stylesheet it loading before clearing the pointer.

2018-01-09  Dan Bernstein  <mitz@apple.com>

        Removed some empty directories that were left behind

        * Modules/indieui: Removed.
        * Modules/vibration: Removed.
        * platform/graphics/ca/mac: Removed.
        * platform/mediastream/gstreamer: Removed.

2018-01-09  Antoine Quint  <graouts@apple.com>

        Refactor timing function solving code
        https://bugs.webkit.org/show_bug.cgi?id=181428

        Reviewed by Dean Jackson.

        We have duplicated code to solve "cubic" and "steps" timing functions in AnimationBase and TextureMapperAnimation,
        and we will soon need similar code to deal with timing functions in Web Animations. We move this code into TimingFunction
        with a single transformTime() function that can be called directly on the timing function rather than having callers
        figure out what type timing functions are to solve them.

        No test as there shouldn't be any behavior change.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress const):
        (WebCore::solveEpsilon): Deleted.
        (WebCore::solveCubicBezierFunction): Deleted.
        (WebCore::solveStepsFunction): Deleted.
        (WebCore::solveSpringFunction): Deleted.
        * platform/animation/TimingFunction.cpp:
        (WebCore::TimingFunction::transformTime const):
        * platform/animation/TimingFunction.h:
        * platform/graphics/texmap/TextureMapperAnimation.cpp:
        (WebCore::TextureMapperAnimation::apply):
        (WebCore::solveEpsilon): Deleted.
        (WebCore::solveCubicBezierFunction): Deleted.
        (WebCore::solveStepsFunction): Deleted.
        (WebCore::applyTimingFunction): Deleted.

2018-01-09  Michael Catanzaro  <mcatanzaro@igalia.com>

        Unreviewed, silence -Wunused-parameter warning

        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setupNewlyCreatedServiceWorker):

2018-01-09  Said Abou-Hallawa  <sabouhallawa@apple.com>

        Check Image::m_image is not null in ImageLoader::decode()
        https://bugs.webkit.org/show_bug.cgi?id=180386
        <rdar://problem/34634483>

        Reviewed by Tim Horton.

        Ensure ImageLoader::m_image is not null before referencing it.

        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::decode):

2018-01-09  Yusuke Suzuki  <utatane.tea@gmail.com>

        [FreeType] Use FastMalloc for FreeType
        https://bugs.webkit.org/show_bug.cgi?id=181387

        Reviewed by Michael Catanzaro.

        Add custom memory allocator for FreeType to use FastMalloc.

        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::initializeFreeTypeLibrary):
        (WebCore::createFontCustomPlatformData):

2018-01-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderTable* addChild mutation logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181424
        <rdar://problem/36368628>

        Reviewed by Antti Koivisto.

        This is about moving code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        Covered by existing tests.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::insertChildToRenderTable):
        (WebCore::RenderTreeBuilder::insertChildToRenderTableSection):
        (WebCore::RenderTreeBuilder::insertChildToRenderTableRow):
        * rendering/updating/RenderTreeBuilder.h:
        * rendering/updating/RenderTreeBuilderTable.cpp:
        (WebCore::RenderTreeBuilder::Table::insertChild):
        * rendering/updating/RenderTreeBuilderTable.h:

2018-01-09  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Transition Render*::addChild() calls to RenderTreeBuilder::insertChildToRender*()
        https://bugs.webkit.org/show_bug.cgi?id=181407
        <rdar://problem/36361176>

        Reviewed by Antti Koivisto.

        Eventually all mutation will be going through the RenderTreeBuilder.

        No change in functionality.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::addChild):
        * rendering/RenderMultiColumnFlow.cpp:
        (WebCore::RenderMultiColumnFlow::processPossibleSpannerDescendant):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild):
        * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
        (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
        * rendering/updating/RenderTreeBuilderRuby.cpp:
        (WebCore::RenderTreeBuilder::Ruby::findOrCreateParentForChild):

2018-01-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Ensure SleepDisabler is not held by pages in page cache
        https://bugs.webkit.org/show_bug.cgi?id=180197

        Reviewed by Eric Carlson.

        The sleep disabler is now checked again whenever the media player
        playback state or other characteristic has changed in the media
        engine.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):
        Check if the sleep disabler state needs to be updated or not.
        (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto.
        (WebCore::HTMLMediaElement::shouldDisableSleep const): Enable
        sleep disabler for GTK and WPE ports.

2018-01-09  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Missing notifications to player client
        https://bugs.webkit.org/show_bug.cgi?id=181432

        Reviewed by Carlos Garcia Campos.

        We now properly emit playback state changes and characteristic
        updates to the client when the pipeline state changes and when
        audio/video tracks changes are detected.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition const):
        This debug message appears too often in logs. Demote.
        (WebCore::MediaPlayerPrivateGStreamer::durationMediaTime const): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Emit
        charasteristicChanged notification.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Ditto.
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Keep track
        of old and current pipeline state.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:


2018-01-09  Youenn Fablet  <youenn@apple.com>

        Add CSP support to service workers
        https://bugs.webkit.org/show_bug.cgi?id=181385

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        Added recovery of CSP information from WorkerScriptLoader.
        Added plumbing to pass the CSP information to Service Workers.
        Did not add persistency support for the CSP information as this requires changing the SQL database schema.
        This will be done in a follow-up.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::contentSecurityPolicy const):
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::v1RecordsTableSchema):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (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::m_contentSecurityPolicy):
        (WebCore::SWServerWorker::contextData const):
        * workers/service/server/SWServerWorker.h:

2018-01-09  Antoine Quint  <graouts@apple.com>

        Provide a method to obtain a CSS value from a RenderStyle by CSSPropertyID
        https://bugs.webkit.org/show_bug.cgi?id=181429

        Reviewed by Antti Koivisto.

        The KeyframeEffect.getKeyframes() method from Web Animations requires that we return all styles applied at a given
        animation effect keyframe. When we parse keyframes, we create RenderStyle objects that are stored in a KeyframeList,
        as well as a list of CSSPropertyIDs that are animated. In order to provide the list of animated properties and their
        values when calling getKeyframes(), we need to be able to read back from the RenderStyle we create. As a first step
        towards this goal, we factor some code in ComputedStyleExtractor::propertyValue() out into a new method
        ComputedStyleExtractor::valueForPropertyinStyle() which takes in an explicit RenderStyle.

        No test as this is simply refactoring that doesn't change or add behavior.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        (WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
        * css/CSSComputedStyleDeclaration.h:

2018-01-09  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not keep references to service worker jobs
        https://bugs.webkit.org/show_bug.cgi?id=181381

        Reviewed by Chris Dumez.

        Difficult to test determiniscally but corresponding crash log should no longer happen in debug builds.

        Stopped passing ServiceWorkerJob references from ServiceWorkerContainer (potentially in service worker thread) to SWClientConnection (main thread).
        Instead pass job identifiers and related data to the main thread.

        Minor refactoring to use ServiceWorkerJobIdentifier instead of ServiceWorkerJobDataIdentifier which contains more data than needed.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::postTaskForJob):
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        (WebCore::SWClientConnection::clearPendingJobs):
        (WebCore::SWClientConnection::finishedFetchingScript): Deleted.
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::resolveUnregistrationJob):
        (WebCore::SWServer::startScriptFetch):
        * workers/service/server/SWServer.h:

2018-01-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r224460): Text fields sometimes get "messed up"
        https://bugs.webkit.org/show_bug.cgi?id=181115

        Reviewed by Zalan Bujtas.

        Add the scroll position to paint offset before computing the clip rectangle. Before r224460, scroll position was
        substracted after the clip rectangle was computed.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::computeClipRect):

2018-01-09  Ali Juma  <ajuma@chromium.org>

        Implement VisualViewport API events
        https://bugs.webkit.org/show_bug.cgi?id=179386

        Reviewed by Frédéric Wang.

        Implement the events (resize and scroll) defined by the Visual Viewport API
        (https://wicg.github.io/visual-viewport/#events).

        This is behind the VisualViewportAPI experimental feature flag.

        In order to detect when events need to be fired, change the computation of
        Visual Viewport attributes to happen whenever the layout viewport is updated
        rather than only on-demand.

        Tests: fast/visual-viewport/resize-event-fired-window-resized.html
               fast/visual-viewport/resize-event-fired.html
               fast/visual-viewport/scroll-event-fired.html

        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        Add support for tracking resize event listeners.
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        (WebCore::DocumentEventQueue::enqueueOrDispatchScrollEvent):
        (WebCore::DocumentEventQueue::enqueueScrollEvent):
        Factored out of enqueueOrDispatchScrollEvent so that this logic can be reused
        for Visual Viewport scroll events.
        (WebCore::DocumentEventQueue::enqueueResizeEvent):
        (WebCore::DocumentEventQueue::pendingEventTimerFired):
        * dom/DocumentEventQueue.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayoutViewport):
        * page/VisualViewport.cpp:
        (WebCore::VisualViewport::addEventListener):
        (WebCore::layoutIfNonNull):
        (WebCore::VisualViewport::offsetLeft const):
        Remove attribute computation logic since this now happens during update().
        (WebCore::VisualViewport::offsetTop const): Ditto.
        (WebCore::VisualViewport::pageLeft const): Ditto.
        (WebCore::VisualViewport::pageTop const): Ditto.
        (WebCore::VisualViewport::width const): Ditto.
        (WebCore::VisualViewport::height const): Ditto.
        (WebCore::VisualViewport::scale const):
        (WebCore::VisualViewport::update):
        Added. Computes all of the Visual Viewport attributes and determines
        whether events need to be fired.
        (WebCore::VisualViewport::enqueueResizeEvent):
        (WebCore::VisualViewport::enqueueScrollEvent):
        (WebCore::getFrameViewAndLayoutIfNonNull): Deleted.
        * page/VisualViewport.h:

2018-01-09  Yacine Bandou  <yacine.bandou_ext@softathome.com>

        [EME] Add the CENC initData support in ClearKey CDM
        https://bugs.webkit.org/show_bug.cgi?id=180081

        Reviewed by Xabier Rodriguez-Calvar.

        Add the "cenc" initDataType support in ClearKey CDM.
        Parse the CENC initData and extract the KIDs by following the W3C spec
        https://www.w3.org/TR/eme-initdata-cenc/#common-system

        Tests: media/encrypted-media/clearKey/clearKey-message-cenc-event.html
               media/encrypted-media/clearKey/clearKey-message-cenc-event-mse.html

        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
        (WebCore::extractKeyidsLocationFromCencInitData):
        (WebCore::isCencInitData):
        (WebCore::extractKeyidsFromCencInitData):
        (WebCore::CDMPrivateClearKey::supportsInitDataType const):
        (WebCore::CDMPrivateClearKey::supportsInitData const):
        (WebCore::CDMInstanceClearKey::requestLicense):

2018-01-09  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Pass state values directly to Cairo operations
        https://bugs.webkit.org/show_bug.cgi?id=181389

        Reviewed by Carlos Garcia Campos.

        Instead of passing reference to the GraphicsContextState object to
        various Cairo operations, only pass the required state values. This
        makes it explicit what state values are used in these operations, at the
        expense of some long parameter lists, but this will be better addressed
        by future refactoring of this code into more concise functions.

        No new tests -- no change in functionality.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::dashedLineCornerWidthForStrokeWidth):
        (WebCore::Cairo::dashedLinePatternWidthForStrokeWidth):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::drawRect):
        (WebCore::Cairo::drawLine):
        (WebCore::Cairo::drawEllipse):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):

2018-01-09  Ryosuke Niwa  <rniwa@webkit.org>

        Release assert in addResourceTiming when a cache resource is requested during style recalc
        https://bugs.webkit.org/show_bug.cgi?id=181137
        <rdar://problem/35666574>

        Reviewed by Simon Fraser.

        Make the dispatching of resourcetimingbufferfull event asynchronous to avoid dispatching it
        synchronously during a style resolution when CachedResourceLoader::requestImage requests
        a previously loaded image.

        We now schedule a timer when the resource timing buffer becomes full, and dispatch the event
        when the timer fires. Meanwhile, we have a backup buffer to which additional resource timing
        entries would be added. Once the event is dispatched, we refill the buffer exposed to author
        scripts. When refilling the buffer results in it becoming full again, we keep repeating the
        process of firing resourcetimingbufferfull and re-filling the buffer until either we stop
        making progress (i.e. the script didn't increase the number of empty entires in the buffer)
        or the backup buffer (at the time we started this process) becomes empty.

        Also fixed a bug that we were firing resourcetimingbufferfull event when the last entry that
        fits within the buffer size was added instead of when an entry is being added to an already
        full buffer. To make this work, the patch introduces m_resourceTimingBufferFullFlag,
        representing the concept "resource timing buffer full" flag in the resource timing specification.

        Test: http/tests/performance/performance-resource-timing-resourcetimingbufferfull-crash.html

        * page/Performance.cpp:
        (WebCore::Performance::Performance):
        (WebCore::Performance::clearResourceTimings):
        (WebCore::Performance::setResourceTimingBufferSize):
        (WebCore::Performance::addResourceTiming):
        (WebCore::Performance::resourceTimingBufferFullTimerFired):
        * page/Performance.h:

2018-01-08  Chris Nardi  <csnardi1@gmail.com>

        ::first-letter incorrectly selects grapheme pairs
        https://bugs.webkit.org/show_bug.cgi?id=181315

        Reviewed by Darin Adler.

        Grapheme pairs were incorrectly selected by ::first-letter. This
        change fixes their selection.

        Tests: Updated fast/css/first-letter-punctuation.html and imported
        LayoutTests/imported/w3c/web-platform-tests/css/css-pseudo-4/first-letter-004.html

        * rendering/updating/RenderTreeBuilderFirstLetter.cpp:
        (WebCore::isPunctuationForFirstLetter):
        (WebCore::shouldSkipForFirstLetter):
        (WebCore::RenderTreeBuilder::FirstLetter::createRenderers):

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

        Special list-item counter starts from an incorrect number for ::before and ::after
        https://bugs.webkit.org/show_bug.cgi?id=181084

        Reviewed by Zalan Bujtas.

        Test: fast/css/counters/counter-list-item.html

        * Sources.txt: Removed CounterDirectives.cpp.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::counterToCSSValue): Updated for changes to the CounterDirectives struct.
        * css/StyleBuilderCustom.h:
        (WebCore::StyleBuilderCustom::applyInheritCounter): Ditto.
        (WebCore::StyleBuilderCustom::applyValueCounter): Ditto.

        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::parseValue): Call setExplicitValue(std::nullopt) instead
        of clearExplicitValue since we are using std::optional now.

        * rendering/RenderCounter.cpp:
        (WebCore::listItemCounterDirectives): Added. Computes the counter directives that
        express the effects on the list-item counter from list item and list elements.
        Used something as close to what the CSS 3 draft says as possible. This uses a
        negative increment when creating a list to counteract the positive increment done
        by a list element, except in the case of an unordered list. This is where the bug
        fix actually lies. Also fixed handling of reversed ordered lists at the same time.
        (WebCore::planCounter): Refactored to use the function above. Also changed the
        code to pay attention to both the counter directives and the implicit ones from
        list item and list elements, getting as close as possible to what the specification
        seems to call for.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::RenderListItem): Since we are using std::optional and no
        longer using bit fields, simplified the constructor for each list item.
        (WebCore::RenderListItem::calcValue const): Deleted.
        (WebCore::RenderListItem::updateValueNow const): Merged in all the code from the
        old calcValue function, but it is also simpler now since m_value is std::optional.
        (WebCore::RenderListItem::updateValue): Updated to use std::optional.
        (WebCore::RenderListItem::setExplicitValue): Ditto.
        (WebCore::RenderListItem::clearExplicitValue): Deleted.
        (WebCore::RenderListItem::updateListMarkerNumbers): Updated to use std::optional.
        (WebCore::RenderListItem::isInReversedOrderedList const): Added. This is used by
        the counter code so it can decrement instead of incrementing.

        * rendering/RenderListItem.h: Updated to use std::optional. Also marked functions
        final instead of override and initialized m_notInList after making it not be a
        bitfield any more.

        * rendering/style/CounterDirectives.cpp: Removed.
        * rendering/style/CounterDirectives.h: Removed most of the CounterDirectives
        class and replaced it with a struct with two std::optional. Added an addClamped
        function so the counter code can share it with the addIncrementValue function.
        If we want to make a faster version that doesn't use double, we can come back
        and do that. Also moved the == function to the header since the implementation
        is so trivial.

        * rendering/style/StyleAllInOne.cpp: Removed CounterDirectives.cpp.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Updated to
        use std::make_unique directly instead of using a clone function.

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Expose HTMLAttachmentElement.uniqueIdentifier to bindings
        https://bugs.webkit.org/show_bug.cgi?id=181420
        <rdar://problem/36365827>

        Reviewed by Alex Christensen.

        Add a new IDL definition for uniqueIdentifier on HTMLAttachmentElement. This allows clients to relate attachment
        elements in the DOM to _WKAttachments delivered via Objective-C SPI.

        Adjusted existing tests in WKAttachmentTests.

        * html/HTMLAttachmentElement.idl:

2018-01-08  Don Olmstead  <don.olmstead@sony.com>

        AccessibilityARIAGrid does not compile when accessibility is disabled
        https://bugs.webkit.org/show_bug.cgi?id=181418
        <rdar://problem/36365398>

        Reviewed by Chris Fleizach.

        No new tests. No change in behavior.

        * accessibility/AccessibilityARIAGrid.cpp:

2018-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r226532 and r226540.
        https://bugs.webkit.org/show_bug.cgi?id=181422

        jessie says basic browsing does not seem to work (Requested by
        alexchristensen on #webkit).

        Reverted changesets:

        "Add CSP support to service workers"
        https://bugs.webkit.org/show_bug.cgi?id=181385
        https://trac.webkit.org/changeset/226532

        "SWClientConnection should not keep references to service
        worker jobs"
        https://bugs.webkit.org/show_bug.cgi?id=181381
        https://trac.webkit.org/changeset/226540

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Expose file name and content type of WKAttachment
        https://bugs.webkit.org/show_bug.cgi?id=181390
        <rdar://problem/36336837>

        Reviewed by Tim Horton.

        Add new structs in AttachmentTypes.h and refactor HTMLAttachmentElement::requestData to requestInfo. See below
        for more details. Augmented existing API tests in WKAttachmentTests.

        * html/AttachmentTypes.h:

        Add a struct to represent a snapshot of information about an attachment element.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::requestInfo):
        (WebCore::HTMLAttachmentElement::requestData): Deleted.
        * html/HTMLAttachmentElement.h:

        Change requestData to requestInfo. Instead of fetching and delivering data via callback, requestInfo returns an
        AttachmentInfo.

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderAttachmentInfo::addLine):
        (WebCore::RenderAttachmentInfo::buildWrappedLines):
        (WebCore::RenderAttachmentInfo::buildSingleLine):
        (WebCore::RenderAttachmentInfo::RenderAttachmentInfo):
        (WebCore::RenderThemeIOS::attachmentBaseline const):
        (WebCore::paintAttachmentIcon):
        (WebCore::paintAttachmentText):
        (WebCore::paintAttachmentProgress):
        (WebCore::attachmentBorderPath):
        (WebCore::RenderThemeIOS::paintAttachment):
        (WebCore::AttachmentInfo::addLine): Deleted.
        (WebCore::AttachmentInfo::buildWrappedLines): Deleted.
        (WebCore::AttachmentInfo::buildSingleLine): Deleted.
        (WebCore::AttachmentInfo::AttachmentInfo): Deleted.

        Rename AttachmentInfo to RenderAttachmentInfo to resolve a name conflict with the new AttachmentInfo struct.

2018-01-08  Saam Barati  <sbarati@apple.com>

        Speculative build fix after r226600. We only use clflush on x86 and the `asm volatile` syntax is not available in the Windows build.

        No new tests because this is a build fix.

        * dom/Comment.cpp:
        (WebCore::Comment::clflushReadLength):

2018-01-08  Michael Saboff  <msaboff@apple.com>

        Add a DOM gadget for Spectre testing
        https://bugs.webkit.org/show_bug.cgi?id=181351

        Reviewed by Saam Barati.

        This change is used to test Spectre mitigations.

        Added a side data array to the Comment DOM node to test for Spectre issues in
        the DOM layer.  This additional functionality is disabled by default and must
        be enabled through the JSC option "enableSpectreGadgets".

        * dom/Comment.cpp:
        (WebCore::Comment::Comment):
        (WebCore::Comment::setReadLength):
        (WebCore::Comment::charCodeAt):
        (WebCore::Comment::clflushReadLength):
        * dom/Comment.h:
        * dom/Comment.idl:
        * page/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::spectreGadgetsEnabled const):
        * page/RuntimeEnabledFeatures.h:

2018-01-08  Said Abou-Hallawa  <sabouhallawa@apple.com>

        A canvas should not be tainted if it draws a data URL SVGImage with a <foreignObject>
        https://bugs.webkit.org/show_bug.cgi?id=180301

        Reviewed by Dean Jackson.

        Don't taint the canvas if it draws a data URL SVGImage with a <foreignObject>.
        There should not be a cross-origin data leak in this case.

        Tests: svg/as-image/svg-canvas-data-url-svg-with-feimage-not-tainted.html
               svg/as-image/svg-canvas-data-url-svg-with-foreign-object-not-tainted.html
               svg/as-image/svg-canvas-data-url-svg-with-image-not-tainted.html

        * html/ImageBitmap.cpp:
        (WebCore::taintsOrigin):
        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::wouldTaintOrigin):

2018-01-08  Don Olmstead  <don.olmstead@sony.com>

        Simplify platform checks in Graphics Context
        https://bugs.webkit.org/show_bug.cgi?id=181344

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::checkVaryingsPacking const):

2018-01-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move SVG addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181405
        <rdar://problem/36360476>

        Reviewed by Antti Koivisto.

        This is about moving the code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::addChild):
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::addChild):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::addChild):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChildToSVGContainer):
        (WebCore::RenderTreeBuilder::insertChildToSVGInline):
        (WebCore::RenderTreeBuilder::insertChildToSVGRoot):
        (WebCore::RenderTreeBuilder::insertChildToSVGText):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::SVGBuilder):
        * rendering/updating/RenderTreeBuilderSVG.cpp: Added.
        (WebCore::RenderTreeBuilder::SVG::SVG):
        (WebCore::RenderTreeBuilder::SVG::insertChild):
        * rendering/updating/RenderTreeBuilderSVG.h: Added.

2018-01-08  John Wilander  <wilander@apple.com>

        Storage Access API: Remove access for all frames under a page when the page is closed
        https://bugs.webkit.org/show_bug.cgi?id=181398
        <rdar://problem/36357879>

        Reviewed by Alex Christensen.

        No new tests. Discussed with Alex Christensen and we concluded that
        both a layout test and an API test would require a lot of work and
        we have existing tests for clearing out storage access for frames.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::removeStorageAccessForAllFramesOnPage):

2018-01-08  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r226385.

        The test introduced with this was a flaky since being added.

        Reverted changeset:

        "AX: when invert colors is on, double-invert certain media
        elements in UserAgentStyleSheet"
        https://bugs.webkit.org/show_bug.cgi?id=168447
        https://trac.webkit.org/changeset/226385

2018-01-08  Youenn Fablet  <youenn@apple.com>

        SWClientConnection should not keep references to service worker jobs
        https://bugs.webkit.org/show_bug.cgi?id=181381

        Reviewed by Chris Dumez.

        Difficult to test determiniscally but corresponding crash log should no longer happen in debug builds.

        Stopped passing ServiceWorkerJob references from ServiceWorkerContainer (potentially in service worker thread) to SWClientConnection (main thread).
        Instead pass job identifiers and related data to the main thread.

        Minor refactoring to use ServiceWorkerJobIdentifier instead of ServiceWorkerJobDataIdentifier which contains more data than needed.

        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::scheduleJob):
        (WebCore::SWClientConnection::failedFetchingScript):
        (WebCore::SWClientConnection::postTaskForJob):
        (WebCore::SWClientConnection::jobRejectedInServer):
        (WebCore::SWClientConnection::registrationJobResolvedInServer):
        (WebCore::SWClientConnection::unregistrationJobResolvedInServer):
        (WebCore::SWClientConnection::startScriptFetchForServer):
        (WebCore::SWClientConnection::clearPendingJobs):
        (WebCore::SWClientConnection::finishedFetchingScript): Deleted.
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::scheduleJob):
        (WebCore::ServiceWorkerContainer::startScriptFetchForJob):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        (WebCore::ServiceWorkerContainer::jobFailedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/server/SWServer.cpp:
        (WebCore::SWServer::rejectJob):
        (WebCore::SWServer::resolveRegistrationJob):
        (WebCore::SWServer::resolveUnregistrationJob):
        (WebCore::SWServer::startScriptFetch):
        * workers/service/server/SWServer.h:

2018-01-08  Wenson Hsieh  <wenson_hsieh@apple.com>

        Copying, pasting, and then deleting an attachment element breaks attachment data requests
        https://bugs.webkit.org/show_bug.cgi?id=181365
        <rdar://problem/36340647>

        Reviewed by Tim Horton.

        Currently, copying and pasting an attachment element within the same document and then deleting backwards to
        remove the pasted attachment element causes the original attachment element to be inaccessible via SPI. This is
        because there are now two different attachment elements with the same unique identifier, such that Document,
        which keeps a map of all unique attachment identifiers to attachment elements, will lose track of the original
        attachment element.

        To fix this, we ensure that attachment elements should always have unique identifiers when they are inserted
        into the document. We make several small adjustments to accomplish this:

        1.  First, refactor HTMLAttachmentElement's unique identifier so that it no longer depends on the value of the
            "webkitattachmentid" attribute, and is instead just a member of HTMLAttachmentElement that is not exposed to
            DOM bindings. This means setting and querying an attachment element's uniqueIdentifier can be done without
            triggering any side effects, such as layout or mutation events.

        2.  Next, make "webkitattachmentid" a temporary attribute similar to "webkitattachmentpath" and
            "webkitattachmentbloburl", so that it is added only when generating a markup fragment for editing, and
            removed upon deserialization.

        3.  Lastly, shift the responsibility of assigning a unique identifier to an attachment away from places where we
            create attachment elements, and instead have Document enforce this when an attachment element is inserted.

        Tests:  WKAttachmentTests.InsertAndRemoveDuplicateAttachment
                WKAttachmentTests.InsertDuplicateAttachmentAndUpdateData

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

        Assign the unique identifier of an attachment element that has been inserted. If the identifier already tracks
        an existing attachment element in the document or is missing, reassign the identifier to a new value.

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::createFragmentForImageAttachment):
        (WebCore::replaceRichContentWithAttachments):
        (WebCore::WebContentReader::readFilePaths):

        Remove calls to setUniqueIdentifier here, since Document will assign a unique identifier upon insertion.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendCustomAttributes):
        (WebCore::createFragmentFromMarkup):

        Set the attachment's unique identifier to the value of the "webkitattachmentid" attribute. When moving existing
        attachments around in the DOM without duplication, this ensures that the attachment will be removed and
        reinserted in the document without triggering removal and insertion client delegate methods.

        When pasting an attachment element that has the same identifier as an existing attachment, we let Document
        realize that the attachment identifier already exists, and reassign it to a unique value.

        * html/HTMLAttachmentElement.cpp:
        (WebCore::HTMLAttachmentElement::uniqueIdentifier const): Deleted.
        (WebCore::HTMLAttachmentElement::setUniqueIdentifier): Deleted.
        * html/HTMLAttachmentElement.h:

2018-01-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlockFlow addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181348
        <rdar://problem/36328117>

        Reviewed by Antti Koivisto.

        This is about moving the code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChildToRenderBlockFlow):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::blockFlowBuilder):
        * rendering/updating/RenderTreeBuilderBlockFlow.cpp: Added.
        (WebCore::RenderTreeBuilder::BlockFlow::BlockFlow):
        (WebCore::RenderTreeBuilder::BlockFlow::insertChild):
        * rendering/updating/RenderTreeBuilderBlockFlow.h: Added.

2018-01-08  Youenn Fablet  <youenn@apple.com>

        Add CSP support to service workers
        https://bugs.webkit.org/show_bug.cgi?id=181385

        Reviewed by Chris Dumez.

        Covered by rebased tests.

        Added recovery of CSP information from WorkerScriptLoader.
        Added plumbing to pass the CSP information to Service Workers.
        Added persistency support for the CSP information.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::loadAsynchronously):
        (WebCore::WorkerScriptLoader::didReceiveResponse):
        * workers/WorkerScriptLoader.h:
        (WebCore::WorkerScriptLoader::contentSecurityPolicy const):
        * workers/service/SWClientConnection.cpp:
        (WebCore::SWClientConnection::finishedFetchingScript):
        (WebCore::SWClientConnection::failedFetchingScript):
        * workers/service/SWClientConnection.h:
        * workers/service/ServiceWorkerContainer.cpp:
        (WebCore::ServiceWorkerContainer::addRegistration):
        (WebCore::ServiceWorkerContainer::jobFailedWithException):
        (WebCore::ServiceWorkerContainer::jobResolvedWithRegistration):
        (WebCore::ServiceWorkerContainer::jobFinishedLoadingScript):
        * workers/service/ServiceWorkerContainer.h:
        * workers/service/ServiceWorkerContextData.cpp:
        (WebCore::ServiceWorkerContextData::isolatedCopy const):
        * workers/service/ServiceWorkerContextData.h:
        (WebCore::ServiceWorkerContextData::encode const):
        (WebCore::ServiceWorkerContextData::decode):
        * workers/service/ServiceWorkerFetchResult.h:
        (WebCore::ServiceWorkerFetchResult::encode const):
        (WebCore::ServiceWorkerFetchResult::decode):
        * workers/service/ServiceWorkerGlobalScope.cpp:
        (WebCore::ServiceWorkerGlobalScope::create):
        * workers/service/ServiceWorkerGlobalScope.h:
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::notifyFinished):
        * workers/service/ServiceWorkerJobClient.h:
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        (WebCore::ServiceWorkerThread::createWorkerGlobalScope):
        * workers/service/server/RegistrationDatabase.cpp:
        (WebCore::v1RecordsTableSchema):
        (WebCore::RegistrationDatabase::openSQLiteDatabase):
        (WebCore::RegistrationDatabase::doPushChanges):
        (WebCore::RegistrationDatabase::importRecords):
        * workers/service/server/SWServer.cpp:
        (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::m_contentSecurityPolicy):
        (WebCore::SWServerWorker::contextData const):
        * workers/service/server/SWServerWorker.h:

2018-01-08  Youenn Fablet  <youenn@apple.com>

        Use no-cache fetch mode when loading main documents with location.reload()
        https://bugs.webkit.org/show_bug.cgi?id=181285

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        Start to translate cache policy used for navigation as FetchOptions::Cache.
        This allows ensuring service workers receive the right cache mode when intercepting navigation loads.
        To not change current navigation behavior, ReturnCacheDataElseLoad and ReturnCacheDataDontLoad still trigger default fetch cache mode.

        For Reload and ReloadExpiredOnly frame load types, using no-cache mode is more efficient than reload mode,
        as a conditional request will be sent if possible. This applies to location.reload which is consistent with other browsers.
        Keep reload mode for ReloadFromOrigin.

        * loader/DocumentLoader.cpp:
        (WebCore::toFetchOptionsCache):
        (WebCore::DocumentLoader::loadMainResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::reload):
        (WebCore::FrameLoader::defaultRequestCachingPolicy):
        (WebCore::FrameLoader::loadDifferentDocumentItem):
        * loader/NavigationScheduler.cpp:

2018-01-08  Youenn Fablet  <youenn@apple.com>

        Stop exposing fetch and extendable events to window
        https://bugs.webkit.org/show_bug.cgi?id=181325

        Reviewed by Chris Dumez.

        Covered by updated tests.

        Marked FetchEvent and ExtendableEvent as visible in ServiceWorker environments only.
        Moved related Internals testing routines to ServiceWorkerInternals.

        * testing/Internals.cpp:
        (WebCore::Internals::waitForFetchEventToFinish): Deleted.
        (WebCore::Internals::createBeingDispatchedFetchEvent): Deleted.
        * testing/Internals.h:
        * testing/Internals.idl:
        * testing/ServiceWorkerInternals.cpp:
        (WebCore::ServiceWorkerInternals::waitForFetchEventToFinish):
        (WebCore::ServiceWorkerInternals::createBeingDispatchedFetchEvent):
        * testing/ServiceWorkerInternals.h:
        * testing/ServiceWorkerInternals.idl:
        * workers/service/ExtendableEvent.idl:
        * workers/service/FetchEvent.idl:

2018-01-08  Antti Koivisto  <antti@apple.com>

        REGRESSION (r219145): Toggling layer borders on a static document no longer works immediately
        https://bugs.webkit.org/show_bug.cgi?id=176260
        <rdar://problem/34219966>

        Reviewed by Simon Fraser.

        Optimization reveled bugs in debug indicator painting.

        Test: compositing/debug-borders-dynamic.html

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateDebugIndicators):
        (WebCore::GraphicsLayerCA::updateDebugBorder): Deleted.

        - Rename to indicate this is not just about debug borders.
        - Trigger display so repaint counters get painted. This helper is only called when the indicators change.

        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):

        Ensure we do compositing update on debug border change even when there is no layout.

2018-01-08  Zalan Bujtas <zalan@apple.com>

        [RenderTreeBuilder] Move RenderInline addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181336
        <rdar://problem/36324693>

        Reviewed by Antti Koivisto.

        This is about moving the code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addChild):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::childBecameNonInline):
        (WebCore::nextContinuation): Deleted.
        (WebCore::RenderInline::continuationBefore): Deleted.
        (WebCore::newChildIsInline): Deleted.
        (WebCore::RenderInline::cloneAsContinuation const): Deleted.
        (WebCore::RenderInline::splitInlines): Deleted.
        (WebCore::RenderInline::splitFlow): Deleted.
        (WebCore::canUseAsParentForContinuation): Deleted.
        (WebCore::RenderInline::addChildToContinuation): Deleted.
        * rendering/RenderInline.h:
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChildToRenderInline):
        (WebCore::RenderTreeBuilder::insertChildToRenderInlineIgnoringContinuation):
        (WebCore::RenderTreeBuilder::splitFlow):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::inlineBuilder):
        * rendering/updating/RenderTreeBuilderInline.cpp: Added.
        (WebCore::canUseAsParentForContinuation):
        (WebCore::nextContinuation):
        (WebCore::continuationBefore):
        (WebCore::cloneAsContinuation):
        (WebCore::newChildIsInline):
        (WebCore::inFlowPositionedInlineAncestor):
        (WebCore::RenderTreeBuilder::Inline::Inline):
        (WebCore::RenderTreeBuilder::Inline::insertChild):
        (WebCore::RenderTreeBuilder::Inline::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Inline::insertChildIgnoringContinuation):
        (WebCore::RenderTreeBuilder::Inline::splitFlow):
        (WebCore::RenderTreeBuilder::Inline::splitInlines):
        * rendering/updating/RenderTreeBuilderInline.h: Added.

2018-01-08  Zalan Bujtas  <zalan@apple.com>

        [RenderTreeBuilder] Move RenderBlock addChild logic to RenderTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=181319
        <rdar://problem/36313464>

        Reviewed by Antti Koivisto.

        This is about moving the code, no cleanup and/or normalization (unfortunately it also means
        some temporary changes).  

        No change in functionality.

        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        (WebCore::RenderBlock::childBecameNonInline):
        (WebCore::RenderBlock::continuationBefore): Deleted.
        (WebCore::RenderBlock::addChildToContinuation): Deleted.
        (WebCore::getInlineRun): Deleted.
        (WebCore::RenderBlock::makeChildrenNonInline): Deleted.
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::markBoxForRelayoutAfterSplit): Deleted.
        (WebCore::RenderBox::splitAnonymousBoxesAroundChild): Deleted.
        * rendering/RenderBox.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::addChild):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::addChild):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/updating/RenderTreeBuilder.cpp:
        (WebCore::markBoxForRelayoutAfterSplit):
        (WebCore::getInlineRun):
        (WebCore::RenderTreeBuilder::RenderTreeBuilder):
        (WebCore::RenderTreeBuilder::insertChildToRenderBlock):
        (WebCore::RenderTreeBuilder::insertChildToRenderBlockIgnoringContinuation):
        (WebCore::RenderTreeBuilder::makeChildrenNonInline):
        (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
        * rendering/updating/RenderTreeBuilder.h:
        (WebCore::RenderTreeBuilder::blockBuilder):
        * rendering/updating/RenderTreeBuilderBlock.cpp: Added.
        (WebCore::continuationBefore):
        (WebCore::RenderTreeBuilder::Block::Block):
        (WebCore::RenderTreeBuilder::Block::insertChild):
        (WebCore::RenderTreeBuilder::Block::insertChildToContinuation):
        (WebCore::RenderTreeBuilder::Block::insertChildIgnoringContinuation):
        * rendering/updating/RenderTreeBuilderBlock.h: Added.
        
2018-01-08  Jeremy Jones  <jeremyj@apple.com>

        Standard controls sometimes say video is in pip when it isnt.
        https://bugs.webkit.org/show_bug.cgi?id=181095
        rdar://problem/36182687

        Reviewed by Eric Carlson.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::exitFullscreen):

2018-01-08  Jer Noble  <jer.noble@apple.com>

        REGRESSION: [iOS] ASSERTION FAILED: !node.isConnected() in WebCore::notifyNodeInsertedIntoDocument
        https://bugs.webkit.org/show_bug.cgi?id=181091

        Reviewed by Darin Adler.

        Move the work previously performed in insertedIntoAncestor() into didFinishInsertingNode().

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):

2018-01-08  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Use isolated fill and stroke source containers
        https://bugs.webkit.org/show_bug.cgi?id=181386

        Reviewed by Carlos Garcia Campos.

        Generate fill and stroke source objects upon invocation of various Cairo
        operations, initializing necessary data from the GraphicsContextState
        object.

        Cairo::FillSource and Cairo::StrokeSource structs are introduced, both
        being default-constructible as well as providing a constructor that
        accepts a GraphicsContextState object from which the appropriate
        resources are created.

        The FillSource and StrokeSource objects are then passed to
        PlatformContextCairo's prepareForFilling() and prepareForStroking()
        methods. Here the helper prepareCairoContextSource() function is now
        invoked with cairo_pattern_t objects as pattern or gradient sources, or
        the source color if neither cairo_pattern_t object is specified.

        The FillSource and StrokeSource constructors mimic the previous behavior
        of prepareCairoContextSource(). In case the source is a Pattern object,
        a cairo_pattern_t object is created from that. In case of FillSource,
        we also retrieve pattern size, transform and repetition information. In
        case the source os a Gradient object, we create a 'base' cairo_pattern_t
        object for a completely opaque alpha channel. Additionally, if the alpha
        value on the state is not 1, we create an alpha-adjusted cairo_pattern_t
        that is potentially used for any filling or stroking operation that has
        to preserve transparency. If neither Pattern or Gradient objects are set
        on the GraphicsContextState, we default to the current fill or stroke
        color.

        Overall, there's no change in behavior, this is simply a refactoring
        that enables us to construct Cairo objects for filling and stroking
        sources at the time of Cairo operation dispatch, instead of pulling down
        GraphicsContextState deeper into the Cairo-specific code.

        No new tests -- no change in functionality.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawPathShadow):
        (WebCore::Cairo::fillCurrentCairoPath):
        (WebCore::Cairo::FillSource::FillSource):
        (WebCore::Cairo::StrokeSource::StrokeSource):
        (WebCore::Cairo::fillRect):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::fillPath):
        (WebCore::Cairo::strokeRect):
        (WebCore::Cairo::strokePath):
        (WebCore::Cairo::drawGlyphs):
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::prepareCairoContextSource):
        (WebCore::PlatformContextCairo::prepareForFilling):
        (WebCore::PlatformContextCairo::prepareForStroking):
        (WebCore::PlatformContextCairo::clipForPatternFilling):
        * platform/graphics/cairo/PlatformContextCairo.h:

2018-01-08  Youenn Fablet  <youenn@apple.com>

        navigator.onLine does not work inside service workers
        https://bugs.webkit.org/show_bug.cgi?id=181079
        <rdar://problem/36178606>

        Reviewed by Darin Adler.

        Test: http/wpt/service-workers/online.https.html

        Added support for onLine by reusing a similar implementation as regular workers.
        Added ServiceWorkerInternals as an interface for an object exposed as self.internals in WTR.
        This object has currently one method to trigger change in the online/offline status.
        This allows writing a test for the onLine feature.

        Note that self.internals is inserted asynchronously after the script was evaluated.
        When writing a worker script using self.internals, one must make sure to use self.internals when initialized.
        online-worker.js for instance makes use of self.internals in a postMessage callback.

        * CMakeLists.txt:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WorkerScriptController.h:
        * dom/ScriptExecutionContext.h:
        * testing/ServiceWorkerInternals.cpp: Added.
        (WebCore::ServiceWorkerInternals::ServiceWorkerInternals):
        (WebCore::ServiceWorkerInternals::setOnline):
        * testing/ServiceWorkerInternals.h: Added.
        * testing/ServiceWorkerInternals.idl: Added.
        * testing/js/WebCoreTestSupport.cpp:
        (WebCoreTestSupport::setupNewlyCreateServiceWorker):
        * testing/js/WebCoreTestSupport.h:
        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::registerServiceWorkerThreadForInstall):
        (WebCore::SWContextManager::startedServiceWorker):
        * workers/service/context/SWContextManager.h:
        (WebCore::SWContextManager::setServiceWorkerCreationCallback):
        (WebCore::SWContextManager::workerByID):
        * workers/service/context/ServiceWorkerThread.cpp:
        (WebCore::ServiceWorkerThread::ServiceWorkerThread):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::~ServiceWorkerThreadProxy):
        (WebCore::ServiceWorkerThreadProxy::networkStateChanged):
        (WebCore::ServiceWorkerThreadProxy::notifyNetworkStateChange):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2018-01-08  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Contain shadow blur requirement state in a separate object
        https://bugs.webkit.org/show_bug.cgi?id=181380

        Reviewed by Carlos Garcia Campos.

        Instead of picking up the necessary state parameters from a
        GraphicsContextState object, store the necessary parameters in a helper
        ShadowBlurUsage struct. Mimicking the mustUseShadowBlur() function that
        is being removed, values of the shadow color, shadow blur, and shadow
        transform ignorance are stored there. Additionally, the required()
        method accepts a PlatformContextCairo object through which it can
        retrieve the current CTM and determine whether it's an identity, finally
        deciding whether shadow blur can or cannot be ignored.

        Goal of this change is to limit usage of GraphicsContextState directly
        in operations implemented inside the Cairo namespace. Instead, the
        state parameters should be passed directly, or an equivalent but limited
        state object should be constructed for invocation of such operations.

        This is likely only an intermediate solution. It's possible it will be
        replaced by a more complete shadow state struct that would be used for
        any operation that is required to draw shadows, if necessary.

        No new tests -- no change in functionality.

        * platform/graphics/cairo/CairoOperations.cpp:
        (WebCore::Cairo::drawGlyphsShadow):
        (WebCore::Cairo::ShadowBlurUsage::ShadowBlurUsage):
        (WebCore::Cairo::ShadowBlurUsage::required const):
        (WebCore::Cairo::fillRectWithRoundedHole):
        (WebCore::Cairo::drawGlyphs):
        (WebCore::Cairo::mustUseShadowBlur): Deleted.
        * platform/graphics/cairo/CairoOperations.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::FontCascade::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRectWithRoundedHole):

2018-01-08  Philippe Normand  <pnormand@igalia.com>

        [GStreamer][Soup] Remove dead getCreateOrReadBuffer code path
        https://bugs.webkit.org/show_bug.cgi?id=181376

        Reviewed by Carlos Garcia Campos.

        This code path is no longer used now that the GStreamer HTTP
        source element uses data coming directly from the network process.

        * SourcesGTK.txt:
        * SourcesWPE.txt:
        * loader/MediaResourceLoader.cpp:
        (WebCore::MediaResource::getOrCreateReadBuffer): Deleted.
        * loader/MediaResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        (WebCore::CachedRawResourceClient::finishedTimingForWorkerLoad):
        (WebCore::CachedRawResourceClient::getOrCreateReadBuffer): Deleted.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::getOrCreateReadBuffer): Deleted.
        * loader/soup/CachedRawResourceSoup.cpp: Removed.
        * loader/soup/SubresourceLoaderSoup.cpp: Removed.
        * platform/graphics/PlatformMediaResourceLoader.h:
        (WebCore::PlatformMediaResourceClient::loadFinished):
        (WebCore::PlatformMediaResourceClient::getOrCreateReadBuffer): Deleted.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (CachedResourceStreamingClient::getOrCreateReadBuffer): Deleted.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::getOrCreateReadBuffer): Deleted.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer):

2018-01-08  Zan Dobersek  <zdobersek@igalia.com> and Carlos Garcia Campos  <cgarcia@igalia.com>

        [GStreamer] use FastMalloc-based GstAllocator
        https://bugs.webkit.org/show_bug.cgi?id=165793

        Reviewed by Philippe Normand.

        Add GstAllocatorFastMalloc, a GstAllocator implementation using fast malloc. It's only used when fast malloc is
        enabled and can be disabled using an environment variable for debugging purposes.

        * platform/GStreamer.cmake:
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::initializeGStreamer):
        * platform/graphics/gstreamer/GstAllocatorFastMalloc.cpp: Added.
        (gstMemoryFastMallocNew):
        (gstAllocatorFastMallocAlloc):
        (gstAllocatorFastMallocFree):
        (gstAllocatorFastMallocMemMap):
        (gstAllocatorFastMallocMemUnmap):
        (gstAllocatorFastMallocMemCopy):
        (gstAllocatorFastMallocMemShare):
        (gstAllocatorFastMallocMemIsSpan):
        (gst_allocator_fast_malloc_class_init):
        (gst_allocator_fast_malloc_init):
        * platform/graphics/gstreamer/GstAllocatorFastMalloc.h: Added.

2018-01-07  Ms2ger  <Ms2ger@igalia.com>

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

        Reviewed by Darin Adler.

        Tests: imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-drawImage.html
               imported/w3c/web-platform-tests/2dcontext/imagebitmap/createImageBitmap-invalid-args.html

        * html/ImageBitmap.cpp:
        (WebCore::ImageBitmap::createPromise):

2018-01-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reduce the precision of "high" resolution time to 1ms
        https://bugs.webkit.org/show_bug.cgi?id=180910
        <rdar://problem/36085943>

        Reviewed by Saam Barati.

        Reduced the high prevision time's resolution to 1ms, the same precision as Date.now().

        Also fixed the bug in fillRTCStats that we weren't reducing the time resolution in RTCStats dictionaries.

        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
        (WebCore::fillRTCStats):
        * page/Performance.cpp:
        (WebCore::Performance::reduceTimeResolution):

2018-01-06  Simon Fraser  <simon.fraser@apple.com>

        Possible crash computing event regions
        https://bugs.webkit.org/show_bug.cgi?id=181368
        rdar://problem/34847081

        Reviewed by Zalan Bujtas.

        Don't trigger layout in Element::absoluteEventHandlerBounds(), since this can run arbirary script
        which might delete elements or re-enter Document::absoluteRegionForEventTargets().

        It's OK to not trigger layout, because if layout is dirty, the next layout will update event regions again.

        Add a LayoutDisallowedScope to check that Document::absoluteRegionForEventTargets() doesn't
        trigger layout, and move the check for LayoutDisallowedScope::isLayoutAllowed() from Document::updateLayout()
        to LayoutContext::layout(), since some layouts don't happen via the former (e.g. the one being removed here).

        The test checks that the assertion does not fire. I was not able to get a reliable test for any crash.

        Test: fast/events/event-handler-regions-layout.html

        * dom/Document.cpp:
        (WebCore::Document::updateLayout):
        (WebCore::Document::absoluteRegionForEventTargets):
        * dom/Element.cpp:
        (WebCore::Element::absoluteEventHandlerBounds):
        * page/LayoutContext.cpp:
        (WebCore::LayoutContext::layout):
        * rendering/LayoutDisallowedScope.h: Move the #ifdefs around to avoid defining the enum twice.
        (WebCore::LayoutDisallowedScope::LayoutDisallowedScope):
        (WebCore::LayoutDisallowedScope::isLayoutAllowed):

2018-01-06  Simon Fraser  <simon.fraser@apple.com>

        Crash under RenderLayer::scrollTo() with marquee
        https://bugs.webkit.org/show_bug.cgi?id=181349
        rdar://problem/36190168

        Reviewed by Zalan Bujtas.

        Don't call updateWidgetPositions() synchonously during RenderLayer scrolling, because it
        can run arbitrary script which may trigger destruction of this RenderLayer.

        Instead, queue up updateWidgetPositions() on a zero-delay timer.

        Under some circumstances this may allow a paint to occur before the widgets have been
        updated (which could be fixed with a more invasive change), but in practice I saw no
        painting issues with plug-ins or iframes inside overflow scroll, in WebKit or LegacyWebKit.

        Test: fast/scrolling/marquee-scroll-crash.html

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::updateWidgetPositions):
        (WebCore::FrameView::scheduleUpdateWidgetPositions):
        (WebCore::FrameView::updateWidgetPositionsTimerFired):
        * page/FrameView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo):

2018-01-05  Dean Jackson  <dino@apple.com>

        Accurately clip copyTexImage2D and copyTexSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=181356
        <rdar://problem/35083877>

        Reviewed by Eric Carlson.

        The code to make sure copyTexSubImage2D and copyTexImage2D will not try to read
        out of bounds had a bad bug introduced here:
        https://bugs.webkit.org/show_bug.cgi?id=51421

        With appropriate parameters, it would produce a rectangle with
        negative dimensions. Most GL drivers just ignored this, but some
        are not happy.

        Test: fast/canvas/webgl/copy-tex-image-and-sub-image-2d-bad-input.html

        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::clip2D): Reimplement this in a more sane manner, and use
        checked arithmetic while here.
        * html/canvas/WebGLRenderingContextBase.h:
        (WebCore::clip1D): Deleted.
        (WebCore::clip2D): Deleted.

2018-01-06  Antti Koivisto  <antti@apple.com>

        Use WeakPtr for RenderTreePosition::m_nextSibling
        https://bugs.webkit.org/show_bug.cgi?id=181363

        Reviewed by Zalan Bujtas.

        For safety. In most cases it is null and won't cause us to instantiate WeakReferences for
        many new objects.

        * rendering/updating/RenderTreePosition.cpp:
        (WebCore::RenderTreePosition::computeNextSibling):
        * rendering/updating/RenderTreePosition.h:
        (WebCore::RenderTreePosition::RenderTreePosition):
        (WebCore::RenderTreePosition::nextSibling const):

2018-01-05  David Kilzer  <ddkilzer@apple.com>

        Re-enable -Wcast-qual in WebCore for Apple ports
        <https://webkit.org/b/177895>
        <rdar://problem/34960830>

        Reviewed by Joseph Pecoraro.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Remove FIXME and add -Wcast-qual back to
        arguments.

        * crypto/mac/SerializedCryptoKeyWrapMac.mm:
        (WebCore::createAndStoreMasterKey):
        - Use checked_cf_cast<SecACLRef>().

        * editing/cocoa/DataDetection.mm:
        (WebCore::detectItemAtPositionWithRange):
        - Manually cast CFTypeRef to DDResultRef until
          DDResultGetTypeID() is available as SPI.

        * platform/gamepad/mac/HIDGamepad.cpp:
        (WebCore::HIDGamepad::initElementsFromArray):
        - Use checked_cf_cast<IOHIDElementRef>().

        * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
        (WebCore::MediaSampleAVFObjC::createImageSample):
        (WebCore::CMSampleBufferIsRandomAccess):
        (WebCore::CMSampleBufferIsNonDisplaying):
        (WebCore::MediaSampleAVFObjC::createNonDisplayingCopy const):
        - Use checked_cf_cast<CFMutableDictionaryRef>() and
          checked_cf_cast<CFDictionaryRef>().

        * platform/graphics/cocoa/IOSurface.h:
        (WebCore::IOSurface::asLayerContents):
        - Use reinterpret_cast<id>() to cast from IOSurfaceRef to id.

        * platform/graphics/cocoa/WebCoreDecompressionSession.mm:
        (WebCore::WebCoreDecompressionSession::getFirstVideoFrame):
        (WebCore::WebCoreDecompressionSession::automaticDequeue):
        (WebCore::WebCoreDecompressionSession::imageForTime):
        (WebCore::WebCoreDecompressionSession::getDecodeTime):
        (WebCore::WebCoreDecompressionSession::getPresentationTime):
        (WebCore::WebCoreDecompressionSession::getDuration):
        - Use checked_cf_cast<CMSampleBufferRef>().

        * platform/graphics/Font.h:
        (WebCore::Font::m_kernedCFStringAttributes):
        (WebCore::Font::m_nonKernedCFStringAttributes):
        - Change type from RetainPtr<CFDictionaryRef> to
          RetainPtr<CFMutableDictionaryRef> since that's what they are.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::Font::getCFStringAttributes const):
        - Replace local `mutableAttributes` variable with
          `attributesDictionary.get()` since it returns the correct type
          now.

        * platform/ios/wak/WAKView.mm:
        (-[WAKView _initWithViewRef:]):
        (_WAKCopyWrapper):
        * platform/ios/wak/WKView.mm:
        (_WKViewClearSuperview):
        (WKViewFirstChild):
        (WKViewNextSibling):
        - Use static_cast<WKViewRef>(const_cast<void*>()) to convert
          const void* variable to WKViewRef.

        * platform/mac/PasteboardMac.mm:
        (WebCore::flipImageSpec):
        (WebCore::setDragImageImpl):
        - Use const_cast<> to remove 'const' modifier from
          unsigned char pointers.  This regressed while -Wcast-qual was
          disabled for WebCore.

        * platform/mac/SSLKeyGeneratorMac.mm:
        (WebCore::signedPublicKeyAndChallengeString):
        - Use checked_cf_cast<SecACLRef>().

        * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.cpp:
        (WebCore::RealtimeIncomingVideoSourceCocoa::OnFrame):
        - Use checked_cf_cast<CFMutableDictionaryRef>().

        * platform/network/cf/SocketStreamHandleImplCFNet.cpp:
        (WebCore::copyCONNECTProxyResponse):
        - Use checked_cf_cast<CFHTTPMessageRef>().

        * platform/network/cocoa/ResourceResponseCocoa.mm:
        (WebCore::ResourceResponse::platformCertificateInfo const):
        - Use checked_cf_cast<SecTrustRef>().

        * platform/network/mac/CertificateInfoMac.mm:
        (WebCore::CertificateInfo::containsNonRootSHA1SignedCertificate const):
        (WebCore::CertificateInfo::dump const):
        - Use checked_cf_cast<SecCertificateRef>().

        * testing/cocoa/WebArchiveDumpSupport.mm:
        (WebCoreTestSupport::createCFURLResponseFromResponseData):
        - Use checked_cf_cast<>() for CFMutable* types.

2018-01-05  John Wilander  <wilander@apple.com>

        Storage Access API: Refactor to make naming accurate and explicit, simplify access table, and prepare for access removal for page
        https://bugs.webkit.org/show_bug.cgi?id=181357
        <rdar://problem/36331031>

        Reviewed by Alex Christensen.

        No new tests. The only changed functionality that isn't covered
        by existing tests is cross-origin iframes in the same partition
        should be handled as already having access. This cannot be
        tested in layout tests since they don't support subdomains.

        This change does the following:
        - Changes function and message names to reflect how this feature
          was eventually implemented, i.e. access per frame.
        - Makes it explicit that the UI process is only involved in
          granting storage access and not removing storage access.
          The latter is done directly by the web process.
        - Simplifies the network process' entry map since only needs to
          be able to give access to one domain in one frame at a time.
          Access goes away on frame navigation so there can only be one
          domain at a time per frame. Also, the map now uses pageIDs as
          main keys to prepare for efficient access removal for all
          frames under a page.
        - Fixes a bug in so that a cross-origin iframe with the same
          partition as the top frame correctly is handled as already
          having access.

        * platform/network/NetworkStorageSession.h:
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStoragePartition const):
            The only change here is the changed named of the call to
            NetworkStorageSession::hasStorageAccessForFrame().
        (WebCore::NetworkStorageSession::hasStorageAccessForFrame const):
        (WebCore::NetworkStorageSession::grantStorageAccessForFrame):
        (WebCore::NetworkStorageSession::removeStorageAccessForFrame):
        (WebCore::NetworkStorageSession::isStorageAccessGranted const): Deleted.
        (WebCore::NetworkStorageSession::setStorageAccessGranted): Deleted.
        (WebCore::NetworkStorageSession::removeStorageAccess): Deleted.

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

        Implement Cache API partitioning based on ClientOrigin
        https://bugs.webkit.org/show_bug.cgi?id=181240

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Previously, cache storage was partitioned according the origin of the client, represented as a String.
        We now partition according both client and top origins, represented as a ClientOrigin

        Minor refactoring to use more makePendingActivity.
        Added support for IPC serialization of ClientOrigin.
        Added SecurityOriginData::toString which is used by WebKit2 Cache Storage implementation.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::open):
        (WebCore::CacheStorageConnection::retrieveCaches):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::clearMemoryRepresentation):
        (WebCore::CacheStorageConnection::doOpen):
        (WebCore::CacheStorageConnection::doRetrieveCaches):
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::origin const):
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::DOMCacheStorage::open):
        (WebCore::DOMCacheStorage::remove):
        * Modules/cache/DOMCacheStorage.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * page/ClientOrigin.h:
        (WebCore::ClientOrigin::isolatedCopy const):
        (WebCore::ClientOrigin::encode const):
        (WebCore::ClientOrigin::decode):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::toString const):
        (WebCore::SecurityOriginData::debugString const): Deleted.
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::debugString const):
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):

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

        [Attachment Support] Add a way to write blob data to a file URL from the UI process
        https://bugs.webkit.org/show_bug.cgi?id=181236

        Reviewed by Brady Eidson.

        Add support for writing a blob to a designated file path. See comments below for more detail. No new tests, as
        there change in behavior yet. See part 2: https://bugs.webkit.org/show_bug.cgi?id=181199.

        * page/DragController.cpp:
        (WebCore::DragController::dragAttachmentElement):
        * platform/PromisedBlobInfo.h:

        Remove PromisedBlobData entirely. This was added with the premise of having the web process deliver blob data to
        the UI process. However, the new approach I'm taking just has the UI process tell the network process to write
        a blob to a given location, so a data structure to deliver blob data over IPC is no longer necessary.

        (WebCore::PromisedBlobData::hasData const): Deleted.
        (WebCore::PromisedBlobData::hasFile const): Deleted.
        (WebCore::PromisedBlobData::operator bool const): Deleted.
        (WebCore::PromisedBlobData::fulfills const): Deleted.
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::populateBlobsForFileWriting):

        Introduce a new helper to build a list of blob data for file writing.

        (WebCore::writeFilePathsOrDataBuffersToFile):

        Introduce a new static helper to write blob data (a list of file paths and data buffers) to a given file handle.
        Automatically closes the given file handle upon exit.

        (WebCore::BlobRegistryImpl::writeBlobsToTemporaryFiles):
        (WebCore::BlobRegistryImpl::writeBlobToFilePath):

        Pull out common logic in writeBlobsToTemporaryFiles and writeBlobToFilePath into helper methods (see above), and
        refactor both methods to use the helpers.

        * platform/network/BlobRegistryImpl.h:

2018-01-05  Alex Christensen  <achristensen@webkit.org>

        Forbid < and > in URL hosts
        https://bugs.webkit.org/show_bug.cgi?id=181308
        <rdar://problem/36012757>

        Reviewed by Tim Horton.

        https://url.spec.whatwg.org/#forbidden-host-code-point does not include these characters yet, but I think it should.
        Firefox fails to parse URLs with < or > in the host.  Chrome percent encodes them.  Safari needs to do something.
        The web platform tests are unclear on this case, and they will need to be updated with the specification.
        They do show a change in behavior, though.

        * platform/URLParser.cpp:
        Add < and > to the list of forbidden host code points.

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

        [MediaStream] Add Mac screen capture source
        https://bugs.webkit.org/show_bug.cgi?id=181333
        <rdar://problem/36323219>

        Reviewed by Dean Jackson.

        * SourcesCocoa.txt: Add ScreenDisplayCaptureSourceMac.mm.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/cocoa/CoreVideoSoftLink.cpp: Declare new constants used.
        * platform/cocoa/CoreVideoSoftLink.h:

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::displayReconfigurationCallBack): Call refreshCaptureDevices.
        (WebCore::DisplayCaptureManagerCocoa::~DisplayCaptureManagerCocoa): Unregister for display
        reconfiguration callbacks.
        (WebCore::DisplayCaptureManagerCocoa::captureDevices): Register for display reconfigrations.
        (WebCore::DisplayCaptureManagerCocoa::refreshCaptureDevices): Use CGActiveDisplayList to
        get list of active screens.
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID): Validate screen
        ID, return CaptureDevice.
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.h:

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::VideoCaptureSourceFactoryMac::createVideoCaptureSource): Deal with screen capture
        on macOS.

        Implement Mac screen capture with CGDisplayStream.
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h: Added.
        (WebCore::ScreenDisplayCaptureSourceMac::DisplaySurface::~DisplaySurface):
        (WebCore::ScreenDisplayCaptureSourceMac::DisplaySurface::operator=):
        (WebCore::ScreenDisplayCaptureSourceMac::DisplaySurface::ioSurface const):
        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm: Added.
        (WebCore::roundUpToMacroblockMultiple):
        (WebCore::ScreenDisplayCaptureSourceMac::updateDisplayID):
        (WebCore::ScreenDisplayCaptureSourceMac::create):
        (WebCore::ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac):
        (WebCore::ScreenDisplayCaptureSourceMac::~ScreenDisplayCaptureSourceMac):
        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream):
        (WebCore::ScreenDisplayCaptureSourceMac::startProducingData):
        (WebCore::ScreenDisplayCaptureSourceMac::stopProducingData):
        (WebCore::ScreenDisplayCaptureSourceMac::sampleBufferFromPixelBuffer):
        (WebCore::ScreenDisplayCaptureSourceMac::pixelBufferFromIOSurface):
        (WebCore::ScreenDisplayCaptureSourceMac::generateFrame):
        (WebCore::ScreenDisplayCaptureSourceMac::startDisplayStream):
        (WebCore::ScreenDisplayCaptureSourceMac::applySize):
        (WebCore::ScreenDisplayCaptureSourceMac::applyFrameRate):
        (WebCore::ScreenDisplayCaptureSourceMac::commitConfiguration):
        (WebCore::ScreenDisplayCaptureSourceMac::displayWasReconfigured):
        (WebCore::ScreenDisplayCaptureSourceMac::displayReconfigurationCallBack):
        (WebCore::ScreenDisplayCaptureSourceMac::frameAvailable):

2018-01-05  Don Olmstead  <don.olmstead@sony.com>

        [curl] Can't load file:// URL with a URL fragment identifier
        https://bugs.webkit.org/show_bug.cgi?id=181170

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * platform/network/curl/CurlRequest.cpp:
        (WebCore::CurlRequest::invokeDidReceiveResponseForFile):

2018-01-05  Don Olmstead  <don.olmstead@sony.com>

        TextCodec uses std::array but does not include it
        https://bugs.webkit.org/show_bug.cgi?id=181340

        Reviewed by Alex Christensen.

        No new tests. No change in behavior.

        * platform/text/TextCodec.h:

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

        SVGAnimatedListPropertyTearOff::synchronizeWrappersIfNeeded() should do nothing if the property is not animating
        https://bugs.webkit.org/show_bug.cgi?id=181316
        <rdar://problem/36147545>

        Reviewed by Simon Fraser.

        This is a speculative change to fix a crash which appeared after r226065.
        The crash is very intermittent and sometimes very hard to reproduce. The
        basic code analysis did not show how this crash can even happen.

        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues): For SVG property
        with two values, e.g. <SVGAngleValue, SVGMarkerOrientType>,  we need to
        detach the wrappers of the animated property if the animated values are
        going to change. This is similar to what we did in resetFromBaseValue().

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::synchronizeWrappersIfNeeded):

2018-01-05  Matt Lewis  <jlewis3@apple.com>

        Unreviewed, rolling out r226401.

        This caused timeouts on multiple platforms.

        Reverted changeset:

        "Implement Cache API partitioning based on ClientOrigin"
        https://bugs.webkit.org/show_bug.cgi?id=181240
        https://trac.webkit.org/changeset/226401

2018-01-05  Dan Bernstein  <mitz@apple.com>

        Fixed the build following AppKit API deprecations in a recent SDKs

        * platform/mac/PasteboardMac.mm:
        (WebCore::setDragImageImpl): Suppressed deprecation warnings.
        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint): Ditto.

2018-01-05  Joseph Pecoraro  <pecoraro@apple.com>

        ServiceWorkers: Enable UserTiming / ResourceTiming
        https://bugs.webkit.org/show_bug.cgi?id=181297
        <rdar://problem/36307306>

        Reviewed by Youenn Fablet.

        Tests: http/tests/workers/service/service-worker-resource-timing.https.html
               http/tests/workers/service/service-worker-user-timing.https.html

        * loader/ResourceTiming.cpp:
        (WebCore::ResourceTiming::ResourceTiming):
        We used to clear extra NetworkLoadMetrics data early on. However,
        for Workers we want to pass the complete NetworkLoadMetrics to
        the Worker so that a Worker inspector has access to it.

        * page/PerformanceResourceTiming.cpp:
        (WebCore::PerformanceResourceTiming::PerformanceResourceTiming):
        Instead move the clearing of extra data to here, when the NetworkLoadMetrics
        have finally settled into being used only for a performance entry.

2018-01-04  Philippe Normand  <pnormand@igalia.com>

        [EME][GStreamer] Fix wrong ifdef
        https://bugs.webkit.org/show_bug.cgi?id=181289

        Reviewed by Alex Christensen.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Remove the
        ENCRYPTED_MEDIA ifdef from the VIDEO_TRACK ifdef block. Both have
        nothing to do together.

2018-01-05  Fujii Hironori  <Hironori.Fujii@sony.com>

        [Cairo] Canvas: Path::clear should clear its transform
        https://bugs.webkit.org/show_bug.cgi?id=181320

        Reviewed by Carlos Garcia Campos.

        Path of Cairo port has its cairo context. Path::clear() didn't
        clear the transform matrix of the context.

        Test: fast/canvas/reset-scaling-by-height-change.html

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::clear): Reset the transform matrix of Path.

2018-01-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic
        https://bugs.webkit.org/show_bug.cgi?id=180770

        Reviewed by Joseph Pecoraro.

        No change in functionality.

        * html/HTMLCanvasElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createContext2d):
        (WebCore::HTMLCanvasElement::createContextWebGL):
        (WebCore::HTMLCanvasElement::createContextWebGPU):
        (WebCore::HTMLCanvasElement::createContextBitmapRenderer):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::setImageBuffer const):
        (WebCore::HTMLCanvasElement::addObserver): Deleted.
        (WebCore::HTMLCanvasElement::removeObserver): Deleted.
        (WebCore::HTMLCanvasElement::cssCanvasClients): Deleted.
        (WebCore::HTMLCanvasElement::notifyObserversCanvasChanged): Deleted.
        * html/OffscreenCanvas.h:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::create):
        * html/canvas/CanvasRenderingContext2DBase.h:
        * html/canvas/ImageBitmapRenderingContext.h:
        * html/canvas/ImageBitmapRenderingContext.cpp:
        (WebCore::ImageBitmapRenderingContext::create):
        * html/canvas/WebGL2RenderingContext.h:
        * html/canvas/WebGL2RenderingContext.cpp:
        (WebCore::WebGL2RenderingContext::create):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        * html/canvas/WebGLRenderingContextBase.h:
        * html/canvas/WebGLRenderingContextBase.cpp:
        (WebCore::WebGLRenderingContextBase::create):
        * html/canvas/WebGPURenderingContext.cpp:
        (WebCore::WebGPURenderingContext::create):
        Instead of adding didCreateCanvasRenderingContext calls at the construction sites of each
        context, we can make the constructors private and force the usage of static `create` functions.
        This way, we have access to the fully constructed object and have a guaranteed path for creation.

        * html/CanvasBase.h:
        * html/CanvasBase.cpp:
        (WebCore::CanvasBase::~CanvasBase):
        (WebCore::CanvasBase::renderingContext const):
        (WebCore::CanvasBase::addObserver):
        (WebCore::CanvasBase::removeObserver):
        (WebCore::CanvasBase::notifyObserversCanvasChanged):
        (WebCore::CanvasBase::notifyObserversCanvasResized):
        (WebCore::CanvasBase::notifyObserversCanvasDestroyed):
        (WebCore::CanvasBase::cssCanvasClients const):
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
        * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp:
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDestroyed):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized):
        (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged):
        * css/CSSCanvasValue.h:
        Move the CanvasObserver class to CanvasBase so that it can also be used for OffscreenCanvas.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemory):
        (WebCore::InspectorInstrumentation::recordCanvasAction):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrame):
        (WebCore::InspectorInstrumentation::didEnableExtension):
        (WebCore::InspectorInstrumentation::didCreateProgram):
        (WebCore::InspectorInstrumentation::willDeleteProgram):
        (WebCore::InspectorInstrumentation::isShaderProgramDisabled):
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvas):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvas): Deleted.
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::consoleStartRecordingCanvasImpl):
        (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl):
        (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl):
        (WebCore::InspectorInstrumentation::didChangeCanvasMemoryImpl):
        (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrameImpl):
        (WebCore::InspectorInstrumentation::didEnableExtensionImpl):
        (WebCore::InspectorInstrumentation::didCreateProgramImpl):
        (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl): Deleted.

        * inspector/agents/InspectorCanvasAgent.h:
        * inspector/agents/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::requestNode):
        (WebCore::InspectorCanvasAgent::requestContent):
        (WebCore::InspectorCanvasAgent::requestCSSCanvasClientNodes):
        (WebCore::contextAsScriptValue):
        (WebCore::InspectorCanvasAgent::resolveCanvasContext):
        (WebCore::InspectorCanvasAgent::startRecording):
        (WebCore::InspectorCanvasAgent::stopRecording):
        (WebCore::InspectorCanvasAgent::updateShader):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        (WebCore::InspectorCanvasAgent::didChangeCSSCanvasClientNodes):
        (WebCore::InspectorCanvasAgent::didCreateCanvasRenderingContext):
        (WebCore::InspectorCanvasAgent::didChangeCanvasMemory):
        (WebCore::InspectorCanvasAgent::recordCanvasAction):
        (WebCore::InspectorCanvasAgent::canvasDestroyed):
        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
        (WebCore::InspectorCanvasAgent::consoleStartRecordingCanvas):
        (WebCore::InspectorCanvasAgent::didEnableExtension):
        (WebCore::InspectorCanvasAgent::didCreateProgram):
        (WebCore::InspectorCanvasAgent::canvasRecordingTimerFired):
        (WebCore::InspectorCanvasAgent::clearCanvasData):
        (WebCore::InspectorCanvasAgent::unbindCanvas):
        (WebCore::InspectorCanvasAgent::findInspectorCanvas):
        (WebCore::InspectorCanvasAgent::unbindProgram):
        (WebCore::InspectorCanvasAgent::didCreateCSSCanvas): Deleted.

        * inspector/InspectorCanvas.h:
        * inspector/InspectorCanvas.cpp:
        (WebCore::InspectorCanvas::create):
        (WebCore::InspectorCanvas::InspectorCanvas):
        (WebCore::InspectorCanvas::canvasElement):
        (WebCore::InspectorCanvas::resetRecordingData):
        (WebCore::InspectorCanvas::recordAction):
        (WebCore::InspectorCanvas::buildObjectForCanvas):
        (WebCore::InspectorCanvas::getCanvasContentAsDataURL):
        (WebCore::InspectorCanvas::buildInitialState):
        (WebCore::InspectorCanvas::~InspectorCanvas): Deleted.

        * inspector/InspectorShaderProgram.h:
        * inspector/InspectorShaderProgram.cpp:
        (WebCore::InspectorShaderProgram::context const):

        * page/PageConsoleClient.cpp:
        (WebCore::PageConsoleClient::record):
        (WebCore::PageConsoleClient::recordEnd):

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::getCSSCanvasElement):
        (WebCore::Document::nameForCSSCanvasElement const):
        We have no reason to save the CSS canvas name for each InspectorCanvas object, so instead we
        can just query for the name based on the CanvasRenderingContext's HTMLCanvasElement (assuming
        it is not an OffscreenCanvas) when we need it.

2018-01-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement updated CSS3 Speech for 'speak' and 'speak-as' properties
        https://bugs.webkit.org/show_bug.cgi?id=180361

        Reviewed by Zalan Bujtas.

        Change speak -> speakAs, and allow a combination of properties.

        Tests: Updated accessibility/mac/css-speech-speak.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::speakAsProperty const):
        (WebCore::AccessibilityObject::speakProperty const): Deleted.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::speakAsProperty const):
        (WebCore::AccessibilityRenderObject::speakProperty const): Deleted.
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilitySpeechHint]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase baseAccessibilitySpeechHint]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::speakAsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ESpeakAs const):
        (WebCore::CSSPrimitiveValue::operator ESpeak const): Deleted.
        * css/CSSProperties.json:
        * css/StyleBuilderConverter.h:
        (WebCore::StyleBuilderConverter::convertSpeakAs):
        * css/parser/CSSParserFastPaths.cpp:
        (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):
        (WebCore::CSSParserFastPaths::isKeywordPropertyID):
        * css/parser/CSSPropertyParser.cpp:
        (WebCore::consumeSpeakAs):
        (WebCore::CSSPropertyParser::parseSingleValue):
        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::speakAs const):
        (WebCore::RenderStyle::setSpeakAs):
        (WebCore::RenderStyle::initialSpeakAs):
        (WebCore::RenderStyle::speak const): Deleted.
        (WebCore::RenderStyle::setSpeak): Deleted.
        (WebCore::RenderStyle::initialSpeak): Deleted.
        * rendering/style/RenderStyleConstants.h:
        (WebCore::operator| ):
        (WebCore::operator|= ):
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator== const):
        * rendering/style/StyleRareInheritedData.h:

2018-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: Capture Element Screenshot looks fuzzy
        https://bugs.webkit.org/show_bug.cgi?id=175734
        <rdar://problem/33803377>

        Reviewed by Joseph Pecoraro and Simon Fraser.

        Screenshots taken by Web Inspector were being downscaled from the
        internal size to the logical size, causing them to be blurry when
        later upscaled to the internal size.

        Replace ScaleBehavior { Scaled, Unscaled } with PreserveResolution { No, Yes }.
        This is a lot less confusing to read both inside ImageBuffer and at its use sites.

        Remove unused CoordinateSystem argument for ImageBuffer::toDataURL,
        and replace it with PreserveResolution. Plumb PreserveResolution into toCFData
        so that PreserveResolution::Yes will preserve the internal size of
        the image buffer, just as it does in other methods that take PreserveResolution.

        At the use site in InspectorPageAgent, always request PreserveResolution::Yes snapshots
        when taking an element screenshot. For now, keep using downscaled (smaller)
        snapshots when capturing canvas previews, as the previews are not full-size.

        Test: inspector/page/hidpi-snapshot-size.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::makePresentationCopy):
        (WebCore::HTMLCanvasElement::copiedImage const):
        * html/canvas/CanvasRenderingContext2DBase.cpp:
        (WebCore::CanvasRenderingContext2DBase::createPattern):
        * inspector/agents/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotNode):
        (WebCore::InspectorPageAgent::snapshotRect):
        * page/TextIndicator.cpp:
        (WebCore::takeSnapshot):
        * platform/DragImage.cpp:
        (WebCore::createDragImageFromSnapshot):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::sinkIntoImage):
        (WebCore::ImageBuffer::copyImage const):
        (WebCore::ImageBuffer::toDataURL const):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createBitmapImageAfterScalingIfNeeded):
        (WebCore::ImageBuffer::copyImage const):
        (WebCore::ImageBuffer::sinkIntoImage):
        (WebCore::ImageBuffer::toDataURL const):
        (WebCore::ImageBuffer::toData const):
        (WebCore::ImageBuffer::toCFData const):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL const):
        * platform/graphics/win/ImageBufferDirect2D.cpp:
        (WebCore::ImageBuffer::copyImage const):
        (WebCore::ImageBuffer::sinkIntoImage):
        (WebCore::ImageBuffer::toDataURL const):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):

2018-01-04  John Wilander  <wilander@apple.com>

        Storage Access API: Turn feature on by default in Settings.yaml
        https://bugs.webkit.org/show_bug.cgi?id=181298
        <rdar://problem/36302506>

        Reviewed by Brent Fulgham.

        No new tests. This is just a feature settings change.

        * page/Settings.yaml:

2018-01-04  Zalan Bujtas  <zalan@apple.com>

        WebContent process crashes while loading https://www.classicspecs.com
        https://bugs.webkit.org/show_bug.cgi?id=181290
        <rdar://problem/36225906>

        Reviewed by Simon Fraser.

        Floats can overhang multiple blocks (they are called intruding floats).
        Each block keeps track of such intruding floats. When an overhanging float box is destroyed,
        we need to deregister it from all those blocks. We do it by walking up the ancestor block chain
        and check if the parent (grandparent etc) block still contains this float. Once we find the topmost block, 
        we start deregistering it by traversing back on the descendant blocks.
        Normally we do it in RenderElement::takeChildInternal right before the box is getting detached.
        However in certain cases (like when the float's parent happens to be an anonymous wrapper)
        by the time we get to ::takeChildInternal the subtree is already detached and we can't access all the
        ancestors.
        This patch ensure that the floating box is still attached during de-registration. 

        Test: fast/block/float/crash-when-intruding-float-has-anonymous-parent-and-detach.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::removeFromParentAndDestroyCleaningUpAnonymousWrappers):

2018-01-04  Eric Carlson  <eric.carlson@apple.com>

        [MediaStream] Add Mock screen capture source
        https://bugs.webkit.org/show_bug.cgi?id=181291
        <rdar://problem/36298164>

        Reviewed by Dean Jackson.

        Tests:  http/tests/media/media-stream/get-display-media-prompt.html
                GetDisplayMediaTest.BasicPrompt
                GetDisplayMediaTest.Constraints

        * Modules/mediastream/MediaDevices.cpp:
        (WebCore::MediaDevices::MediaDevices): Add static_assert to ensure MediaDevices::DisplayCaptureSurfaceType
        and RealtimeMediaSourceSettings::DisplaySurfaceType values are equivalent.
        (WebCore::MediaDevices::getSupportedConstraints): Remove bogus code.
        * Modules/mediastream/MediaDevices.h: Add DisplayCaptureSurfaceType.
        * Modules/mediastream/MediaDevices.idl: Ditto.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::getSettings const): Add a FIXME.
        * Modules/mediastream/MediaStreamTrack.h: Add displaySurface and logicalSurface.

        * Modules/mediastream/MediaTrackSupportedConstraints.h: Remove displaySurface and logicalSurface.
        * Modules/mediastream/MediaTrackSupportedConstraints.idl:

        * SourcesCocoa.txt: Add DisplayCaptureManagerCocoa.cpp and DisplayCaptureSourceCocoa.cpp.

        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * platform/mediastream/CaptureDevice.h:
        (WebCore::CaptureDevice::encode const): Add.
        (WebCore::CaptureDevice::decode):

        * platform/mediastream/RealtimeMediaSourceCenter.cpp:
        (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices): Include display capture "devices".
        (WebCore::RealtimeMediaSourceCenter::validateRequestConstraints): Deal with display capture devices.
        (WebCore::RealtimeMediaSourceCenter::captureDeviceWithPersistentID): Ditto.
        * platform/mediastream/RealtimeMediaSourceCenter.h:

        * platform/mediastream/RealtimeMediaSourceSettings.h:
        (WebCore::RealtimeMediaSourceSettings::displaySurface const): Return a DisplaySurfaceType.
        (WebCore::RealtimeMediaSourceSettings::setDisplaySurface): Take a DisplaySurfaceType.

        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
        (WebCore::DisplayCaptureManagerCocoa::singleton):
        (WebCore::DisplayCaptureManagerCocoa::~DisplayCaptureManagerCocoa):
        (WebCore::DisplayCaptureManagerCocoa::captureDevices):
        (WebCore::DisplayCaptureManagerCocoa::screenCaptureDeviceWithPersistentID):
        (WebCore::DisplayCaptureManagerCocoa::captureDeviceWithPersistentID):
        * platform/mediastream/mac/DisplayCaptureManagerCocoa.h:

        * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp: Added.
        (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::~DisplayCaptureSourceCocoa):
        (WebCore::DisplayCaptureSourceCocoa::capabilities const):
        (WebCore::DisplayCaptureSourceCocoa::settings const):
        (WebCore::DisplayCaptureSourceCocoa::settingsDidChange):
        (WebCore::DisplayCaptureSourceCocoa::startProducingData):
        (WebCore::DisplayCaptureSourceCocoa::stopProducingData):
        (WebCore::DisplayCaptureSourceCocoa::elapsedTime):
        (WebCore::DisplayCaptureSourceCocoa::applyFrameRate):
        (WebCore::DisplayCaptureSourceCocoa::emitFrame):
        * platform/mediastream/mac/DisplayCaptureSourceCocoa.h:

        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
        (WebCore::RealtimeMediaSourceCenterMac::displayCaptureDeviceManager): New.
        * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:

        * platform/mock/MockRealtimeMediaSource.cpp:
        (WebCore::deviceMap): Add screen capture "devices".
        (WebCore::MockRealtimeMediaSource::displayDevices): New.
        * platform/mock/MockRealtimeMediaSource.h:

        * platform/mock/MockRealtimeMediaSourceCenter.cpp: Clean up includes.
        * platform/mock/MockRealtimeMediaSourceCenter.h:

        * platform/mock/MockRealtimeVideoSource.cpp:
        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource): Mock two screen devices.
        (WebCore::MockRealtimeVideoSource::updateSettings): Deal with mock screens.
        (WebCore::MockRealtimeVideoSource::initializeCapabilities): Ditto.
        (WebCore::MockRealtimeVideoSource::initializeSupportedConstraints): Ditto.
        (WebCore::MockRealtimeVideoSource::drawText): Ditto.
        (WebCore::MockRealtimeVideoSource::generateFrame): Ditto.
        * platform/mock/MockRealtimeVideoSource.h:
        (WebCore::MockRealtimeVideoSource::mockCamera const):
        (WebCore::MockRealtimeVideoSource::mockScreen const):

2018-01-04  Youenn Fablet  <youenn@apple.com>

        FetchResponse should set its internal response text encoding name
        https://bugs.webkit.org/show_bug.cgi?id=181284

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * Modules/fetch/FetchResponse.cpp:
        (WebCore::FetchResponse::create): Set response text encoding based on content type charset.

2018-01-04  John Wilander  <wilander@apple.com>

        Storage Access API: Remove JavaScript confirm() prompt from Document::requestStorageAccess()
        https://bugs.webkit.org/show_bug.cgi?id=181276
        <rdar://problem/36290463>

        Reviewed by Alex Christensen.

        No new tests. Existing test expectations updated.

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

2018-01-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Issues with Ahem's ex / x-height
        https://bugs.webkit.org/show_bug.cgi?id=180581

        Reviewed by Michael Catanzaro.

        Get the x-height value from the TT_OS2 table if available.

        Fixes: fast/text/break-word-pre-wrap.html
               imported/w3c/web-platform-tests/css/css-shapes-1/shape-outside/values/shape-outside-shape-arguments-000.html

        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::Font::platformInit):

2018-01-04  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix attempt after r226357

        * platform/graphics/gstreamer/GStreamerUtilities.h: The
        GST_BUFFER_DTS_OR_PTS macro was added in GStreamer 1.8 but old
        versions of Debian might not have this release yet.

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Implement Cache API partitioning based on ClientOrigin
        https://bugs.webkit.org/show_bug.cgi?id=181240

        Reviewed by Alex Christensen.

        Covered by updated tests.

        Previously, cache storage was partitioned according the origin of the client, represented as a String.
        We now partition according both client and top origins, represented as a ClientOrigin

        Minor refactoring to use more makePendingActivity.
        Added support for IPC serialization of ClientOrigin.
        Added SecurityOriginData::toString which is used by WebKit2 Cache Storage implementation.

        * Modules/cache/CacheStorageConnection.cpp:
        (WebCore::CacheStorageConnection::open):
        (WebCore::CacheStorageConnection::retrieveCaches):
        * Modules/cache/CacheStorageConnection.h:
        (WebCore::CacheStorageConnection::clearMemoryRepresentation):
        (WebCore::CacheStorageConnection::doOpen):
        (WebCore::CacheStorageConnection::doRetrieveCaches):
        * Modules/cache/DOMCacheStorage.cpp:
        (WebCore::DOMCacheStorage::origin const):
        (WebCore::DOMCacheStorage::retrieveCaches):
        (WebCore::DOMCacheStorage::open):
        (WebCore::DOMCacheStorage::remove):
        * Modules/cache/DOMCacheStorage.h:
        * Modules/cache/WorkerCacheStorageConnection.cpp:
        (WebCore::WorkerCacheStorageConnection::doOpen):
        (WebCore::WorkerCacheStorageConnection::doRetrieveCaches):
        * Modules/cache/WorkerCacheStorageConnection.h:
        * page/ClientOrigin.h:
        (WebCore::ClientOrigin::isolatedCopy const):
        (WebCore::ClientOrigin::encode const):
        (WebCore::ClientOrigin::decode):
        * page/SecurityOriginData.cpp:
        (WebCore::SecurityOriginData::toString const):
        (WebCore::SecurityOriginData::debugString const): Deleted.
        * page/SecurityOriginData.h:
        (WebCore::SecurityOriginData::debugString const):
        * testing/Internals.cpp:
        (WebCore::Internals::clearCacheStorageMemoryRepresentation):

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Service Worker should expose redirect mode for navigation loads as manual
        https://bugs.webkit.org/show_bug.cgi?id=181067

        Reviewed by Alex Christensen.

        Covered by rebased tests.

        * loader/CrossOriginAccessControl.cpp: Removing ContentType header only if affecting CORS checks.
        This allows extending header filtering in service worker to all modes, including Navigate.
        * workers/service/context/ServiceWorkerFetch.cpp:
        (WebCore::ServiceWorkerFetch::dispatchFetchEvent): Ideally, document loading code should set redirect to manual.
        Since it is not the case yet and that would require changes to various places, manual is set before exposing the corresponding fetch event.

2018-01-04  Youenn Fablet  <youenn@apple.com>

        ServiceWorkerThreadProxy::postTaskForModeToWorkerGlobalScope should be a no-op if worker is being terminated
        https://bugs.webkit.org/show_bug.cgi?id=181245

        Reviewed by Alex Christensen.

        Stop appending tasks to a terminating worker and returning false in that case.
        This mirrors what is done for regular workers.

        * workers/service/context/SWContextManager.cpp:
        (WebCore::SWContextManager::terminateWorker):
        * workers/service/context/ServiceWorkerThreadProxy.cpp:
        (WebCore::ServiceWorkerThreadProxy::postTaskForModeToWorkerGlobalScope):
        * workers/service/context/ServiceWorkerThreadProxy.h:

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Cancel pending script loads when service worker is being terminated
        https://bugs.webkit.org/show_bug.cgi?id=181250

        Reviewed by Alex Christensen.

        Covered by service worker tests no longer crashing in ASAN builds.

        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::notifyFinished): Clearing loader when finished.
        (WebCore::WorkerScriptLoader::cancel): Implementing cancel of a script loader by cancelling the underlying threadable loader.
        * workers/WorkerScriptLoader.h:
        * workers/service/ServiceWorkerContainer.cpp: Canceling loads of all pending jobs.
        (WebCore::ServiceWorkerContainer::stop):
        * workers/service/ServiceWorkerJob.cpp:
        (WebCore::ServiceWorkerJob::cancelPendingLoad):
        * workers/service/ServiceWorkerJob.h:

2018-01-04  Youenn Fablet  <youenn@apple.com>

        Implement  https://fetch.spec.whatwg.org/#main-fetch default referrer policy setting
        https://bugs.webkit.org/show_bug.cgi?id=181239

        Reviewed by Alex Christensen.

        Covered by updated and rebased test.

        Setting the request referrer policy to the Document referrer policy if no one is set.
        If Document has no referrer policy, use no-referrer-when-downgrade as per the spec.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
        (WebCore::CachedResourceLoader::requestResource):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedResourceRequest.cpp:
        (WebCore::CachedResourceRequest::updateReferrerPolicy):
        (WebCore::CachedResourceRequest::updateReferrerOriginAndUserAgentHeaders):
        * loader/cache/CachedResourceRequest.h:

2018-01-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Create attachment elements when dropping files on iOS
        https://bugs.webkit.org/show_bug.cgi?id=181192
        <rdar://problem/36280945>

        Reviewed by Tim Horton.

        Implements support for dropping data as attachment elements on iOS. See comments below for more detail.

        Tests:  WKAttachmentTests.InsertDroppedRichAndPlainTextFilesAsAttachments
                WKAttachmentTests.InsertDroppedZipArchiveAsAttachment
                WKAttachmentTests.InsertDroppedItemProvidersInOrder

        * WebCore.xcodeproj/project.pbxproj:
        * editing/WebContentReader.cpp:
        (WebCore::WebContentReader::ensureFragment):

        Add a new helper to create the WebContentReader's fragment, if it hasn't already been created.

        * editing/WebContentReader.h:
        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::WebContentReader::readFilePaths):

        Rename readFilenames to readFilePaths (which better reflects its parameters, which are file paths). Also, move
        the implementation of readFilePaths to shared iOS/macOS code in WebContentReaderCocoa, and remove the stub
        implementation on iOS.

        There's a bit of code here that I kept macOS-only which deals with inserting file paths as plain text in
        editable areas, but it's unclear to me why and if WebKit clients currently find this useful, so I left a FIXME
        to investigate removing this altogether. Code for handling this plain text insertion of file paths on Mac was
        introduced in r67403.

        * editing/ios/WebContentReaderIOS.mm:
        (WebCore::WebContentReader::readFilenames): Deleted.
        * editing/mac/WebContentReaderMac.mm:
        (WebCore::WebContentReader::readFilenames): Deleted.
        * page/mac/DragControllerMac.mm:
        (WebCore::DragController::updateSupportedTypeIdentifiersForDragHandlingMethod const):

        Teach DragController to accept all types conforming to "public.item" and "public.content" on iOS, only when
        attachment elements are enabled. This allows us to load content from item providers that we otherwise would not
        have loaded, since we now have the ability to fall back to attachment element insertion if the type is not have
        a default representation using standard web content.

        * platform/Pasteboard.h:
        * platform/PasteboardItemInfo.h: Added.
        (WebCore::PasteboardItemInfo::encode const):
        (WebCore::PasteboardItemInfo::decode):

        Add PasteboardItemInfo, a struct that describes an item on the pasteboard. Also, implement encoding and decoding
        support for PasteboardItemInfo. So far, the item info only describes file information about the pasteboard item,
        and flags indicating whether the item prefers attachment or inline presentation.

        * platform/PasteboardStrategy.h:

        Replace getFilenamesForDataInteraction with informationForItemAtIndex. Instead of returning all of the file
        paths associated with any item on the pasteboard, fetch a PasteboardItemInfo at a given item index, which
        includes information about the file path as well as some other metadata we'll need when deciding how to read
        pasteboard contents as a document fragment.

        * platform/PlatformPasteboard.h:
        * platform/cocoa/PasteboardCocoa.mm:
        (WebCore::Pasteboard::read):
        * platform/ios/AbstractPasteboard.h:
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readRespectingUTIFidelities):

        Teach the iOS Pasteboard to read web content using attachment elements, if enabled. There are two scenarios in
        which we would want to insert an attachment element:
        (1) The item provider uses a preferred presentation style of attachment, in which case we bail out of trying to
            handle the drop using the default mechanisms, and simply insert it as an attachment. We need this to deal
            with the case where we drop text or HTML files from the Files app, so that we don't try and insert the
            contents of the text or HTML as inline web content.
        (2) The item provider doesn't have a preferred attachment presentation style, but there's nothing WebKit would
            otherwise do with the dropped content, so insert an attachment element as a fallback. Examples where this is
            relevant are dropping a PDF or ZIP archive without attachment presentation style explicitly set.
        We first check if we fall into case (1). If so, we can bail early by inserting an attachment; otherwise, we
        proceed normally and see if we can read the contents of the drop as web content. If, at the end of default drop
        handling, we don't still have a way to represent the dropped content, enter case (2).

        (WebCore::Pasteboard::readFilePaths):
        (WebCore::Pasteboard::readFilenames): Deleted.

        Rename readFilenames to readFilePaths, and reimplement it using informationForItemAtIndex.

        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::pasteboardItemPresentationStyle):
        (WebCore::PlatformPasteboard::informationForItemAtIndex):
        (WebCore::PlatformPasteboard::filenamesForDataInteraction): Deleted.

        Implement informationForItemAtIndex and remove filenamesForDataInteraction. As before, we ask the pasteboard
        (i.e. WebItemProviderPasteboard) for information about dropped file URLs. This time, we limit this to a single
        file, so we don't end up creating multiple attachment elements for each representation of a single item
        provider. See below for -preferredFileUploadURLAtIndex:fileType: for more detail.

        * platform/ios/WebItemProviderPasteboard.h:
        * platform/ios/WebItemProviderPasteboard.mm:
        (-[WebItemProviderLoadResult initWithItemProvider:typesToLoad:]):
        (-[WebItemProviderLoadResult canBeRepresentedAsFileUpload]):

        Remove this synthesized instance variable and instead just check the item provider's preferredPresentationStyle.

        (-[WebItemProviderLoadResult description]):

        Add a verbose -description to the load result object. Useful for debugging what was content was loaded from an
        item provider on drop.

        (-[WebItemProviderPasteboard preferredFileUploadURLAtIndex:fileType:]):

        Return the highest fidelity loaded type identifier for a given item.

        (-[WebItemProviderPasteboard allDroppedFileURLs]):
        (-[WebItemProviderPasteboard typeIdentifiersToLoadForRegisteredTypeIdentfiers:]):

        Prefer flat RTFD to RTFD. In the case where attachments are enabled and we're accepting all types of content
        using attachment elements as a fallback representation, if the source writes attributed strings to the
        pasteboard with com.apple.rtfd at a higher fidelity than com.apple.flat-rtfd, we'll end up loading only
        com.apple.rtfd and dropping the text as an attachment element because we cannot convert the dropped content to
        markup. Instead, if flat RTFD is present in the item provider, always prefer that over RTFD so that dropping as
        regular web content isn't overridden when attachment elements are enabled.

        (-[WebItemProviderPasteboard doAfterLoadingProvidedContentIntoFileURLs:synchronousTimeout:]):
        (-[WebItemProviderPasteboard droppedFileURLs]): Deleted.
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsCompatibleContent const):

        DragData::containsCompatibleContent should be true when attachment elements are enabled, and there are files we
        can drop as attachment elements.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::read):
        (WebCore::Pasteboard::readFilePaths):
        (WebCore::Pasteboard::readFilenames): Deleted.

2018-01-03  Ting-Wei Lan  <lantw44@gmail.com>

        Replace hard-coded paths in shebangs with #!/usr/bin/env
        https://bugs.webkit.org/show_bug.cgi?id=181040

        Reviewed by Alex Christensen.

        * bindings/scripts/InFilesCompiler.pm:
        * bindings/scripts/InFilesParser.pm:
        * bindings/scripts/generate-bindings-all.pl:
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/preprocess-idls.pl:
        * css/make-css-file-arrays.pl:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * dom/make_event_factory.pl:
        * dom/make_names.pl:
        * extract-localizable-strings.pl:
        * make-hash-tools.pl:

2018-01-03  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Add plumbing for starting a drag with promised blob data
        https://bugs.webkit.org/show_bug.cgi?id=181201

        Reviewed by Tim Horton.

        Adds logic to allow dragging an attachment element as a file by sending promised blob information to the UI
        process. See comments below for more detail.

        The only change in behavior is that dragging an attachment element will no longer write web content and injected
        bundle data to the pasteboard if the attachment element's file attribute is nonnull. This will cause one
        existing WK1 layout test to fail, but will otherwise not affect any attachment editing clients. On iOS,
        attachment elements in the Mail viewer can be dragged, but each attachment's file is null, so we fall back to
        current behavior; on macOS, Mail currently overrides the drag completely, beginning at -mouseDown:, so this
        doesn't make a difference to macOS Mail either.

        * editing/Editor.h:
        * editing/cocoa/EditorCocoa.mm:
        (WebCore::Editor::getPasteboardTypesAndDataForAttachment):

        Add a helper method to retrieve an attachment element as web archive data, for moving attachments within the
        same document. Also gives the injected editor bundle a chance to supply custom pasteboard types.

        * loader/EmptyClients.cpp:
        * page/DragClient.h:
        (WebCore::DragClient::prepareToDragPromisedBlob):

        Add new DragClient methods to send information about a promised blob to the UI process.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag):

        Call dragAttachmentElement when starting a drag on an attachment element.

        (WebCore::DragController::dragAttachmentElement):

        Try to begin dragging a given attachment element, propagating promised blob information to the client layers.
        Returns true iff the attachment is backed by blob data (i.e. the file is nonnull).

        * platform/PromisedBlobInfo.h:

        Add a list of additional types and data to PromisedBlobInfo. In addition to the promised blob info, this would
        allow injected bundle data and other private types alongside the main attachment data on the pasteboard.

2018-01-03  Simon Fraser  <simon.fraser@apple.com>

        Remove the 'resolutionScale' parameter from ImageBufferDataCG get/putBytes
        https://bugs.webkit.org/show_bug.cgi?id=181268

        Reviewed by Alex Christensen.

        These functions were always called with resolutionScale=1.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData const):
        (WebCore::ImageBuffer::getPremultipliedImageData const):
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData const):
        (WebCore::ImageBufferData::putData):
        (WebCore::affineWarpBufferData): Deleted.
        * platform/graphics/cg/ImageBufferDataCG.h:

2018-01-03  John Wilander  <wilander@apple.com>

        Storage Access API: Refactor XPC for access removal to go straight from the web process to the network process
        https://bugs.webkit.org/show_bug.cgi?id=181270
        <rdar://problem/36289544>

        Reviewed by Alex Christensen.

        No new tests. Existing test re-enabled.

        This change refactors how the web process tells the network process
        to remove storage access. Previously, this was done over the UI process
        just like requests for storage access. But since no further reasoning
        is needed, the message should go straight from the web process to the
        network process for performance reasons and to minimize the risk of a
        race.

        As a consequence, the XPC code for storage access removal in the UI
        process is deleted.

        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::NetworkStorageSession::cookieStoragePartition const):
            Removes the storageAccessAPIEnabled check since the flag
            doesn't get propagated when the network process is created.
            Figuring this out will take some work which is unnecessary
            when we already gate access to the feature in Document.idl.

2018-01-03  James Craig  <jcraig@apple.com>

        AX: when invert colors is on, double-invert certain media elements in UserAgentStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=168447
        <rdar://problem/30559874>

        Reviewed by Simon Fraser.

        Double-invert video when platform 'invert colors' setting is enabled. Behavior matches 
        current 'Smart Invert' feature of Safari Reader on macOS/iOS and other iOS native apps.

        Tests: accessibility/smart-invert-reference.html
               accessibility/smart-invert.html

        * Modules/modern-media-controls/controls/media-controls.css:
        (@media (inverted-colors)):
        (:host):
        (picture):
        * css/html.css:
        (@media (inverted-colors)):
        (video):

2018-01-03  Youenn Fablet  <youenn@apple.com>

        LayoutTest http/tests/media/media-stream/disconnected-frame.html to consistently fail an assertion: !m_adoptionIsRequired
        https://bugs.webkit.org/show_bug.cgi?id=181264

        Reviewed by Eric Carlson.

        Covered by http/tests/media/media-stream/disconnected-frame.html not crashing anymore in Debug builds.
        Calling suspendIfNeeded in create method instead of constructor.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::create):
        (WebCore::UserMediaRequest::UserMediaRequest):

2018-01-03  Antti Koivisto  <antti@apple.com>

        Remove DeprecatedCSSOMValue::equals
        https://bugs.webkit.org/show_bug.cgi?id=181241

        Reviewed by Zalan Bujtas.

        This is dead code.

        * css/DeprecatedCSSOMValue.cpp:
        (WebCore::compareCSSOMValues): Deleted.
        (WebCore::DeprecatedCSSOMValue::equals const): Deleted.
        * css/DeprecatedCSSOMValue.h:
        (WebCore::DeprecatedCSSOMValue::operator== const): Deleted.
        (WebCore::DeprecatedCSSOMComplexValue::equals const): Deleted.
        * css/DeprecatedCSSOMValueList.cpp:
        (WebCore::DeprecatedCSSOMValueList::equals const): Deleted.
        * css/DeprecatedCSSOMValueList.h:

2018-01-03  Simon Fraser  <simon.fraser@apple.com>

        feLighting is broken with primitiveUnits="objectBoundingBox"
        https://bugs.webkit.org/show_bug.cgi?id=181197

        Reviewed by Tim Horton.

        With <filter primitiveUnits="objectBoundingBox"> we need to convert the coordinates
        of fePointLights and feSpotLights into user space coordinates. Following
        https://www.w3.org/TR/SVG/filters.html#FilterElementPrimitiveUnitsAttribute
        this is done by treating them as fractions of the bounding box on the referencing
        element, with treatment for z following https://www.w3.org/TR/SVG/coords.html#Units_viewport_percentage
        
        To do this, store the bounds of the referencing elemenet on SVGFilterBuilder as
        targetBoundingBox, and store the primitiveUnits type. Then do the conversion of lighting
        coordinates in SVGFESpecularLightingElement::build() and SVGFEDiffuseLightingElement::build().

        Remove SVGFELightElement::findLightSource(), since we need to be able to pass the SVGFilterBuilder
        to the lightSource() function so hoist the code up.

        Tests: svg/filters/feDiffuseLighting-fePointLight-primitiveUnits-objectBoundingBox-expected.svg
               svg/filters/feDiffuseLighting-fePointLight-primitiveUnits-objectBoundingBox.svg
               svg/filters/feDiffuseLighting-feSpotLight-primitiveUnits-objectBoundingBox-expected.svg
               svg/filters/feDiffuseLighting-feSpotLight-primitiveUnits-objectBoundingBox.svg
               svg/filters/feSpecularLighting-fePointLight-primitiveUnits-objectBoundingBox-expected.svg
               svg/filters/feSpecularLighting-fePointLight-primitiveUnits-objectBoundingBox.svg

        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::lightSource const):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::findLightSource): Deleted.
        * svg/SVGFELightElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::lightSource const):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::lightSource const):
        * svg/SVGFESpotLightElement.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::setTargetBoundingBox):
        (WebCore::SVGFilterBuilder::targetBoundingBox const):
        (WebCore::SVGFilterBuilder::primitiveUnits const):
        (WebCore::SVGFilterBuilder::setPrimitiveUnits):

2018-01-03  Antti Koivisto  <antti@apple.com>

        Crash beneath CSSValue::equals @ csas.cz
        https://bugs.webkit.org/show_bug.cgi?id=181243
        <rdar://problem/35990826>

        Reviewed by Alex Christensen.

        Test: fast/text/oblique-degree-equals-crash.html

        * css/CSSFontStyleValue.cpp:
        (WebCore::CSSFontStyleValue::equals const):

        Null check both oblique pointers.

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Slow open time enumerating system fonts (FontCache::systemFontFamilies)
        https://bugs.webkit.org/show_bug.cgi?id=180979
        <rdar://problem/36146670>

        Reviewed by Matt Baker.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (fontNameIsSystemFont):
        (WebCore::FontCache::systemFontFamilies):
        Switch to the original Mac algorithm before r180979 that uses
        CTFontManagerCopyAvailableFontFamilyNames. Previously this wasn't
        available on iOS but now it is. This is a performance improvement on
        both platforms, but significantly so on macOS. It also finds more,
        valid, family names.

2018-01-03  Michael Catanzaro  <mcatanzaro@igalia.com>

        ASSERTION FAILED: !source || is<Target>(*source) in CoordinatedGraphicsLayer::removeFromParent
        https://bugs.webkit.org/show_bug.cgi?id=166568

        Reviewed by Simon Fraser.

        When a GraphicsLayer has a mask layer, it fails to properly unparent the mask layer before
        it is destroyed. This leaves the mask layer with a dangling parent pointer. Fix it, while
        taking care not to introduce yet another virtual function call during the execution of the
        destructor.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):

2018-01-03  Simon Fraser  <simon.fraser@apple.com>

        SVG lighting filter lights are in the wrong coordinate system
        https://bugs.webkit.org/show_bug.cgi?id=181147

        Reviewed by Zalan Bujtas.

        Point and spot light coordinates weren't being converted into buffer-relative
        coordinates before being fed into the lighting math, resulting in incorrect light
        rendering on Retina devices, and when the filter primitive region was clipped.

        Fix by storing absoluteUnclippedSubregion on FilterEffect, which allows us to map
        lighting points from user space coordinates into the coordinates of the buffer being
        used for rendering. Also scale the light z coordinate by doing a dummy point mapping in x.

        Rename members of PointLightSource and SpotLightSource to make it clear which coordinate
        system they are in.

        Tests include HiDPI tests.

        Tests: svg/filters/fePointLight-coordinates-expected.svg
               svg/filters/fePointLight-coordinates.svg
               svg/filters/feSpotLight-coordinates-expected.svg
               svg/filters/feSpotLight-coordinates.svg
               svg/filters/hidpi/fePointLight-coordinates-expected.svg
               svg/filters/hidpi/fePointLight-coordinates.svg
               svg/filters/hidpi/feSpotLight-coordinates-expected.svg
               svg/filters/hidpi/feSpotLight-coordinates.svg

        * platform/graphics/FloatPoint3D.h: Make it easy to get and set the X and Y coords as a FloatPoint.
        (WebCore::FloatPoint3D::xy const):
        (WebCore::FloatPoint3D::setXY):
        * platform/graphics/GeometryUtilities.cpp:
        (WebCore::mapPoint):
        (WebCore::mapRect):
        * platform/graphics/GeometryUtilities.h: Helper to make a point between rects.
        * platform/graphics/filters/DistantLightSource.cpp:
        (WebCore::DistantLightSource::initPaintingData):
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::drawLighting):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::mapPointFromUserSpaceToBuffer const):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::setUnclippedAbsoluteSubregion):
        * platform/graphics/filters/LightSource.h:
        * platform/graphics/filters/PointLightSource.cpp:
        (WebCore::PointLightSource::initPaintingData):
        (WebCore::PointLightSource::computePixelLightingData const):
        (WebCore::PointLightSource::setX):
        (WebCore::PointLightSource::setY):
        (WebCore::PointLightSource::setZ):
        * platform/graphics/filters/PointLightSource.h:
        (WebCore::PointLightSource::position const):
        (WebCore::PointLightSource::PointLightSource):
        * platform/graphics/filters/SpotLightSource.cpp:
        (WebCore::SpotLightSource::initPaintingData):
        (WebCore::SpotLightSource::computePixelLightingData const):
        (WebCore::SpotLightSource::setX):
        (WebCore::SpotLightSource::setY):
        (WebCore::SpotLightSource::setZ):
        (WebCore::SpotLightSource::setPointsAtX):
        (WebCore::SpotLightSource::setPointsAtY):
        (WebCore::SpotLightSource::setPointsAtZ):
        * platform/graphics/filters/SpotLightSource.h:
        (WebCore::SpotLightSource::position const):
        (WebCore::SpotLightSource::direction const):
        (WebCore::SpotLightSource::SpotLightSource):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives const):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):

2018-01-03  Youenn Fablet  <youenn@apple.com>

        Select service worker for documents with data/blob URLS
        https://bugs.webkit.org/show_bug.cgi?id=181213

        Reviewed by Alex Christensen.

        Covered by updated test.

        Reusing the service worker of the parent for blob/data URL documents.

        * loader/DocumentLoader.cpp:
        (WebCore::isLocalURL):
        (WebCore::DocumentLoader::commitData):

2018-01-03  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r226352.

        Breaks Sierra and El Capitan builds.

        Reverted changeset:

        "Web Inspector: Slow open time enumerating system fonts
        (FontCache::systemFontFamilies)"
        https://bugs.webkit.org/show_bug.cgi?id=180979
        https://trac.webkit.org/changeset/226352

2018-01-03  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] The bus synchronous handler should be in the base player class
        https://bugs.webkit.org/show_bug.cgi?id=181237

        Reviewed by Carlos Garcia Campos.

        Because this is where video rendering is handled.

        No new tests, this is only a refactoring.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::setPipeline):

2018-01-03  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] move MediaSample implementation out of mse/
        https://bugs.webkit.org/show_bug.cgi?id=179165

        Reviewed by Carlos Garcia Campos.

        This module isn't specific to MSE and can potentially be reused
        elsewhere, for WebRTC for instance. Additionally the
        ::platformSample() method was implemented and the code was cleaned up.

        * platform/GStreamer.cmake:
        * platform/MediaSample.h:
        * platform/graphics/gstreamer/GStreamerMediaSample.cpp: Renamed from Source/WebCore/platform/graphics/gstreamer/mse/GStreamerMediaSample.cpp.
        (WebCore::GStreamerMediaSample::platformSample):
        * platform/graphics/gstreamer/GStreamerMediaSample.h: Renamed from Source/WebCore/platform/graphics/gstreamer/mse/GStreamerMediaSample.h.
        * platform/graphics/gstreamer/mse/PlaybackPipeline.cpp:
        (WebCore::PlaybackPipeline::enqueueSample):

2018-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix resource load stats tests on GLib based ports after r226355.

        The monitor can be created in the work queue thread too.

        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::FileMonitor):

2018-01-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Crash destroying WebCore::FileMonitor
        https://bugs.webkit.org/show_bug.cgi?id=181138

        Reviewed by Michael Catanzaro.

        Ensure that platform file monitor is always created and destroyed in the work queue thread synchronously.

        * platform/FileMonitor.h:
        * platform/glib/FileMonitorGLib.cpp:
        (WebCore::FileMonitor::FileMonitor):
        (WebCore::FileMonitor::~FileMonitor):
        (WebCore::FileMonitor::didChange):

2018-01-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Slow open time enumerating system fonts (FontCache::systemFontFamilies)
        https://bugs.webkit.org/show_bug.cgi?id=180979
        <rdar://problem/36146670>

        Reviewed by Matt Baker.

        * platform/graphics/cocoa/FontCacheCoreText.cpp:
        (WebCore::FontCache::systemFontFamilies):
        Switch to the original Mac algorithm before r180979 that uses
        CTFontManagerCopyAvailableFontFamilyNames. Previously this wasn't
        available on iOS but now it is. This is a performance improvement on
        both platforms, but significantly so on macOS. It also finds more,
        valid, family names.

2018-01-02  Yusuke Suzuki  <utatane.tea@gmail.com>

        Unreviewed, fix GCC warning by using #include
        https://bugs.webkit.org/show_bug.cgi?id=181189

        This file is included in C++ files. Use #include instead of #import to suppress warning in GCC.

        * platform/PromisedBlobInfo.h:

2017-12-28  Yusuke Suzuki  <utatane.tea@gmail.com>

        Remove std::chrono completely
        https://bugs.webkit.org/show_bug.cgi?id=181186

        Reviewed by Alex Christensen.

        Use MonotonicTime, WallTime, and Seconds instead.
        Changes are mechanical ones. But persistent network cache data is changed.
        So we bump the version number of the cache storage.

        * Modules/indexeddb/server/IDBServer.cpp:
        (WebCore::IDBServer::IDBServer::closeAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::removeAllDatabasesForOriginPath):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesModifiedSince):
        (WebCore::IDBServer::IDBServer::performCloseAndDeleteDatabasesForOrigins):
        * Modules/indexeddb/server/IDBServer.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
        * Modules/webdatabase/DatabaseTracker.h:
        * dom/Document.cpp:
        (WebCore::Document::lastModified):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::clearMediaCache):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::clearMediaCache):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::parseAccessControlMaxAge):
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest const):
        * loader/CrossOriginPreflightResultCache.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::freshnessLifetime const):
        (WebCore::CachedResource::responseReceived):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * loader/cache/CachedResource.h:
        * platform/FileSystem.cpp:
        (WebCore::FileSystem::getFileModificationTime):
        * platform/FileSystem.h:
        * platform/SearchPopupMenu.h:
        * platform/cocoa/SearchPopupMenuCocoa.h:
        * platform/cocoa/SearchPopupMenuCocoa.mm:
        (WebCore::toSystemClockTime):
        (WebCore::toNSDateFromSystemClock):
        (WebCore::removeRecentlyModifiedRecentSearches):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::clearMediaCache):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::clearMediaCache):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::toSystemClockTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::clearMediaCache):
        * platform/network/CacheValidation.cpp:
        (WebCore::computeCurrentAge):
        (WebCore::computeFreshnessLifetimeForHTTPFamily):
        (WebCore::updateRedirectChainStatus):
        (WebCore::redirectChainAllowsReuse):
        (WebCore::parseCacheControlDirectives):
        * platform/network/CacheValidation.h:
        (WebCore::RedirectChainCacheStatus::RedirectChainCacheStatus):
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseHTTPDate):
        * platform/network/HTTPParsers.h:
        * platform/network/PlatformCookieJar.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::cacheControlMaxAge const):
        (WebCore::parseDateValueInHeader):
        (WebCore::ResourceResponseBase::date const):
        (WebCore::ResourceResponseBase::age const):
        (WebCore::ResourceResponseBase::expires const):
        (WebCore::ResourceResponseBase::lastModified const):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::CookieJarCurlFileSystem::deleteAllCookiesModifiedSince):
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/network/curl/CookieJarCurl.h:
        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/CurlCacheEntry.h:
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::deleteAllCookiesModifiedSince):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::loadRecentSearches):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::addSearchResult):

2018-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Introduce data structures and IPC support for writing promised blobs
        https://bugs.webkit.org/show_bug.cgi?id=181189

        Reviewed by Tim Horton.

        Introduces a new header containing structs to be used for writing blob data when dragging. PromisedBlobInfo
        represents information needed to declare data on the pasteboard that will eventually be provided via a Blob.
        This includes the type and filename of the Blob-backed content. PromisedBlobData represents information needed
        to actually deliver the Blob's content to the platform, and is sent some time after its corresponding
        PromisedBlobInfo. The content may either be in the form of a file path (as is the case using the previous
        declareAndWriteAttachment codepath) or a data buffer (which we would use if the Blob is not already backed by a
        file on disk).

        No new tests, since there is no observable change in functionality yet.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PromisedBlobInfo.h: Added.
        (WebCore::PromisedBlobInfo::operator bool const):
        (WebCore::PromisedBlobData::hasData const):
        (WebCore::PromisedBlobData::hasFile const):
        (WebCore::PromisedBlobData::operator bool const):
        (WebCore::PromisedBlobData::fulfills const):

2018-01-02  Brady Eidson  <beidson@apple.com>

        Make MessagePortChannel::takeAllMessagesFromRemote asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=181205

        Reviewed by Alex Christensen.

        No new tests (No behavior change)

        This is needed for the ongoing WK2 MessagePort work.

        For WK1 in-process MessagePorts it is still synchronous; no behavior change.

        * dom/InProcessMessagePortChannel.cpp:
        (WebCore::InProcessMessagePortChannel::takeAllMessagesFromRemote):
        * dom/InProcessMessagePortChannel.h:

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::dispatchMessages):
        * dom/MessagePortChannel.h:

2018-01-02  Jiewen Tan  <jiewen_tan@apple.com>

        Add a WebAuthentication runtime feature flag
        https://bugs.webkit.org/show_bug.cgi?id=181220
        <rdar://problem/36055305>

        Reviewed by Brent Fulgham.

        This patch basically renames the CredentialManagement runtime feature flag into
        WebAuthentication runtime feature flag.

        No tests.

        * Modules/credentialmanagement/BasicCredential.idl:
        * Modules/credentialmanagement/CredentialsContainer.idl:
        * Modules/credentialmanagement/NavigatorCredentials.idl:
        * Modules/webauthn/PublicKeyCredential.idl:
        * page/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebAuthenticationEnabled):
        (WebCore::RuntimeEnabledFeatures::webAuthenticationEnabled const):
        (WebCore::RuntimeEnabledFeatures::setCredentialManagementEnabled): Deleted.
        (WebCore::RuntimeEnabledFeatures::credentialManagementEnabled const): Deleted.

2018-01-02  Wenson Hsieh  <wenson_hsieh@apple.com>

        [Attachment Support] Don't Blob-convert images and attachments with https:, http: or data: urls
        https://bugs.webkit.org/show_bug.cgi?id=181143
        <rdar://problem/36200381>

        Reviewed by Tim Horton.

        Clients such as Mail would expect pasting or dropping an image with src="https://..." to result in the source
        URL being preserved (i.e. staying as remote images) instead of creating image attachments out of them. This
        patch hooks into the shouldConvertToBlob() check added in r226272 so that it applies to attachment element
        replacement as well.

        Test: WKAttachmentTests.DoNotInsertDataURLImagesAsAttachments

        * editing/cocoa/WebContentReaderCocoa.mm:
        (WebCore::shouldConvertToBlob):
        (WebCore::replaceRichContentWithAttachments):

2018-01-02  Brady Eidson  <beidson@apple.com>

        Identify MessagePorts by a globally unique MessagePortIdentifier.
        https://bugs.webkit.org/show_bug.cgi?id=181172

        Reviewed by Alex Christensen.

        No new tests (Behavior change covered by all existing tests).

        This cleans up the abstract MessagePortChannel interface to be in terms of identifiers
        instead of actual MessagePort objects.
        
        The identifiers are compounded with the current ProcessIdentifier meaning they are global
        across all processes for the running UI process, enabling easy cross-process communication.
        
        (Actual cross-process communication comes in a followup)
        
        * WebCore.xcodeproj/project.pbxproj:
        
        * dom/InProcessMessagePortChannel.cpp:
        (WebCore::InProcessMessagePortChannel::createChannelBetweenPorts):
        (WebCore::InProcessMessagePortChannel::isConnectedTo):
        (WebCore::InProcessMessagePortChannel::entangleWithRemoteIfOpen):
        (WebCore::InProcessMessagePortChannel::entangleIfOpen): Deleted.
        * dom/InProcessMessagePortChannel.h:
        
        * dom/MessageChannel.cpp:
        (WebCore::MessageChannel::MessageChannel):
        (WebCore::m_port2):
        
        * dom/MessagePort.cpp:
        (WebCore::allMessagePortsLock):
        (WebCore::MessagePort::ref const):
        (WebCore::MessagePort::deref const):
        (WebCore::MessagePort::existingMessagePortForIdentifier):
        (WebCore::MessagePort::MessagePort):
        (WebCore::MessagePort::~MessagePort):
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::entangleWithRemote):
        (WebCore::MessagePort::entanglePorts):
        (WebCore::MessagePort::entangle): Deleted.
        * dom/MessagePort.h:
        
        * dom/MessagePortChannel.h:
        
        * dom/MessagePortIdentifier.h: Added.
        (WebCore::operator==):
        (WebCore::MessagePortIdentifier::encode const):
        (WebCore::MessagePortIdentifier::decode):
        (WebCore::MessagePortIdentifier::hash const):
        (WTF::MessagePortIdentifierHash::hash):
        (WTF::MessagePortIdentifierHash::equal):
        (WTF::HashTraits<WebCore::MessagePortIdentifier>::emptyValue):
        (WTF::HashTraits<WebCore::MessagePortIdentifier>::constructDeletedValue):
        (WTF::HashTraits<WebCore::MessagePortIdentifier>::isDeletedValue):

2018-01-02  Youenn Fablet  <youenn@apple.com>

        Memory cache should not reuse resources with different credential fetch option
        https://bugs.webkit.org/show_bug.cgi?id=181212

        Reviewed by Alex Christensen.

        Covered by rebased test.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::determineRevalidationPolicy const):

2018-01-02  Jiewen Tan  <jiewen_tan@apple.com>

        Update Credential Management API for WebAuthentication
        https://bugs.webkit.org/show_bug.cgi?id=181082
        <rdar://problem/36055239>

        Reviewed by Brent Fulgham.

        Part 2/2

        This patch implements Core API from Credential Management API: https://www.w3.org/TR/credential-management-1/#core.
        which is required by WebAuthN. It also sets the CredentialManagement runtime flag to enable testing. Note that it
        introduces a dummy PublicKeyCredential interface for testing functionalities of the Credential interface, which
        cannot be instantiated.

        Tests: http/wpt/credential-management/credentialscontainer-create-basics.https.html
               http/wpt/credential-management/credentialscontainer-get-basics.https.html
               http/wpt/credential-management/credentialscontainer-preventSilentAccess-basics.https.html
               http/wpt/credential-management/idl.https.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * Modules/credentialmanagement/BasicCredential.cpp:
        (WebCore::BasicCredential::BasicCredential):
        (WebCore::BasicCredential::type const):
        * Modules/credentialmanagement/BasicCredential.h:
        (WebCore::BasicCredential::discovery const):
        * Modules/credentialmanagement/BasicCredential.idl:
        * Modules/credentialmanagement/CredentialCreationOptions.h:
        * Modules/credentialmanagement/CredentialCreationOptions.idl:
        * Modules/credentialmanagement/CredentialRequestOptions.h:
        * Modules/credentialmanagement/CredentialRequestOptions.idl:
        * Modules/credentialmanagement/CredentialsContainer.cpp:
        (WebCore::CredentialsContainer::CredentialsContainer):
        (WebCore::CredentialsContainer::isSameOriginWithItsAncestors):
        (WebCore::CredentialsContainer::dispatchTask):
        (WebCore::CredentialsContainer::get):
        (WebCore::CredentialsContainer::store):
        (WebCore::CredentialsContainer::isCreate):
        (WebCore::CredentialsContainer::preventSilentAccess):
        * Modules/credentialmanagement/CredentialsContainer.h:
        (WebCore::CredentialsContainer::create):
        (WebCore::CredentialsContainer::CredentialsContainer): Deleted.
        * Modules/credentialmanagement/CredentialsContainer.idl:
        * Modules/credentialmanagement/NavigatorCredentials.cpp:
        (WebCore::NavigatorCredentials::credentials):
        * Modules/credentialmanagement/NavigatorCredentials.h:
        * Modules/credentialmanagement/NavigatorCredentials.idl:
        * Modules/webauthn/PublicKeyCredential.cpp: Copied from Source/WebCore/Modules/credentialmanagement/BasicCredential.cpp.
        (WebCore::PublicKeyCredential::PublicKeyCredential):
        (WebCore::PublicKeyCredential::collectFromCredentialStore):
        (WebCore::PublicKeyCredential::discoverFromExternalSource):
        (WebCore::PublicKeyCredential::store):
        (WebCore::PublicKeyCredential::create):
        * Modules/webauthn/PublicKeyCredential.h: Copied from Source/WebCore/Modules/credentialmanagement/BasicCredential.cpp.
        * Modules/webauthn/PublicKeyCredential.idl: Copied from Source/WebCore/Modules/credentialmanagement/BasicCredential.idl.
        * Sources.txt:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/WebCoreBuiltinNames.h:
        * page/RuntimeEnabledFeatures.h:

2018-01-02  Oleksandr Skachkov  <gskachkov@gmail.com>

        WebAssembly: sending module to iframe fails
        https://bugs.webkit.org/show_bug.cgi?id=179263

        Reviewed by JF Bastien.

        Allow use WebAssembly.Module as input parameters for postMessage 
        in window and iframe object. To prevent sending message to iframe
        that is not ready, in iframe-* test we are waiting message from
        iframe only after that we send message to it.   

        Tests: wasm/iframe-parent-postmessage.html
               wasm/iframe-postmessage.html
               wasm/window-postmessage.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):

== Rolled over to ChangeLog-2018-01-01 ==
